summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLiam P. White <inkscapebronyat-signgmaildotcom>2014-04-29 01:00:39 +0000
committerLiam P. White <inkscapebronyat-signgmaildotcom>2014-04-29 01:00:39 +0000
commiteca72e61451c8deae7f2f5fbaa9885aec946c790 (patch)
tree76d436abbbe469e0bc3b4a254e0ab6e5b4525e3b
parentUpdate to trunk (diff)
parentwhen removing LPE, with 'flattening' option, don't recalculate/rewrite ellips... (diff)
downloadinkscape-eca72e61451c8deae7f2f5fbaa9885aec946c790.tar.gz
inkscape-eca72e61451c8deae7f2f5fbaa9885aec946c790.zip
Update to trunk and fix issues
(bzr r13090.1.67)
-rw-r--r--po/fr.po627
-rw-r--r--po/inkscape.pot4886
-rw-r--r--po/uk.po7445
-rwxr-xr-xshare/extensions/dxf_input.py2
-rw-r--r--share/extensions/hpgl_decoder.py13
-rw-r--r--share/extensions/hpgl_input.py4
-rw-r--r--src/2geom/CMakeLists.txt2
-rw-r--r--src/2geom/ellipse.cpp7
-rw-r--r--src/CMakeLists.txt2
-rw-r--r--src/Makefile_insert3
-rw-r--r--src/color.h1
-rw-r--r--src/desktop-style.cpp58
-rw-r--r--src/desktop-style.h8
-rw-r--r--src/desktop.h6
-rw-r--r--src/display/drawing-group.h2
-rw-r--r--src/display/drawing-item.h2
-rw-r--r--src/display/drawing-shape.h2
-rw-r--r--src/display/drawing-text.h2
-rw-r--r--src/display/nr-filter-primitive.h2
-rw-r--r--src/display/nr-style.cpp3
-rw-r--r--src/display/nr-style.h2
-rw-r--r--src/extension/CMakeLists.txt1
-rw-r--r--src/extension/extension.cpp12
-rw-r--r--src/extension/implementation/implementation.h2
-rw-r--r--src/extension/internal/emf-inout.cpp393
-rw-r--r--src/extension/internal/emf-inout.h78
-rw-r--r--src/extension/internal/emf-print.cpp4
-rw-r--r--src/extension/internal/metafile-inout.cpp63
-rw-r--r--src/extension/internal/metafile-inout.h1
-rw-r--r--src/extension/internal/wmf-inout.cpp403
-rw-r--r--src/extension/internal/wmf-inout.h71
-rw-r--r--src/extension/internal/wmf-print.cpp4
-rw-r--r--src/graphlayout.cpp4
-rw-r--r--src/id-clash.cpp8
-rw-r--r--src/libcroco/cr-sel-eng.c6
-rw-r--r--src/libdepixelize/CMakeLists.txt4
-rw-r--r--src/libnrtype/FontFactory.cpp10
-rw-r--r--src/libnrtype/Layout-TNG-Input.cpp5
-rw-r--r--src/libnrtype/Layout-TNG.h2
-rw-r--r--src/libnrtype/font-lister.cpp42
-rw-r--r--src/libnrtype/font-lister.h8
-rw-r--r--src/libnrtype/font-style-to-pos.h2
-rw-r--r--src/livarot/Path.h2
-rw-r--r--src/live_effects/Makefile_insert2
-rw-r--r--src/live_effects/lpe-jointype.cpp4
-rw-r--r--src/live_effects/lpe-powerstroke.cpp4
-rw-r--r--src/live_effects/lpe-taperstroke.cpp6
-rw-r--r--src/print.h2
-rw-r--r--src/selection-chemistry.cpp6
-rw-r--r--src/sp-lpe-item.cpp50
-rw-r--r--src/sp-object.h2
-rw-r--r--src/sp-shape.cpp6
-rw-r--r--src/style-enums.h265
-rw-r--r--src/style-internal.cpp2543
-rw-r--r--src/style-internal.h836
-rw-r--r--src/style-test.h330
-rw-r--r--src/style.cpp5177
-rw-r--r--src/style.h171
-rw-r--r--src/text-editing.h10
-rw-r--r--src/ui/dialog/font-substitution.cpp18
-rw-r--r--src/ui/dialog/livepatheffect-add.cpp14
-rw-r--r--src/ui/dialog/livepatheffect-add.h4
-rw-r--r--src/ui/widget/style-subject.h2
-rw-r--r--src/ui/widget/style-swatch.h2
-rw-r--r--src/util/CMakeLists.txt2
-rw-r--r--src/widgets/paint-selector.h2
-rw-r--r--src/widgets/stroke-style.cpp7
-rw-r--r--src/widgets/text-toolbar.cpp30
68 files changed, 11828 insertions, 11871 deletions
diff --git a/po/fr.po b/po/fr.po
index 0dbae83b3..a3063efda 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -19,7 +19,7 @@ msgstr ""
"Project-Id-Version: inkscape\n"
"Report-Msgid-Bugs-To: inkscape-devel@lists.sourceforge.net\n"
"POT-Creation-Date: 2014-03-04 13:58+0100\n"
-"PO-Revision-Date: 2014-03-04 13:53+0100\n"
+"PO-Revision-Date: 2014-04-25 11:12+0100\n"
"Last-Translator: Nicolas Dufour <nicoduf@yahoo.fr>\n"
"Language-Team: <fr@li.org>\n"
"Language: \n"
@@ -3317,7 +3317,7 @@ msgstr "Peinture vieillie (bitmap)"
#: ../share/symbols/symbols.h:2
msgctxt "Symbol"
msgid "AIGA Symbol Signs"
-msgstr ""
+msgstr "Panneaux signalétiques AIGA"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:3 ../share/symbols/symbols.h:4
@@ -3333,34 +3333,30 @@ msgstr "Courriel"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:7 ../share/symbols/symbols.h:8
-#, fuzzy
msgctxt "Symbol"
msgid "Currency Exchange"
-msgstr "Calque courant"
+msgstr "Bureau de change"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:9 ../share/symbols/symbols.h:10
-#, fuzzy
msgctxt "Symbol"
msgid "Currency Exchange - Euro"
-msgstr "Calque courant"
+msgstr "Bureau de changes - Euro"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:11 ../share/symbols/symbols.h:12
msgctxt "Symbol"
msgid "Cashier"
-msgstr ""
+msgstr "Caisse"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:13 ../share/symbols/symbols.h:14
-#, fuzzy
msgctxt "Symbol"
msgid "First Aid"
-msgstr "Première diapositive :"
+msgstr "Premiers secours"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:15 ../share/symbols/symbols.h:16
-#, fuzzy
msgctxt "Symbol"
msgid "Lost and Found"
msgstr "Objets trouvés"
@@ -3369,13 +3365,13 @@ msgstr "Objets trouvés"
#: ../share/symbols/symbols.h:17 ../share/symbols/symbols.h:18
msgctxt "Symbol"
msgid "Coat Check"
-msgstr ""
+msgstr "Vestiaire"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:19 ../share/symbols/symbols.h:20
msgctxt "Symbol"
msgid "Baggage Lockers"
-msgstr ""
+msgstr "Casiers à bagages"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:21 ../share/symbols/symbols.h:22
@@ -3415,10 +3411,9 @@ msgstr "Escaliers montants"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:33 ../share/symbols/symbols.h:34
-#, fuzzy
msgctxt "Symbol"
msgid "Elevator"
-msgstr "Élévation"
+msgstr "Ascenseur"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:35 ../share/symbols/symbols.h:36
@@ -3444,13 +3439,13 @@ msgstr "Toilettes"
#: ../share/symbols/symbols.h:217
msgctxt "Symbol"
msgid "Nursery"
-msgstr ""
+msgstr "Garderie"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:43 ../share/symbols/symbols.h:44
msgctxt "Symbol"
msgid "Drinking Fountain"
-msgstr ""
+msgstr "Fontaine d'eau potable"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:45 ../share/symbols/symbols.h:46
@@ -3471,23 +3466,21 @@ msgstr "Information"
#, fuzzy
msgctxt "Symbol"
msgid "Hotel Information"
-msgstr "Information sur la page"
+msgstr "Information sur l'hotel"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:51 ../share/symbols/symbols.h:52
-#, fuzzy
msgctxt "Symbol"
msgid "Air Transportation"
-msgstr "Transformation"
+msgstr "Transport aérien"
#. Symbols: ./AigaSymbols.svg
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:53 ../share/symbols/symbols.h:54
#: ../share/symbols/symbols.h:308
-#, fuzzy
msgctxt "Symbol"
msgid "Heliport"
-msgstr "Port sériel :"
+msgstr "Héliport"
#. Symbols: ./AigaSymbols.svg
#. Symbols: ./MapSymbols.svg
@@ -3512,26 +3505,23 @@ msgstr "Transformation"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:61 ../share/symbols/symbols.h:62
-#, fuzzy
msgctxt "Symbol"
msgid "Rail Transportation"
-msgstr "Transformation"
+msgstr "Transport ferroviaire"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:63 ../share/symbols/symbols.h:64
-#, fuzzy
msgctxt "Symbol"
msgid "Water Transportation"
-msgstr "Transformation"
+msgstr "Transport maritime"
#. Symbols: ./AigaSymbols.svg
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:65 ../share/symbols/symbols.h:66
#: ../share/symbols/symbols.h:306
-#, fuzzy
msgctxt "Symbol"
msgid "Car Rental"
-msgstr "Location de vélo"
+msgstr "Location de voiture"
#. Symbols: ./AigaSymbols.svg
#. Symbols: ./MapSymbols.svg
@@ -3545,7 +3535,7 @@ msgstr "Restaurant"
#: ../share/symbols/symbols.h:69 ../share/symbols/symbols.h:70
msgctxt "Symbol"
msgid "Coffeeshop"
-msgstr ""
+msgstr "Café"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:71 ../share/symbols/symbols.h:72
@@ -3561,16 +3551,15 @@ msgstr "Boutiques"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:75 ../share/symbols/symbols.h:76
-#, fuzzy
msgctxt "Symbol"
msgid "Barber Shop - Beauty Salon"
-msgstr "Salon de beauté"
+msgstr "Salon de beauté - salon de coiffure"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:77 ../share/symbols/symbols.h:78
msgctxt "Symbol"
msgid "Barber Shop"
-msgstr ""
+msgstr "Salon de coiffure"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:79 ../share/symbols/symbols.h:80
@@ -3582,19 +3571,19 @@ msgstr "Salon de beauté"
#: ../share/symbols/symbols.h:81 ../share/symbols/symbols.h:82
msgctxt "Symbol"
msgid "Ticket Purchase"
-msgstr ""
+msgstr "Achat de billets"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:83 ../share/symbols/symbols.h:84
msgctxt "Symbol"
msgid "Baggage Check In"
-msgstr ""
+msgstr "Enregistrement des bagages"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:85 ../share/symbols/symbols.h:86
msgctxt "Symbol"
msgid "Baggage Claim"
-msgstr ""
+msgstr "Réception des bagages"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:87 ../share/symbols/symbols.h:88
@@ -3610,17 +3599,15 @@ msgstr "Immigration"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:91 ../share/symbols/symbols.h:92
-#, fuzzy
msgctxt "Symbol"
msgid "Departing Flights"
-msgstr "Hauteur de destination"
+msgstr "Vols au départ"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:93 ../share/symbols/symbols.h:94
-#, fuzzy
msgctxt "Symbol"
msgid "Arriving Flights"
-msgstr "Luminosité du grain"
+msgstr "Vols à l'arrivée"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:95 ../share/symbols/symbols.h:96
@@ -3630,7 +3617,6 @@ msgstr "Fumeur"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:97 ../share/symbols/symbols.h:98
-#, fuzzy
msgctxt "Symbol"
msgid "No Smoking"
msgstr "Non fumeur"
@@ -3639,10 +3625,9 @@ msgstr "Non fumeur"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:99 ../share/symbols/symbols.h:100
#: ../share/symbols/symbols.h:315
-#, fuzzy
msgctxt "Symbol"
msgid "Parking"
-msgstr "Désactivé"
+msgstr "Parking"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:101 ../share/symbols/symbols.h:102
@@ -3660,7 +3645,7 @@ msgstr "Interdit aux chiens"
#: ../share/symbols/symbols.h:105 ../share/symbols/symbols.h:106
msgctxt "Symbol"
msgid "No Entry"
-msgstr ""
+msgstr "Entrée interdite"
#. Symbols: ./AigaSymbols.svg
#. Symbols: ./MapSymbols.svg
@@ -3674,7 +3659,7 @@ msgstr "Sortie"
#: ../share/symbols/symbols.h:109 ../share/symbols/symbols.h:110
msgctxt "Symbol"
msgid "Fire Extinguisher"
-msgstr ""
+msgstr "Extincteur"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:111 ../share/symbols/symbols.h:112
@@ -3736,43 +3721,43 @@ msgstr "Flèche vers la droite"
#: ../share/symbols/symbols.h:127 ../share/symbols/symbols.h:128
msgctxt "Symbol"
msgid "NPS Wheelchair Accessible - 1996"
-msgstr ""
+msgstr "Accessible en fauteuil roulant (NPS - 1996)"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:129 ../share/symbols/symbols.h:130
msgctxt "Symbol"
msgid "NPS Wheelchair Accessible"
-msgstr ""
+msgstr "Accessible en fauteuil roulant (NPS)"
#. Symbols: ./AigaSymbols.svg
#: ../share/symbols/symbols.h:131 ../share/symbols/symbols.h:132
msgctxt "Symbol"
msgid "New Wheelchair Accessible"
-msgstr ""
+msgstr "Accessible en fauteuil roulant (Nouveau)"
#. Symbols: ./BalloonSymbols.svg
#: ../share/symbols/symbols.h:133
msgctxt "Symbol"
msgid "Word Balloons"
-msgstr ""
+msgstr "Bulles de bandes dessinées"
#. Symbols: ./BalloonSymbols.svg
#: ../share/symbols/symbols.h:134
msgctxt "Symbol"
msgid "Thought Balloon"
-msgstr ""
+msgstr "Bulle de pensée"
#. Symbols: ./BalloonSymbols.svg
#: ../share/symbols/symbols.h:135
msgctxt "Symbol"
msgid "Dream Speaking"
-msgstr ""
+msgstr "Rêve parlé"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:136
msgctxt "Symbol"
msgid "Flow Chart Shapes"
-msgstr ""
+msgstr "Éléments d'organigrammes"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:137
@@ -3785,13 +3770,13 @@ msgstr "Post-processeur :"
#: ../share/symbols/symbols.h:138
msgctxt "Symbol"
msgid "Predefined Process"
-msgstr ""
+msgstr "Processus prédéfini"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:139
msgctxt "Symbol"
msgid "Alternate Process"
-msgstr ""
+msgstr "Processus alternatif"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:140
@@ -3818,13 +3803,13 @@ msgstr "Fusionner"
#: ../share/symbols/symbols.h:143
msgctxt "Symbol"
msgid "Delay"
-msgstr ""
+msgstr "Temporisation"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:144
msgctxt "Symbol"
msgid "Data I/O"
-msgstr ""
+msgstr "Entrée/sortie de données"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:145
@@ -3837,7 +3822,7 @@ msgstr "Pages intérieures"
#: ../share/symbols/symbols.h:146
msgctxt "Symbol"
msgid "Card"
-msgstr ""
+msgstr "Carte"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:147
@@ -3850,25 +3835,25 @@ msgstr "Document"
#: ../share/symbols/symbols.h:148
msgctxt "Symbol"
msgid "Direct Access Storage"
-msgstr ""
+msgstr "Stockage à accès direct"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:149
msgctxt "Symbol"
msgid "Stored Data"
-msgstr ""
+msgstr "Données stockées"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:150
msgctxt "Symbol"
msgid "Magnetic Disk (Database)"
-msgstr ""
+msgstr "Disque magnétique (base de données)"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:151
msgctxt "Symbol"
msgid "Punched Tape"
-msgstr ""
+msgstr "Bande perforée"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:152
@@ -3921,21 +3906,18 @@ msgstr "Connecteur"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:159
-#, fuzzy
msgctxt "Symbol"
msgid "Connector"
msgstr "Connecteur"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:160
-#, fuzzy
msgctxt "Symbol"
msgid "Logical Or"
msgstr "Ou logique"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:161
-#, fuzzy
msgctxt "Symbol"
msgid "Logical And"
msgstr "Et logique"
@@ -3982,84 +3964,75 @@ msgstr "Symboles logiques"
#. Symbols: ./LogicSymbols.svg
#: ../share/symbols/symbols.h:168
-#, fuzzy
msgctxt "Symbol"
msgid "Xnor Gate"
-msgstr "Porte "
+msgstr "Porte non-ou exclusif"
#. Symbols: ./LogicSymbols.svg
#: ../share/symbols/symbols.h:169
-#, fuzzy
msgctxt "Symbol"
msgid "Xor Gate"
msgstr "Porte ou exclusif"
#. Symbols: ./LogicSymbols.svg
#: ../share/symbols/symbols.h:170
-#, fuzzy
msgctxt "Symbol"
msgid "Nor Gate"
-msgstr "Porte ou exclusif"
+msgstr "Porte non-ou"
#. Symbols: ./LogicSymbols.svg
#: ../share/symbols/symbols.h:171
-#, fuzzy
msgctxt "Symbol"
msgid "Or Gate"
msgstr "Porte ou"
#. Symbols: ./LogicSymbols.svg
#: ../share/symbols/symbols.h:172
-#, fuzzy
msgctxt "Symbol"
msgid "Nand Gate"
-msgstr "Porte "
+msgstr "Porte non-et"
#. Symbols: ./LogicSymbols.svg
#: ../share/symbols/symbols.h:173
-#, fuzzy
msgctxt "Symbol"
msgid "And Gate"
-msgstr "Porte "
+msgstr "Porte et"
#. Symbols: ./LogicSymbols.svg
#: ../share/symbols/symbols.h:174
msgctxt "Symbol"
msgid "Buffer"
-msgstr ""
+msgstr "Tampon"
#. Symbols: ./LogicSymbols.svg
#: ../share/symbols/symbols.h:175
-#, fuzzy
msgctxt "Symbol"
msgid "Not Gate"
-msgstr "Porte ou exclusif"
+msgstr "Porte non"
#. Symbols: ./LogicSymbols.svg
#: ../share/symbols/symbols.h:176
msgctxt "Symbol"
msgid "Buffer Small"
-msgstr ""
+msgstr "Tampon (petit)"
#. Symbols: ./LogicSymbols.svg
#: ../share/symbols/symbols.h:177
msgctxt "Symbol"
msgid "Not Gate Small"
-msgstr ""
+msgstr "Porte non (petite)"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:178
-#, fuzzy
msgctxt "Symbol"
msgid "Map Symbols"
-msgstr "Déposer le symbole"
+msgstr "Symboles cartographiques"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:179
-#, fuzzy
msgctxt "Symbol"
msgid "Bed and Breakfast"
-msgstr "Rouge et vert"
+msgstr "Chambres d'hôtes"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:180
@@ -4069,10 +4042,9 @@ msgstr "Auberge de jeunesse"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:181
-#, fuzzy
msgctxt "Symbol"
msgid "Shelter"
-msgstr "filtre"
+msgstr "Abri"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:182
@@ -4088,17 +4060,15 @@ msgstr "Hôtel"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:184
-#, fuzzy
msgctxt "Symbol"
msgid "Hostel"
-msgstr "Hôte"
+msgstr "Auberge"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:185
-#, fuzzy
msgctxt "Symbol"
msgid "Chalet"
-msgstr "Palette"
+msgstr "Chalet"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:186
@@ -4108,10 +4078,9 @@ msgstr ""
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:187
-#, fuzzy
msgctxt "Symbol"
msgid "Camping"
-msgstr "Clapotis"
+msgstr "Camping"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:188
@@ -4127,17 +4096,15 @@ msgstr ""
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:190
-#, fuzzy
msgctxt "Symbol"
msgid "Playground"
-msgstr "Fond"
+msgstr "Aire de jeux"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:191
-#, fuzzy
msgctxt "Symbol"
msgid "Fountain"
-msgstr "Vitrail"
+msgstr "Fontaine"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:192
@@ -4159,10 +4126,9 @@ msgstr ""
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:195
-#, fuzzy
msgctxt "Symbol"
msgid "Fire Station / House"
-msgstr "Relation :"
+msgstr "Poste de pompiers"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:196
@@ -4192,7 +4158,7 @@ msgstr ""
#: ../share/symbols/symbols.h:200
msgctxt "Symbol"
msgid "Recycling"
-msgstr ""
+msgstr "Recyclage"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:201
@@ -4209,17 +4175,15 @@ msgstr ""
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:203
-#, fuzzy
msgctxt "Symbol"
msgid "Lift Gate"
-msgstr "Porte ou"
+msgstr "Porte à barrière"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:204
-#, fuzzy
msgctxt "Symbol"
msgid "Steps"
-msgstr "Incréments"
+msgstr "Pas"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:205
@@ -4229,24 +4193,21 @@ msgstr ""
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:206
-#, fuzzy
msgctxt "Symbol"
msgid "Kissing Gate"
-msgstr "Glyphe manquant :"
+msgstr "Portillon à chicanes"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:207
-#, fuzzy
msgctxt "Symbol"
msgid "Gate"
-msgstr "Porte ou"
+msgstr "Porte"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:209
-#, fuzzy
msgctxt "Symbol"
msgid "Entrance"
-msgstr "Améliorer"
+msgstr "Entrée"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:210
@@ -4256,10 +4217,9 @@ msgstr ""
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:211
-#, fuzzy
msgctxt "Symbol"
msgid "Cattle Grid"
-msgstr "Grille cartésienne"
+msgstr "Grille à bétail"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:212
@@ -4275,10 +4235,9 @@ msgstr "Université"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:214
-#, fuzzy
msgctxt "Symbol"
msgid "High/Secondary School"
-msgstr "Flou secondaire :"
+msgstr "Lycée"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:215
@@ -4366,10 +4325,9 @@ msgstr "Pharmacie"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:231
-#, fuzzy
msgctxt "Symbol"
msgid "Accident & Emergency"
-msgstr "Centre du cercle inscrit"
+msgstr "Accident & urgence"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:232
@@ -4439,10 +4397,9 @@ msgstr ""
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:243
-#, fuzzy
msgctxt "Symbol"
msgid "Power Lines"
-msgstr "Rectiligne"
+msgstr "Lignes électriques"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:244
@@ -4452,10 +4409,9 @@ msgstr ""
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:245
-#, fuzzy
msgctxt "Symbol"
msgid "Transmitter"
-msgstr "Transformer les motifs de remplissage"
+msgstr "Antenne"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:246
@@ -4465,10 +4421,9 @@ msgstr ""
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:247
-#, fuzzy
msgctxt "Symbol"
msgid "Town"
-msgstr "Mairie"
+msgstr "Ville"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:248
@@ -4484,10 +4439,9 @@ msgstr ""
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:250
-#, fuzzy
msgctxt "Symbol"
msgid "Peak"
-msgstr "En arête"
+msgstr "Sommet"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:251
@@ -4540,17 +4494,15 @@ msgstr "Coiffeur"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:259
-#, fuzzy
msgctxt "Symbol"
msgid "Greengrocer"
-msgstr "Vert"
+msgstr "Marchand de légumes"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:260
-#, fuzzy
msgctxt "Symbol"
msgid "Gift Shop"
-msgstr "Boutique"
+msgstr "Boutique de cadeaux"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:261
@@ -4579,10 +4531,9 @@ msgstr ""
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:265
-#, fuzzy
msgctxt "Symbol"
msgid "Hardware / DIY"
-msgstr "Matériel"
+msgstr "Matériel et bricolage"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:266
@@ -4639,7 +4590,7 @@ msgstr "Boutique"
#: ../share/symbols/symbols.h:274
msgctxt "Symbol"
msgid "Bicycle Shop"
-msgstr "Magasin de jouets"
+msgstr "Magasin de vélos"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:275
@@ -4691,17 +4642,15 @@ msgstr "Voile"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:283
-#, fuzzy
msgctxt "Symbol"
msgid "Leisure Center"
-msgstr "Rétablir le centre"
+msgstr "Centre de loisir"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:284
-#, fuzzy
msgctxt "Symbol"
msgid "Ice Skating"
-msgstr "Satin"
+msgstr "Patinoire"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:285
@@ -4729,10 +4678,9 @@ msgstr "Golf"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:289
-#, fuzzy
msgctxt "Symbol"
msgid "Diving"
-msgstr "Division"
+msgstr "Plongée"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:290
@@ -4750,20 +4698,19 @@ msgstr "Zoo"
#: ../share/symbols/symbols.h:292
msgctxt "Symbol"
msgid "Wreck"
-msgstr ""
+msgstr "Naufrage"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:293
-#, fuzzy
msgctxt "Symbol"
msgid "Water Wheel"
-msgstr "Roue"
+msgstr "Roue à eau"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:294
msgctxt "Symbol"
msgid "Point of Interest"
-msgstr ""
+msgstr "Point d'intérêt"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:295
@@ -4775,7 +4722,7 @@ msgstr "Théatre"
#: ../share/symbols/symbols.h:296
msgctxt "Symbol"
msgid "Park / Picnic Area"
-msgstr ""
+msgstr "Parc, zone de picnic"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:297
@@ -4791,22 +4738,21 @@ msgstr "Plage"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:300
-#, fuzzy
msgctxt "Symbol"
msgid "Battle Location"
-msgstr "Localisation :"
+msgstr "Lieu de bataille"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:301
msgctxt "Symbol"
msgid "Archaeology / Ruins"
-msgstr ""
+msgstr "Archéologie, ruines"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:302
msgctxt "Symbol"
msgid "Walking"
-msgstr ""
+msgstr "Promenade"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:303
@@ -4818,7 +4764,7 @@ msgstr "Train"
#: ../share/symbols/symbols.h:305
msgctxt "Symbol"
msgid "Underground Rail"
-msgstr ""
+msgstr "Métro"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:307
@@ -4834,72 +4780,63 @@ msgstr ""
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:310
-#, fuzzy
msgctxt "Symbol"
msgid "Flood Gate"
-msgstr "Remplissage"
+msgstr "Écluse"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:311
-#, fuzzy
msgctxt "Symbol"
msgid "Shipping"
-msgstr "Ruissellement"
+msgstr "Transport maritime"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:312
-#, fuzzy
msgctxt "Symbol"
msgid "Disabled Parking"
-msgstr "Désactivé"
+msgstr "Parking handicapés"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:313
-#, fuzzy
msgctxt "Symbol"
msgid "Paid Parking"
-msgstr "Désactivé"
+msgstr "Parking payant"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:314
-#, fuzzy
msgctxt "Symbol"
msgid "Bike Parking"
-msgstr "Désactivé"
+msgstr "Parc à vélos"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:316
msgctxt "Symbol"
msgid "Marina"
-msgstr ""
+msgstr "Marina"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:317
-#, fuzzy
msgctxt "Symbol"
msgid "Fuel Station"
-msgstr "Relation :"
+msgstr "Station d'essence"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:318
-#, fuzzy
msgctxt "Symbol"
msgid "Bus Stop"
-msgstr "_Arrêter"
+msgstr "Arrêt de bus"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:319
-#, fuzzy
msgctxt "Symbol"
msgid "Bus Station"
-msgstr "Diminuer la saturation"
+msgstr "Gare routière"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:320
-#, fuzzy
msgctxt "Symbol"
msgid "Airport"
-msgstr "Importer"
+msgstr "Aéroport"
#: ../share/templates/templates.h:1
msgid "A4 Landscape Page"
@@ -5134,7 +5071,6 @@ msgid "icon 64x64 empty"
msgstr ""
#: ../share/templates/templates.h:1
-#, fuzzy
msgid "Letter Landscape"
msgstr "Letter Paysage"
@@ -5147,9 +5083,8 @@ msgid "letter landscape 792x612 empty"
msgstr ""
#: ../share/templates/templates.h:1
-#, fuzzy
msgid "Letter"
-msgstr "Lettre :"
+msgstr "Letter"
#: ../share/templates/templates.h:1
msgid "Standard letter sheet - 612x792"
@@ -6797,7 +6732,6 @@ msgstr "Inverser les couleurs du dégradé"
#: ../src/extension/internal/emf-inout.cpp:3532
#, fuzzy
-#| msgid "Create linear gradient"
msgid "Use native rectangular linear gradients"
msgstr "Créer un dégradé linéaire"
@@ -8592,7 +8526,7 @@ msgstr "Import d'une image matricielle %s"
#: ../src/extension/internal/gdkpixbuf-input.cpp:191
msgid "Image Import Type:"
-msgstr ""
+msgstr "Type d'importation d'image :"
#: ../src/extension/internal/gdkpixbuf-input.cpp:191
msgid ""
@@ -8614,33 +8548,28 @@ msgid "Link"
msgstr "Lier"
#: ../src/extension/internal/gdkpixbuf-input.cpp:196
-#, fuzzy
-#| msgid "Image"
msgid "Image DPI:"
-msgstr "Image"
+msgstr "Résolution de l'image (ppp) :"
#: ../src/extension/internal/gdkpixbuf-input.cpp:196
msgid ""
"Take information from file or use default bitmap import resolution as "
"defined in the preferences."
msgstr ""
+"Récupère les informations dans le fichier ou utilise la résolution "
+"d'importation telle que définie dans les préférences."
#: ../src/extension/internal/gdkpixbuf-input.cpp:197
-#, fuzzy
-#| msgid "Load from file"
msgid "From file"
-msgstr "Charger depuis un fichier"
+msgstr "Déduire du fichier"
#: ../src/extension/internal/gdkpixbuf-input.cpp:198
-#, fuzzy
-#| msgid "Default _import resolution:"
msgid "Default import resolution"
-msgstr "Résolution par défaut d'_importation :"
+msgstr "Résolution d'importation par défaut"
#: ../src/extension/internal/gdkpixbuf-input.cpp:201
-#, fuzzy
msgid "Image Rendering Mode:"
-msgstr "Rendu"
+msgstr "Mode de rendu de l'image :"
#: ../src/extension/internal/gdkpixbuf-input.cpp:201
msgid ""
@@ -8650,22 +8579,20 @@ msgstr ""
#: ../src/extension/internal/gdkpixbuf-input.cpp:202
#: ../src/ui/dialog/inkscape-preferences.cpp:1452
-#, fuzzy
msgid "None (auto)"
msgstr "Aucun (défaut)"
#: ../src/extension/internal/gdkpixbuf-input.cpp:203
#: ../src/ui/dialog/inkscape-preferences.cpp:1452
msgid "Smooth (optimizeQuality)"
-msgstr ""
+msgstr "Lisse (optimisé pour la qualité)"
#: ../src/extension/internal/gdkpixbuf-input.cpp:204
#: ../src/ui/dialog/inkscape-preferences.cpp:1452
msgid "Blocky (optimizeSpeed)"
-msgstr ""
+msgstr "Bloc (optimisé pour la vitesse)"
#: ../src/extension/internal/gdkpixbuf-input.cpp:207
-#, fuzzy
msgid "Hide the dialog next time and always apply the same actions."
msgstr ""
"Masquer cette boîte de dialogue la prochaine fois et toujours appliquer la "
@@ -9029,6 +8956,7 @@ msgstr "Diagramme Microsoft Visio (*.vsd)"
#: ../src/extension/internal/vsd-input.cpp:280
msgid "File format used by Microsoft Visio 6 and later"
msgstr ""
+"Format de fichier utilisé par Microsoft Visio 6 et les versions suivantes"
#: ../src/extension/internal/vsd-input.cpp:287
msgid "VDX Input"
@@ -9041,6 +8969,7 @@ msgstr "Diagramme Microsoft Visio XML (*.vdx)"
#: ../src/extension/internal/vsd-input.cpp:293
msgid "File format used by Microsoft Visio 2010 and later"
msgstr ""
+"Format de fichier utilisé par Microsoft Visio 2010 et les versions suivantes"
#: ../src/extension/internal/vsd-input.cpp:300
msgid "VSDM Input"
@@ -9048,12 +8977,13 @@ msgstr "Entrée VSDM"
#: ../src/extension/internal/vsd-input.cpp:305
msgid "Microsoft Visio 2013 drawing (*.vsdm)"
-msgstr ""
+msgstr "Dessin Microsoft Visio 2013 (*.vsdm)"
#: ../src/extension/internal/vsd-input.cpp:306
#: ../src/extension/internal/vsd-input.cpp:319
msgid "File format used by Microsoft Visio 2013 and later"
msgstr ""
+"Format de fichier utilisé par Microsoft Visio 2013 et les versions suivantes"
#: ../src/extension/internal/vsd-input.cpp:313
msgid "VSDX Input"
@@ -9061,7 +8991,7 @@ msgstr "Entrée VSDX"
#: ../src/extension/internal/vsd-input.cpp:318
msgid "Microsoft Visio 2013 drawing (*.vsdx)"
-msgstr ""
+msgstr "Dessin Microsoft Visio 2013 (*.vsdx)"
#: ../src/extension/internal/wmf-inout.cpp:3112
msgid "WMF Input"
@@ -9076,9 +9006,8 @@ msgid "Windows Metafiles"
msgstr "Métafichier Windows"
#: ../src/extension/internal/wmf-inout.cpp:3126
-#, fuzzy
msgid "WMF Output"
-msgstr "Sortie EMF"
+msgstr "Sortie WMF"
#: ../src/extension/internal/wmf-inout.cpp:3136
msgid "Map all fill patterns to standard WMF hatches"
@@ -9091,7 +9020,6 @@ msgid "Windows Metafile (*.wmf)"
msgstr "Métafichier Windows (*.wmf)"
#: ../src/extension/internal/wmf-inout.cpp:3141
-#, fuzzy
msgid "Windows Metafile"
msgstr "Métafichier Windows"
@@ -9140,11 +9068,10 @@ msgid "Document not saved yet. Cannot revert."
msgstr "Document non enregistré. Impossible de le recharger."
#: ../src/file.cpp:363
-#, fuzzy
msgid "Changes will be lost! Are you sure you want to reload document %1?"
msgstr ""
"Les changements seront perdus ! Êtes-vous sûr de vouloir recharger le "
-"document %s ?"
+"document %1 ?"
#: ../src/file.cpp:389
msgid "Document reverted."
@@ -9208,14 +9135,12 @@ msgstr "Document enregistré."
#. We are saving for the first time; create a unique default filename
#: ../src/file.cpp:858
-#, fuzzy
msgid "drawing"
-msgstr "dessin%s"
+msgstr "dessin"
#: ../src/file.cpp:863
-#, fuzzy
msgid "drawing-%1"
-msgstr "dessin%s"
+msgstr "dessin-%1"
#: ../src/file.cpp:880
msgid "Select file to save a copy to"
@@ -9317,19 +9242,16 @@ msgstr "Remplissage du contour"
#. New in Compositing and Blending Level 1
#: ../src/filter-enums.cpp:58
-#, fuzzy
msgid "Overlay"
-msgstr "Superpositions"
+msgstr "Superposition"
#: ../src/filter-enums.cpp:59
-#, fuzzy
msgid "Color Dodge"
-msgstr "Couleur seulement"
+msgstr "Estompage de couleur"
#: ../src/filter-enums.cpp:60
-#, fuzzy
msgid "Color Burn"
-msgstr "Barres de couleur"
+msgstr "Brûlage de couleur"
#: ../src/filter-enums.cpp:61
#, fuzzy
@@ -10652,7 +10574,6 @@ msgid "The size of the grid in Y direction."
msgstr "La dimension de la grille dans la direction Y."
#: ../src/live_effects/lpe-copy_rotate.cpp:51
-#, fuzzy
msgid "Starting:"
msgstr "Début :"
@@ -10661,44 +10582,36 @@ msgid "Angle of the first copy"
msgstr ""
#: ../src/live_effects/lpe-copy_rotate.cpp:52
-#, fuzzy
msgid "Rotation angle:"
-msgstr "Rotation :"
+msgstr "Angle de rotation :"
#: ../src/live_effects/lpe-copy_rotate.cpp:52
-#, fuzzy
msgid "Angle between two successive copies"
-msgstr "Distance entre deux graduations successives"
+msgstr "Angle entre deux copies successives"
#: ../src/live_effects/lpe-copy_rotate.cpp:53
-#, fuzzy
msgid "Number of copies:"
-msgstr "Nombre d'échantillons :"
+msgstr "Nombre de copies :"
#: ../src/live_effects/lpe-copy_rotate.cpp:53
-#, fuzzy
msgid "Number of copies of the original path"
-msgstr "Nombre de sommets du polygone ou de l'étoile"
+msgstr "Nombre de copies du chemin original"
#: ../src/live_effects/lpe-copy_rotate.cpp:54
-#, fuzzy
msgid "Origin"
-msgstr "Origine X :"
+msgstr "Origine"
#: ../src/live_effects/lpe-copy_rotate.cpp:54
-#, fuzzy
msgid "Origin of the rotation"
-msgstr "Orientation"
+msgstr "Origine de la rotation"
#: ../src/live_effects/lpe-copy_rotate.cpp:135
-#, fuzzy
msgid "Adjust the starting angle"
-msgstr "Ajuster le crénage"
+msgstr "Ajuster l'angle de départ"
#: ../src/live_effects/lpe-copy_rotate.cpp:141
-#, fuzzy
msgid "Adjust the rotation angle"
-msgstr "Ajuster la saturation"
+msgstr "Ajuster l'angle de rotation"
#: ../src/live_effects/lpe-curvestitch.cpp:41
msgid "Stitch path:"
@@ -10783,9 +10696,8 @@ msgstr ""
"longueur"
#: ../src/live_effects/lpe-dynastroke.cpp:35
-#, fuzzy
msgid "Elliptic Pen"
-msgstr "Ellipse"
+msgstr "Stylo elliptique"
#: ../src/live_effects/lpe-dynastroke.cpp:36
msgid "Thick-Thin strokes (fast)"
@@ -10796,9 +10708,8 @@ msgid "Thick-Thin strokes (slow)"
msgstr ""
#: ../src/live_effects/lpe-dynastroke.cpp:42
-#, fuzzy
msgid "Sharp"
-msgstr "Netteté"
+msgstr "Précis"
#: ../src/live_effects/lpe-dynastroke.cpp:43
#: ../src/live_effects/lpe-powerstroke.cpp:205
@@ -10809,27 +10720,23 @@ msgstr "Arrondie"
#. initialise your parameters here:
#: ../src/live_effects/lpe-dynastroke.cpp:50
msgid "Method:"
-msgstr ""
+msgstr "Méthode :"
#: ../src/live_effects/lpe-dynastroke.cpp:50
-#, fuzzy
msgid "Choose pen type"
-msgstr "Sélectionner un type de segment"
+msgstr "Sélectionner un type de stylo"
#: ../src/live_effects/lpe-dynastroke.cpp:51
-#, fuzzy
msgid "Pen width:"
-msgstr "Largeur du stylo"
+msgstr "Largeur du stylo :"
#: ../src/live_effects/lpe-dynastroke.cpp:51
-#, fuzzy
msgid "Maximal stroke width"
-msgstr "Redimensionner l'épaisseur du contour"
+msgstr "Épaisseur du contour maximale"
#: ../src/live_effects/lpe-dynastroke.cpp:52
-#, fuzzy
msgid "Pen roundness:"
-msgstr "Caractère aléatoire du placement :"
+msgstr "Rondeur du stylo :"
#: ../src/live_effects/lpe-dynastroke.cpp:52
msgid "Min/Max width ratio"
@@ -10853,9 +10760,8 @@ msgid "Start:"
msgstr "Début :"
#: ../src/live_effects/lpe-dynastroke.cpp:55
-#, fuzzy
msgid "Choose start capping type"
-msgstr "Sélectionner un type de segment"
+msgstr "Sélectionner le type du raccord de départ"
#: ../src/live_effects/lpe-dynastroke.cpp:56
#: ../src/widgets/arc-toolbar.cpp:339
@@ -10863,9 +10769,8 @@ msgid "End:"
msgstr "Fin :"
#: ../src/live_effects/lpe-dynastroke.cpp:56
-#, fuzzy
msgid "Choose end capping type"
-msgstr "Sélectionner un type de segment"
+msgstr "Sélectionner le type du raccord de fin"
#: ../src/live_effects/lpe-dynastroke.cpp:57
#, fuzzy
@@ -10886,24 +10791,20 @@ msgid "Make the stroke thinner near it's end"
msgstr ""
#: ../src/live_effects/lpe-dynastroke.cpp:59
-#, fuzzy
msgid "Round ends"
-msgstr "Arrondi"
+msgstr "terminaisons arrondies"
#: ../src/live_effects/lpe-dynastroke.cpp:59
-#, fuzzy
msgid "Strokes end with a round end"
-msgstr "Métal embouti au bord arrondi"
+msgstr "Les contours se terminent en arrondi"
#: ../src/live_effects/lpe-dynastroke.cpp:60
-#, fuzzy
msgid "Capping:"
-msgstr "Clapotis"
+msgstr "Raccord :"
#: ../src/live_effects/lpe-dynastroke.cpp:60
-#, fuzzy
msgid "left capping"
-msgstr "Activer le magnétisme"
+msgstr "raccord gauche"
#: ../src/live_effects/lpe-envelope.cpp:31
msgid "Top bend path:"
@@ -11080,164 +10981,132 @@ msgstr "Modifier le croisement de l'entrelacs"
#. initialise your parameters here:
#: ../src/live_effects/lpe-lattice.cpp:45
-#, fuzzy
msgid "Control handle 0:"
-msgstr "Taille des icônes de la barre de contrôle des outils :"
+msgstr "Poignée de contrôle 0 :"
#: ../src/live_effects/lpe-lattice.cpp:45
-#, fuzzy
msgid "Control handle 0"
-msgstr "Poignée de point de rebroussement"
+msgstr "Poignée de contrôle 0"
#: ../src/live_effects/lpe-lattice.cpp:46
-#, fuzzy
msgid "Control handle 1:"
-msgstr "Taille des icônes de la barre de contrôle des outils :"
+msgstr "Poignée de contrôle 1 :"
#: ../src/live_effects/lpe-lattice.cpp:46
-#, fuzzy
msgid "Control handle 1"
-msgstr "Poignée de point de rebroussement"
+msgstr "Poignée de contrôle 1"
#: ../src/live_effects/lpe-lattice.cpp:47
-#, fuzzy
msgid "Control handle 2:"
-msgstr "Taille des icônes de la barre de contrôle des outils :"
+msgstr "Poignée de contrôle 2 :"
#: ../src/live_effects/lpe-lattice.cpp:47
-#, fuzzy
msgid "Control handle 2"
-msgstr "Poignée de point de rebroussement"
+msgstr "Poignée de contrôle 2"
#: ../src/live_effects/lpe-lattice.cpp:48
-#, fuzzy
msgid "Control handle 3:"
-msgstr "Taille des icônes de la barre de contrôle des outils :"
+msgstr "Poignée de contrôle 3 :"
#: ../src/live_effects/lpe-lattice.cpp:48
-#, fuzzy
msgid "Control handle 3"
-msgstr "Poignée de point de rebroussement"
+msgstr "Poignée de contrôle 3"
#: ../src/live_effects/lpe-lattice.cpp:49
-#, fuzzy
msgid "Control handle 4:"
-msgstr "Taille des icônes de la barre de contrôle des outils :"
+msgstr "Poignée de contrôle 4 :"
#: ../src/live_effects/lpe-lattice.cpp:49
-#, fuzzy
msgid "Control handle 4"
-msgstr "Poignée de point de rebroussement"
+msgstr "Poignée de contrôle 4"
#: ../src/live_effects/lpe-lattice.cpp:50
-#, fuzzy
msgid "Control handle 5:"
-msgstr "Taille des icônes de la barre de contrôle des outils :"
+msgstr "Poignée de contrôle 5 :"
#: ../src/live_effects/lpe-lattice.cpp:50
-#, fuzzy
msgid "Control handle 5"
-msgstr "Poignée de point de rebroussement"
+msgstr "Poignée de contrôle 5"
#: ../src/live_effects/lpe-lattice.cpp:51
-#, fuzzy
msgid "Control handle 6:"
-msgstr "Taille des icônes de la barre de contrôle des outils :"
+msgstr "Poignée de contrôle 6 :"
#: ../src/live_effects/lpe-lattice.cpp:51
-#, fuzzy
msgid "Control handle 6"
-msgstr "Poignée de point de rebroussement"
+msgstr "Poignée de contrôle 6"
#: ../src/live_effects/lpe-lattice.cpp:52
-#, fuzzy
msgid "Control handle 7:"
-msgstr "Taille des icônes de la barre de contrôle des outils :"
+msgstr "Poignée de contrôle 7 :"
#: ../src/live_effects/lpe-lattice.cpp:52
-#, fuzzy
msgid "Control handle 7"
-msgstr "Poignée de point de rebroussement"
+msgstr "Poignée de contrôle 7"
#: ../src/live_effects/lpe-lattice.cpp:53
-#, fuzzy
msgid "Control handle 8:"
-msgstr "Taille des icônes de la barre de contrôle des outils :"
+msgstr "Poignée de contrôle 8 :"
#: ../src/live_effects/lpe-lattice.cpp:53
-#, fuzzy
msgid "Control handle 8"
-msgstr "Poignée de point de rebroussement"
+msgstr "Poignée de contrôle 8"
#: ../src/live_effects/lpe-lattice.cpp:54
-#, fuzzy
msgid "Control handle 9:"
-msgstr "Taille des icônes de la barre de contrôle des outils :"
+msgstr "Poignée de contrôle 9 :"
#: ../src/live_effects/lpe-lattice.cpp:54
-#, fuzzy
msgid "Control handle 9"
-msgstr "Poignée de point de rebroussement"
+msgstr "Poignée de contrôle 9"
#: ../src/live_effects/lpe-lattice.cpp:55
-#, fuzzy
msgid "Control handle 10:"
-msgstr "Taille des icônes de la barre de contrôle des outils :"
+msgstr "Poignée de contrôle 10 :"
#: ../src/live_effects/lpe-lattice.cpp:55
-#, fuzzy
msgid "Control handle 10"
-msgstr "Poignée de point de rebroussement"
+msgstr "Poignée de contrôle 10"
#: ../src/live_effects/lpe-lattice.cpp:56
-#, fuzzy
msgid "Control handle 11:"
-msgstr "Taille des icônes de la barre de contrôle des outils :"
+msgstr "Poignée de contrôle 11 :"
#: ../src/live_effects/lpe-lattice.cpp:56
-#, fuzzy
msgid "Control handle 11"
-msgstr "Poignée de point de rebroussement"
+msgstr "Poignée de contrôle 11"
#: ../src/live_effects/lpe-lattice.cpp:57
-#, fuzzy
msgid "Control handle 12:"
-msgstr "Taille des icônes de la barre de contrôle des outils :"
+msgstr "Poignée de contrôle 12 :"
#: ../src/live_effects/lpe-lattice.cpp:57
-#, fuzzy
msgid "Control handle 12"
-msgstr "Poignée de point de rebroussement"
+msgstr "Poignée de contrôle 12"
#: ../src/live_effects/lpe-lattice.cpp:58
-#, fuzzy
msgid "Control handle 13:"
-msgstr "Taille des icônes de la barre de contrôle des outils :"
+msgstr "Poignée de contrôle 13 :"
#: ../src/live_effects/lpe-lattice.cpp:58
-#, fuzzy
msgid "Control handle 13"
-msgstr "Poignée de point de rebroussement"
+msgstr "Poignée de contrôle 13"
#: ../src/live_effects/lpe-lattice.cpp:59
-#, fuzzy
msgid "Control handle 14:"
-msgstr "Taille des icônes de la barre de contrôle des outils :"
+msgstr "Poignée de contrôle 14 :"
#: ../src/live_effects/lpe-lattice.cpp:59
-#, fuzzy
msgid "Control handle 14"
-msgstr "Poignée de point de rebroussement"
+msgstr "Poignée de contrôle 14"
#: ../src/live_effects/lpe-lattice.cpp:60
-#, fuzzy
msgid "Control handle 15:"
-msgstr "Taille des icônes de la barre de contrôle des outils :"
+msgstr "Poignée de contrôle 15 :"
#: ../src/live_effects/lpe-lattice.cpp:60
-#, fuzzy
msgid "Control handle 15"
-msgstr "Poignée de point de rebroussement"
+msgstr "Poignée de contrôle 15"
#: ../src/live_effects/lpe-line_segment.cpp:25
#: ../src/widgets/lpe-toolbar.cpp:233
@@ -11260,9 +11129,8 @@ msgid "Open both"
msgstr "Les deux ouverts"
#: ../src/live_effects/lpe-line_segment.cpp:34
-#, fuzzy
msgid "End type:"
-msgstr "Type de fondu :"
+msgstr "Type de terminaison :"
#: ../src/live_effects/lpe-line_segment.cpp:34
msgid "Determines on which side the line or line segment is infinite."
@@ -11340,9 +11208,8 @@ msgid "Unit"
msgstr "Unité"
#: ../src/live_effects/lpe-path_length.cpp:29
-#, fuzzy
msgid "Display unit"
-msgstr "Ajustement de l'affichage"
+msgstr "Unité d'affichage"
#: ../src/live_effects/lpe-path_length.cpp:29
#, fuzzy
@@ -11450,44 +11317,36 @@ msgstr ""
#. initialise your parameters here:
#: ../src/live_effects/lpe-perspective_path.cpp:47
-#, fuzzy
msgid "Scale x"
-msgstr "Échelle"
+msgstr "Échelle x"
#: ../src/live_effects/lpe-perspective_path.cpp:47
-#, fuzzy
msgid "Scale factor in x direction"
-msgstr "État du point de fuite dans la direction X"
+msgstr "Facteur d'échelle dans la direction X"
#: ../src/live_effects/lpe-perspective_path.cpp:48
-#, fuzzy
msgid "Scale y"
-msgstr "Échelle"
+msgstr "Échelle y"
#: ../src/live_effects/lpe-perspective_path.cpp:48
-#, fuzzy
msgid "Scale factor in y direction"
-msgstr "État du point de fuite dans la direction X"
+msgstr "Facteur d'échelle dans la direction Y"
#: ../src/live_effects/lpe-perspective_path.cpp:49
-#, fuzzy
msgid "Offset x"
-msgstr "Offset"
+msgstr "Offset x"
#: ../src/live_effects/lpe-perspective_path.cpp:49
-#, fuzzy
msgid "Offset in x direction"
-msgstr "Angle dans la direction X"
+msgstr "Décalage dans la direction X"
#: ../src/live_effects/lpe-perspective_path.cpp:50
-#, fuzzy
msgid "Offset y"
-msgstr "Offset"
+msgstr "Offset y"
#: ../src/live_effects/lpe-perspective_path.cpp:50
-#, fuzzy
msgid "Offset in y direction"
-msgstr "Angle dans la direction X"
+msgstr "Décalage dans la direction Y"
#: ../src/live_effects/lpe-perspective_path.cpp:51
msgid "Uses XY plane?"
@@ -11500,24 +11359,20 @@ msgid ""
msgstr ""
#: ../src/live_effects/lpe-perspective_path.cpp:145
-#, fuzzy
msgid "Adjust the origin"
-msgstr "Ajuster la teinte"
+msgstr "Ajuster l'origine"
#: ../src/live_effects/lpe-powerstroke.cpp:189
-#, fuzzy
msgid "CubicBezierFit"
-msgstr "Bézier"
+msgstr "CubicBezierFit"
#: ../src/live_effects/lpe-powerstroke.cpp:190
-#, fuzzy
msgid "CubicBezierJohan"
-msgstr "Bézier"
+msgstr "CubicBezierJohan"
#: ../src/live_effects/lpe-powerstroke.cpp:191
-#, fuzzy
msgid "SpiroInterpolator"
-msgstr "Interpoler"
+msgstr "SpiroInterpolator"
#: ../src/live_effects/lpe-powerstroke.cpp:203
msgid "Butt"
@@ -11639,7 +11494,7 @@ msgstr "Saturation :"
#: ../src/live_effects/lpe-recursiveskeleton.cpp:30
msgid "recursivity"
-msgstr ""
+msgstr "récursivité"
#: ../src/live_effects/lpe-rough-hatches.cpp:225
msgid "Frequency randomness:"
@@ -13221,7 +13076,6 @@ msgstr "Sélectionner un ou des <b>objet(s)</b> à descendre."
#. TRANSLATORS: "Lower" means "to lower an object" in the undo history
#: ../src/selection-chemistry.cpp:1077
-#, fuzzy
msgctxt "Undo action"
msgid "Lower"
msgstr "Descendre"
@@ -13479,7 +13333,6 @@ msgstr "Sélectionner un <b>symbole</b> pour en extraire des objets."
#: ../src/selection-chemistry.cpp:3149
#, fuzzy
-#| msgid "Select only one <b>symbol</b> to convert to group."
msgid "Select only one <b>symbol</b> in Symbol dialog to convert to group."
msgstr "Sélectionner un seul <b>symbole(s)</b> à convertir en groupe."
@@ -13605,9 +13458,8 @@ msgid " in %s"
msgstr " dans %s"
#: ../src/selection-describer.cpp:152
-#, fuzzy
msgid " hidden in definitions"
-msgstr "Interdire le partage des définitions de dégradé"
+msgstr " caché dans les définitions"
#: ../src/selection-describer.cpp:154
#, c-format
@@ -13615,9 +13467,9 @@ msgid " in group %s (%s)"
msgstr " dans le groupe %s (%s)"
#: ../src/selection-describer.cpp:156
-#, fuzzy, c-format
+#, c-format
msgid " in unnamed group (%s)"
-msgstr " dans le groupe %s (%s)"
+msgstr " dans un groupe anonyme (%s)"
#: ../src/selection-describer.cpp:158
#, fuzzy, c-format
@@ -13774,19 +13626,16 @@ msgid "to %s"
msgstr ""
#: ../src/sp-anchor.cpp:129
-#, fuzzy
msgid "without URI"
-msgstr "<b>Lien</b> sans URI"
+msgstr "sans URI"
#: ../src/sp-ellipse.cpp:374
-#, fuzzy
msgid "Segment"
-msgstr "Segment de ligne"
+msgstr "Segment"
#: ../src/sp-ellipse.cpp:376
-#, fuzzy
msgid "Arc"
-msgstr "Arabe"
+msgstr "Arc"
#. Ellipse
#: ../src/sp-ellipse.cpp:379 ../src/sp-ellipse.cpp:386
@@ -13801,7 +13650,6 @@ msgstr "Cercle"
#. TRANSLATORS: "Flow region" is an area where text is allowed to flow
#: ../src/sp-flowregion.cpp:193
-#, fuzzy
msgid "Flow Region"
msgstr "Région d'encadrement"
@@ -13815,7 +13663,6 @@ msgid "Flow Excluded Region"
msgstr "Région d'encadrement exclue"
#: ../src/sp-flowtext.cpp:289
-#, fuzzy
msgid "Flowed Text"
msgstr "Texte encadré"
@@ -14043,14 +13890,12 @@ msgid "An exception occurred during execution of the Path Effect."
msgstr "Exception pendant l'exécution de l'effet de chemin."
#: ../src/sp-offset.cpp:344
-#, fuzzy
msgid "Linked Offset"
-msgstr "Offset _lié"
+msgstr "Offset lié"
#: ../src/sp-offset.cpp:346
-#, fuzzy
msgid "Dynamic Offset"
-msgstr "Offset d_ynamique"
+msgstr "Offset dynamique"
#. TRANSLATORS COMMENT: %s is either "outset" or "inset" depending on sign
#: ../src/sp-offset.cpp:352
@@ -14187,7 +14032,6 @@ msgid "Text Span"
msgstr "Ancre de texte"
#: ../src/sp-use.cpp:213
-#, fuzzy
msgid "Symbol"
msgstr "Symbole"
@@ -16787,9 +16631,8 @@ msgid "Value(s):"
msgstr "Valeur(s) :"
#: ../src/ui/dialog/filter-effects-dialog.cpp:2847
-#, fuzzy
msgid "R:"
-msgstr "Rx :"
+msgstr "R :"
# Green (in RGB)
#: ../src/ui/dialog/filter-effects-dialog.cpp:2848
@@ -16799,15 +16642,13 @@ msgstr "V :"
# Blue (in RGB)
#: ../src/ui/dialog/filter-effects-dialog.cpp:2849
-#, fuzzy
msgid "B:"
-msgstr "_B :"
+msgstr "B :"
# Alpha (opacity)
#: ../src/ui/dialog/filter-effects-dialog.cpp:2850
-#, fuzzy
msgid "A:"
-msgstr "_A :"
+msgstr "A :"
#: ../src/ui/dialog/filter-effects-dialog.cpp:2853
#: ../src/ui/dialog/filter-effects-dialog.cpp:2893
@@ -21680,9 +21521,8 @@ msgid "Y:"
msgstr "Y :"
#: ../src/ui/dialog/object-attributes.cpp:70
-#, fuzzy
msgid "Image Rendering:"
-msgstr "Rendu"
+msgstr "Rendu de l'image :"
#: ../src/ui/dialog/object-properties.cpp:63
#: ../src/ui/dialog/object-properties.cpp:398
@@ -21696,9 +21536,8 @@ msgid "_Title:"
msgstr "_Titre :"
#: ../src/ui/dialog/object-properties.cpp:66
-#, fuzzy
msgid "_Image Rendering:"
-msgstr "Rendu"
+msgstr "Rendu de l'_image :"
#: ../src/ui/dialog/object-properties.cpp:67
msgid "_Description:"
@@ -21903,9 +21742,8 @@ msgid "Heuristics"
msgstr ""
#: ../src/ui/dialog/pixelartdialog.cpp:238
-#, fuzzy
msgid "_Voronoi diagram"
-msgstr "Diagramme de Voronoï"
+msgstr "Diagramme de _Voronoï"
#: ../src/ui/dialog/pixelartdialog.cpp:239
msgid "Output composed of straight lines"
@@ -25907,7 +25745,6 @@ msgstr "Désélectionner tous les objets ou nœuds"
#: ../src/verbs.cpp:2475
#, fuzzy
-#| msgid "Delete all objects from document"
msgid "Delete all the guides in the document"
msgstr "Supprimer tous les objets du document"
@@ -26350,7 +26187,6 @@ msgstr "Afficher le calque courant uniquement"
#. Object
#: ../src/verbs.cpp:2612
-#| msgid "Rotate 90° CW"
msgid "Rotate _90° CW"
msgstr "Tourner de _90° dans le sens horaire"
@@ -26361,7 +26197,6 @@ msgid "Rotate selection 90° clockwise"
msgstr "Tourner la sélection de 90° dans le sens horaire"
#: ../src/verbs.cpp:2616
-#| msgid "Rotate 90° CCW"
msgid "Rotate 9_0° CCW"
msgstr "Tourner de 9_0° dans le sens anti-horaire"
@@ -28450,8 +28285,6 @@ msgstr "Stops :"
#. Label
#: ../src/widgets/gradient-toolbar.cpp:1158
#: ../src/widgets/gradient-vector.cpp:926
-#, fuzzy
-#| msgid "Offset:"
msgctxt "Gradient"
msgid "Offset:"
msgstr "Décalage :"
@@ -31919,7 +31752,7 @@ msgstr "Entrée métafichier Windows (*.wmf)"
#: ../share/extensions/dhw_input.inx.h:2
msgid "ACECAD Digimemo File (*.dhw)"
-msgstr ""
+msgstr "Fichier ACECAD Digimemo (*.dhw)"
#: ../share/extensions/dhw_input.inx.h:3
msgid "Open files from ACECAD Digimemo"
@@ -33780,9 +33613,8 @@ msgid "Lower right corner"
msgstr "Descendre le calque courant"
#: ../share/extensions/guides_creator.inx.h:13
-#, fuzzy
msgid "Margins"
-msgstr "Boîte de marge"
+msgstr "Marges"
#: ../share/extensions/guides_creator.inx.h:14
#, fuzzy
@@ -33790,31 +33622,26 @@ msgid "Margins preset"
msgstr "Guide de marge"
#: ../share/extensions/guides_creator.inx.h:15
-#, fuzzy
msgid "Header margin"
-msgstr "Marges de la page"
+msgstr "Marge de l'en-tête"
#: ../share/extensions/guides_creator.inx.h:16
-#, fuzzy
msgid "Footer margin"
-msgstr "Marge supérieure"
+msgstr "Marge du pied de page"
#: ../share/extensions/guillotine.inx.h:1
msgid "Guillotine"
msgstr "Guillotine"
#: ../share/extensions/guillotine.inx.h:2
-#, fuzzy
msgid "Directory to save images to:"
msgstr "Dossier où enregistrer l'image :"
#: ../share/extensions/guillotine.inx.h:3
-#, fuzzy
msgid "Image name (without extension):"
-msgstr "Nom de l'image (sans extension)"
+msgstr "Nom de l'image (sans extension) :"
#: ../share/extensions/guillotine.inx.h:4
-#, fuzzy
msgid "Ignore these settings and use export hints"
msgstr "Ignorer ces paramètres et utiliser les suggestions d'exportation"
@@ -33982,9 +33809,8 @@ msgid ""
msgstr ""
#: ../share/extensions/hpgl_input.inx.h:1
-#, fuzzy
msgid "HPGL Input"
-msgstr "Entrée WPG"
+msgstr "Entrée HPGL"
#: ../share/extensions/hpgl_input.inx.h:2
msgid ""
@@ -33996,9 +33822,8 @@ msgstr ""
#: ../share/extensions/hpgl_input.inx.h:3
#: ../share/extensions/hpgl_output.inx.h:4
#: ../share/extensions/plotter.inx.h:20
-#, fuzzy
msgid "Resolution X (dpi)"
-msgstr "Résolution (ppp) :"
+msgstr "Résolution X (ppp)"
#: ../share/extensions/hpgl_input.inx.h:4
#: ../share/extensions/hpgl_output.inx.h:5
@@ -34011,9 +33836,8 @@ msgstr ""
#: ../share/extensions/hpgl_input.inx.h:5
#: ../share/extensions/hpgl_output.inx.h:6
#: ../share/extensions/plotter.inx.h:22
-#, fuzzy
msgid "Resolution Y (dpi)"
-msgstr "Résolution (ppp) :"
+msgstr "Résolution Y (ppp)"
#: ../share/extensions/hpgl_input.inx.h:6
#: ../share/extensions/hpgl_output.inx.h:7
@@ -34060,7 +33884,6 @@ msgstr "Propriétés de la page"
#: ../share/extensions/hpgl_output.inx.h:8
#: ../share/extensions/plotter.inx.h:24
-#, fuzzy
msgid "Pen number"
msgstr "Numéro de stylo"
@@ -34096,7 +33919,6 @@ msgstr ""
#: ../share/extensions/hpgl_output.inx.h:14
#: ../share/extensions/plotter.inx.h:30
-#, fuzzy
msgid "Rotation (Clockwise)"
msgstr "Rotation en sens horaire"
@@ -34107,7 +33929,6 @@ msgstr ""
#: ../share/extensions/hpgl_output.inx.h:16
#: ../share/extensions/plotter.inx.h:32
-#, fuzzy
msgid "Mirror X axis"
msgstr "Refléter sur l'axe Y"
@@ -34118,7 +33939,6 @@ msgstr ""
#: ../share/extensions/hpgl_output.inx.h:18
#: ../share/extensions/plotter.inx.h:34
-#, fuzzy
msgid "Mirror Y axis"
msgstr "Refléter sur l'axe Y"
@@ -34142,7 +33962,6 @@ msgstr ""
#: ../share/extensions/hpgl_output.inx.h:22
#: ../share/extensions/plotter.inx.h:38
#, fuzzy
-#| msgid "Felt Feather"
msgid "Plot Features "
msgstr "Estompage du pourtour"
@@ -34201,7 +34020,6 @@ msgstr ""
#: ../share/extensions/hpgl_output.inx.h:31
#: ../share/extensions/plotter.inx.h:47
#, fuzzy
-#| msgid "Align"
msgid "Auto align"
msgstr "Aligner"
@@ -35543,14 +35361,13 @@ msgstr ""
#: ../share/extensions/plotter.inx.h:3
#, fuzzy
-#| msgid "Connections"
msgid "Connection Settings "
msgstr "Connecteurs"
#: ../share/extensions/plotter.inx.h:4
#, fuzzy
msgid "Serial port"
-msgstr "Port sériel :"
+msgstr "Port sériel"
#: ../share/extensions/plotter.inx.h:5
msgid ""
@@ -35579,26 +35396,24 @@ msgid ""
msgstr ""
#: ../share/extensions/plotter.inx.h:10
-#, fuzzy
msgid "Command language"
-msgstr "Deuxième langue :"
+msgstr "Langage de commande"
#: ../share/extensions/plotter.inx.h:11
msgid "The command language to use. (Default: HPGL)"
-msgstr ""
+msgstr "Langage de commande à utiliser (par défaut HPGL)."
#: ../share/extensions/plotter.inx.h:12
msgid "Software (XON/XOFF)"
-msgstr ""
+msgstr "Logiciel (XON/XOFF)"
#: ../share/extensions/plotter.inx.h:13
-#, fuzzy
msgid "Hardware (RTS/CTS)"
-msgstr "Matériel"
+msgstr "Matériel (RTS/CTS)"
#: ../share/extensions/plotter.inx.h:14
msgid "Hardware (DSR/DTR + RTS/CTS)"
-msgstr ""
+msgstr "Matériel (DSR/DTR + RTS/CTS)"
#: ../share/extensions/plotter.inx.h:16
msgid ""
@@ -35617,9 +35432,8 @@ msgid "Parallel (LPT) connections are not supported."
msgstr ""
#: ../share/extensions/plotter.inx.h:49
-#, fuzzy
msgid "Show debug information"
-msgstr "Information sur l'utilisation de la mémoire"
+msgstr "Afficher les informations de débogage"
#: ../share/extensions/plotter.inx.h:50
msgid ""
@@ -36441,7 +36255,6 @@ msgstr "Fichiers d'entrée graphiques vectoriels sK1"
#: ../share/extensions/sk1_input.inx.h:2
#: ../share/extensions/sk1_output.inx.h:2
-#, fuzzy
msgid "sK1 vector graphics files (*.sk1)"
msgstr "Fichiers graphiques vectoriels sK1 (.sk1)"
@@ -36837,14 +36650,12 @@ msgid "lowercase"
msgstr "minuscules"
#: ../share/extensions/text_merge.inx.h:14
-#, fuzzy
msgid "Flow text"
msgstr "Texte encadré"
#: ../share/extensions/text_merge.inx.h:15
-#, fuzzy
msgid "Keep style"
-msgstr "Appliquer un style à un texte"
+msgstr "Conserver le style"
#: ../share/extensions/text_randomcase.inx.h:1
msgid "rANdOm CasE"
diff --git a/po/inkscape.pot b/po/inkscape.pot
index e797b9d13..e7286fdba 100644
--- a/po/inkscape.pot
+++ b/po/inkscape.pot
@@ -4,12 +4,13 @@
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#: ../share/filters/filters.svg.h:1
+#: ../src/ui/dialog/inkscape-preferences.cpp:1469
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: inkscape-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2014-03-04 13:58+0100\n"
+"POT-Creation-Date: 2014-04-28 18:26+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -979,14 +980,14 @@ 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:154
-#: ../share/extensions/color_blackandwhite.inx.h:2
+#: ../src/ui/dialog/document-properties.cpp:156
+#: ../share/extensions/color_HSL_adjust.inx.h:20
+#: ../share/extensions/color_blackandwhite.inx.h:3
#: ../share/extensions/color_brighter.inx.h:2
#: ../share/extensions/color_custom.inx.h:15
#: ../share/extensions/color_darker.inx.h:2
#: ../share/extensions/color_desaturate.inx.h:2
#: ../share/extensions/color_grayscale.inx.h:2
-#: ../share/extensions/color_HSL_adjust.inx.h:20
#: ../share/extensions/color_lesshue.inx.h:2
#: ../share/extensions/color_lesslight.inx.h:2
#: ../share/extensions/color_lesssaturation.inx.h:2
@@ -5069,26 +5070,26 @@ msgstr ""
msgid "3D Box"
msgstr ""
-#: ../src/color-profile.cpp:854
+#: ../src/color-profile.cpp:852
#, c-format
msgid "Color profiles directory (%s) is unavailable."
msgstr ""
-#: ../src/color-profile.cpp:913 ../src/color-profile.cpp:930
+#: ../src/color-profile.cpp:911 ../src/color-profile.cpp:928
msgid "(invalid UTF-8 string)"
msgstr ""
-#: ../src/color-profile.cpp:915 ../src/filter-enums.cpp:119
+#: ../src/color-profile.cpp:913 ../src/filter-enums.cpp:119
#: ../src/live_effects/lpe-ruler.cpp:32
#: ../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
-#: ../src/ui/dialog/inkscape-preferences.cpp:1830
+#: ../src/ui/dialog/inkscape-preferences.cpp:1835
#: ../src/ui/dialog/input.cpp:742 ../src/ui/dialog/input.cpp:743
#: ../src/ui/dialog/input.cpp:1571 ../src/ui/dialog/input.cpp:1625
-#: ../src/verbs.cpp:2352 ../src/widgets/gradient-toolbar.cpp:1114
-#: ../src/widgets/pencil-toolbar.cpp:163
+#: ../src/verbs.cpp:2345 ../src/widgets/gradient-toolbar.cpp:1114
+#: ../src/widgets/pencil-toolbar.cpp:155
#: ../src/widgets/stroke-marker-selector.cpp:388
#: ../share/extensions/gcodetools_area.inx.h:48
#: ../share/extensions/gcodetools_dxf_points.inx.h:20
@@ -5109,32 +5110,32 @@ msgstr ""
msgid "<b>Current layer is locked</b>. Unlock it to be able to draw on it."
msgstr ""
-#: ../src/desktop.cpp:875
-msgid "No previous zoom."
-msgstr ""
-
-#: ../src/desktop.cpp:896
-msgid "No next zoom."
-msgstr ""
-
#: ../src/desktop-events.cpp:225
msgid "Create guide"
msgstr ""
-#: ../src/desktop-events.cpp:470
+#: ../src/desktop-events.cpp:471
msgid "Move guide"
msgstr ""
-#: ../src/desktop-events.cpp:477 ../src/desktop-events.cpp:536
-#: ../src/ui/dialog/guides.cpp:144
+#: ../src/desktop-events.cpp:478 ../src/desktop-events.cpp:537
+#: ../src/ui/dialog/guides.cpp:138
msgid "Delete guide"
msgstr ""
-#: ../src/desktop-events.cpp:516
+#: ../src/desktop-events.cpp:517
#, c-format
msgid "<b>Guideline</b>: %s"
msgstr ""
+#: ../src/desktop.cpp:880
+msgid "No previous zoom."
+msgstr ""
+
+#: ../src/desktop.cpp:901
+msgid "No next zoom."
+msgstr ""
+
#: ../src/display/canvas-axonomgrid.cpp:317 ../src/display/canvas-grid.cpp:693
msgid "Grid _units:"
msgstr ""
@@ -5434,11 +5435,11 @@ msgstr ""
msgid "Bounding box side midpoint"
msgstr ""
-#: ../src/display/snap-indicator.cpp:194 ../src/ui/tool/node.cpp:1315
+#: ../src/display/snap-indicator.cpp:194 ../src/ui/tool/node.cpp:1319
msgid "Smooth node"
msgstr ""
-#: ../src/display/snap-indicator.cpp:197 ../src/ui/tool/node.cpp:1314
+#: ../src/display/snap-indicator.cpp:197 ../src/ui/tool/node.cpp:1318
msgid "Cusp node"
msgstr ""
@@ -5513,16 +5514,16 @@ msgstr ""
msgid "Unnamed document %d"
msgstr ""
-#: ../src/event-log.cpp:37
+#: ../src/event-log.cpp:185
msgid "[Unchanged]"
msgstr ""
#. Edit
-#: ../src/event-log.cpp:275 ../src/event-log.cpp:278 ../src/verbs.cpp:2390
+#: ../src/event-log.cpp:371 ../src/event-log.cpp:374 ../src/verbs.cpp:2383
msgid "_Undo"
msgstr ""
-#: ../src/event-log.cpp:285 ../src/event-log.cpp:289 ../src/verbs.cpp:2392
+#: ../src/event-log.cpp:381 ../src/event-log.cpp:385 ../src/verbs.cpp:2385
msgid "_Redo"
msgstr ""
@@ -5550,7 +5551,7 @@ msgstr ""
msgid " (No preferences)"
msgstr ""
-#: ../src/extension/effect.h:70 ../src/verbs.cpp:2163
+#: ../src/extension/effect.h:70 ../src/verbs.cpp:2156
msgid "Extensions"
msgstr ""
@@ -5582,66 +5583,70 @@ msgid ""
"inx file could have been caused by a faulty installation of Inkscape."
msgstr ""
-#: ../src/extension/extension.cpp:266
+#: ../src/extension/extension.cpp:273
+msgid "the extension is designed for Windows only."
+msgstr ""
+
+#: ../src/extension/extension.cpp:278
msgid "an ID was not defined for it."
msgstr ""
-#: ../src/extension/extension.cpp:270
+#: ../src/extension/extension.cpp:282
msgid "there was no name defined for it."
msgstr ""
-#: ../src/extension/extension.cpp:274
+#: ../src/extension/extension.cpp:286
msgid "the XML description of it got lost."
msgstr ""
-#: ../src/extension/extension.cpp:278
+#: ../src/extension/extension.cpp:290
msgid "no implementation was defined for the extension."
msgstr ""
#. std::cout << "Failed: " << *(_deps[i]) << std::endl;
-#: ../src/extension/extension.cpp:285
+#: ../src/extension/extension.cpp:297
msgid "a dependency was not met."
msgstr ""
-#: ../src/extension/extension.cpp:305
+#: ../src/extension/extension.cpp:317
msgid "Extension \""
msgstr ""
-#: ../src/extension/extension.cpp:305
+#: ../src/extension/extension.cpp:317
msgid "\" failed to load because "
msgstr ""
-#: ../src/extension/extension.cpp:654
+#: ../src/extension/extension.cpp:666
#, c-format
msgid "Could not create extension error log file '%s'"
msgstr ""
-#: ../src/extension/extension.cpp:762
+#: ../src/extension/extension.cpp:774
#: ../share/extensions/webslicer_create_rect.inx.h:2
msgid "Name:"
msgstr ""
-#: ../src/extension/extension.cpp:763
+#: ../src/extension/extension.cpp:775
msgid "ID:"
msgstr ""
-#: ../src/extension/extension.cpp:764
+#: ../src/extension/extension.cpp:776
msgid "State:"
msgstr ""
-#: ../src/extension/extension.cpp:764
+#: ../src/extension/extension.cpp:776
msgid "Loaded"
msgstr ""
-#: ../src/extension/extension.cpp:764
+#: ../src/extension/extension.cpp:776
msgid "Unloaded"
msgstr ""
-#: ../src/extension/extension.cpp:764
+#: ../src/extension/extension.cpp:776
msgid "Deactivated"
msgstr ""
-#: ../src/extension/extension.cpp:804
+#: ../src/extension/extension.cpp:816
msgid ""
"Currently there is no help available for this Extension. Please look on the "
"Inkscape website or ask on the mailing lists if you have questions regarding "
@@ -5714,8 +5719,8 @@ msgstr ""
#: ../src/extension/internal/bitmap/equalize.cpp:40
#: ../src/extension/internal/bitmap/gaussianBlur.cpp:45
#: ../src/extension/internal/bitmap/implode.cpp:43
-#: ../src/extension/internal/bitmap/levelChannel.cpp:71
#: ../src/extension/internal/bitmap/level.cpp:49
+#: ../src/extension/internal/bitmap/levelChannel.cpp:71
#: ../src/extension/internal/bitmap/medianFilter.cpp:43
#: ../src/extension/internal/bitmap/modulate.cpp:48
#: ../src/extension/internal/bitmap/negate.cpp:41
@@ -6012,48 +6017,48 @@ msgstr ""
msgid "Implode selected bitmap(s)"
msgstr ""
-#: ../src/extension/internal/bitmap/levelChannel.cpp:52
-msgid "Level (with Channel)"
-msgstr ""
-
-#: ../src/extension/internal/bitmap/levelChannel.cpp:54
-#: ../src/extension/internal/filter/color.h:636
-msgid "Channel:"
+#: ../src/extension/internal/bitmap/level.cpp:41
+#: ../src/extension/internal/filter/color.h:742
+#: ../src/extension/internal/filter/image.h:56
+#: ../src/extension/internal/filter/morphology.h:66
+#: ../src/extension/internal/filter/paint.h:345
+msgid "Level"
msgstr ""
-#: ../src/extension/internal/bitmap/levelChannel.cpp:65
#: ../src/extension/internal/bitmap/level.cpp:43
+#: ../src/extension/internal/bitmap/levelChannel.cpp:65
msgid "Black Point:"
msgstr ""
-#: ../src/extension/internal/bitmap/levelChannel.cpp:66
#: ../src/extension/internal/bitmap/level.cpp:44
+#: ../src/extension/internal/bitmap/levelChannel.cpp:66
msgid "White Point:"
msgstr ""
-#: ../src/extension/internal/bitmap/levelChannel.cpp:67
#: ../src/extension/internal/bitmap/level.cpp:45
+#: ../src/extension/internal/bitmap/levelChannel.cpp:67
msgid "Gamma Correction:"
msgstr ""
-#: ../src/extension/internal/bitmap/levelChannel.cpp:73
+#: ../src/extension/internal/bitmap/level.cpp:51
msgid ""
-"Level the specified channel of selected bitmap(s) by scaling values falling "
-"between the given ranges to the full color range"
+"Level selected bitmap(s) by scaling values falling between the given ranges "
+"to the full color range"
msgstr ""
-#: ../src/extension/internal/bitmap/level.cpp:41
-#: ../src/extension/internal/filter/color.h:742
-#: ../src/extension/internal/filter/image.h:56
-#: ../src/extension/internal/filter/morphology.h:66
-#: ../src/extension/internal/filter/paint.h:345
-msgid "Level"
+#: ../src/extension/internal/bitmap/levelChannel.cpp:52
+msgid "Level (with Channel)"
msgstr ""
-#: ../src/extension/internal/bitmap/level.cpp:51
+#: ../src/extension/internal/bitmap/levelChannel.cpp:54
+#: ../src/extension/internal/filter/color.h:636
+msgid "Channel:"
+msgstr ""
+
+#: ../src/extension/internal/bitmap/levelChannel.cpp:73
msgid ""
-"Level selected bitmap(s) by scaling values falling between the given ranges "
-"to the full color range"
+"Level the specified channel of selected bitmap(s) by scaling values falling "
+"between the given ranges to the full color range"
msgstr ""
#: ../src/extension/internal/bitmap/medianFilter.cpp:37
@@ -6309,8 +6314,8 @@ msgstr ""
#: ../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:3524
-#: ../src/extension/internal/wmf-inout.cpp:3128
+#: ../src/extension/internal/emf-inout.cpp:3468
+#: ../src/extension/internal/wmf-inout.cpp:3065
msgid "Convert texts to paths"
msgstr ""
@@ -6478,74 +6483,74 @@ msgstr ""
msgid "Open presentation exchange files saved in Corel DRAW"
msgstr ""
-#: ../src/extension/internal/emf-inout.cpp:3508
+#: ../src/extension/internal/emf-inout.cpp:3452
msgid "EMF Input"
msgstr ""
-#: ../src/extension/internal/emf-inout.cpp:3513
+#: ../src/extension/internal/emf-inout.cpp:3457
msgid "Enhanced Metafiles (*.emf)"
msgstr ""
-#: ../src/extension/internal/emf-inout.cpp:3514
+#: ../src/extension/internal/emf-inout.cpp:3458
msgid "Enhanced Metafiles"
msgstr ""
-#: ../src/extension/internal/emf-inout.cpp:3522
+#: ../src/extension/internal/emf-inout.cpp:3466
msgid "EMF Output"
msgstr ""
-#: ../src/extension/internal/emf-inout.cpp:3525
-#: ../src/extension/internal/wmf-inout.cpp:3129
+#: ../src/extension/internal/emf-inout.cpp:3469
+#: ../src/extension/internal/wmf-inout.cpp:3066
msgid "Map Unicode to Symbol font"
msgstr ""
-#: ../src/extension/internal/emf-inout.cpp:3526
-#: ../src/extension/internal/wmf-inout.cpp:3130
+#: ../src/extension/internal/emf-inout.cpp:3470
+#: ../src/extension/internal/wmf-inout.cpp:3067
msgid "Map Unicode to Wingdings"
msgstr ""
-#: ../src/extension/internal/emf-inout.cpp:3527
-#: ../src/extension/internal/wmf-inout.cpp:3131
+#: ../src/extension/internal/emf-inout.cpp:3471
+#: ../src/extension/internal/wmf-inout.cpp:3068
msgid "Map Unicode to Zapf Dingbats"
msgstr ""
-#: ../src/extension/internal/emf-inout.cpp:3528
-#: ../src/extension/internal/wmf-inout.cpp:3132
+#: ../src/extension/internal/emf-inout.cpp:3472
+#: ../src/extension/internal/wmf-inout.cpp:3069
msgid "Use MS Unicode PUA (0xF020-0xF0FF) for converted characters"
msgstr ""
-#: ../src/extension/internal/emf-inout.cpp:3529
-#: ../src/extension/internal/wmf-inout.cpp:3133
+#: ../src/extension/internal/emf-inout.cpp:3473
+#: ../src/extension/internal/wmf-inout.cpp:3070
msgid "Compensate for PPT font bug"
msgstr ""
-#: ../src/extension/internal/emf-inout.cpp:3530
-#: ../src/extension/internal/wmf-inout.cpp:3134
+#: ../src/extension/internal/emf-inout.cpp:3474
+#: ../src/extension/internal/wmf-inout.cpp:3071
msgid "Convert dashed/dotted lines to single lines"
msgstr ""
-#: ../src/extension/internal/emf-inout.cpp:3531
-#: ../src/extension/internal/wmf-inout.cpp:3135
+#: ../src/extension/internal/emf-inout.cpp:3475
+#: ../src/extension/internal/wmf-inout.cpp:3072
msgid "Convert gradients to colored polygon series"
msgstr ""
-#: ../src/extension/internal/emf-inout.cpp:3532
+#: ../src/extension/internal/emf-inout.cpp:3476
msgid "Use native rectangular linear gradients"
msgstr ""
-#: ../src/extension/internal/emf-inout.cpp:3533
+#: ../src/extension/internal/emf-inout.cpp:3477
msgid "Map all fill patterns to standard EMF hatches"
msgstr ""
-#: ../src/extension/internal/emf-inout.cpp:3534
+#: ../src/extension/internal/emf-inout.cpp:3478
msgid "Ignore image rotations"
msgstr ""
-#: ../src/extension/internal/emf-inout.cpp:3538
+#: ../src/extension/internal/emf-inout.cpp:3482
msgid "Enhanced Metafile (*.emf)"
msgstr ""
-#: ../src/extension/internal/emf-inout.cpp:3539
+#: ../src/extension/internal/emf-inout.cpp:3483
msgid "Enhanced Metafile"
msgstr ""
@@ -6608,8 +6613,8 @@ msgstr ""
#: ../src/extension/internal/filter/color.h:1615
#: ../src/extension/internal/filter/distort.h:95
#: ../src/extension/internal/filter/distort.h:204
-#: ../src/extension/internal/filter/filter.cpp:214
#: ../src/extension/internal/filter/filter-file.cpp:151
+#: ../src/extension/internal/filter/filter.cpp:214
#: ../src/extension/internal/filter/image.h:61
#: ../src/extension/internal/filter/morphology.h:75
#: ../src/extension/internal/filter/morphology.h:202
@@ -6815,7 +6820,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:112
+#: ../src/ui/dialog/document-properties.cpp:114
msgid "Background color"
msgstr ""
@@ -6926,8 +6931,8 @@ msgid "Diffuse"
msgstr ""
#: ../src/extension/internal/filter/bumps.h:98
-#: ../src/extension/internal/filter/bumps.h:329 ../src/libgdl/gdl-dock.c:199
-#: ../src/libgdl/gdl-dock-placeholder.c:175
+#: ../src/extension/internal/filter/bumps.h:329
+#: ../src/libgdl/gdl-dock-placeholder.c:175 ../src/libgdl/gdl-dock.c:199
#: ../src/widgets/rect-toolbar.cpp:331
#: ../share/extensions/interp_att_g.inx.h:11
msgid "Height"
@@ -7403,11 +7408,9 @@ msgstr ""
msgid "Shadows"
msgstr ""
-#. initialise your parameters here:
#: ../src/extension/internal/filter/color.h:1044
#: ../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/live_effects/effect.cpp:97
#: ../src/ui/dialog/filter-effects-dialog.cpp:1047
#: ../src/widgets/gradient-toolbar.cpp:1158
msgid "Offset"
@@ -7731,7 +7734,7 @@ msgid "Open"
msgstr ""
#: ../src/extension/internal/filter/morphology.h:65
-#: ../src/libgdl/gdl-dock.c:191 ../src/libgdl/gdl-dock-placeholder.c:167
+#: ../src/libgdl/gdl-dock-placeholder.c:167 ../src/libgdl/gdl-dock.c:191
#: ../src/widgets/rect-toolbar.cpp:314 ../src/widgets/spray-toolbar.cpp:116
#: ../src/widgets/tweak-toolbar.cpp:128
#: ../share/extensions/interp_att_g.inx.h:10
@@ -7842,8 +7845,8 @@ msgstr ""
#: ../src/extension/internal/filter/paint.h:690
#: ../src/extension/internal/filter/shadows.h:60 ../src/ui/dialog/find.cpp:87
#: ../src/ui/dialog/tracedialog.cpp:747
-#: ../share/extensions/color_custom.inx.h:2
#: ../share/extensions/color_HSL_adjust.inx.h:2
+#: ../share/extensions/color_custom.inx.h:2
#: ../share/extensions/color_randomize.inx.h:2
#: ../share/extensions/dots.inx.h:2 ../share/extensions/dxf_input.inx.h:2
#: ../share/extensions/dxf_outlines.inx.h:2
@@ -7862,9 +7865,9 @@ msgstr ""
#: ../share/extensions/radiusrand.inx.h:2 ../share/extensions/scour.inx.h:2
#: ../share/extensions/split.inx.h:2 ../share/extensions/voronoi2svg.inx.h:2
#: ../share/extensions/web-set-att.inx.h:2
+#: ../share/extensions/web-transmit-att.inx.h:2
#: ../share/extensions/webslicer_create_group.inx.h:2
#: ../share/extensions/webslicer_export.inx.h:2
-#: ../share/extensions/web-transmit-att.inx.h:2
msgid "Options"
msgstr ""
@@ -7973,7 +7976,7 @@ msgstr ""
#: ../src/extension/internal/filter/paint.h:335
#: ../src/extension/internal/filter/paint.h:496
#: ../src/extension/internal/filter/paint.h:590
-#: ../src/extension/internal/filter/paint.h:976 ../src/splivarot.cpp:2207
+#: ../src/extension/internal/filter/paint.h:976 ../src/splivarot.cpp:2208
msgid "Simplify"
msgstr ""
@@ -8248,14 +8251,14 @@ msgid "Source:"
msgstr ""
#: ../src/extension/internal/filter/transparency.h:56
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1605
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1551
msgid "Background"
msgstr ""
#: ../src/extension/internal/filter/transparency.h:59
#: ../src/ui/dialog/filter-effects-dialog.cpp:2839
#: ../src/ui/dialog/input.cpp:1088 ../src/widgets/eraser-toolbar.cpp:106
-#: ../src/widgets/pencil-toolbar.cpp:135 ../src/widgets/spray-toolbar.cpp:186
+#: ../src/widgets/pencil-toolbar.cpp:127 ../src/widgets/spray-toolbar.cpp:186
#: ../src/widgets/tweak-toolbar.cpp:254 ../share/extensions/extrude.inx.h:2
#: ../share/extensions/triangle.inx.h:8
msgid "Mode:"
@@ -8390,31 +8393,32 @@ msgstr ""
msgid "Gradients used in GIMP"
msgstr ""
-#: ../src/extension/internal/grid.cpp:212 ../src/ui/widget/panel.cpp:117
+#: ../src/extension/internal/grid.cpp:210 ../src/ui/widget/panel.cpp:117
msgid "Grid"
msgstr ""
-#: ../src/extension/internal/grid.cpp:214
+#: ../src/extension/internal/grid.cpp:212
msgid "Line Width:"
msgstr ""
-#: ../src/extension/internal/grid.cpp:215
+#: ../src/extension/internal/grid.cpp:213
msgid "Horizontal Spacing:"
msgstr ""
-#: ../src/extension/internal/grid.cpp:216
+#: ../src/extension/internal/grid.cpp:214
msgid "Vertical Spacing:"
msgstr ""
-#: ../src/extension/internal/grid.cpp:217
+#: ../src/extension/internal/grid.cpp:215
msgid "Horizontal Offset:"
msgstr ""
-#: ../src/extension/internal/grid.cpp:218
+#: ../src/extension/internal/grid.cpp:216
msgid "Vertical Offset:"
msgstr ""
-#: ../src/extension/internal/grid.cpp:222
+#: ../src/extension/internal/grid.cpp:220
+#: ../src/ui/dialog/inkscape-preferences.cpp:1466
#: ../share/extensions/draw_from_triangle.inx.h:58
#: ../share/extensions/eqtexsvg.inx.h:4
#: ../share/extensions/foldablebox.inx.h:9
@@ -8431,8 +8435,8 @@ msgstr ""
#: ../share/extensions/polyhedron_3d.inx.h:56
#: ../share/extensions/printing_marks.inx.h:20
#: ../share/extensions/render_alphabetsoup.inx.h:5
-#: ../share/extensions/render_barcode_datamatrix.inx.h:5
#: ../share/extensions/render_barcode.inx.h:5
+#: ../share/extensions/render_barcode_datamatrix.inx.h:5
#: ../share/extensions/render_barcode_qrcode.inx.h:18
#: ../share/extensions/render_gear_rack.inx.h:5
#: ../share/extensions/render_gears.inx.h:11 ../share/extensions/rtree.inx.h:4
@@ -8443,33 +8447,29 @@ msgstr ""
msgid "Render"
msgstr ""
-#: ../src/extension/internal/grid.cpp:223
-#: ../src/ui/dialog/document-properties.cpp:152
+#: ../src/extension/internal/grid.cpp:221
+#: ../src/ui/dialog/document-properties.cpp:154
#: ../src/ui/dialog/inkscape-preferences.cpp:776
#: ../src/widgets/toolbox.cpp:1825
msgid "Grids"
msgstr ""
-#: ../src/extension/internal/grid.cpp:226
+#: ../src/extension/internal/grid.cpp:224
msgid "Draw a path which is a grid"
msgstr ""
-#: ../src/extension/internal/javafx-out.cpp:968
+#: ../src/extension/internal/javafx-out.cpp:966
msgid "JavaFX Output"
msgstr ""
-#: ../src/extension/internal/javafx-out.cpp:973
+#: ../src/extension/internal/javafx-out.cpp:971
msgid "JavaFX (*.fx)"
msgstr ""
-#: ../src/extension/internal/javafx-out.cpp:974
+#: ../src/extension/internal/javafx-out.cpp:972
msgid "JavaFX Raytracer File"
msgstr ""
-#: ../src/extension/internal/latex-pstricks.cpp:334
-msgid "LaTeX Print"
-msgstr ""
-
#: ../src/extension/internal/latex-pstricks-out.cpp:95
msgid "LaTeX Output"
msgstr ""
@@ -8482,6 +8482,10 @@ msgstr ""
msgid "LaTeX PSTricks File"
msgstr ""
+#: ../src/extension/internal/latex-pstricks.cpp:331
+msgid "LaTeX Print"
+msgstr ""
+
#: ../src/extension/internal/odf.cpp:2142
msgid "OpenDocument Drawing Output"
msgstr ""
@@ -8651,39 +8655,39 @@ msgstr ""
msgid "PovRay Raytracer File"
msgstr ""
-#: ../src/extension/internal/svg.cpp:89
+#: ../src/extension/internal/svg.cpp:100
msgid "SVG Input"
msgstr ""
-#: ../src/extension/internal/svg.cpp:94
+#: ../src/extension/internal/svg.cpp:105
msgid "Scalable Vector Graphic (*.svg)"
msgstr ""
-#: ../src/extension/internal/svg.cpp:95
+#: ../src/extension/internal/svg.cpp:106
msgid "Inkscape native file format and W3C standard"
msgstr ""
-#: ../src/extension/internal/svg.cpp:103
+#: ../src/extension/internal/svg.cpp:114
msgid "SVG Output Inkscape"
msgstr ""
-#: ../src/extension/internal/svg.cpp:108
+#: ../src/extension/internal/svg.cpp:119
msgid "Inkscape SVG (*.svg)"
msgstr ""
-#: ../src/extension/internal/svg.cpp:109
+#: ../src/extension/internal/svg.cpp:120
msgid "SVG format with Inkscape extensions"
msgstr ""
-#: ../src/extension/internal/svg.cpp:117
+#: ../src/extension/internal/svg.cpp:128
msgid "SVG Output"
msgstr ""
-#: ../src/extension/internal/svg.cpp:122
+#: ../src/extension/internal/svg.cpp:133
msgid "Plain SVG (*.svg)"
msgstr ""
-#: ../src/extension/internal/svg.cpp:123
+#: ../src/extension/internal/svg.cpp:134
msgid "Scalable Vector Graphics format as defined by the W3C"
msgstr ""
@@ -8760,33 +8764,33 @@ msgstr ""
msgid "Microsoft Visio 2013 drawing (*.vsdx)"
msgstr ""
-#: ../src/extension/internal/wmf-inout.cpp:3112
+#: ../src/extension/internal/wmf-inout.cpp:3049
msgid "WMF Input"
msgstr ""
-#: ../src/extension/internal/wmf-inout.cpp:3117
+#: ../src/extension/internal/wmf-inout.cpp:3054
msgid "Windows Metafiles (*.wmf)"
msgstr ""
-#: ../src/extension/internal/wmf-inout.cpp:3118
+#: ../src/extension/internal/wmf-inout.cpp:3055
msgid "Windows Metafiles"
msgstr ""
-#: ../src/extension/internal/wmf-inout.cpp:3126
+#: ../src/extension/internal/wmf-inout.cpp:3063
msgid "WMF Output"
msgstr ""
-#: ../src/extension/internal/wmf-inout.cpp:3136
+#: ../src/extension/internal/wmf-inout.cpp:3073
msgid "Map all fill patterns to standard WMF hatches"
msgstr ""
-#: ../src/extension/internal/wmf-inout.cpp:3140
+#: ../src/extension/internal/wmf-inout.cpp:3077
#: ../share/extensions/wmf_input.inx.h:2
#: ../share/extensions/wmf_output.inx.h:2
msgid "Windows Metafile (*.wmf)"
msgstr ""
-#: ../src/extension/internal/wmf-inout.cpp:3141
+#: ../src/extension/internal/wmf-inout.cpp:3078
msgid "Windows Metafile"
msgstr ""
@@ -8890,7 +8894,7 @@ msgid "Document saved."
msgstr ""
#. We are saving for the first time; create a unique default filename
-#: ../src/file.cpp:858
+#: ../src/file.cpp:858 ../src/file.cpp:1406
msgid "drawing"
msgstr ""
@@ -8923,16 +8927,11 @@ msgstr ""
msgid "Select file to import"
msgstr ""
-#: ../src/file.cpp:1410
-#, c-format
-msgid "drawing%s"
-msgstr ""
-
-#: ../src/file.cpp:1432
+#: ../src/file.cpp:1427
msgid "Select file to export to"
msgstr ""
-#: ../src/file.cpp:1685
+#: ../src/file.cpp:1680
msgid "Import Clip Art"
msgstr ""
@@ -9021,8 +9020,7 @@ msgstr ""
msgid "Difference"
msgstr ""
-#: ../src/filter-enums.cpp:64 ../src/live_effects/lpe-boolops.cpp:28
-#: ../src/splivarot.cpp:100
+#: ../src/filter-enums.cpp:64 ../src/splivarot.cpp:100
msgid "Exclusion"
msgstr ""
@@ -9056,7 +9054,7 @@ msgid "Luminance to Alpha"
msgstr ""
#. File
-#: ../src/filter-enums.cpp:84 ../src/verbs.cpp:2355
+#: ../src/filter-enums.cpp:84 ../src/verbs.cpp:2348
#: ../share/extensions/jessyInk_mouseHandler.inx.h:3
#: ../share/extensions/jessyInk_transitions.inx.h:7
msgid "Default"
@@ -9071,7 +9069,7 @@ msgstr ""
msgid "Copy"
msgstr ""
-#: ../src/filter-enums.cpp:94 ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1628
+#: ../src/filter-enums.cpp:94 ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1571
msgid "Destination"
msgstr ""
@@ -9195,39 +9193,39 @@ msgstr ""
msgid "Merge gradient handles"
msgstr ""
-#: ../src/gradient-drag.cpp:1103
+#: ../src/gradient-drag.cpp:1101
msgid "Move gradient handle"
msgstr ""
-#: ../src/gradient-drag.cpp:1162 ../src/widgets/gradient-vector.cpp:847
+#: ../src/gradient-drag.cpp:1160 ../src/widgets/gradient-vector.cpp:847
msgid "Delete gradient stop"
msgstr ""
-#: ../src/gradient-drag.cpp:1425
+#: ../src/gradient-drag.cpp:1423
#, c-format
msgid ""
"%s %d for: %s%s; drag with <b>Ctrl</b> to snap offset; click with <b>Ctrl"
"+Alt</b> to delete stop"
msgstr ""
-#: ../src/gradient-drag.cpp:1429 ../src/gradient-drag.cpp:1436
+#: ../src/gradient-drag.cpp:1427 ../src/gradient-drag.cpp:1434
msgid " (stroke)"
msgstr ""
-#: ../src/gradient-drag.cpp:1433
+#: ../src/gradient-drag.cpp:1431
#, c-format
msgid ""
"%s for: %s%s; drag with <b>Ctrl</b> to snap angle, with <b>Ctrl+Alt</b> to "
"preserve angle, with <b>Ctrl+Shift</b> to scale around center"
msgstr ""
-#: ../src/gradient-drag.cpp:1441
+#: ../src/gradient-drag.cpp:1439
msgid ""
"Radial gradient <b>center</b> and <b>focus</b>; drag with <b>Shift</b> to "
"separate focus"
msgstr ""
-#: ../src/gradient-drag.cpp:1444
+#: ../src/gradient-drag.cpp:1442
#, c-format
msgid ""
"Gradient point shared by <b>%d</b> gradient; drag with <b>Shift</b> to "
@@ -9238,124 +9236,124 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: ../src/gradient-drag.cpp:2372
+#: ../src/gradient-drag.cpp:2374
msgid "Move gradient handle(s)"
msgstr ""
-#: ../src/gradient-drag.cpp:2408
+#: ../src/gradient-drag.cpp:2410
msgid "Move gradient mid stop(s)"
msgstr ""
-#: ../src/gradient-drag.cpp:2697
+#: ../src/gradient-drag.cpp:2699
msgid "Delete gradient stop(s)"
msgstr ""
-#: ../src/inkscape.cpp:341
+#: ../src/inkscape.cpp:344
msgid "Autosave failed! Cannot create directory %1."
msgstr ""
-#: ../src/inkscape.cpp:350
+#: ../src/inkscape.cpp:353
msgid "Autosave failed! Cannot open directory %1."
msgstr ""
-#: ../src/inkscape.cpp:366
+#: ../src/inkscape.cpp:369
msgid "Autosaving documents..."
msgstr ""
-#: ../src/inkscape.cpp:439
+#: ../src/inkscape.cpp:442
msgid "Autosave failed! Could not find inkscape extension to save document."
msgstr ""
-#: ../src/inkscape.cpp:442 ../src/inkscape.cpp:449
+#: ../src/inkscape.cpp:445 ../src/inkscape.cpp:452
#, c-format
msgid "Autosave failed! File %s could not be saved."
msgstr ""
-#: ../src/inkscape.cpp:464
+#: ../src/inkscape.cpp:467
msgid "Autosave complete."
msgstr ""
-#: ../src/inkscape.cpp:712
+#: ../src/inkscape.cpp:715
msgid "Untitled document"
msgstr ""
#. Show nice dialog box
-#: ../src/inkscape.cpp:744
+#: ../src/inkscape.cpp:747
msgid "Inkscape encountered an internal error and will close now.\n"
msgstr ""
-#: ../src/inkscape.cpp:745
+#: ../src/inkscape.cpp:748
msgid ""
"Automatic backups of unsaved documents were done to the following "
"locations:\n"
msgstr ""
-#: ../src/inkscape.cpp:746
+#: ../src/inkscape.cpp:749
msgid "Automatic backup of the following documents failed:\n"
msgstr ""
-#: ../src/interface.cpp:751
+#: ../src/interface.cpp:748
msgctxt "Interface setup"
msgid "Default"
msgstr ""
-#: ../src/interface.cpp:751
+#: ../src/interface.cpp:748
msgid "Default interface setup"
msgstr ""
-#: ../src/interface.cpp:752
+#: ../src/interface.cpp:749
msgctxt "Interface setup"
msgid "Custom"
msgstr ""
-#: ../src/interface.cpp:752
+#: ../src/interface.cpp:749
msgid "Setup for custom task"
msgstr ""
-#: ../src/interface.cpp:753
+#: ../src/interface.cpp:750
msgctxt "Interface setup"
msgid "Wide"
msgstr ""
-#: ../src/interface.cpp:753
+#: ../src/interface.cpp:750
msgid "Setup for widescreen work"
msgstr ""
-#: ../src/interface.cpp:865
+#: ../src/interface.cpp:862
#, c-format
msgid "Verb \"%s\" Unknown"
msgstr ""
-#: ../src/interface.cpp:904
+#: ../src/interface.cpp:901
msgid "Open _Recent"
msgstr ""
-#: ../src/interface.cpp:1012 ../src/interface.cpp:1098
-#: ../src/interface.cpp:1201 ../src/ui/widget/selected-style.cpp:528
+#: ../src/interface.cpp:1009 ../src/interface.cpp:1095
+#: ../src/interface.cpp:1198 ../src/ui/widget/selected-style.cpp:528
msgid "Drop color"
msgstr ""
-#: ../src/interface.cpp:1051 ../src/interface.cpp:1161
+#: ../src/interface.cpp:1048 ../src/interface.cpp:1158
msgid "Drop color on gradient"
msgstr ""
-#: ../src/interface.cpp:1214
+#: ../src/interface.cpp:1211
msgid "Could not parse SVG data"
msgstr ""
-#: ../src/interface.cpp:1253
+#: ../src/interface.cpp:1250
msgid "Drop SVG"
msgstr ""
-#: ../src/interface.cpp:1266
+#: ../src/interface.cpp:1263
msgid "Drop Symbol"
msgstr ""
-#: ../src/interface.cpp:1297
+#: ../src/interface.cpp:1294
msgid "Drop bitmap image"
msgstr ""
-#: ../src/interface.cpp:1389
+#: ../src/interface.cpp:1386
#, c-format
msgid ""
"<span weight=\"bold\" size=\"larger\">A file named \"%s\" already exists. Do "
@@ -9364,196 +9362,196 @@ msgid ""
"The file already exists in \"%s\". Replacing it will overwrite its contents."
msgstr ""
-#: ../src/interface.cpp:1395 ../src/ui/dialog/export.cpp:1298
+#: ../src/interface.cpp:1392 ../src/ui/dialog/export.cpp:1302
#: ../src/widgets/desktop-widget.cpp:1122
#: ../src/widgets/desktop-widget.cpp:1184
msgid "_Cancel"
msgstr ""
-#: ../src/interface.cpp:1396 ../share/extensions/web-set-att.inx.h:21
+#: ../src/interface.cpp:1393 ../share/extensions/web-set-att.inx.h:21
#: ../share/extensions/web-transmit-att.inx.h:19
msgid "Replace"
msgstr ""
-#: ../src/interface.cpp:1467
+#: ../src/interface.cpp:1464
msgid "Go to parent"
msgstr ""
#. TRANSLATORS: #%1 is the id of the group e.g. <g id="#g7">, not a number.
-#: ../src/interface.cpp:1508
+#: ../src/interface.cpp:1505
msgid "Enter group #%1"
msgstr ""
#. Item dialog
-#: ../src/interface.cpp:1644 ../src/verbs.cpp:2853
+#: ../src/interface.cpp:1641 ../src/verbs.cpp:2846
msgid "_Object Properties..."
msgstr ""
-#: ../src/interface.cpp:1653
+#: ../src/interface.cpp:1650
msgid "_Select This"
msgstr ""
-#: ../src/interface.cpp:1664
+#: ../src/interface.cpp:1661
msgid "Select Same"
msgstr ""
#. Select same fill and stroke
-#: ../src/interface.cpp:1674
+#: ../src/interface.cpp:1671
msgid "Fill and Stroke"
msgstr ""
#. Select same fill color
-#: ../src/interface.cpp:1681
+#: ../src/interface.cpp:1678
msgid "Fill Color"
msgstr ""
#. Select same stroke color
-#: ../src/interface.cpp:1688
+#: ../src/interface.cpp:1685
msgid "Stroke Color"
msgstr ""
#. Select same stroke style
-#: ../src/interface.cpp:1695
+#: ../src/interface.cpp:1692
msgid "Stroke Style"
msgstr ""
#. Select same stroke style
-#: ../src/interface.cpp:1702
+#: ../src/interface.cpp:1699
msgid "Object type"
msgstr ""
#. Move to layer
-#: ../src/interface.cpp:1709
+#: ../src/interface.cpp:1706
msgid "_Move to layer ..."
msgstr ""
#. Create link
-#: ../src/interface.cpp:1719
+#: ../src/interface.cpp:1716
msgid "Create _Link"
msgstr ""
#. Set mask
-#: ../src/interface.cpp:1742
+#: ../src/interface.cpp:1739
msgid "Set Mask"
msgstr ""
#. Release mask
-#: ../src/interface.cpp:1753
+#: ../src/interface.cpp:1750
msgid "Release Mask"
msgstr ""
#. Set Clip
-#: ../src/interface.cpp:1764
+#: ../src/interface.cpp:1761
msgid "Set Cl_ip"
msgstr ""
#. Release Clip
-#: ../src/interface.cpp:1775
+#: ../src/interface.cpp:1772
msgid "Release C_lip"
msgstr ""
#. Group
-#: ../src/interface.cpp:1786 ../src/verbs.cpp:2490
+#: ../src/interface.cpp:1783 ../src/verbs.cpp:2483
msgid "_Group"
msgstr ""
-#: ../src/interface.cpp:1857
+#: ../src/interface.cpp:1854
msgid "Create link"
msgstr ""
#. Ungroup
-#: ../src/interface.cpp:1888 ../src/verbs.cpp:2492
+#: ../src/interface.cpp:1885 ../src/verbs.cpp:2485
msgid "_Ungroup"
msgstr ""
#. Link dialog
-#: ../src/interface.cpp:1913
+#: ../src/interface.cpp:1910
msgid "Link _Properties..."
msgstr ""
#. Select item
-#: ../src/interface.cpp:1919
+#: ../src/interface.cpp:1916
msgid "_Follow Link"
msgstr ""
#. Reset transformations
-#: ../src/interface.cpp:1925
+#: ../src/interface.cpp:1922
msgid "_Remove Link"
msgstr ""
-#: ../src/interface.cpp:1956
+#: ../src/interface.cpp:1953
msgid "Remove link"
msgstr ""
#. Image properties
-#: ../src/interface.cpp:1967
+#: ../src/interface.cpp:1964
msgid "Image _Properties..."
msgstr ""
#. Edit externally
-#: ../src/interface.cpp:1973
+#: ../src/interface.cpp:1970
msgid "Edit Externally..."
msgstr ""
#. Trace Bitmap
#. TRANSLATORS: "to trace" means "to convert a bitmap to vector graphics" (to vectorize)
-#: ../src/interface.cpp:1982 ../src/verbs.cpp:2553
+#: ../src/interface.cpp:1979 ../src/verbs.cpp:2546
msgid "_Trace Bitmap..."
msgstr ""
#. Trace Pixel Art
-#: ../src/interface.cpp:1991
+#: ../src/interface.cpp:1988
msgid "Trace Pixel Art"
msgstr ""
-#: ../src/interface.cpp:2001
+#: ../src/interface.cpp:1998
msgctxt "Context menu"
msgid "Embed Image"
msgstr ""
-#: ../src/interface.cpp:2012
+#: ../src/interface.cpp:2009
msgctxt "Context menu"
msgid "Extract Image..."
msgstr ""
#. Item dialog
#. Fill and Stroke dialog
-#: ../src/interface.cpp:2157 ../src/interface.cpp:2177 ../src/verbs.cpp:2816
+#: ../src/interface.cpp:2154 ../src/interface.cpp:2174 ../src/verbs.cpp:2809
msgid "_Fill and Stroke..."
msgstr ""
#. Edit Text dialog
-#: ../src/interface.cpp:2183 ../src/verbs.cpp:2835
+#: ../src/interface.cpp:2180 ../src/verbs.cpp:2828
msgid "_Text and Font..."
msgstr ""
#. Spellcheck dialog
-#: ../src/interface.cpp:2189 ../src/verbs.cpp:2843
+#: ../src/interface.cpp:2186 ../src/verbs.cpp:2836
msgid "Check Spellin_g..."
msgstr ""
-#: ../src/knot.cpp:443
+#: ../src/knot.cpp:329
msgid "Node or handle drag canceled."
msgstr ""
-#: ../src/knotholder.cpp:160
+#: ../src/knotholder.cpp:158
msgid "Change handle"
msgstr ""
-#: ../src/knotholder.cpp:239
+#: ../src/knotholder.cpp:237
msgid "Move handle"
msgstr ""
#. TRANSLATORS: This refers to the pattern that's inside the object
-#: ../src/knotholder.cpp:260
+#: ../src/knotholder.cpp:258
msgid "<b>Move</b> the pattern fill inside the object"
msgstr ""
-#: ../src/knotholder.cpp:264
+#: ../src/knotholder.cpp:262
msgid "<b>Scale</b> the pattern fill; uniformly if with <b>Ctrl</b>"
msgstr ""
-#: ../src/knotholder.cpp:268
+#: ../src/knotholder.cpp:266
msgid "<b>Rotate</b> the pattern fill; with <b>Ctrl</b> to snap angle"
msgstr ""
@@ -9573,55 +9571,26 @@ msgstr ""
msgid "Dockbar style to show items on it"
msgstr ""
-#: ../src/libgdl/gdl-dock.c:176 ../src/ui/dialog/inkscape-preferences.cpp:631
-#: ../src/ui/dialog/inkscape-preferences.cpp:674
-msgid "Floating"
-msgstr ""
-
-#: ../src/libgdl/gdl-dock.c:177
-msgid "Whether the dock is floating in its own window"
-msgstr ""
-
-#: ../src/libgdl/gdl-dock.c:184 ../src/libgdl/gdl-dock-master.c:141
-msgid "Default title"
-msgstr ""
-
-#: ../src/libgdl/gdl-dock.c:185
-msgid "Default title for the newly created floating docks"
-msgstr ""
-
-#: ../src/libgdl/gdl-dock.c:192
-msgid "Width for the dock when it's of floating type"
-msgstr ""
-
-#: ../src/libgdl/gdl-dock.c:200
-msgid "Height for the dock when it's of floating type"
-msgstr ""
-
-#: ../src/libgdl/gdl-dock.c:207
-msgid "Float X"
-msgstr ""
-
-#: ../src/libgdl/gdl-dock.c:208
-msgid "X coordinate for a floating dock"
+#: ../src/libgdl/gdl-dock-item-grip.c:399
+msgid "Iconify this dock"
msgstr ""
-#: ../src/libgdl/gdl-dock.c:215
-msgid "Float Y"
+#: ../src/libgdl/gdl-dock-item-grip.c:401
+msgid "Close this dock"
msgstr ""
-#: ../src/libgdl/gdl-dock.c:216
-msgid "Y coordinate for a floating dock"
+#: ../src/libgdl/gdl-dock-item-grip.c:720
+#: ../src/libgdl/gdl-dock-tablabel.c:125
+msgid "Controlling dock item"
msgstr ""
-#: ../src/libgdl/gdl-dock.c:478
-#, c-format
-msgid "Dock #%d"
+#: ../src/libgdl/gdl-dock-item-grip.c:721
+msgid "Dockitem which 'owns' this grip"
msgstr ""
#. Name
#: ../src/libgdl/gdl-dock-item.c:298 ../src/widgets/ruler.cpp:191
-#: ../src/widgets/text-toolbar.cpp:1408
+#: ../src/widgets/text-toolbar.cpp:1414
#: ../share/extensions/gcodetools_graffiti.inx.h:9
#: ../share/extensions/gcodetools_orientation_points.inx.h:2
msgid "Orientation"
@@ -9713,21 +9682,8 @@ msgstr ""
msgid "Attempt to bind an unbound item %p"
msgstr ""
-#: ../src/libgdl/gdl-dock-item-grip.c:399
-msgid "Iconify this dock"
-msgstr ""
-
-#: ../src/libgdl/gdl-dock-item-grip.c:401
-msgid "Close this dock"
-msgstr ""
-
-#: ../src/libgdl/gdl-dock-item-grip.c:721
-#: ../src/libgdl/gdl-dock-tablabel.c:125
-msgid "Controlling dock item"
-msgstr ""
-
-#: ../src/libgdl/gdl-dock-item-grip.c:722
-msgid "Dockitem which 'owns' this grip"
+#: ../src/libgdl/gdl-dock-master.c:141 ../src/libgdl/gdl-dock.c:184
+msgid "Default title"
msgstr ""
#: ../src/libgdl/gdl-dock-master.c:142
@@ -9764,8 +9720,8 @@ msgstr ""
#: ../src/libgdl/gdl-dock-notebook.c:132
#: ../src/ui/dialog/align-and-distribute.cpp:1003
-#: ../src/ui/dialog/document-properties.cpp:150
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1551
+#: ../src/ui/dialog/document-properties.cpp:152
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1497
#: ../src/widgets/desktop-widget.cpp:1989
#: ../share/extensions/voronoi2svg.inx.h:9
msgid "Page"
@@ -9776,7 +9732,7 @@ msgid "The index of the current page"
msgstr ""
#: ../src/libgdl/gdl-dock-object.c:125
-#: ../src/ui/dialog/inkscape-preferences.cpp:1495
+#: ../src/ui/dialog/inkscape-preferences.cpp:1500
#: ../src/ui/widget/page-sizer.cpp:258
#: ../src/widgets/gradient-selector.cpp:158
#: ../src/widgets/sp-xmlview-attr-list.cpp:54
@@ -9932,7 +9888,49 @@ msgstr ""
msgid "Dockitem which 'owns' this tablabel"
msgstr ""
-#: ../src/libnrtype/FontFactory.cpp:964
+#: ../src/libgdl/gdl-dock.c:176 ../src/ui/dialog/inkscape-preferences.cpp:631
+#: ../src/ui/dialog/inkscape-preferences.cpp:674
+msgid "Floating"
+msgstr ""
+
+#: ../src/libgdl/gdl-dock.c:177
+msgid "Whether the dock is floating in its own window"
+msgstr ""
+
+#: ../src/libgdl/gdl-dock.c:185
+msgid "Default title for the newly created floating docks"
+msgstr ""
+
+#: ../src/libgdl/gdl-dock.c:192
+msgid "Width for the dock when it's of floating type"
+msgstr ""
+
+#: ../src/libgdl/gdl-dock.c:200
+msgid "Height for the dock when it's of floating type"
+msgstr ""
+
+#: ../src/libgdl/gdl-dock.c:207
+msgid "Float X"
+msgstr ""
+
+#: ../src/libgdl/gdl-dock.c:208
+msgid "X coordinate for a floating dock"
+msgstr ""
+
+#: ../src/libgdl/gdl-dock.c:215
+msgid "Float Y"
+msgstr ""
+
+#: ../src/libgdl/gdl-dock.c:216
+msgid "Y coordinate for a floating dock"
+msgstr ""
+
+#: ../src/libgdl/gdl-dock.c:476
+#, c-format
+msgid "Dock #%d"
+msgstr ""
+
+#: ../src/libnrtype/FontFactory.cpp:966
msgid "Ignoring font without family that will crash Pango"
msgstr ""
@@ -10069,7 +10067,7 @@ msgstr ""
msgid "Power stroke"
msgstr ""
-#: ../src/live_effects/effect.cpp:124 ../src/selection-chemistry.cpp:2843
+#: ../src/live_effects/effect.cpp:124 ../src/selection-chemistry.cpp:2835
msgid "Clone original path"
msgstr ""
@@ -10101,40 +10099,6 @@ msgstr ""
msgid "None of the applied path effect's parameters can be edited on-canvas."
msgstr ""
-#: ../src/live_effects/lpe-angle_bisector.cpp:45
-#: ../src/live_effects/lpe-parallel.cpp:51
-#: ../src/live_effects/lpe-perp_bisector.cpp:97
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:63
-msgid "Length left:"
-msgstr ""
-
-#: ../src/live_effects/lpe-angle_bisector.cpp:45
-#: ../src/live_effects/lpe-perp_bisector.cpp:97
-msgid "Specifies the left end of the bisector"
-msgstr ""
-
-#: ../src/live_effects/lpe-angle_bisector.cpp:46
-#: ../src/live_effects/lpe-parallel.cpp:52
-#: ../src/live_effects/lpe-perp_bisector.cpp:98
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:64
-msgid "Length right:"
-msgstr ""
-
-#: ../src/live_effects/lpe-angle_bisector.cpp:46
-#: ../src/live_effects/lpe-perp_bisector.cpp:98
-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
-#: ../src/live_effects/lpe-perp_bisector.cpp:165
-msgid "Adjust the \"right\" end of the bisector"
-msgstr ""
-
#: ../src/live_effects/lpe-bendpath.cpp:53
msgid "Bend path:"
msgstr ""
@@ -10145,7 +10109,7 @@ msgstr ""
#: ../src/live_effects/lpe-bendpath.cpp:54
#: ../src/live_effects/lpe-patternalongpath.cpp:62
-#: ../src/ui/dialog/export.cpp:288 ../src/ui/dialog/transformation.cpp:80
+#: ../src/ui/dialog/export.cpp:290 ../src/ui/dialog/transformation.cpp:80
#: ../src/ui/widget/page-sizer.cpp:236
msgid "_Width:"
msgstr ""
@@ -10170,51 +10134,6 @@ msgstr ""
msgid "Rotates the original 90 degrees, before bending it along the bend path"
msgstr ""
-#: ../src/live_effects/lpe-boolops.cpp:22
-msgid "Null"
-msgstr ""
-
-#: ../src/live_effects/lpe-boolops.cpp:23
-msgid "Intersect"
-msgstr ""
-
-#: ../src/live_effects/lpe-boolops.cpp:24
-msgid "Subtract A-B"
-msgstr ""
-
-#: ../src/live_effects/lpe-boolops.cpp:25
-msgid "Identity A"
-msgstr ""
-
-#: ../src/live_effects/lpe-boolops.cpp:26
-msgid "Subtract B-A"
-msgstr ""
-
-#: ../src/live_effects/lpe-boolops.cpp:27
-msgid "Identity B"
-msgstr ""
-
-#: ../src/live_effects/lpe-boolops.cpp:29 ../src/splivarot.cpp:70
-#: ../src/splivarot.cpp:76
-msgid "Union"
-msgstr ""
-
-#: ../src/live_effects/lpe-boolops.cpp:35
-msgid "2nd path:"
-msgstr ""
-
-#: ../src/live_effects/lpe-boolops.cpp:35
-msgid "Path to which the original path will be boolop'ed."
-msgstr ""
-
-#: ../src/live_effects/lpe-boolops.cpp:36
-msgid "Boolop type:"
-msgstr ""
-
-#: ../src/live_effects/lpe-boolops.cpp:36
-msgid "Determines which kind of boolop will be performed."
-msgstr ""
-
#: ../src/live_effects/lpe-clone-original.cpp:18
msgid "Linked path:"
msgstr ""
@@ -10239,46 +10158,6 @@ msgstr ""
msgid "The size of the grid in Y direction."
msgstr ""
-#: ../src/live_effects/lpe-copy_rotate.cpp:51
-msgid "Starting:"
-msgstr ""
-
-#: ../src/live_effects/lpe-copy_rotate.cpp:51
-msgid "Angle of the first copy"
-msgstr ""
-
-#: ../src/live_effects/lpe-copy_rotate.cpp:52
-msgid "Rotation angle:"
-msgstr ""
-
-#: ../src/live_effects/lpe-copy_rotate.cpp:52
-msgid "Angle between two successive copies"
-msgstr ""
-
-#: ../src/live_effects/lpe-copy_rotate.cpp:53
-msgid "Number of copies:"
-msgstr ""
-
-#: ../src/live_effects/lpe-copy_rotate.cpp:53
-msgid "Number of copies of the original path"
-msgstr ""
-
-#: ../src/live_effects/lpe-copy_rotate.cpp:54
-msgid "Origin"
-msgstr ""
-
-#: ../src/live_effects/lpe-copy_rotate.cpp:54
-msgid "Origin of the rotation"
-msgstr ""
-
-#: ../src/live_effects/lpe-copy_rotate.cpp:135
-msgid "Adjust the starting angle"
-msgstr ""
-
-#: ../src/live_effects/lpe-copy_rotate.cpp:141
-msgid "Adjust the rotation angle"
-msgstr ""
-
#: ../src/live_effects/lpe-curvestitch.cpp:41
msgid "Stitch path:"
msgstr ""
@@ -10351,115 +10230,6 @@ msgstr ""
msgid "Scale the width of the stitch path relative to its length"
msgstr ""
-#: ../src/live_effects/lpe-dynastroke.cpp:35
-msgid "Elliptic Pen"
-msgstr ""
-
-#: ../src/live_effects/lpe-dynastroke.cpp:36
-msgid "Thick-Thin strokes (fast)"
-msgstr ""
-
-#: ../src/live_effects/lpe-dynastroke.cpp:37
-msgid "Thick-Thin strokes (slow)"
-msgstr ""
-
-#: ../src/live_effects/lpe-dynastroke.cpp:42
-msgid "Sharp"
-msgstr ""
-
-#: ../src/live_effects/lpe-dynastroke.cpp:43
-#: ../src/live_effects/lpe-powerstroke.cpp:205
-#: ../share/extensions/gcodetools_prepare_path_for_plasma.inx.h:13
-msgid "Round"
-msgstr ""
-
-#. initialise your parameters here:
-#: ../src/live_effects/lpe-dynastroke.cpp:50
-msgid "Method:"
-msgstr ""
-
-#: ../src/live_effects/lpe-dynastroke.cpp:50
-msgid "Choose pen type"
-msgstr ""
-
-#: ../src/live_effects/lpe-dynastroke.cpp:51
-msgid "Pen width:"
-msgstr ""
-
-#: ../src/live_effects/lpe-dynastroke.cpp:51
-msgid "Maximal stroke width"
-msgstr ""
-
-#: ../src/live_effects/lpe-dynastroke.cpp:52
-msgid "Pen roundness:"
-msgstr ""
-
-#: ../src/live_effects/lpe-dynastroke.cpp:52
-msgid "Min/Max width ratio"
-msgstr ""
-
-#: ../src/live_effects/lpe-dynastroke.cpp:53
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:61
-#: ../src/widgets/calligraphy-toolbar.cpp:463
-#: ../share/extensions/motion.inx.h:3 ../share/extensions/restack.inx.h:10
-msgid "Angle:"
-msgstr ""
-
-#: ../src/live_effects/lpe-dynastroke.cpp:53
-msgid "direction of thickest strokes (opposite = thinnest)"
-msgstr ""
-
-#. modulo_pi(_("modulo pi"), _("Give forward and backward moves in one direction the same thickness "), "modulo_pi", &wr, this, false),
-#: ../src/live_effects/lpe-dynastroke.cpp:55
-#: ../src/widgets/arc-toolbar.cpp:326
-msgid "Start:"
-msgstr ""
-
-#: ../src/live_effects/lpe-dynastroke.cpp:55
-msgid "Choose start capping type"
-msgstr ""
-
-#: ../src/live_effects/lpe-dynastroke.cpp:56
-#: ../src/widgets/arc-toolbar.cpp:339
-msgid "End:"
-msgstr ""
-
-#: ../src/live_effects/lpe-dynastroke.cpp:56
-msgid "Choose end capping type"
-msgstr ""
-
-#: ../src/live_effects/lpe-dynastroke.cpp:57
-msgid "Grow for:"
-msgstr ""
-
-#: ../src/live_effects/lpe-dynastroke.cpp:57
-msgid "Make the stroke thinner near it's start"
-msgstr ""
-
-#: ../src/live_effects/lpe-dynastroke.cpp:58
-msgid "Fade for:"
-msgstr ""
-
-#: ../src/live_effects/lpe-dynastroke.cpp:58
-msgid "Make the stroke thinner near it's end"
-msgstr ""
-
-#: ../src/live_effects/lpe-dynastroke.cpp:59
-msgid "Round ends"
-msgstr ""
-
-#: ../src/live_effects/lpe-dynastroke.cpp:59
-msgid "Strokes end with a round end"
-msgstr ""
-
-#: ../src/live_effects/lpe-dynastroke.cpp:60
-msgid "Capping:"
-msgstr ""
-
-#: ../src/live_effects/lpe-dynastroke.cpp:60
-msgid "left capping"
-msgstr ""
-
#: ../src/live_effects/lpe-envelope.cpp:31
msgid "Top bend path:"
msgstr ""
@@ -10619,236 +10389,6 @@ msgstr ""
msgid "Change knot crossing"
msgstr ""
-#. initialise your parameters here:
-#: ../src/live_effects/lpe-lattice.cpp:45
-msgid "Control handle 0:"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:45
-msgid "Control handle 0"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:46
-msgid "Control handle 1:"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:46
-msgid "Control handle 1"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:47
-msgid "Control handle 2:"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:47
-msgid "Control handle 2"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:48
-msgid "Control handle 3:"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:48
-msgid "Control handle 3"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:49
-msgid "Control handle 4:"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:49
-msgid "Control handle 4"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:50
-msgid "Control handle 5:"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:50
-msgid "Control handle 5"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:51
-msgid "Control handle 6:"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:51
-msgid "Control handle 6"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:52
-msgid "Control handle 7:"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:52
-msgid "Control handle 7"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:53
-msgid "Control handle 8:"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:53
-msgid "Control handle 8"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:54
-msgid "Control handle 9:"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:54
-msgid "Control handle 9"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:55
-msgid "Control handle 10:"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:55
-msgid "Control handle 10"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:56
-msgid "Control handle 11:"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:56
-msgid "Control handle 11"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:57
-msgid "Control handle 12:"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:57
-msgid "Control handle 12"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:58
-msgid "Control handle 13:"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:58
-msgid "Control handle 13"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:59
-msgid "Control handle 14:"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:59
-msgid "Control handle 14"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:60
-msgid "Control handle 15:"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:60
-msgid "Control handle 15"
-msgstr ""
-
-#: ../src/live_effects/lpe-line_segment.cpp:25
-#: ../src/widgets/lpe-toolbar.cpp:233
-msgid "Closed"
-msgstr ""
-
-#: ../src/live_effects/lpe-line_segment.cpp:26
-#: ../src/widgets/lpe-toolbar.cpp:235
-msgid "Open start"
-msgstr ""
-
-#: ../src/live_effects/lpe-line_segment.cpp:27
-#: ../src/widgets/lpe-toolbar.cpp:237
-msgid "Open end"
-msgstr ""
-
-#: ../src/live_effects/lpe-line_segment.cpp:28
-#: ../src/widgets/lpe-toolbar.cpp:239
-msgid "Open both"
-msgstr ""
-
-#: ../src/live_effects/lpe-line_segment.cpp:34
-msgid "End type:"
-msgstr ""
-
-#: ../src/live_effects/lpe-line_segment.cpp:34
-msgid "Determines on which side the line or line segment is infinite."
-msgstr ""
-
-#: ../src/live_effects/lpe-mirror_symmetry.cpp:32
-msgid "Discard original path?"
-msgstr ""
-
-#: ../src/live_effects/lpe-mirror_symmetry.cpp:32
-msgid "Check this to only keep the mirrored part of the path"
-msgstr ""
-
-#: ../src/live_effects/lpe-mirror_symmetry.cpp:33
-msgid "Reflection line:"
-msgstr ""
-
-#: ../src/live_effects/lpe-mirror_symmetry.cpp:33
-msgid "Line which serves as 'mirror' for the reflection"
-msgstr ""
-
-#: ../src/live_effects/lpe-offset.cpp:31
-msgid "Handle to control the distance of the offset from the curve"
-msgstr ""
-
-#: ../src/live_effects/lpe-parallel.cpp:50
-msgid "Adjust the offset"
-msgstr ""
-
-#: ../src/live_effects/lpe-parallel.cpp:51
-msgid "Specifies the left end of the parallel"
-msgstr ""
-
-#: ../src/live_effects/lpe-parallel.cpp:52
-msgid "Specifies the right end of the parallel"
-msgstr ""
-
-#: ../src/live_effects/lpe-parallel.cpp:102
-msgid "Adjust the \"left\" end of the parallel"
-msgstr ""
-
-#: ../src/live_effects/lpe-parallel.cpp:108
-msgid "Adjust the \"right\" end of the parallel"
-msgstr ""
-
-#: ../src/live_effects/lpe-path_length.cpp:26
-#: ../src/live_effects/lpe-sketch.cpp:58
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2878
-#: ../share/extensions/render_alphabetsoup.inx.h:3
-msgid "Scale:"
-msgstr ""
-
-#: ../src/live_effects/lpe-path_length.cpp:26
-msgid "Scaling factor"
-msgstr ""
-
-#: ../src/live_effects/lpe-path_length.cpp:28
-#: ../src/live_effects/lpe-ruler.cpp:42
-#: ../share/extensions/foldablebox.inx.h:7
-#: ../share/extensions/interp_att_g.inx.h:9
-#: ../share/extensions/layout_nup.inx.h:3
-#: ../share/extensions/printing_marks.inx.h:11
-msgid "Unit:"
-msgstr ""
-
-#: ../src/live_effects/lpe-path_length.cpp:28
-#: ../src/live_effects/lpe-ruler.cpp:42 ../src/widgets/ruler.cpp:201
-msgid "Unit"
-msgstr ""
-
-#: ../src/live_effects/lpe-path_length.cpp:29
-msgid "Display unit"
-msgstr ""
-
-#: ../src/live_effects/lpe-path_length.cpp:29
-msgid "Print unit after path length"
-msgstr ""
-
#: ../src/live_effects/lpe-patternalongpath.cpp:50
#: ../share/extensions/pathalongpath.inx.h:10
msgid "Single"
@@ -10942,53 +10482,6 @@ msgstr ""
msgid "Fuse ends closer than this number. 0 means don't fuse."
msgstr ""
-#. initialise your parameters here:
-#: ../src/live_effects/lpe-perspective_path.cpp:47
-msgid "Scale x"
-msgstr ""
-
-#: ../src/live_effects/lpe-perspective_path.cpp:47
-msgid "Scale factor in x direction"
-msgstr ""
-
-#: ../src/live_effects/lpe-perspective_path.cpp:48
-msgid "Scale y"
-msgstr ""
-
-#: ../src/live_effects/lpe-perspective_path.cpp:48
-msgid "Scale factor in y direction"
-msgstr ""
-
-#: ../src/live_effects/lpe-perspective_path.cpp:49
-msgid "Offset x"
-msgstr ""
-
-#: ../src/live_effects/lpe-perspective_path.cpp:49
-msgid "Offset in x direction"
-msgstr ""
-
-#: ../src/live_effects/lpe-perspective_path.cpp:50
-msgid "Offset y"
-msgstr ""
-
-#: ../src/live_effects/lpe-perspective_path.cpp:50
-msgid "Offset in y direction"
-msgstr ""
-
-#: ../src/live_effects/lpe-perspective_path.cpp:51
-msgid "Uses XY plane?"
-msgstr ""
-
-#: ../src/live_effects/lpe-perspective_path.cpp:51
-msgid ""
-"If true, put the path on the left side of an imaginary box, otherwise on the "
-"right side"
-msgstr ""
-
-#: ../src/live_effects/lpe-perspective_path.cpp:145
-msgid "Adjust the origin"
-msgstr ""
-
#: ../src/live_effects/lpe-powerstroke.cpp:189
msgid "CubicBezierFit"
msgstr ""
@@ -11009,6 +10502,11 @@ msgstr ""
msgid "Square"
msgstr ""
+#: ../src/live_effects/lpe-powerstroke.cpp:205
+#: ../share/extensions/gcodetools_prepare_path_for_plasma.inx.h:13
+msgid "Round"
+msgstr ""
+
#: ../src/live_effects/lpe-powerstroke.cpp:206
msgid "Peak"
msgstr ""
@@ -11035,7 +10533,7 @@ msgid "Miter"
msgstr ""
#: ../src/live_effects/lpe-powerstroke.cpp:224
-#: ../src/widgets/pencil-toolbar.cpp:111
+#: ../src/widgets/pencil-toolbar.cpp:103
msgid "Spiro"
msgstr ""
@@ -11088,7 +10586,7 @@ msgstr ""
#. TRANSLATORS: The line join style specifies the shape to be used at the
#. corners of paths. It can be "miter", "round" or "bevel".
#: ../src/live_effects/lpe-powerstroke.cpp:238
-#: ../src/widgets/stroke-style.cpp:226
+#: ../src/widgets/stroke-style.cpp:227
msgid "Join:"
msgstr ""
@@ -11101,7 +10599,7 @@ msgid "Miter limit:"
msgstr ""
#: ../src/live_effects/lpe-powerstroke.cpp:239
-#: ../src/widgets/stroke-style.cpp:277
+#: ../src/widgets/stroke-style.cpp:278
msgid "Maximum length of the miter (in units of stroke width)"
msgstr ""
@@ -11113,14 +10611,6 @@ msgstr ""
msgid "Determines the shape of the path's end"
msgstr ""
-#: ../src/live_effects/lpe-recursiveskeleton.cpp:30
-msgid "Iterations:"
-msgstr ""
-
-#: ../src/live_effects/lpe-recursiveskeleton.cpp:30
-msgid "recursivity"
-msgstr ""
-
#: ../src/live_effects/lpe-rough-hatches.cpp:225
msgid "Frequency randomness:"
msgstr ""
@@ -11325,6 +10815,18 @@ msgstr ""
msgid "Distance between successive ruler marks"
msgstr ""
+#: ../src/live_effects/lpe-ruler.cpp:42
+#: ../share/extensions/foldablebox.inx.h:7
+#: ../share/extensions/interp_att_g.inx.h:9
+#: ../share/extensions/layout_nup.inx.h:3
+#: ../share/extensions/printing_marks.inx.h:11
+msgid "Unit:"
+msgstr ""
+
+#: ../src/live_effects/lpe-ruler.cpp:42 ../src/widgets/ruler.cpp:201
+msgid "Unit"
+msgstr ""
+
#: ../src/live_effects/lpe-ruler.cpp:43
msgid "Ma_jor length:"
msgstr ""
@@ -11382,15 +10884,6 @@ msgid "Choose whether to draw marks at the beginning and end of the path"
msgstr ""
#. initialise your parameters here:
-#: ../src/live_effects/lpe-skeleton.cpp:37
-msgid "Float parameter"
-msgstr ""
-
-#: ../src/live_effects/lpe-skeleton.cpp:37
-msgid "just a real number like 1.4!"
-msgstr ""
-
-#. initialise your parameters here:
#. testpointA(_("Test Point A"), _("Test A"), "ptA", &wr, this, Geom::Point(100,100)),
#: ../src/live_effects/lpe-sketch.cpp:38
msgid "Strokes:"
@@ -11474,6 +10967,12 @@ msgstr ""
msgid "How many construction lines (tangents) to draw"
msgstr ""
+#: ../src/live_effects/lpe-sketch.cpp:58
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2878
+#: ../share/extensions/render_alphabetsoup.inx.h:3
+msgid "Scale:"
+msgstr ""
+
#: ../src/live_effects/lpe-sketch.cpp:59
msgid ""
"Scale factor relating curvature and length of construction lines (try "
@@ -11520,60 +11019,6 @@ msgstr ""
msgid "max curvature"
msgstr ""
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:61
-msgid "Additional angle between tangent and curve"
-msgstr ""
-
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:62
-msgid "Location along curve:"
-msgstr ""
-
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:62
-msgid ""
-"Location of the point of attachment along the curve (between 0.0 and number-"
-"of-segments)"
-msgstr ""
-
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:63
-msgid "Specifies the left end of the tangent"
-msgstr ""
-
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:64
-msgid "Specifies the right end of the tangent"
-msgstr ""
-
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:105
-msgid "Adjust the point of attachment of the tangent"
-msgstr ""
-
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:111
-msgid "Adjust the \"left\" end of the tangent"
-msgstr ""
-
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:117
-msgid "Adjust the \"right\" end of the tangent"
-msgstr ""
-
-#: ../src/live_effects/lpe-test-doEffect-stack.cpp:22
-msgid "Stack step:"
-msgstr ""
-
-#: ../src/live_effects/lpe-test-doEffect-stack.cpp:23
-msgid "Point param:"
-msgstr ""
-
-#: ../src/live_effects/lpe-test-doEffect-stack.cpp:24
-msgid "Path param:"
-msgstr ""
-
-#: ../src/live_effects/lpe-text_label.cpp:23
-msgid "Label:"
-msgstr ""
-
-#: ../src/live_effects/lpe-text_label.cpp:23
-msgid "Text label attached to the path"
-msgstr ""
-
#: ../src/live_effects/lpe-vonkoch.cpp:47
msgid "N_r of generations:"
msgstr ""
@@ -11799,7 +11244,7 @@ msgid "The ID of the object to export"
msgstr ""
#: ../src/main.cpp:366 ../src/main.cpp:479
-#: ../src/ui/dialog/inkscape-preferences.cpp:1498
+#: ../src/ui/dialog/inkscape-preferences.cpp:1503
msgid "ID"
msgstr ""
@@ -11971,7 +11416,7 @@ msgstr ""
msgid "Start Inkscape in interactive shell mode."
msgstr ""
-#: ../src/main.cpp:871 ../src/main.cpp:1270
+#: ../src/main.cpp:871 ../src/main.cpp:1282
msgid ""
"[OPTIONS...] [FILE...]\n"
"\n"
@@ -11989,11 +11434,11 @@ msgstr ""
#. " <verb verb-id=\"FileExportToOCAL\" />\n"
#. " <verb verb-id=\"DialogMetadata\" />\n"
-#: ../src/menus-skeleton.h:43 ../src/verbs.cpp:2638 ../src/verbs.cpp:2644
+#: ../src/menus-skeleton.h:43 ../src/verbs.cpp:2631 ../src/verbs.cpp:2637
msgid "_Edit"
msgstr ""
-#: ../src/menus-skeleton.h:53 ../src/verbs.cpp:2402
+#: ../src/menus-skeleton.h:53 ../src/verbs.cpp:2395
msgid "Paste Si_ze"
msgstr ""
@@ -12027,54 +11472,54 @@ msgstr ""
#. Better location in menu needs to be found
#. " <verb verb-id=\"ViewColorModePrintColorsPreview\" radio=\"yes\"/>\n"
#. " <verb verb-id=\"DialogPrintColorsPreview\" />\n"
-#: ../src/menus-skeleton.h:137
+#: ../src/menus-skeleton.h:136
msgid "Sh_ow/Hide"
msgstr ""
#. Not quite ready to be in the menus.
#. " <verb verb-id=\"FocusToggle\" />\n"
-#: ../src/menus-skeleton.h:157
+#: ../src/menus-skeleton.h:156
msgid "_Layer"
msgstr ""
-#: ../src/menus-skeleton.h:181
+#: ../src/menus-skeleton.h:180
msgid "_Object"
msgstr ""
-#: ../src/menus-skeleton.h:189
+#: ../src/menus-skeleton.h:188
msgid "Cli_p"
msgstr ""
-#: ../src/menus-skeleton.h:193
+#: ../src/menus-skeleton.h:192
msgid "Mas_k"
msgstr ""
-#: ../src/menus-skeleton.h:197
+#: ../src/menus-skeleton.h:196
msgid "Patter_n"
msgstr ""
-#: ../src/menus-skeleton.h:221
+#: ../src/menus-skeleton.h:220
msgid "_Path"
msgstr ""
-#: ../src/menus-skeleton.h:249 ../src/ui/dialog/find.cpp:77
+#: ../src/menus-skeleton.h:248 ../src/ui/dialog/find.cpp:77
#: ../src/ui/dialog/text-edit.cpp:72
msgid "_Text"
msgstr ""
-#: ../src/menus-skeleton.h:267
+#: ../src/menus-skeleton.h:266
msgid "Filter_s"
msgstr ""
-#: ../src/menus-skeleton.h:273
+#: ../src/menus-skeleton.h:272
msgid "Exte_nsions"
msgstr ""
-#: ../src/menus-skeleton.h:279
+#: ../src/menus-skeleton.h:278
msgid "_Help"
msgstr ""
-#: ../src/menus-skeleton.h:283
+#: ../src/menus-skeleton.h:282
msgid "Tutorials"
msgstr ""
@@ -12177,59 +11622,59 @@ msgstr ""
msgid "Combining paths..."
msgstr ""
-#: ../src/path-chemistry.cpp:175
+#: ../src/path-chemistry.cpp:170
msgid "Combine"
msgstr ""
-#: ../src/path-chemistry.cpp:182
+#: ../src/path-chemistry.cpp:177
msgid "<b>No path(s)</b> to combine in the selection."
msgstr ""
-#: ../src/path-chemistry.cpp:194
+#: ../src/path-chemistry.cpp:189
msgid "Select <b>path(s)</b> to break apart."
msgstr ""
-#: ../src/path-chemistry.cpp:198
+#: ../src/path-chemistry.cpp:193
msgid "Breaking apart paths..."
msgstr ""
-#: ../src/path-chemistry.cpp:289
+#: ../src/path-chemistry.cpp:284
msgid "Break apart"
msgstr ""
-#: ../src/path-chemistry.cpp:291
+#: ../src/path-chemistry.cpp:286
msgid "<b>No path(s)</b> to break apart in the selection."
msgstr ""
-#: ../src/path-chemistry.cpp:301
+#: ../src/path-chemistry.cpp:296
msgid "Select <b>object(s)</b> to convert to path."
msgstr ""
-#: ../src/path-chemistry.cpp:307
+#: ../src/path-chemistry.cpp:302
msgid "Converting objects to paths..."
msgstr ""
-#: ../src/path-chemistry.cpp:329
+#: ../src/path-chemistry.cpp:324
msgid "Object to path"
msgstr ""
-#: ../src/path-chemistry.cpp:331
+#: ../src/path-chemistry.cpp:326
msgid "<b>No objects</b> to convert to path in the selection."
msgstr ""
-#: ../src/path-chemistry.cpp:608
+#: ../src/path-chemistry.cpp:603
msgid "Select <b>path(s)</b> to reverse."
msgstr ""
-#: ../src/path-chemistry.cpp:617
+#: ../src/path-chemistry.cpp:612
msgid "Reversing paths..."
msgstr ""
-#: ../src/path-chemistry.cpp:652
+#: ../src/path-chemistry.cpp:647
msgid "Reverse path"
msgstr ""
-#: ../src/path-chemistry.cpp:654
+#: ../src/path-chemistry.cpp:649
msgid "<b>No paths</b> to reverse in the selection."
msgstr ""
@@ -12241,6 +11686,30 @@ msgstr ""
msgid "Toggle multiple vanishing points"
msgstr ""
+#: ../src/preferences-skeleton.h:101
+msgid "Dip pen"
+msgstr ""
+
+#: ../src/preferences-skeleton.h:102
+msgid "Marker"
+msgstr ""
+
+#: ../src/preferences-skeleton.h:103
+msgid "Brush"
+msgstr ""
+
+#: ../src/preferences-skeleton.h:104
+msgid "Wiggly"
+msgstr ""
+
+#: ../src/preferences-skeleton.h:105
+msgid "Splotchy"
+msgstr ""
+
+#: ../src/preferences-skeleton.h:106
+msgid "Tracing"
+msgstr ""
+
#: ../src/preferences.cpp:134
msgid ""
"Inkscape will run with default settings, and new settings will not be saved. "
@@ -12290,30 +11759,6 @@ msgstr ""
msgid "The file %s is not a valid Inkscape preferences file."
msgstr ""
-#: ../src/preferences-skeleton.h:101
-msgid "Dip pen"
-msgstr ""
-
-#: ../src/preferences-skeleton.h:102
-msgid "Marker"
-msgstr ""
-
-#: ../src/preferences-skeleton.h:103
-msgid "Brush"
-msgstr ""
-
-#: ../src/preferences-skeleton.h:104
-msgid "Wiggly"
-msgstr ""
-
-#: ../src/preferences-skeleton.h:105
-msgid "Splotchy"
-msgstr ""
-
-#: ../src/preferences-skeleton.h:106
-msgid "Tracing"
-msgstr ""
-
#: ../src/rdf.cpp:175
msgid "CC Attribution"
msgstr ""
@@ -12425,7 +11870,7 @@ msgstr ""
msgid "A related resource"
msgstr ""
-#: ../src/rdf.cpp:267 ../src/ui/dialog/inkscape-preferences.cpp:1850
+#: ../src/rdf.cpp:267 ../src/ui/dialog/inkscape-preferences.cpp:1855
msgid "Language:"
msgstr ""
@@ -12503,7 +11948,7 @@ msgstr ""
#: ../src/selection-chemistry.cpp:423
#: ../src/ui/dialog/calligraphic-profile-rename.cpp:75
-#: ../src/ui/dialog/swatches.cpp:278 ../src/ui/tools/text-tool.cpp:986
+#: ../src/ui/dialog/swatches.cpp:278 ../src/ui/tools/text-tool.cpp:974
#: ../src/widgets/eraser-toolbar.cpp:93
#: ../src/widgets/gradient-toolbar.cpp:1180
#: ../src/widgets/gradient-toolbar.cpp:1194
@@ -12655,7 +12100,7 @@ msgstr ""
msgid "Select <b>object(s)</b> to move."
msgstr ""
-#: ../src/selection-chemistry.cpp:1416 ../src/verbs.cpp:2581
+#: ../src/selection-chemistry.cpp:1416 ../src/verbs.cpp:2574
msgid "Move selection to layer"
msgstr ""
@@ -12682,219 +12127,219 @@ msgstr ""
msgid "Rotate"
msgstr ""
-#: ../src/selection-chemistry.cpp:2150
+#: ../src/selection-chemistry.cpp:2142
msgid "Rotate by pixels"
msgstr ""
-#: ../src/selection-chemistry.cpp:2180 ../src/seltrans.cpp:471
+#: ../src/selection-chemistry.cpp:2172 ../src/seltrans.cpp:471
#: ../src/ui/dialog/transformation.cpp:869
#: ../share/extensions/interp_att_g.inx.h:12
msgid "Scale"
msgstr ""
-#: ../src/selection-chemistry.cpp:2205
+#: ../src/selection-chemistry.cpp:2197
msgid "Scale by whole factor"
msgstr ""
-#: ../src/selection-chemistry.cpp:2220
+#: ../src/selection-chemistry.cpp:2212
msgid "Move vertically"
msgstr ""
-#: ../src/selection-chemistry.cpp:2223
+#: ../src/selection-chemistry.cpp:2215
msgid "Move horizontally"
msgstr ""
-#: ../src/selection-chemistry.cpp:2226 ../src/selection-chemistry.cpp:2252
+#: ../src/selection-chemistry.cpp:2218 ../src/selection-chemistry.cpp:2244
#: ../src/seltrans.cpp:468 ../src/ui/dialog/transformation.cpp:807
msgid "Move"
msgstr ""
-#: ../src/selection-chemistry.cpp:2246
+#: ../src/selection-chemistry.cpp:2238
msgid "Move vertically by pixels"
msgstr ""
-#: ../src/selection-chemistry.cpp:2249
+#: ../src/selection-chemistry.cpp:2241
msgid "Move horizontally by pixels"
msgstr ""
-#: ../src/selection-chemistry.cpp:2381
+#: ../src/selection-chemistry.cpp:2373
msgid "The selection has no applied path effect."
msgstr ""
-#: ../src/selection-chemistry.cpp:2550 ../src/ui/dialog/clonetiler.cpp:2218
+#: ../src/selection-chemistry.cpp:2542 ../src/ui/dialog/clonetiler.cpp:2218
msgid "Select an <b>object</b> to clone."
msgstr ""
-#: ../src/selection-chemistry.cpp:2586
+#: ../src/selection-chemistry.cpp:2578
msgctxt "Action"
msgid "Clone"
msgstr ""
-#: ../src/selection-chemistry.cpp:2602
+#: ../src/selection-chemistry.cpp:2594
msgid "Select <b>clones</b> to relink."
msgstr ""
-#: ../src/selection-chemistry.cpp:2609
+#: ../src/selection-chemistry.cpp:2601
msgid "Copy an <b>object</b> to clipboard to relink clones to."
msgstr ""
-#: ../src/selection-chemistry.cpp:2633
+#: ../src/selection-chemistry.cpp:2625
msgid "<b>No clones to relink</b> in the selection."
msgstr ""
-#: ../src/selection-chemistry.cpp:2636
+#: ../src/selection-chemistry.cpp:2628
msgid "Relink clone"
msgstr ""
-#: ../src/selection-chemistry.cpp:2650
+#: ../src/selection-chemistry.cpp:2642
msgid "Select <b>clones</b> to unlink."
msgstr ""
-#: ../src/selection-chemistry.cpp:2704
+#: ../src/selection-chemistry.cpp:2696
msgid "<b>No clones to unlink</b> in the selection."
msgstr ""
-#: ../src/selection-chemistry.cpp:2708
+#: ../src/selection-chemistry.cpp:2700
msgid "Unlink clone"
msgstr ""
-#: ../src/selection-chemistry.cpp:2721
+#: ../src/selection-chemistry.cpp:2713
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 "
"a <b>flowed text</b> to go to its frame."
msgstr ""
-#: ../src/selection-chemistry.cpp:2754
+#: ../src/selection-chemistry.cpp:2746
msgid ""
"<b>Cannot find</b> the object to select (orphaned clone, offset, textpath, "
"flowed text?)"
msgstr ""
-#: ../src/selection-chemistry.cpp:2760
+#: ../src/selection-chemistry.cpp:2752
msgid ""
"The object you're trying to select is <b>not visible</b> (it is in &lt;"
"defs&gt;)"
msgstr ""
-#: ../src/selection-chemistry.cpp:2805
+#: ../src/selection-chemistry.cpp:2797
msgid "Select <b>one</b> path to clone."
msgstr ""
-#: ../src/selection-chemistry.cpp:2809
+#: ../src/selection-chemistry.cpp:2801
msgid "Select one <b>path</b> to clone."
msgstr ""
-#: ../src/selection-chemistry.cpp:2865
+#: ../src/selection-chemistry.cpp:2857
msgid "Select <b>object(s)</b> to convert to marker."
msgstr ""
-#: ../src/selection-chemistry.cpp:2932
+#: ../src/selection-chemistry.cpp:2924
msgid "Objects to marker"
msgstr ""
-#: ../src/selection-chemistry.cpp:2956
+#: ../src/selection-chemistry.cpp:2948
msgid "Select <b>object(s)</b> to convert to guides."
msgstr ""
-#: ../src/selection-chemistry.cpp:2979
+#: ../src/selection-chemistry.cpp:2971
msgid "Objects to guides"
msgstr ""
-#: ../src/selection-chemistry.cpp:3015
+#: ../src/selection-chemistry.cpp:3007
msgid "Select <b>objects</b> to convert to symbol."
msgstr ""
-#: ../src/selection-chemistry.cpp:3121
+#: ../src/selection-chemistry.cpp:3113
msgid "Group to symbol"
msgstr ""
-#: ../src/selection-chemistry.cpp:3140
+#: ../src/selection-chemistry.cpp:3132
msgid "Select a <b>symbol</b> to extract objects from."
msgstr ""
-#: ../src/selection-chemistry.cpp:3149
+#: ../src/selection-chemistry.cpp:3141
msgid "Select only one <b>symbol</b> in Symbol dialog to convert to group."
msgstr ""
-#: ../src/selection-chemistry.cpp:3207
+#: ../src/selection-chemistry.cpp:3199
msgid "Group from symbol"
msgstr ""
-#: ../src/selection-chemistry.cpp:3225
+#: ../src/selection-chemistry.cpp:3217
msgid "Select <b>object(s)</b> to convert to pattern."
msgstr ""
-#: ../src/selection-chemistry.cpp:3315
+#: ../src/selection-chemistry.cpp:3307
msgid "Objects to pattern"
msgstr ""
-#: ../src/selection-chemistry.cpp:3331
+#: ../src/selection-chemistry.cpp:3323
msgid "Select an <b>object with pattern fill</b> to extract objects from."
msgstr ""
-#: ../src/selection-chemistry.cpp:3386
+#: ../src/selection-chemistry.cpp:3378
msgid "<b>No pattern fills</b> in the selection."
msgstr ""
-#: ../src/selection-chemistry.cpp:3389
+#: ../src/selection-chemistry.cpp:3381
msgid "Pattern to objects"
msgstr ""
-#: ../src/selection-chemistry.cpp:3480
+#: ../src/selection-chemistry.cpp:3472
msgid "Select <b>object(s)</b> to make a bitmap copy."
msgstr ""
-#: ../src/selection-chemistry.cpp:3484
+#: ../src/selection-chemistry.cpp:3476
msgid "Rendering bitmap..."
msgstr ""
-#: ../src/selection-chemistry.cpp:3663
+#: ../src/selection-chemistry.cpp:3655
msgid "Create bitmap"
msgstr ""
-#: ../src/selection-chemistry.cpp:3695
+#: ../src/selection-chemistry.cpp:3687
msgid "Select <b>object(s)</b> to create clippath or mask from."
msgstr ""
-#: ../src/selection-chemistry.cpp:3698
+#: ../src/selection-chemistry.cpp:3690
msgid "Select mask object and <b>object(s)</b> to apply clippath or mask to."
msgstr ""
-#: ../src/selection-chemistry.cpp:3881
+#: ../src/selection-chemistry.cpp:3873
msgid "Set clipping path"
msgstr ""
-#: ../src/selection-chemistry.cpp:3883
+#: ../src/selection-chemistry.cpp:3875
msgid "Set mask"
msgstr ""
-#: ../src/selection-chemistry.cpp:3898
+#: ../src/selection-chemistry.cpp:3890
msgid "Select <b>object(s)</b> to remove clippath or mask from."
msgstr ""
-#: ../src/selection-chemistry.cpp:4009
+#: ../src/selection-chemistry.cpp:4001
msgid "Release clipping path"
msgstr ""
-#: ../src/selection-chemistry.cpp:4011
+#: ../src/selection-chemistry.cpp:4003
msgid "Release mask"
msgstr ""
-#: ../src/selection-chemistry.cpp:4030
+#: ../src/selection-chemistry.cpp:4022
msgid "Select <b>object(s)</b> to fit canvas to."
msgstr ""
#. Fit Page
-#: ../src/selection-chemistry.cpp:4050 ../src/verbs.cpp:2909
+#: ../src/selection-chemistry.cpp:4042 ../src/verbs.cpp:2902
msgid "Fit Page to Selection"
msgstr ""
-#: ../src/selection-chemistry.cpp:4079 ../src/verbs.cpp:2911
+#: ../src/selection-chemistry.cpp:4071 ../src/verbs.cpp:2904
msgid "Fit Page to Drawing"
msgstr ""
-#: ../src/selection-chemistry.cpp:4100 ../src/verbs.cpp:2913
+#: ../src/selection-chemistry.cpp:4092 ../src/verbs.cpp:2906
msgid "Fit Page to Selection or Drawing"
msgstr ""
@@ -12982,6 +12427,36 @@ msgid_plural "; <i>%d filtered objects</i> "
msgstr[0] ""
msgstr[1] ""
+#: ../src/seltrans-handles.cpp:9
+msgid ""
+"<b>Squeeze or stretch</b> selection; with <b>Ctrl</b> to scale uniformly; "
+"with <b>Shift</b> to scale around rotation center"
+msgstr ""
+
+#: ../src/seltrans-handles.cpp:10
+msgid ""
+"<b>Scale</b> selection; with <b>Ctrl</b> to scale uniformly; with <b>Shift</"
+"b> to scale around rotation center"
+msgstr ""
+
+#: ../src/seltrans-handles.cpp:11
+msgid ""
+"<b>Skew</b> selection; with <b>Ctrl</b> to snap angle; with <b>Shift</b> to "
+"skew around the opposite side"
+msgstr ""
+
+#: ../src/seltrans-handles.cpp:12
+msgid ""
+"<b>Rotate</b> selection; with <b>Ctrl</b> to snap angle; with <b>Shift</b> "
+"to rotate around the opposite corner"
+msgstr ""
+
+#: ../src/seltrans-handles.cpp:13
+msgid ""
+"<b>Center</b> of rotation and skewing: drag to reposition; scaling with "
+"Shift also uses this center"
+msgstr ""
+
#: ../src/seltrans.cpp:477 ../src/ui/dialog/transformation.cpp:982
msgid "Skew"
msgstr ""
@@ -12994,78 +12469,48 @@ msgstr ""
msgid "Stamp"
msgstr ""
-#: ../src/seltrans.cpp:717
+#: ../src/seltrans.cpp:713
msgid "Reset center"
msgstr ""
-#: ../src/seltrans.cpp:944 ../src/seltrans.cpp:1041
+#: ../src/seltrans.cpp:940 ../src/seltrans.cpp:1037
#, c-format
msgid "<b>Scale</b>: %0.2f%% x %0.2f%%; with <b>Ctrl</b> to lock ratio"
msgstr ""
#. TRANSLATORS: don't modify the first ";"
#. (it will NOT be displayed as ";" - only the second one will be)
-#: ../src/seltrans.cpp:1173
+#: ../src/seltrans.cpp:1169
#, c-format
msgid "<b>Skew</b>: %0.2f&#176;; with <b>Ctrl</b> to snap angle"
msgstr ""
#. TRANSLATORS: don't modify the first ";"
#. (it will NOT be displayed as ";" - only the second one will be)
-#: ../src/seltrans.cpp:1248
+#: ../src/seltrans.cpp:1244
#, c-format
msgid "<b>Rotate</b>: %0.2f&#176;; with <b>Ctrl</b> to snap angle"
msgstr ""
-#: ../src/seltrans.cpp:1285
+#: ../src/seltrans.cpp:1281
#, c-format
msgid "Move <b>center</b> to %s, %s"
msgstr ""
-#: ../src/seltrans.cpp:1439
+#: ../src/seltrans.cpp:1435
#, c-format
msgid ""
"<b>Move</b> by %s, %s; with <b>Ctrl</b> to restrict to horizontal/vertical; "
"with <b>Shift</b> to disable snapping"
msgstr ""
-#: ../src/seltrans-handles.cpp:9
-msgid ""
-"<b>Squeeze or stretch</b> selection; with <b>Ctrl</b> to scale uniformly; "
-"with <b>Shift</b> to scale around rotation center"
-msgstr ""
-
-#: ../src/seltrans-handles.cpp:10
-msgid ""
-"<b>Scale</b> selection; with <b>Ctrl</b> to scale uniformly; with <b>Shift</"
-"b> to scale around rotation center"
-msgstr ""
-
-#: ../src/seltrans-handles.cpp:11
-msgid ""
-"<b>Skew</b> selection; with <b>Ctrl</b> to snap angle; with <b>Shift</b> to "
-"skew around the opposite side"
-msgstr ""
-
-#: ../src/seltrans-handles.cpp:12
-msgid ""
-"<b>Rotate</b> selection; with <b>Ctrl</b> to snap angle; with <b>Shift</b> "
-"to rotate around the opposite corner"
-msgstr ""
-
-#: ../src/seltrans-handles.cpp:13
-msgid ""
-"<b>Center</b> of rotation and skewing: drag to reposition; scaling with "
-"Shift also uses this center"
-msgstr ""
-
#: ../src/shortcuts.cpp:226
#, c-format
msgid "Keyboard directory (%s) is unavailable."
msgstr ""
-#: ../src/shortcuts.cpp:337 ../src/ui/dialog/export.cpp:1295
-#: ../src/ui/dialog/export.cpp:1329
+#: ../src/shortcuts.cpp:337 ../src/ui/dialog/export.cpp:1299
+#: ../src/ui/dialog/export.cpp:1333
msgid "Select a filename for exporting"
msgstr ""
@@ -13093,7 +12538,7 @@ msgstr ""
#. Ellipse
#: ../src/sp-ellipse.cpp:379 ../src/sp-ellipse.cpp:386
#: ../src/ui/dialog/inkscape-preferences.cpp:403
-#: ../src/widgets/pencil-toolbar.cpp:166
+#: ../src/widgets/pencil-toolbar.cpp:158
msgid "Ellipse"
msgstr ""
@@ -13123,7 +12568,7 @@ msgid "Linked Flowed Text"
msgstr ""
#: ../src/sp-flowtext.cpp:298 ../src/sp-text.cpp:357
-#: ../src/ui/tools/text-tool.cpp:1591
+#: ../src/ui/tools/text-tool.cpp:1566
msgid " [truncated]"
msgstr ""
@@ -13134,36 +12579,36 @@ msgid_plural "(%d characters%s)"
msgstr[0] ""
msgstr[1] ""
-#: ../src/sp-guide.cpp:301
+#: ../src/sp-guide.cpp:303
msgid "Create Guides Around the Page"
msgstr ""
-#: ../src/sp-guide.cpp:313 ../src/verbs.cpp:2474
+#: ../src/sp-guide.cpp:315 ../src/verbs.cpp:2467
msgid "Delete All Guides"
msgstr ""
#. Guide has probably been deleted and no longer has an attached namedview.
-#: ../src/sp-guide.cpp:473
+#: ../src/sp-guide.cpp:475
msgid "Deleted"
msgstr ""
-#: ../src/sp-guide.cpp:482
+#: ../src/sp-guide.cpp:484
msgid ""
"<b>Shift+drag</b> to rotate, <b>Ctrl+drag</b> to move origin, <b>Del</b> to "
"delete"
msgstr ""
-#: ../src/sp-guide.cpp:486
+#: ../src/sp-guide.cpp:488
#, c-format
msgid "vertical, at %s"
msgstr ""
-#: ../src/sp-guide.cpp:489
+#: ../src/sp-guide.cpp:491
#, c-format
msgid "horizontal, at %s"
msgstr ""
-#: ../src/sp-guide.cpp:494
+#: ../src/sp-guide.cpp:496
#, c-format
msgid "at %d degrees, through (%s,%s)"
msgstr ""
@@ -13182,30 +12627,6 @@ msgstr ""
msgid "%d &#215; %d: %s"
msgstr ""
-#: ../src/sp-item.cpp:942 ../src/verbs.cpp:213
-msgid "Object"
-msgstr ""
-
-#: ../src/sp-item.cpp:959
-#, c-format
-msgid "%s; <i>clipped</i>"
-msgstr ""
-
-#: ../src/sp-item.cpp:965
-#, c-format
-msgid "%s; <i>masked</i>"
-msgstr ""
-
-#: ../src/sp-item.cpp:975
-#, c-format
-msgid "%s; <i>filtered (%s)</i>"
-msgstr ""
-
-#: ../src/sp-item.cpp:977
-#, c-format
-msgid "%s; <i>filtered</i>"
-msgstr ""
-
#: ../src/sp-item-group.cpp:337 ../src/sp-switch.cpp:82
#, c-format
msgid "of <b>%d</b> object"
@@ -13216,114 +12637,35 @@ msgstr ""
msgid "of <b>%d</b> objects"
msgstr ""
-#: ../src/sp-line.cpp:126
-msgid "Line"
-msgstr ""
-
-#: ../src/splivarot.cpp:82
-msgid "Intersection"
-msgstr ""
-
-#: ../src/splivarot.cpp:105
-msgid "Division"
-msgstr ""
-
-#: ../src/splivarot.cpp:110
-msgid "Cut path"
-msgstr ""
-
-#: ../src/splivarot.cpp:333
-msgid "Select <b>at least 2 paths</b> to perform a boolean operation."
-msgstr ""
-
-#: ../src/splivarot.cpp:337
-msgid "Select <b>at least 1 path</b> to perform a boolean union."
-msgstr ""
-
-#: ../src/splivarot.cpp:345
-msgid ""
-"Select <b>exactly 2 paths</b> to perform difference, division, or path cut."
-msgstr ""
-
-#: ../src/splivarot.cpp:361 ../src/splivarot.cpp:376
-msgid ""
-"Unable to determine the <b>z-order</b> of the objects selected for "
-"difference, XOR, division, or path cut."
-msgstr ""
-
-#: ../src/splivarot.cpp:407
-msgid ""
-"One of the objects is <b>not a path</b>, cannot perform boolean operation."
-msgstr ""
-
-#: ../src/splivarot.cpp:1156
-msgid "Select <b>stroked path(s)</b> to convert stroke to path."
-msgstr ""
-
-#: ../src/splivarot.cpp:1511
-msgid "Convert stroke to path"
-msgstr ""
-
-#. TRANSLATORS: "to outline" means "to convert stroke to path"
-#: ../src/splivarot.cpp:1514
-msgid "<b>No stroked paths</b> in the selection."
-msgstr ""
-
-#: ../src/splivarot.cpp:1585
-msgid "Selected object is <b>not a path</b>, cannot inset/outset."
-msgstr ""
-
-#: ../src/splivarot.cpp:1676 ../src/splivarot.cpp:1741
-msgid "Create linked offset"
-msgstr ""
-
-#: ../src/splivarot.cpp:1677 ../src/splivarot.cpp:1742
-msgid "Create dynamic offset"
-msgstr ""
-
-#: ../src/splivarot.cpp:1767
-msgid "Select <b>path(s)</b> to inset/outset."
-msgstr ""
-
-#: ../src/splivarot.cpp:1963
-msgid "Outset path"
-msgstr ""
-
-#: ../src/splivarot.cpp:1963
-msgid "Inset path"
-msgstr ""
-
-#: ../src/splivarot.cpp:1965
-msgid "<b>No paths</b> to inset/outset in the selection."
-msgstr ""
-
-#: ../src/splivarot.cpp:2127
-msgid "Simplifying paths (separately):"
+#: ../src/sp-item.cpp:943 ../src/verbs.cpp:213
+msgid "Object"
msgstr ""
-#: ../src/splivarot.cpp:2129
-msgid "Simplifying paths:"
+#: ../src/sp-item.cpp:960
+#, c-format
+msgid "%s; <i>clipped</i>"
msgstr ""
-#: ../src/splivarot.cpp:2166
+#: ../src/sp-item.cpp:966
#, c-format
-msgid "%s <b>%d</b> of <b>%d</b> paths simplified..."
+msgid "%s; <i>masked</i>"
msgstr ""
-#: ../src/splivarot.cpp:2179
+#: ../src/sp-item.cpp:976
#, c-format
-msgid "<b>%d</b> paths simplified."
+msgid "%s; <i>filtered (%s)</i>"
msgstr ""
-#: ../src/splivarot.cpp:2193
-msgid "Select <b>path(s)</b> to simplify."
+#: ../src/sp-item.cpp:978
+#, c-format
+msgid "%s; <i>filtered</i>"
msgstr ""
-#: ../src/splivarot.cpp:2209
-msgid "<b>No paths</b> to simplify in the selection."
+#: ../src/sp-line.cpp:126
+msgid "Line"
msgstr ""
-#: ../src/sp-lpe-item.cpp:249
+#: ../src/sp-lpe-item.cpp:255
msgid "An exception occurred during execution of the Path Effect."
msgstr ""
@@ -13459,7 +12801,7 @@ msgstr ""
msgid " from "
msgstr ""
-#: ../src/sp-tref.cpp:259 ../src/sp-use.cpp:244
+#: ../src/sp-tref.cpp:259 ../src/sp-use.cpp:249
msgid "[orphaned]"
msgstr ""
@@ -13467,30 +12809,141 @@ msgstr ""
msgid "Text Span"
msgstr ""
-#: ../src/sp-use.cpp:213
+#: ../src/sp-use.cpp:214
msgid "Symbol"
msgstr ""
-#: ../src/sp-use.cpp:216
+#: ../src/sp-use.cpp:217
msgid "Clone"
msgstr ""
-#: ../src/sp-use.cpp:222
+#: ../src/sp-use.cpp:224 ../src/sp-use.cpp:226
#, c-format
msgid "called %s"
msgstr ""
+#: ../src/sp-use.cpp:226
+msgid "Unnamed Symbol"
+msgstr ""
+
#. TRANSLATORS: Used for statusbar description for long <use> chains:
#. * "Clone of: Clone of: ... in Layer 1".
-#: ../src/sp-use.cpp:230
+#: ../src/sp-use.cpp:235
msgid "..."
msgstr ""
-#: ../src/sp-use.cpp:239
+#: ../src/sp-use.cpp:244
#, c-format
msgid "of: %s"
msgstr ""
+#: ../src/splivarot.cpp:70 ../src/splivarot.cpp:76
+msgid "Union"
+msgstr ""
+
+#: ../src/splivarot.cpp:82
+msgid "Intersection"
+msgstr ""
+
+#: ../src/splivarot.cpp:105
+msgid "Division"
+msgstr ""
+
+#: ../src/splivarot.cpp:110
+msgid "Cut path"
+msgstr ""
+
+#: ../src/splivarot.cpp:333
+msgid "Select <b>at least 2 paths</b> to perform a boolean operation."
+msgstr ""
+
+#: ../src/splivarot.cpp:337
+msgid "Select <b>at least 1 path</b> to perform a boolean union."
+msgstr ""
+
+#: ../src/splivarot.cpp:345
+msgid ""
+"Select <b>exactly 2 paths</b> to perform difference, division, or path cut."
+msgstr ""
+
+#: ../src/splivarot.cpp:361 ../src/splivarot.cpp:376
+msgid ""
+"Unable to determine the <b>z-order</b> of the objects selected for "
+"difference, XOR, division, or path cut."
+msgstr ""
+
+#: ../src/splivarot.cpp:407
+msgid ""
+"One of the objects is <b>not a path</b>, cannot perform boolean operation."
+msgstr ""
+
+#: ../src/splivarot.cpp:1157
+msgid "Select <b>stroked path(s)</b> to convert stroke to path."
+msgstr ""
+
+#: ../src/splivarot.cpp:1512
+msgid "Convert stroke to path"
+msgstr ""
+
+#. TRANSLATORS: "to outline" means "to convert stroke to path"
+#: ../src/splivarot.cpp:1515
+msgid "<b>No stroked paths</b> in the selection."
+msgstr ""
+
+#: ../src/splivarot.cpp:1586
+msgid "Selected object is <b>not a path</b>, cannot inset/outset."
+msgstr ""
+
+#: ../src/splivarot.cpp:1677 ../src/splivarot.cpp:1742
+msgid "Create linked offset"
+msgstr ""
+
+#: ../src/splivarot.cpp:1678 ../src/splivarot.cpp:1743
+msgid "Create dynamic offset"
+msgstr ""
+
+#: ../src/splivarot.cpp:1768
+msgid "Select <b>path(s)</b> to inset/outset."
+msgstr ""
+
+#: ../src/splivarot.cpp:1964
+msgid "Outset path"
+msgstr ""
+
+#: ../src/splivarot.cpp:1964
+msgid "Inset path"
+msgstr ""
+
+#: ../src/splivarot.cpp:1966
+msgid "<b>No paths</b> to inset/outset in the selection."
+msgstr ""
+
+#: ../src/splivarot.cpp:2128
+msgid "Simplifying paths (separately):"
+msgstr ""
+
+#: ../src/splivarot.cpp:2130
+msgid "Simplifying paths:"
+msgstr ""
+
+#: ../src/splivarot.cpp:2167
+#, c-format
+msgid "%s <b>%d</b> of <b>%d</b> paths simplified..."
+msgstr ""
+
+#: ../src/splivarot.cpp:2180
+#, c-format
+msgid "<b>%d</b> paths simplified."
+msgstr ""
+
+#: ../src/splivarot.cpp:2194
+msgid "Select <b>path(s)</b> to simplify."
+msgstr ""
+
+#: ../src/splivarot.cpp:2210
+msgid "<b>No paths</b> to simplify in the selection."
+msgstr ""
+
#: ../src/text-chemistry.cpp:94
msgid "Select <b>a text and a path</b> to put text on path."
msgstr ""
@@ -13512,7 +12965,7 @@ msgstr ""
msgid "The flowed text(s) must be <b>visible</b> in order to be put on a path."
msgstr ""
-#: ../src/text-chemistry.cpp:185 ../src/verbs.cpp:2496
+#: ../src/text-chemistry.cpp:185 ../src/verbs.cpp:2489
msgid "Put text on path"
msgstr ""
@@ -13524,7 +12977,7 @@ msgstr ""
msgid "<b>No texts-on-paths</b> in the selection."
msgstr ""
-#: ../src/text-chemistry.cpp:221 ../src/verbs.cpp:2498
+#: ../src/text-chemistry.cpp:221 ../src/verbs.cpp:2491
msgid "Remove text from path"
msgstr ""
@@ -13643,7 +13096,7 @@ msgid ""
"path. <b>Arrow keys</b> adjust width (left/right) and angle (up/down)."
msgstr ""
-#: ../src/tools-switch.cpp:103 ../src/ui/tools/text-tool.cpp:1618
+#: ../src/tools-switch.cpp:103 ../src/ui/tools/text-tool.cpp:1593
msgid ""
"<b>Click</b> to select or create text, <b>drag</b> to create flowed text; "
"then type."
@@ -13704,8 +13157,8 @@ msgstr ""
#: ../src/trace/trace.cpp:59 ../src/trace/trace.cpp:124
#: ../src/trace/trace.cpp:132 ../src/trace/trace.cpp:225
-#: ../src/ui/dialog/pixelartdialog.cpp:338
-#: ../src/ui/dialog/pixelartdialog.cpp:356
+#: ../src/ui/dialog/pixelartdialog.cpp:370
+#: ../src/ui/dialog/pixelartdialog.cpp:402
msgid "Select an <b>image</b> to trace"
msgstr ""
@@ -13862,12 +13315,12 @@ msgstr ""
#: ../src/ui/dialog/align-and-distribute.cpp:468
#: ../src/ui/dialog/align-and-distribute.cpp:855
-#: ../src/widgets/connector-toolbar.cpp:408
+#: ../src/widgets/connector-toolbar.cpp:411
msgid "Remove overlaps"
msgstr ""
#: ../src/ui/dialog/align-and-distribute.cpp:499
-#: ../src/widgets/connector-toolbar.cpp:237
+#: ../src/widgets/connector-toolbar.cpp:240
msgid "Arrange connector network"
msgstr ""
@@ -13909,53 +13362,53 @@ msgid "_Treat selection as group: "
msgstr ""
#. Align
-#: ../src/ui/dialog/align-and-distribute.cpp:877 ../src/verbs.cpp:2941
-#: ../src/verbs.cpp:2942
+#: ../src/ui/dialog/align-and-distribute.cpp:877 ../src/verbs.cpp:2934
+#: ../src/verbs.cpp:2935
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:2943
-#: ../src/verbs.cpp:2944
+#: ../src/ui/dialog/align-and-distribute.cpp:880 ../src/verbs.cpp:2936
+#: ../src/verbs.cpp:2937
msgid "Align left edges"
msgstr ""
-#: ../src/ui/dialog/align-and-distribute.cpp:883 ../src/verbs.cpp:2945
-#: ../src/verbs.cpp:2946
+#: ../src/ui/dialog/align-and-distribute.cpp:883 ../src/verbs.cpp:2938
+#: ../src/verbs.cpp:2939
msgid "Center on vertical axis"
msgstr ""
-#: ../src/ui/dialog/align-and-distribute.cpp:886 ../src/verbs.cpp:2947
-#: ../src/verbs.cpp:2948
+#: ../src/ui/dialog/align-and-distribute.cpp:886 ../src/verbs.cpp:2940
+#: ../src/verbs.cpp:2941
msgid "Align right sides"
msgstr ""
-#: ../src/ui/dialog/align-and-distribute.cpp:889 ../src/verbs.cpp:2949
-#: ../src/verbs.cpp:2950
+#: ../src/ui/dialog/align-and-distribute.cpp:889 ../src/verbs.cpp:2942
+#: ../src/verbs.cpp:2943
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:2951
-#: ../src/verbs.cpp:2952
+#: ../src/ui/dialog/align-and-distribute.cpp:892 ../src/verbs.cpp:2944
+#: ../src/verbs.cpp:2945
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:2953
-#: ../src/verbs.cpp:2954
+#: ../src/ui/dialog/align-and-distribute.cpp:895 ../src/verbs.cpp:2946
+#: ../src/verbs.cpp:2947
msgid "Align top edges"
msgstr ""
-#: ../src/ui/dialog/align-and-distribute.cpp:898 ../src/verbs.cpp:2955
-#: ../src/verbs.cpp:2956
+#: ../src/ui/dialog/align-and-distribute.cpp:898 ../src/verbs.cpp:2948
+#: ../src/verbs.cpp:2949
msgid "Center on horizontal axis"
msgstr ""
-#: ../src/ui/dialog/align-and-distribute.cpp:901 ../src/verbs.cpp:2957
-#: ../src/verbs.cpp:2958
+#: ../src/ui/dialog/align-and-distribute.cpp:901 ../src/verbs.cpp:2950
+#: ../src/verbs.cpp:2951
msgid "Align bottom edges"
msgstr ""
-#: ../src/ui/dialog/align-and-distribute.cpp:904 ../src/verbs.cpp:2959
-#: ../src/verbs.cpp:2960
+#: ../src/ui/dialog/align-and-distribute.cpp:904 ../src/verbs.cpp:2952
+#: ../src/verbs.cpp:2953
msgid "Align top edges of objects to the bottom edge of the anchor"
msgstr ""
@@ -14008,7 +13461,7 @@ msgid "Distribute baselines of texts vertically"
msgstr ""
#: ../src/ui/dialog/align-and-distribute.cpp:955
-#: ../src/widgets/connector-toolbar.cpp:370
+#: ../src/widgets/connector-toolbar.cpp:373
msgid "Nicely arrange selected connector network"
msgstr ""
@@ -14072,10 +13525,7 @@ msgid "Smallest object"
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:1997
-#: ../share/extensions/printing_marks.inx.h:18
-msgid "Selection"
+msgid "Selection Area"
msgstr ""
#: ../src/ui/dialog/calligraphic-profile-rename.cpp:40
@@ -14838,283 +14288,287 @@ msgid "Release log messages"
msgstr ""
#: ../src/ui/dialog/document-metadata.cpp:88
-#: ../src/ui/dialog/document-properties.cpp:156
+#: ../src/ui/dialog/document-properties.cpp:158
msgid "Metadata"
msgstr ""
#: ../src/ui/dialog/document-metadata.cpp:89
-#: ../src/ui/dialog/document-properties.cpp:157
+#: ../src/ui/dialog/document-properties.cpp:159
msgid "License"
msgstr ""
#: ../src/ui/dialog/document-metadata.cpp:126
-#: ../src/ui/dialog/document-properties.cpp:1002
+#: ../src/ui/dialog/document-properties.cpp:1005
msgid "<b>Dublin Core Entities</b>"
msgstr ""
#: ../src/ui/dialog/document-metadata.cpp:168
-#: ../src/ui/dialog/document-properties.cpp:1064
+#: ../src/ui/dialog/document-properties.cpp:1067
msgid "<b>License</b>"
msgstr ""
#. ---------------------------------------------------------------
-#: ../src/ui/dialog/document-properties.cpp:109
+#: ../src/ui/dialog/document-properties.cpp:110
+msgid "Use antialiasing"
+msgstr ""
+
+#: ../src/ui/dialog/document-properties.cpp:110
+msgid "If unset, no antialiasing will be done on the drawing"
+msgstr ""
+
+#: ../src/ui/dialog/document-properties.cpp:111
msgid "Show page _border"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:109
+#: ../src/ui/dialog/document-properties.cpp:111
msgid "If set, rectangular page border is shown"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:110
+#: ../src/ui/dialog/document-properties.cpp:112
msgid "Border on _top of drawing"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:110
+#: ../src/ui/dialog/document-properties.cpp:112
msgid "If set, border is always on top of the drawing"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:111
+#: ../src/ui/dialog/document-properties.cpp:113
msgid "_Show border shadow"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:111
+#: ../src/ui/dialog/document-properties.cpp:113
msgid "If set, page border shows a shadow on its right and lower side"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:112
+#: ../src/ui/dialog/document-properties.cpp:114
msgid "Back_ground color:"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:112
+#: ../src/ui/dialog/document-properties.cpp:114
msgid ""
"Color of the page background. Note: transparency setting ignored while "
"editing but used when exporting to bitmap."
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:113
+#: ../src/ui/dialog/document-properties.cpp:115
msgid "Border _color:"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:113
+#: ../src/ui/dialog/document-properties.cpp:115
msgid "Page border color"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:113
+#: ../src/ui/dialog/document-properties.cpp:115
msgid "Color of the page border"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:114
+#: ../src/ui/dialog/document-properties.cpp:116
msgid "Default _units:"
msgstr ""
#. ---------------------------------------------------------------
#. General snap options
-#: ../src/ui/dialog/document-properties.cpp:118
+#: ../src/ui/dialog/document-properties.cpp:120
msgid "Show _guides"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:118
+#: ../src/ui/dialog/document-properties.cpp:120
msgid "Show or hide guides"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:119
+#: ../src/ui/dialog/document-properties.cpp:121
msgid "Guide co_lor:"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:119
+#: ../src/ui/dialog/document-properties.cpp:121
msgid "Guideline color"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:119
+#: ../src/ui/dialog/document-properties.cpp:121
msgid "Color of guidelines"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:120
+#: ../src/ui/dialog/document-properties.cpp:122
msgid "_Highlight color:"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:120
+#: ../src/ui/dialog/document-properties.cpp:122
msgid "Highlighted guideline color"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:120
+#: ../src/ui/dialog/document-properties.cpp:122
msgid "Color of a guideline when it is under mouse"
msgstr ""
#. ---------------------------------------------------------------
-#: ../src/ui/dialog/document-properties.cpp:122
+#: ../src/ui/dialog/document-properties.cpp:124
msgid "Snap _distance"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:122
+#: ../src/ui/dialog/document-properties.cpp:124
msgid "Snap only when _closer than:"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:122
-#: ../src/ui/dialog/document-properties.cpp:127
-#: ../src/ui/dialog/document-properties.cpp:132
+#: ../src/ui/dialog/document-properties.cpp:124
+#: ../src/ui/dialog/document-properties.cpp:129
+#: ../src/ui/dialog/document-properties.cpp:134
msgid "Always snap"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:123
+#: ../src/ui/dialog/document-properties.cpp:125
msgid "Snapping distance, in screen pixels, for snapping to objects"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:123
+#: ../src/ui/dialog/document-properties.cpp:125
msgid "Always snap to objects, regardless of their distance"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:124
+#: ../src/ui/dialog/document-properties.cpp:126
msgid ""
"If set, objects only snap to another object when it's within the range "
"specified below"
msgstr ""
#. Options for snapping to grids
-#: ../src/ui/dialog/document-properties.cpp:127
+#: ../src/ui/dialog/document-properties.cpp:129
msgid "Snap d_istance"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:127
+#: ../src/ui/dialog/document-properties.cpp:129
msgid "Snap only when c_loser than:"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:128
+#: ../src/ui/dialog/document-properties.cpp:130
msgid "Snapping distance, in screen pixels, for snapping to grid"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:128
+#: ../src/ui/dialog/document-properties.cpp:130
msgid "Always snap to grids, regardless of the distance"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:129
+#: ../src/ui/dialog/document-properties.cpp:131
msgid ""
"If set, objects only snap to a grid line when it's within the range "
"specified below"
msgstr ""
#. Options for snapping to guides
-#: ../src/ui/dialog/document-properties.cpp:132
+#: ../src/ui/dialog/document-properties.cpp:134
msgid "Snap dist_ance"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:132
+#: ../src/ui/dialog/document-properties.cpp:134
msgid "Snap only when close_r than:"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:133
+#: ../src/ui/dialog/document-properties.cpp:135
msgid "Snapping distance, in screen pixels, for snapping to guides"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:133
+#: ../src/ui/dialog/document-properties.cpp:135
msgid "Always snap to guides, regardless of the distance"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:134
+#: ../src/ui/dialog/document-properties.cpp:136
msgid ""
"If set, objects only snap to a guide when it's within the range specified "
"below"
msgstr ""
#. ---------------------------------------------------------------
-#: ../src/ui/dialog/document-properties.cpp:137
+#: ../src/ui/dialog/document-properties.cpp:139
msgid "Snap to clip paths"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:137
+#: ../src/ui/dialog/document-properties.cpp:139
msgid "When snapping to paths, then also try snapping to clip paths"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:138
+#: ../src/ui/dialog/document-properties.cpp:140
msgid "Snap to mask paths"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:138
+#: ../src/ui/dialog/document-properties.cpp:140
msgid "When snapping to paths, then also try snapping to mask paths"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:139
+#: ../src/ui/dialog/document-properties.cpp:141
msgid "Snap perpendicularly"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:139
+#: ../src/ui/dialog/document-properties.cpp:141
msgid ""
"When snapping to paths or guides, then also try snapping perpendicularly"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:140
+#: ../src/ui/dialog/document-properties.cpp:142
msgid "Snap tangentially"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:140
+#: ../src/ui/dialog/document-properties.cpp:142
msgid "When snapping to paths or guides, then also try snapping tangentially"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:143
+#: ../src/ui/dialog/document-properties.cpp:145
msgctxt "Grid"
msgid "_New"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:143
+#: ../src/ui/dialog/document-properties.cpp:145
msgid "Create new grid."
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:144
+#: ../src/ui/dialog/document-properties.cpp:146
msgctxt "Grid"
msgid "_Remove"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:144
+#: ../src/ui/dialog/document-properties.cpp:146
msgid "Remove selected grid."
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:151
+#: ../src/ui/dialog/document-properties.cpp:153
#: ../src/widgets/toolbox.cpp:1834
msgid "Guides"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:153 ../src/verbs.cpp:2748
+#: ../src/ui/dialog/document-properties.cpp:155 ../src/verbs.cpp:2741
msgid "Snap"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:155
+#: ../src/ui/dialog/document-properties.cpp:157
msgid "Scripting"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:318
+#: ../src/ui/dialog/document-properties.cpp:321
msgid "<b>General</b>"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:320
-msgid "<b>Color</b>"
+#: ../src/ui/dialog/document-properties.cpp:323
+msgid "<b>Page Size</b>"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:322
-msgid "<b>Border</b>"
+#: ../src/ui/dialog/document-properties.cpp:325
+msgid "<b>Display</b>"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:324
-msgid "<b>Page Size</b>"
-msgstr ""
-
-#: ../src/ui/dialog/document-properties.cpp:357
+#: ../src/ui/dialog/document-properties.cpp:360
msgid "<b>Guides</b>"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:375
+#: ../src/ui/dialog/document-properties.cpp:378
msgid "<b>Snap to objects</b>"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:377
+#: ../src/ui/dialog/document-properties.cpp:380
msgid "<b>Snap to grids</b>"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:379
+#: ../src/ui/dialog/document-properties.cpp:382
msgid "<b>Snap to guides</b>"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:381
+#: ../src/ui/dialog/document-properties.cpp:384
msgid "<b>Miscellaneous</b>"
msgstr ""
@@ -15122,127 +14576,127 @@ msgstr ""
#. Inkscape::GC::release(defsRepr);
#. inform the document, so we can undo
#. Color Management
-#: ../src/ui/dialog/document-properties.cpp:494 ../src/verbs.cpp:2925
+#: ../src/ui/dialog/document-properties.cpp:497 ../src/verbs.cpp:2918
msgid "Link Color Profile"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:595
+#: ../src/ui/dialog/document-properties.cpp:598
msgid "Remove linked color profile"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:608
+#: ../src/ui/dialog/document-properties.cpp:611
msgid "<b>Linked Color Profiles:</b>"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:610
+#: ../src/ui/dialog/document-properties.cpp:613
msgid "<b>Available Color Profiles:</b>"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:612
+#: ../src/ui/dialog/document-properties.cpp:615
msgid "Link Profile"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:621
+#: ../src/ui/dialog/document-properties.cpp:624
msgid "Unlink Profile"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:705
+#: ../src/ui/dialog/document-properties.cpp:708
msgid "Profile Name"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:741
+#: ../src/ui/dialog/document-properties.cpp:744
msgid "External scripts"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:742
+#: ../src/ui/dialog/document-properties.cpp:745
msgid "Embedded scripts"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:747
+#: ../src/ui/dialog/document-properties.cpp:750
msgid "<b>External script files:</b>"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:749
+#: ../src/ui/dialog/document-properties.cpp:752
msgid "Add the current file name or browse for a file"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:758
-#: ../src/ui/dialog/document-properties.cpp:847
+#: ../src/ui/dialog/document-properties.cpp:761
+#: ../src/ui/dialog/document-properties.cpp:850
#: ../src/ui/widget/selected-style.cpp:339
msgid "Remove"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:828
+#: ../src/ui/dialog/document-properties.cpp:831
msgid "Filename"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:836
+#: ../src/ui/dialog/document-properties.cpp:839
msgid "<b>Embedded script files:</b>"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:838
+#: ../src/ui/dialog/document-properties.cpp:841
msgid "New"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:917
+#: ../src/ui/dialog/document-properties.cpp:920
msgid "Script id"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:923
+#: ../src/ui/dialog/document-properties.cpp:926
msgid "<b>Content:</b>"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:1040
+#: ../src/ui/dialog/document-properties.cpp:1043
msgid "_Save as default"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:1041
+#: ../src/ui/dialog/document-properties.cpp:1044
msgid "Save this metadata as the default metadata"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:1042
+#: ../src/ui/dialog/document-properties.cpp:1045
msgid "Use _default"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:1043
+#: ../src/ui/dialog/document-properties.cpp:1046
msgid "Use the previously saved default metadata here"
msgstr ""
#. inform the document, so we can undo
-#: ../src/ui/dialog/document-properties.cpp:1116
+#: ../src/ui/dialog/document-properties.cpp:1119
msgid "Add external script..."
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:1155
+#: ../src/ui/dialog/document-properties.cpp:1158
msgid "Select a script to load"
msgstr ""
#. inform the document, so we can undo
-#: ../src/ui/dialog/document-properties.cpp:1183
+#: ../src/ui/dialog/document-properties.cpp:1186
msgid "Add embedded script..."
msgstr ""
#. inform the document, so we can undo
-#: ../src/ui/dialog/document-properties.cpp:1214
+#: ../src/ui/dialog/document-properties.cpp:1217
msgid "Remove external script"
msgstr ""
#. inform the document, so we can undo
-#: ../src/ui/dialog/document-properties.cpp:1248
+#: ../src/ui/dialog/document-properties.cpp:1247
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:1348
+#: ../src/ui/dialog/document-properties.cpp:1344
msgid "Edit embedded script"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:1431
+#: ../src/ui/dialog/document-properties.cpp:1427
msgid "<b>Creation</b>"
msgstr ""
-#: ../src/ui/dialog/document-properties.cpp:1432
+#: ../src/ui/dialog/document-properties.cpp:1428
msgid "<b>Defined grids</b>"
msgstr ""
@@ -15254,198 +14708,198 @@ msgstr ""
msgid "Changed document unit"
msgstr ""
-#: ../src/ui/dialog/export.cpp:151 ../src/verbs.cpp:2800
+#: ../src/ui/dialog/export.cpp:152 ../src/verbs.cpp:2793
msgid "_Page"
msgstr ""
-#: ../src/ui/dialog/export.cpp:151 ../src/verbs.cpp:2804
+#: ../src/ui/dialog/export.cpp:152 ../src/verbs.cpp:2797
msgid "_Drawing"
msgstr ""
-#: ../src/ui/dialog/export.cpp:151 ../src/verbs.cpp:2806
+#: ../src/ui/dialog/export.cpp:152 ../src/verbs.cpp:2799
msgid "_Selection"
msgstr ""
-#: ../src/ui/dialog/export.cpp:151
+#: ../src/ui/dialog/export.cpp:152
msgid "_Custom"
msgstr ""
-#: ../src/ui/dialog/export.cpp:168 ../src/widgets/measure-toolbar.cpp:99
+#: ../src/ui/dialog/export.cpp:170 ../src/widgets/measure-toolbar.cpp:99
#: ../src/widgets/measure-toolbar.cpp:107
#: ../share/extensions/render_gears.inx.h:6
msgid "Units:"
msgstr ""
-#: ../src/ui/dialog/export.cpp:170
+#: ../src/ui/dialog/export.cpp:172
msgid "_Export As..."
msgstr ""
-#: ../src/ui/dialog/export.cpp:173
+#: ../src/ui/dialog/export.cpp:175
msgid "B_atch export all selected objects"
msgstr ""
-#: ../src/ui/dialog/export.cpp:173
+#: ../src/ui/dialog/export.cpp:175
msgid ""
"Export each selected object into its own PNG file, using export hints if any "
"(caution, overwrites without asking!)"
msgstr ""
-#: ../src/ui/dialog/export.cpp:175
+#: ../src/ui/dialog/export.cpp:177
msgid "Hide a_ll except selected"
msgstr ""
-#: ../src/ui/dialog/export.cpp:175
+#: ../src/ui/dialog/export.cpp:177
msgid "In the exported image, hide all objects except those that are selected"
msgstr ""
-#: ../src/ui/dialog/export.cpp:176
+#: ../src/ui/dialog/export.cpp:178
msgid "Close when complete"
msgstr ""
-#: ../src/ui/dialog/export.cpp:176
+#: ../src/ui/dialog/export.cpp:178
msgid "Once the export completes, close this dialog"
msgstr ""
-#: ../src/ui/dialog/export.cpp:178
+#: ../src/ui/dialog/export.cpp:180
msgid "_Export"
msgstr ""
-#: ../src/ui/dialog/export.cpp:196
+#: ../src/ui/dialog/export.cpp:198
msgid "<b>Export area</b>"
msgstr ""
-#: ../src/ui/dialog/export.cpp:235
+#: ../src/ui/dialog/export.cpp:237
msgid "_x0:"
msgstr ""
-#: ../src/ui/dialog/export.cpp:239
+#: ../src/ui/dialog/export.cpp:241
msgid "x_1:"
msgstr ""
-#: ../src/ui/dialog/export.cpp:243
+#: ../src/ui/dialog/export.cpp:245
msgid "Wid_th:"
msgstr ""
-#: ../src/ui/dialog/export.cpp:247
+#: ../src/ui/dialog/export.cpp:249
msgid "_y0:"
msgstr ""
-#: ../src/ui/dialog/export.cpp:251
+#: ../src/ui/dialog/export.cpp:253
msgid "y_1:"
msgstr ""
-#: ../src/ui/dialog/export.cpp:255
+#: ../src/ui/dialog/export.cpp:257
msgid "Hei_ght:"
msgstr ""
-#: ../src/ui/dialog/export.cpp:270
+#: ../src/ui/dialog/export.cpp:272
msgid "<b>Image size</b>"
msgstr ""
-#: ../src/ui/dialog/export.cpp:288 ../src/ui/dialog/export.cpp:299
+#: ../src/ui/dialog/export.cpp:290 ../src/ui/dialog/export.cpp:301
msgid "pixels at"
msgstr ""
-#: ../src/ui/dialog/export.cpp:294
+#: ../src/ui/dialog/export.cpp:296
msgid "dp_i"
msgstr ""
-#: ../src/ui/dialog/export.cpp:299 ../src/ui/dialog/transformation.cpp:82
+#: ../src/ui/dialog/export.cpp:301 ../src/ui/dialog/transformation.cpp:82
#: ../src/ui/widget/page-sizer.cpp:237
msgid "_Height:"
msgstr ""
-#: ../src/ui/dialog/export.cpp:307
+#: ../src/ui/dialog/export.cpp:309
#: ../src/ui/dialog/inkscape-preferences.cpp:1432
#: ../src/ui/dialog/inkscape-preferences.cpp:1436
#: ../src/ui/dialog/inkscape-preferences.cpp:1460
msgid "dpi"
msgstr ""
-#: ../src/ui/dialog/export.cpp:315
+#: ../src/ui/dialog/export.cpp:317
msgid "<b>_Filename</b>"
msgstr ""
-#: ../src/ui/dialog/export.cpp:357
+#: ../src/ui/dialog/export.cpp:359
msgid "Export the bitmap file with these settings"
msgstr ""
-#: ../src/ui/dialog/export.cpp:608
+#: ../src/ui/dialog/export.cpp:612
#, c-format
msgid "B_atch export %d selected object"
msgid_plural "B_atch export %d selected objects"
msgstr[0] ""
msgstr[1] ""
-#: ../src/ui/dialog/export.cpp:924
+#: ../src/ui/dialog/export.cpp:928
msgid "Export in progress"
msgstr ""
-#: ../src/ui/dialog/export.cpp:1014
+#: ../src/ui/dialog/export.cpp:1018
msgid "No items selected."
msgstr ""
-#: ../src/ui/dialog/export.cpp:1018 ../src/ui/dialog/export.cpp:1020
+#: ../src/ui/dialog/export.cpp:1022 ../src/ui/dialog/export.cpp:1024
msgid "Exporting %1 files"
msgstr ""
-#: ../src/ui/dialog/export.cpp:1060 ../src/ui/dialog/export.cpp:1062
+#: ../src/ui/dialog/export.cpp:1064 ../src/ui/dialog/export.cpp:1066
#, c-format
msgid "Exporting file <b>%s</b>..."
msgstr ""
-#: ../src/ui/dialog/export.cpp:1071 ../src/ui/dialog/export.cpp:1162
+#: ../src/ui/dialog/export.cpp:1075 ../src/ui/dialog/export.cpp:1166
#, c-format
msgid "Could not export to filename %s.\n"
msgstr ""
-#: ../src/ui/dialog/export.cpp:1074
+#: ../src/ui/dialog/export.cpp:1078
#, c-format
msgid "Could not export to filename <b>%s</b>."
msgstr ""
-#: ../src/ui/dialog/export.cpp:1089
+#: ../src/ui/dialog/export.cpp:1093
#, c-format
msgid "Successfully exported <b>%d</b> files from <b>%d</b> selected items."
msgstr ""
-#: ../src/ui/dialog/export.cpp:1100
+#: ../src/ui/dialog/export.cpp:1104
msgid "You have to enter a filename."
msgstr ""
-#: ../src/ui/dialog/export.cpp:1101
+#: ../src/ui/dialog/export.cpp:1105
msgid "You have to enter a filename"
msgstr ""
-#: ../src/ui/dialog/export.cpp:1115
+#: ../src/ui/dialog/export.cpp:1119
msgid "The chosen area to be exported is invalid."
msgstr ""
-#: ../src/ui/dialog/export.cpp:1116
+#: ../src/ui/dialog/export.cpp:1120
msgid "The chosen area to be exported is invalid"
msgstr ""
-#: ../src/ui/dialog/export.cpp:1131
+#: ../src/ui/dialog/export.cpp:1135
#, c-format
msgid "Directory %s does not exist or is not a directory.\n"
msgstr ""
#. TRANSLATORS: %1 will be the filename, %2 the width, and %3 the height of the image
-#: ../src/ui/dialog/export.cpp:1145 ../src/ui/dialog/export.cpp:1147
+#: ../src/ui/dialog/export.cpp:1149 ../src/ui/dialog/export.cpp:1151
msgid "Exporting %1 (%2 x %3)"
msgstr ""
-#: ../src/ui/dialog/export.cpp:1173
+#: ../src/ui/dialog/export.cpp:1177
#, c-format
msgid "Drawing exported to <b>%s</b>."
msgstr ""
-#: ../src/ui/dialog/export.cpp:1177
+#: ../src/ui/dialog/export.cpp:1181
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:1123
+#: ../src/ui/dialog/export.cpp:1303 ../src/ui/dialog/input.cpp:1082
+#: ../src/verbs.cpp:2354 ../src/widgets/desktop-widget.cpp:1123
msgid "_Save"
msgstr ""
@@ -15454,8 +14908,8 @@ msgid "Information"
msgstr ""
#: ../src/ui/dialog/extension-editor.cpp:82 ../src/verbs.cpp:290
-#: ../src/verbs.cpp:309 ../share/extensions/color_custom.inx.h:7
-#: ../share/extensions/color_HSL_adjust.inx.h:11
+#: ../src/verbs.cpp:309 ../share/extensions/color_HSL_adjust.inx.h:11
+#: ../share/extensions/color_custom.inx.h:7
#: ../share/extensions/color_randomize.inx.h:6
#: ../share/extensions/dots.inx.h:7
#: ../share/extensions/draw_from_triangle.inx.h:35
@@ -15490,15 +14944,15 @@ msgstr ""
#: ../share/extensions/layout_nup.inx.h:24
#: ../share/extensions/lindenmayer.inx.h:13
#: ../share/extensions/lorem_ipsum.inx.h:6
-#: ../share/extensions/measure.inx.h:15
+#: ../share/extensions/measure.inx.h:16
#: ../share/extensions/pathalongpath.inx.h:16
#: ../share/extensions/pathscatter.inx.h:18
#: ../share/extensions/radiusrand.inx.h:8 ../share/extensions/split.inx.h:8
#: ../share/extensions/voronoi2svg.inx.h:11
#: ../share/extensions/web-set-att.inx.h:25
+#: ../share/extensions/web-transmit-att.inx.h:23
#: ../share/extensions/webslicer_create_group.inx.h:11
#: ../share/extensions/webslicer_export.inx.h:6
-#: ../share/extensions/web-transmit-att.inx.h:23
msgid "Help"
msgstr ""
@@ -15506,103 +14960,104 @@ msgstr ""
msgid "Parameters"
msgstr ""
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:398
+#. Fill in the template
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:376
msgid "No preview"
msgstr ""
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:504
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:480
msgid "too large for preview"
msgstr ""
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:594
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:565
msgid "Enable preview"
msgstr ""
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:751
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:764
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:768
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:771
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:779
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:795
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:810
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:715
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:728
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:732
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:735
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:743
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:759
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:774
#: ../src/ui/dialog/filedialogimpl-win32.cpp:289
#: ../src/ui/dialog/filedialogimpl-win32.cpp:420
msgid "All Files"
msgstr ""
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:776
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:792
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:807
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:740
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:756
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:771
#: ../src/ui/dialog/filedialogimpl-win32.cpp:290
msgid "All Inkscape Files"
msgstr ""
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:783
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:799
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:813
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:747
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:763
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:777
#: ../src/ui/dialog/filedialogimpl-win32.cpp:291
msgid "All Images"
msgstr ""
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:786
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:802
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:816
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:750
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:766
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:780
#: ../src/ui/dialog/filedialogimpl-win32.cpp:292
msgid "All Vectors"
msgstr ""
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:789
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:805
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:819
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:753
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:769
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:783
#: ../src/ui/dialog/filedialogimpl-win32.cpp:293
msgid "All Bitmaps"
msgstr ""
#. ###### File options
#. ###### Do we want the .xxx extension automatically added?
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1048
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1616
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1002
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1560
msgid "Append filename extension automatically"
msgstr ""
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1226
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1480
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1175
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1428
msgid "Guess from extension"
msgstr ""
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1501
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1447
msgid "Left edge of source"
msgstr ""
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1502
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1448
msgid "Top edge of source"
msgstr ""
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1503
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1449
msgid "Right edge of source"
msgstr ""
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1504
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1450
msgid "Bottom edge of source"
msgstr ""
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1505
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1451
msgid "Source width"
msgstr ""
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1506
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1452
msgid "Source height"
msgstr ""
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1507
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1453
msgid "Destination width"
msgstr ""
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1508
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1454
msgid "Destination height"
msgstr ""
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1509
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1455
msgid "Resolution (dots per inch)"
msgstr ""
@@ -15610,24 +15065,30 @@ msgstr ""
#. ## EXTRA WIDGET -- SOURCE SIDE
#. #########################################
#. ##### Export options buttons/spinners, etc
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1547
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1493
msgid "Document"
msgstr ""
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1559
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1501 ../src/verbs.cpp:175
+#: ../src/widgets/desktop-widget.cpp:1997
+#: ../share/extensions/printing_marks.inx.h:18
+msgid "Selection"
+msgstr ""
+
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1505
msgctxt "Export dialog"
msgid "Custom"
msgstr ""
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1579
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1525
msgid "Source"
msgstr ""
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1599
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1545
msgid "Cairo"
msgstr ""
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1602
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1548
msgid "Antialias"
msgstr ""
@@ -17333,6 +16794,74 @@ msgstr ""
msgid "Append text"
msgstr ""
+#: ../src/ui/dialog/grid-arrange-tab.cpp:351
+msgid "Arrange in a grid"
+msgstr ""
+
+#: ../src/ui/dialog/grid-arrange-tab.cpp:589
+#: ../src/ui/dialog/object-attributes.cpp:66
+#: ../src/ui/dialog/object-attributes.cpp:75
+#: ../src/widgets/desktop-widget.cpp:666 ../src/widgets/node-toolbar.cpp:581
+msgid "X:"
+msgstr ""
+
+#: ../src/ui/dialog/grid-arrange-tab.cpp:589
+msgid "Horizontal spacing between columns."
+msgstr ""
+
+#: ../src/ui/dialog/grid-arrange-tab.cpp:590
+#: ../src/ui/dialog/object-attributes.cpp:67
+#: ../src/ui/dialog/object-attributes.cpp:76
+#: ../src/widgets/desktop-widget.cpp:676 ../src/widgets/node-toolbar.cpp:599
+msgid "Y:"
+msgstr ""
+
+#: ../src/ui/dialog/grid-arrange-tab.cpp:590
+msgid "Vertical spacing between rows."
+msgstr ""
+
+#: ../src/ui/dialog/grid-arrange-tab.cpp:637
+msgid "_Rows:"
+msgstr ""
+
+#: ../src/ui/dialog/grid-arrange-tab.cpp:646
+msgid "Number of rows"
+msgstr ""
+
+#: ../src/ui/dialog/grid-arrange-tab.cpp:650
+msgid "Equal _height"
+msgstr ""
+
+#: ../src/ui/dialog/grid-arrange-tab.cpp:661
+msgid "If not set, each row has the height of the tallest object in it"
+msgstr ""
+
+#. #### Number of columns ####
+#: ../src/ui/dialog/grid-arrange-tab.cpp:677
+msgid "_Columns:"
+msgstr ""
+
+#: ../src/ui/dialog/grid-arrange-tab.cpp:686
+msgid "Number of columns"
+msgstr ""
+
+#: ../src/ui/dialog/grid-arrange-tab.cpp:690
+msgid "Equal _width"
+msgstr ""
+
+#: ../src/ui/dialog/grid-arrange-tab.cpp:700
+msgid "If not set, each column has the width of the widest object in it"
+msgstr ""
+
+#. #### Radio buttons to control spacing manually or to fit selection bbox ####
+#: ../src/ui/dialog/grid-arrange-tab.cpp:720
+msgid "_Fit into selection box"
+msgstr ""
+
+#: ../src/ui/dialog/grid-arrange-tab.cpp:727
+msgid "_Set spacing:"
+msgstr ""
+
#: ../src/ui/dialog/guides.cpp:47
msgid "Rela_tive change"
msgstr ""
@@ -17351,7 +16880,7 @@ msgctxt "Guides"
msgid "_Y:"
msgstr ""
-#: ../src/ui/dialog/guides.cpp:50 ../src/ui/dialog/object-properties.cpp:64
+#: ../src/ui/dialog/guides.cpp:50 ../src/ui/dialog/object-properties.cpp:59
msgid "_Label:"
msgstr ""
@@ -17363,20 +16892,20 @@ msgstr ""
msgid "_Angle:"
msgstr ""
-#: ../src/ui/dialog/guides.cpp:131
+#: ../src/ui/dialog/guides.cpp:130
msgid "Set guide properties"
msgstr ""
-#: ../src/ui/dialog/guides.cpp:170
+#: ../src/ui/dialog/guides.cpp:160
msgid "Guideline"
msgstr ""
-#: ../src/ui/dialog/guides.cpp:323
+#: ../src/ui/dialog/guides.cpp:310
#, c-format
msgid "Guideline ID: %s"
msgstr ""
-#: ../src/ui/dialog/guides.cpp:329
+#: ../src/ui/dialog/guides.cpp:316
#, c-format
msgid "Current: %s"
msgstr ""
@@ -17720,7 +17249,7 @@ msgid "Zoom"
msgstr ""
#. Measure
-#: ../src/ui/dialog/inkscape-preferences.cpp:381 ../src/verbs.cpp:2682
+#: ../src/ui/dialog/inkscape-preferences.cpp:381 ../src/verbs.cpp:2675
msgctxt "ContextVerb"
msgid "Measure"
msgstr ""
@@ -17775,7 +17304,7 @@ msgid ""
msgstr ""
#. Text
-#: ../src/ui/dialog/inkscape-preferences.cpp:439 ../src/verbs.cpp:2674
+#: ../src/ui/dialog/inkscape-preferences.cpp:439 ../src/verbs.cpp:2667
msgctxt "ContextVerb"
msgid "Text"
msgstr ""
@@ -19625,7 +19154,7 @@ msgid "Number of _Threads:"
msgstr ""
#: ../src/ui/dialog/inkscape-preferences.cpp:1362
-#: ../src/ui/dialog/inkscape-preferences.cpp:1889
+#: ../src/ui/dialog/inkscape-preferences.cpp:1894
msgid "(requires restart)"
msgstr ""
@@ -19749,7 +19278,7 @@ msgid "Default bitmap resolution (in dots per inch) in the Export dialog"
msgstr ""
#: ../src/ui/dialog/inkscape-preferences.cpp:1434
-#: ../src/ui/dialog/xml-tree.cpp:909
+#: ../src/ui/dialog/xml-tree.cpp:912
msgid "Create"
msgstr ""
@@ -19793,214 +19322,225 @@ msgstr ""
msgid "Use default bitmap resolution in favor of information from file"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1466
+#. rendering outlines for pixmap image tags
+#: ../src/ui/dialog/inkscape-preferences.cpp:1468
+msgid "Images in Outline Mode"
+msgstr ""
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:1469
+msgid ""
+"When active will render images while in outline mode instead of a red box "
+"with an x. This is useful for manual tracing."
+msgstr ""
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:1471
msgid "Bitmaps"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1478
+#: ../src/ui/dialog/inkscape-preferences.cpp:1483
msgid ""
"Select a file of predefined shortcuts to use. Any customized shortcuts you "
"create will be added seperately to "
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1481
+#: ../src/ui/dialog/inkscape-preferences.cpp:1486
msgid "Shortcut file:"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1484
+#: ../src/ui/dialog/inkscape-preferences.cpp:1489
#: ../src/ui/dialog/template-load-tab.cpp:48
msgid "Search:"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1496
+#: ../src/ui/dialog/inkscape-preferences.cpp:1501
msgid "Shortcut"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1497
+#: ../src/ui/dialog/inkscape-preferences.cpp:1502
#: ../src/ui/widget/page-sizer.cpp:260
msgid "Description"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1552
-#: ../src/ui/dialog/pixelartdialog.cpp:268
+#: ../src/ui/dialog/inkscape-preferences.cpp:1557
+#: ../src/ui/dialog/pixelartdialog.cpp:296
#: ../src/ui/dialog/svg-fonts-dialog.cpp:698
#: ../src/ui/dialog/tracedialog.cpp:813
#: ../src/ui/widget/preferences-widget.cpp:749
msgid "Reset"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1552
+#: ../src/ui/dialog/inkscape-preferences.cpp:1557
msgid ""
"Remove all your customized keyboard shortcuts, and revert to the shortcuts "
"in the shortcut file listed above"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1556
+#: ../src/ui/dialog/inkscape-preferences.cpp:1561
msgid "Import ..."
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1556
+#: ../src/ui/dialog/inkscape-preferences.cpp:1561
msgid "Import custom keyboard shortcuts from a file"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1559
+#: ../src/ui/dialog/inkscape-preferences.cpp:1564
msgid "Export ..."
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1559
+#: ../src/ui/dialog/inkscape-preferences.cpp:1564
msgid "Export custom keyboard shortcuts to a file"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1569
+#: ../src/ui/dialog/inkscape-preferences.cpp:1574
msgid "Keyboard Shortcuts"
msgstr ""
#. Find this group in the tree
-#: ../src/ui/dialog/inkscape-preferences.cpp:1732
+#: ../src/ui/dialog/inkscape-preferences.cpp:1737
msgid "Misc"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1851
+#: ../src/ui/dialog/inkscape-preferences.cpp:1856
msgid "Set the main spell check language"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1854
+#: ../src/ui/dialog/inkscape-preferences.cpp:1859
msgid "Second language:"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1855
+#: ../src/ui/dialog/inkscape-preferences.cpp:1860
msgid ""
"Set the second spell check language; checking will only stop on words "
"unknown in ALL chosen languages"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1858
+#: ../src/ui/dialog/inkscape-preferences.cpp:1863
msgid "Third language:"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1859
+#: ../src/ui/dialog/inkscape-preferences.cpp:1864
msgid ""
"Set the third spell check language; checking will only stop on words unknown "
"in ALL chosen languages"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1861
+#: ../src/ui/dialog/inkscape-preferences.cpp:1866
msgid "Ignore words with digits"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1863
+#: ../src/ui/dialog/inkscape-preferences.cpp:1868
msgid "Ignore words containing digits, such as \"R2D2\""
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1865
+#: ../src/ui/dialog/inkscape-preferences.cpp:1870
msgid "Ignore words in ALL CAPITALS"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1867
+#: ../src/ui/dialog/inkscape-preferences.cpp:1872
msgid "Ignore words in all capitals, such as \"IUPAC\""
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1869
+#: ../src/ui/dialog/inkscape-preferences.cpp:1874
msgid "Spellcheck"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1889
+#: ../src/ui/dialog/inkscape-preferences.cpp:1894
msgid "Latency _skew:"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1890
+#: ../src/ui/dialog/inkscape-preferences.cpp:1895
msgid ""
"Factor by which the event clock is skewed from the actual time (0.9766 on "
"some systems)"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1892
+#: ../src/ui/dialog/inkscape-preferences.cpp:1897
msgid "Pre-render named icons"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1894
+#: ../src/ui/dialog/inkscape-preferences.cpp:1899
msgid ""
"When on, named icons will be rendered before displaying the ui. This is for "
"working around bugs in GTK+ named icon notification"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1902
+#: ../src/ui/dialog/inkscape-preferences.cpp:1907
msgid "System info"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1906
+#: ../src/ui/dialog/inkscape-preferences.cpp:1911
msgid "User config: "
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1906
+#: ../src/ui/dialog/inkscape-preferences.cpp:1911
msgid "Location of users configuration"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1910
+#: ../src/ui/dialog/inkscape-preferences.cpp:1915
msgid "User preferences: "
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1910
+#: ../src/ui/dialog/inkscape-preferences.cpp:1915
msgid "Location of the users preferences file"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1914
+#: ../src/ui/dialog/inkscape-preferences.cpp:1919
msgid "User extensions: "
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1914
+#: ../src/ui/dialog/inkscape-preferences.cpp:1919
msgid "Location of the users extensions"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1918
+#: ../src/ui/dialog/inkscape-preferences.cpp:1923
msgid "User cache: "
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1918
+#: ../src/ui/dialog/inkscape-preferences.cpp:1923
msgid "Location of users cache"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1926
+#: ../src/ui/dialog/inkscape-preferences.cpp:1931
msgid "Temporary files: "
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1926
+#: ../src/ui/dialog/inkscape-preferences.cpp:1931
msgid "Location of the temporary files used for autosave"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1930
+#: ../src/ui/dialog/inkscape-preferences.cpp:1935
msgid "Inkscape data: "
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1930
+#: ../src/ui/dialog/inkscape-preferences.cpp:1935
msgid "Location of Inkscape data"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1934
+#: ../src/ui/dialog/inkscape-preferences.cpp:1939
msgid "Inkscape extensions: "
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1934
+#: ../src/ui/dialog/inkscape-preferences.cpp:1939
msgid "Location of the Inkscape extensions"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1943
+#: ../src/ui/dialog/inkscape-preferences.cpp:1948
msgid "System data: "
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1943
+#: ../src/ui/dialog/inkscape-preferences.cpp:1948
msgid "Locations of system data"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1967
+#: ../src/ui/dialog/inkscape-preferences.cpp:1972
msgid "Icon theme: "
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1967
+#: ../src/ui/dialog/inkscape-preferences.cpp:1972
msgid "Locations of icon themes"
msgstr ""
-#: ../src/ui/dialog/inkscape-preferences.cpp:1969
+#: ../src/ui/dialog/inkscape-preferences.cpp:1974
msgid "System"
msgstr ""
@@ -20054,7 +19594,7 @@ msgstr ""
msgid "Tablet"
msgstr ""
-#: ../src/ui/dialog/input.cpp:1039 ../src/ui/dialog/input.cpp:1931
+#: ../src/ui/dialog/input.cpp:1039 ../src/ui/dialog/input.cpp:1928
msgid "pad"
msgstr ""
@@ -20121,7 +19661,7 @@ msgstr ""
#. TODO: find an unused layer number, forming name from _("Layer ") + "%d"
#: ../src/ui/dialog/layer-properties.cpp:354
#: ../src/ui/dialog/layer-properties.cpp:410 ../src/verbs.cpp:194
-#: ../src/verbs.cpp:2292
+#: ../src/verbs.cpp:2285
msgid "Layer"
msgstr ""
@@ -20371,70 +19911,50 @@ msgstr ""
msgid "URL:"
msgstr ""
-#: ../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:666 ../src/widgets/node-toolbar.cpp:581
-msgid "X:"
-msgstr ""
-
-#: ../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:676 ../src/widgets/node-toolbar.cpp:599
-msgid "Y:"
-msgstr ""
-
#: ../src/ui/dialog/object-attributes.cpp:70
msgid "Image Rendering:"
msgstr ""
-#: ../src/ui/dialog/object-properties.cpp:63
-#: ../src/ui/dialog/object-properties.cpp:398
-#: ../src/ui/dialog/object-properties.cpp:473
-#: ../src/ui/dialog/object-properties.cpp:480
+#: ../src/ui/dialog/object-properties.cpp:58
+#: ../src/ui/dialog/object-properties.cpp:399
+#: ../src/ui/dialog/object-properties.cpp:470
+#: ../src/ui/dialog/object-properties.cpp:477
msgid "_ID:"
msgstr ""
-#: ../src/ui/dialog/object-properties.cpp:65
+#: ../src/ui/dialog/object-properties.cpp:60
msgid "_Title:"
msgstr ""
-#: ../src/ui/dialog/object-properties.cpp:66
+#: ../src/ui/dialog/object-properties.cpp:61
msgid "_Image Rendering:"
msgstr ""
-#: ../src/ui/dialog/object-properties.cpp:67
-msgid "_Description:"
-msgstr ""
-
-#: ../src/ui/dialog/object-properties.cpp:75
+#: ../src/ui/dialog/object-properties.cpp:62
msgid "_Hide"
msgstr ""
-#: ../src/ui/dialog/object-properties.cpp:76
+#: ../src/ui/dialog/object-properties.cpp:63
msgid "L_ock"
msgstr ""
-#: ../src/ui/dialog/object-properties.cpp:77 ../src/verbs.cpp:2636
-#: ../src/verbs.cpp:2642
-msgid "_Set"
-msgstr ""
-
-#: ../src/ui/dialog/object-properties.cpp:78
-msgid "_Interactivity"
-msgstr ""
-
#. Create the entry box for the object id
-#: ../src/ui/dialog/object-properties.cpp:156
+#: ../src/ui/dialog/object-properties.cpp:139
msgid ""
"The id= attribute (only letters, digits, and the characters .-_: allowed)"
msgstr ""
#. Create the entry box for the object label
-#: ../src/ui/dialog/object-properties.cpp:189
+#: ../src/ui/dialog/object-properties.cpp:174
msgid "A freeform label for the object"
msgstr ""
-#: ../src/ui/dialog/object-properties.cpp:272
+#. Create the frame for the object description
+#: ../src/ui/dialog/object-properties.cpp:225
+msgid "_Description:"
+msgstr ""
+
+#: ../src/ui/dialog/object-properties.cpp:260
msgid ""
"The 'image-rendering' property can influence how a bitmap is up-scaled:\n"
"\t'auto' no preference;\n"
@@ -20455,48 +19975,59 @@ msgstr ""
msgid "Check to make the object insensitive (not selectable by mouse)"
msgstr ""
-#: ../src/ui/dialog/object-properties.cpp:385
-#: ../src/ui/dialog/object-properties.cpp:390
+#. Button for setting the object's id, label, title and description.
+#: ../src/ui/dialog/object-properties.cpp:325 ../src/verbs.cpp:2629
+#: ../src/verbs.cpp:2635
+msgid "_Set"
+msgstr ""
+
+#. Create the frame for interactivity options
+#: ../src/ui/dialog/object-properties.cpp:339
+msgid "_Interactivity"
+msgstr ""
+
+#: ../src/ui/dialog/object-properties.cpp:386
+#: ../src/ui/dialog/object-properties.cpp:391
msgid "Ref"
msgstr ""
-#: ../src/ui/dialog/object-properties.cpp:475
+#: ../src/ui/dialog/object-properties.cpp:472
msgid "Id invalid! "
msgstr ""
-#: ../src/ui/dialog/object-properties.cpp:477
+#: ../src/ui/dialog/object-properties.cpp:474
msgid "Id exists! "
msgstr ""
-#: ../src/ui/dialog/object-properties.cpp:483
+#: ../src/ui/dialog/object-properties.cpp:480
msgid "Set object ID"
msgstr ""
-#: ../src/ui/dialog/object-properties.cpp:497
+#: ../src/ui/dialog/object-properties.cpp:494
msgid "Set object label"
msgstr ""
-#: ../src/ui/dialog/object-properties.cpp:503
+#: ../src/ui/dialog/object-properties.cpp:500
msgid "Set object title"
msgstr ""
-#: ../src/ui/dialog/object-properties.cpp:511
+#: ../src/ui/dialog/object-properties.cpp:509
msgid "Set object description"
msgstr ""
-#: ../src/ui/dialog/object-properties.cpp:555
+#: ../src/ui/dialog/object-properties.cpp:552
msgid "Lock object"
msgstr ""
-#: ../src/ui/dialog/object-properties.cpp:555
+#: ../src/ui/dialog/object-properties.cpp:552
msgid "Unlock object"
msgstr ""
-#: ../src/ui/dialog/object-properties.cpp:572
+#: ../src/ui/dialog/object-properties.cpp:568
msgid "Hide object"
msgstr ""
-#: ../src/ui/dialog/object-properties.cpp:572
+#: ../src/ui/dialog/object-properties.cpp:568
msgid "Unhide object"
msgstr ""
@@ -20554,98 +20085,102 @@ msgstr ""
msgid "Close"
msgstr ""
-#: ../src/ui/dialog/pixelartdialog.cpp:162
+#: ../src/ui/dialog/pixelartdialog.cpp:190
msgid "_Curves (multiplier):"
msgstr ""
-#: ../src/ui/dialog/pixelartdialog.cpp:165
+#: ../src/ui/dialog/pixelartdialog.cpp:193
msgid "Favors connections that are part of a long curve"
msgstr ""
-#: ../src/ui/dialog/pixelartdialog.cpp:176
+#: ../src/ui/dialog/pixelartdialog.cpp:204
msgid "_Islands (weight):"
msgstr ""
-#: ../src/ui/dialog/pixelartdialog.cpp:179
+#: ../src/ui/dialog/pixelartdialog.cpp:207
msgid "Avoid single disconnected pixels"
msgstr ""
-#: ../src/ui/dialog/pixelartdialog.cpp:181
+#: ../src/ui/dialog/pixelartdialog.cpp:209
msgid "A constant vote value"
msgstr ""
-#: ../src/ui/dialog/pixelartdialog.cpp:191
+#: ../src/ui/dialog/pixelartdialog.cpp:219
msgid "Sparse pixels (window _radius):"
msgstr ""
-#: ../src/ui/dialog/pixelartdialog.cpp:200
+#: ../src/ui/dialog/pixelartdialog.cpp:228
msgid "The radius of the window analyzed"
msgstr ""
-#: ../src/ui/dialog/pixelartdialog.cpp:201
+#: ../src/ui/dialog/pixelartdialog.cpp:229
msgid "Sparse pixels (_multiplier):"
msgstr ""
-#: ../src/ui/dialog/pixelartdialog.cpp:212
+#: ../src/ui/dialog/pixelartdialog.cpp:240
msgid "Favors connections that are part of foreground color"
msgstr ""
-#: ../src/ui/dialog/pixelartdialog.cpp:218
+#: ../src/ui/dialog/pixelartdialog.cpp:246
msgid "The heuristic computed vote will be multiplied by this value"
msgstr ""
-#: ../src/ui/dialog/pixelartdialog.cpp:231
+#: ../src/ui/dialog/pixelartdialog.cpp:259
msgid "Heuristics"
msgstr ""
-#: ../src/ui/dialog/pixelartdialog.cpp:238
+#: ../src/ui/dialog/pixelartdialog.cpp:266
msgid "_Voronoi diagram"
msgstr ""
-#: ../src/ui/dialog/pixelartdialog.cpp:239
+#: ../src/ui/dialog/pixelartdialog.cpp:267
msgid "Output composed of straight lines"
msgstr ""
-#: ../src/ui/dialog/pixelartdialog.cpp:245
+#: ../src/ui/dialog/pixelartdialog.cpp:273
msgid "Convert to _B-spline curves"
msgstr ""
-#: ../src/ui/dialog/pixelartdialog.cpp:246
+#: ../src/ui/dialog/pixelartdialog.cpp:274
msgid "Preserve staircasing artifacts"
msgstr ""
-#: ../src/ui/dialog/pixelartdialog.cpp:253
+#: ../src/ui/dialog/pixelartdialog.cpp:281
msgid "_Smooth curves"
msgstr ""
-#: ../src/ui/dialog/pixelartdialog.cpp:254
+#: ../src/ui/dialog/pixelartdialog.cpp:282
msgid "The Kopf-Lischinski algorithm"
msgstr ""
-#: ../src/ui/dialog/pixelartdialog.cpp:261
+#: ../src/ui/dialog/pixelartdialog.cpp:289
msgid "Output"
msgstr ""
-#: ../src/ui/dialog/pixelartdialog.cpp:269
+#: ../src/ui/dialog/pixelartdialog.cpp:297
#: ../src/ui/dialog/tracedialog.cpp:814
msgid "Reset all settings to defaults"
msgstr ""
-#: ../src/ui/dialog/pixelartdialog.cpp:274
+#: ../src/ui/dialog/pixelartdialog.cpp:302
#: ../src/ui/dialog/tracedialog.cpp:819
msgid "Abort a trace in progress"
msgstr ""
-#: ../src/ui/dialog/pixelartdialog.cpp:278
+#: ../src/ui/dialog/pixelartdialog.cpp:306
#: ../src/ui/dialog/tracedialog.cpp:823
msgid "Execute the trace"
msgstr ""
-#: ../src/ui/dialog/pixelartdialog.cpp:362
-msgid "Trace pixel art"
+#: ../src/ui/dialog/pixelartdialog.cpp:388
+msgid ""
+"Image looks too big. Process may take a while and is wise to save your "
+"document before continue.\n"
+"\n"
+"Continue the procedure (without saving)?"
msgstr ""
-#: ../src/ui/dialog/pixelartdialog.cpp:376
+#: ../src/ui/dialog/pixelartdialog.cpp:422
msgid ""
"Image looks too big. Process may take a while and it is wise to save your "
"document before continuing.\n"
@@ -20653,6 +20188,69 @@ msgid ""
"Continue the procedure (without saving)?"
msgstr ""
+#: ../src/ui/dialog/pixelartdialog.cpp:499
+msgid "Trace pixel art"
+msgstr ""
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:43
+msgctxt "Polar arrange tab"
+msgid "Anchor point:"
+msgstr ""
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:47
+msgctxt "Polar arrange tab"
+msgid "Object's bounding box:"
+msgstr ""
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:54
+msgctxt "Polar arrange tab"
+msgid "Object's rotational center"
+msgstr ""
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:59
+msgctxt "Polar arrange tab"
+msgid "Arrange on:"
+msgstr ""
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:63
+msgctxt "Polar arrange tab"
+msgid "First selected circle/ellipse/arc"
+msgstr ""
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:68
+msgctxt "Polar arrange tab"
+msgid "Last selected circle/ellipse/arc"
+msgstr ""
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:73
+msgctxt "Polar arrange tab"
+msgid "Parameterized:"
+msgstr ""
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:78
+msgid "Center X/Y:"
+msgstr ""
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:91
+msgid "Radius X/Y:"
+msgstr ""
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:104
+msgid "Angle X/Y:"
+msgstr ""
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:118
+msgid "Rotate objects"
+msgstr ""
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:306
+msgid "Couldn't find an ellipse in selection"
+msgstr ""
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:371
+msgid "Arrange on ellipse"
+msgstr ""
+
#: ../src/ui/dialog/print.cpp:104
msgid "Could not open temporary PNG for bitmap printing"
msgstr ""
@@ -20740,11 +20338,11 @@ msgstr ""
msgid "Not in dictionary (%s): <b>%s</b>"
msgstr ""
-#: ../src/ui/dialog/spellcheck.cpp:725
+#: ../src/ui/dialog/spellcheck.cpp:727
msgid "<i>Checking...</i>"
msgstr ""
-#: ../src/ui/dialog/spellcheck.cpp:794
+#: ../src/ui/dialog/spellcheck.cpp:796
msgid "Fix spelling"
msgstr ""
@@ -21007,31 +20605,31 @@ msgid "AaBbCcIiPpQq12369$€¢?.;/()"
msgstr ""
#. Align buttons
-#: ../src/ui/dialog/text-edit.cpp:97 ../src/widgets/text-toolbar.cpp:1336
-#: ../src/widgets/text-toolbar.cpp:1337
+#: ../src/ui/dialog/text-edit.cpp:97 ../src/widgets/text-toolbar.cpp:1342
+#: ../src/widgets/text-toolbar.cpp:1343
msgid "Align left"
msgstr ""
-#: ../src/ui/dialog/text-edit.cpp:98 ../src/widgets/text-toolbar.cpp:1344
-#: ../src/widgets/text-toolbar.cpp:1345
+#: ../src/ui/dialog/text-edit.cpp:98 ../src/widgets/text-toolbar.cpp:1350
+#: ../src/widgets/text-toolbar.cpp:1351
msgid "Align center"
msgstr ""
-#: ../src/ui/dialog/text-edit.cpp:99 ../src/widgets/text-toolbar.cpp:1352
-#: ../src/widgets/text-toolbar.cpp:1353
+#: ../src/ui/dialog/text-edit.cpp:99 ../src/widgets/text-toolbar.cpp:1358
+#: ../src/widgets/text-toolbar.cpp:1359
msgid "Align right"
msgstr ""
-#: ../src/ui/dialog/text-edit.cpp:100 ../src/widgets/text-toolbar.cpp:1361
+#: ../src/ui/dialog/text-edit.cpp:100 ../src/widgets/text-toolbar.cpp:1367
msgid "Justify (only flowed text)"
msgstr ""
#. Direction buttons
-#: ../src/ui/dialog/text-edit.cpp:109 ../src/widgets/text-toolbar.cpp:1396
+#: ../src/ui/dialog/text-edit.cpp:109 ../src/widgets/text-toolbar.cpp:1402
msgid "Horizontal text"
msgstr ""
-#: ../src/ui/dialog/text-edit.cpp:110 ../src/widgets/text-toolbar.cpp:1403
+#: ../src/ui/dialog/text-edit.cpp:110 ../src/widgets/text-toolbar.cpp:1409
msgid "Vertical text"
msgstr ""
@@ -21044,77 +20642,26 @@ 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:1479
+#: ../src/ui/tools/text-tool.cpp:1455
msgid "Set text style"
msgstr ""
-#: ../src/ui/dialog/tile.cpp:349
-msgid "Arrange in a grid"
-msgstr ""
-
-#: ../src/ui/dialog/tile.cpp:618
-msgid "Horizontal spacing between columns."
-msgstr ""
-
-#: ../src/ui/dialog/tile.cpp:619
-msgid "Vertical spacing between rows."
-msgstr ""
-
-#: ../src/ui/dialog/tile.cpp:666
-msgid "_Rows:"
-msgstr ""
-
-#: ../src/ui/dialog/tile.cpp:675
-msgid "Number of rows"
-msgstr ""
-
-#: ../src/ui/dialog/tile.cpp:679
-msgid "Equal _height"
-msgstr ""
-
-#: ../src/ui/dialog/tile.cpp:690
-msgid "If not set, each row has the height of the tallest object in it"
-msgstr ""
-
-#. #### Radio buttons to control vertical alignment ####
-#. #### Radio buttons to control horizontal alignment ####
-#: ../src/ui/dialog/tile.cpp:696 ../src/ui/dialog/tile.cpp:768
-msgid "Align:"
-msgstr ""
-
-#. #### Number of columns ####
-#: ../src/ui/dialog/tile.cpp:738
-msgid "_Columns:"
-msgstr ""
-
-#: ../src/ui/dialog/tile.cpp:747
-msgid "Number of columns"
-msgstr ""
-
-#: ../src/ui/dialog/tile.cpp:751
-msgid "Equal _width"
-msgstr ""
-
-#: ../src/ui/dialog/tile.cpp:761
-msgid "If not set, each column has the width of the widest object in it"
-msgstr ""
-
-#. #### Radio buttons to control spacing manually or to fit selection bbox ####
-#: ../src/ui/dialog/tile.cpp:807
-msgid "_Fit into selection box"
+#: ../src/ui/dialog/tile.cpp:36
+msgctxt "Arrange dialog"
+msgid "Rectangular grid"
msgstr ""
-#: ../src/ui/dialog/tile.cpp:814
-msgid "_Set spacing:"
+#: ../src/ui/dialog/tile.cpp:37
+msgctxt "Arrange dialog"
+msgid "Polar Coordinates"
msgstr ""
-#. ## The OK button
-#: ../src/ui/dialog/tile.cpp:876
-msgctxt "Rows and columns dialog"
+#: ../src/ui/dialog/tile.cpp:40
+msgctxt "Arrange dialog"
msgid "_Arrange"
msgstr ""
-#: ../src/ui/dialog/tile.cpp:878
+#: ../src/ui/dialog/tile.cpp:42
msgid "Arrange selected objects"
msgstr ""
@@ -21514,25 +21061,25 @@ msgstr ""
msgid "Rotation angle (positive = clockwise)"
msgstr ""
-#: ../src/ui/dialog/xml-tree.cpp:70 ../src/ui/dialog/xml-tree.cpp:123
+#: ../src/ui/dialog/xml-tree.cpp:70 ../src/ui/dialog/xml-tree.cpp:126
msgid "New element node"
msgstr ""
-#: ../src/ui/dialog/xml-tree.cpp:71 ../src/ui/dialog/xml-tree.cpp:129
+#: ../src/ui/dialog/xml-tree.cpp:71 ../src/ui/dialog/xml-tree.cpp:132
msgid "New text node"
msgstr ""
-#: ../src/ui/dialog/xml-tree.cpp:72 ../src/ui/dialog/xml-tree.cpp:143
+#: ../src/ui/dialog/xml-tree.cpp:72 ../src/ui/dialog/xml-tree.cpp:146
msgid "nodeAsInXMLdialogTooltip|Delete node"
msgstr ""
-#: ../src/ui/dialog/xml-tree.cpp:73 ../src/ui/dialog/xml-tree.cpp:135
-#: ../src/ui/dialog/xml-tree.cpp:974
+#: ../src/ui/dialog/xml-tree.cpp:73 ../src/ui/dialog/xml-tree.cpp:138
+#: ../src/ui/dialog/xml-tree.cpp:977
msgid "Duplicate node"
msgstr ""
-#: ../src/ui/dialog/xml-tree.cpp:79 ../src/ui/dialog/xml-tree.cpp:188
-#: ../src/ui/dialog/xml-tree.cpp:1010
+#: ../src/ui/dialog/xml-tree.cpp:79 ../src/ui/dialog/xml-tree.cpp:191
+#: ../src/ui/dialog/xml-tree.cpp:1013
msgid "Delete attribute"
msgstr ""
@@ -21540,78 +21087,78 @@ msgstr ""
msgid "Set"
msgstr ""
-#: ../src/ui/dialog/xml-tree.cpp:118
+#: ../src/ui/dialog/xml-tree.cpp:121
msgid "Drag to reorder nodes"
msgstr ""
-#: ../src/ui/dialog/xml-tree.cpp:149 ../src/ui/dialog/xml-tree.cpp:150
-#: ../src/ui/dialog/xml-tree.cpp:1131
+#: ../src/ui/dialog/xml-tree.cpp:152 ../src/ui/dialog/xml-tree.cpp:153
+#: ../src/ui/dialog/xml-tree.cpp:1134
msgid "Unindent node"
msgstr ""
-#: ../src/ui/dialog/xml-tree.cpp:154 ../src/ui/dialog/xml-tree.cpp:155
-#: ../src/ui/dialog/xml-tree.cpp:1109
+#: ../src/ui/dialog/xml-tree.cpp:157 ../src/ui/dialog/xml-tree.cpp:158
+#: ../src/ui/dialog/xml-tree.cpp:1112
msgid "Indent node"
msgstr ""
-#: ../src/ui/dialog/xml-tree.cpp:159 ../src/ui/dialog/xml-tree.cpp:160
-#: ../src/ui/dialog/xml-tree.cpp:1060
+#: ../src/ui/dialog/xml-tree.cpp:162 ../src/ui/dialog/xml-tree.cpp:163
+#: ../src/ui/dialog/xml-tree.cpp:1063
msgid "Raise node"
msgstr ""
-#: ../src/ui/dialog/xml-tree.cpp:164 ../src/ui/dialog/xml-tree.cpp:165
-#: ../src/ui/dialog/xml-tree.cpp:1078
+#: ../src/ui/dialog/xml-tree.cpp:167 ../src/ui/dialog/xml-tree.cpp:168
+#: ../src/ui/dialog/xml-tree.cpp:1081
msgid "Lower node"
msgstr ""
-#: ../src/ui/dialog/xml-tree.cpp:205
+#: ../src/ui/dialog/xml-tree.cpp:208
msgid "Attribute name"
msgstr ""
-#: ../src/ui/dialog/xml-tree.cpp:220
+#: ../src/ui/dialog/xml-tree.cpp:223
msgid "Attribute value"
msgstr ""
-#: ../src/ui/dialog/xml-tree.cpp:308
+#: ../src/ui/dialog/xml-tree.cpp:311
msgid "<b>Click</b> to select nodes, <b>drag</b> to rearrange."
msgstr ""
-#: ../src/ui/dialog/xml-tree.cpp:319
+#: ../src/ui/dialog/xml-tree.cpp:322
msgid "<b>Click</b> attribute to edit."
msgstr ""
-#: ../src/ui/dialog/xml-tree.cpp:323
+#: ../src/ui/dialog/xml-tree.cpp:326
#, c-format
msgid ""
"Attribute <b>%s</b> selected. Press <b>Ctrl+Enter</b> when done editing to "
"commit changes."
msgstr ""
-#: ../src/ui/dialog/xml-tree.cpp:563
+#: ../src/ui/dialog/xml-tree.cpp:566
msgid "Drag XML subtree"
msgstr ""
-#: ../src/ui/dialog/xml-tree.cpp:865
+#: ../src/ui/dialog/xml-tree.cpp:868
msgid "New element node..."
msgstr ""
-#: ../src/ui/dialog/xml-tree.cpp:903
+#: ../src/ui/dialog/xml-tree.cpp:906
msgid "Cancel"
msgstr ""
-#: ../src/ui/dialog/xml-tree.cpp:940
+#: ../src/ui/dialog/xml-tree.cpp:943
msgid "Create new element node"
msgstr ""
-#: ../src/ui/dialog/xml-tree.cpp:956
+#: ../src/ui/dialog/xml-tree.cpp:959
msgid "Create new text node"
msgstr ""
-#: ../src/ui/dialog/xml-tree.cpp:991
+#: ../src/ui/dialog/xml-tree.cpp:994
msgid "nodeAsInXMLinHistoryDialog|Delete node"
msgstr ""
-#: ../src/ui/dialog/xml-tree.cpp:1034
+#: ../src/ui/dialog/xml-tree.cpp:1037
msgid "Change attribute"
msgstr ""
@@ -21827,38 +21374,38 @@ msgctxt "Path handle tip"
msgid "Move handle by %s, %s; angle %.2f°, length %s"
msgstr ""
-#: ../src/ui/tool/node.cpp:1266
+#: ../src/ui/tool/node.cpp:1270
msgctxt "Path node tip"
msgid "<b>Shift</b>: drag out a handle, click to toggle selection"
msgstr ""
-#: ../src/ui/tool/node.cpp:1268
+#: ../src/ui/tool/node.cpp:1272
msgctxt "Path node tip"
msgid "<b>Shift</b>: click to toggle selection"
msgstr ""
-#: ../src/ui/tool/node.cpp:1273
+#: ../src/ui/tool/node.cpp:1277
msgctxt "Path node tip"
msgid "<b>Ctrl+Alt</b>: move along handle lines, click to delete node"
msgstr ""
-#: ../src/ui/tool/node.cpp:1276
+#: ../src/ui/tool/node.cpp:1280
msgctxt "Path node tip"
msgid "<b>Ctrl</b>: move along axes, click to change node type"
msgstr ""
-#: ../src/ui/tool/node.cpp:1280
+#: ../src/ui/tool/node.cpp:1284
msgctxt "Path node tip"
msgid "<b>Alt</b>: sculpt nodes"
msgstr ""
-#: ../src/ui/tool/node.cpp:1288
+#: ../src/ui/tool/node.cpp:1292
#, c-format
msgctxt "Path node tip"
msgid "<b>%s</b>: drag to shape the path (more: Shift, Ctrl, Alt)"
msgstr ""
-#: ../src/ui/tool/node.cpp:1291
+#: ../src/ui/tool/node.cpp:1295
#, c-format
msgctxt "Path node tip"
msgid ""
@@ -21866,7 +21413,7 @@ msgid ""
"(more: Shift, Ctrl, Alt)"
msgstr ""
-#: ../src/ui/tool/node.cpp:1294
+#: ../src/ui/tool/node.cpp:1298
#, c-format
msgctxt "Path node tip"
msgid ""
@@ -21874,17 +21421,17 @@ msgid ""
"Shift, Ctrl, Alt)"
msgstr ""
-#: ../src/ui/tool/node.cpp:1305
+#: ../src/ui/tool/node.cpp:1309
#, c-format
msgctxt "Path node tip"
msgid "Move node by %s, %s"
msgstr ""
-#: ../src/ui/tool/node.cpp:1316
+#: ../src/ui/tool/node.cpp:1320
msgid "Symmetric node"
msgstr ""
-#: ../src/ui/tool/node.cpp:1317
+#: ../src/ui/tool/node.cpp:1321
msgid "Auto-smooth node"
msgstr ""
@@ -21914,6 +21461,118 @@ msgstr ""
msgid "Retract handle"
msgstr ""
+#: ../src/ui/tool/transform-handle-set.cpp:195
+msgctxt "Transform handle tip"
+msgid "<b>Shift+Ctrl</b>: scale uniformly about the rotation center"
+msgstr ""
+
+#: ../src/ui/tool/transform-handle-set.cpp:197
+msgctxt "Transform handle tip"
+msgid "<b>Ctrl:</b> scale uniformly"
+msgstr ""
+
+#: ../src/ui/tool/transform-handle-set.cpp:202
+msgctxt "Transform handle tip"
+msgid ""
+"<b>Shift+Alt</b>: scale using an integer ratio about the rotation center"
+msgstr ""
+
+#: ../src/ui/tool/transform-handle-set.cpp:204
+msgctxt "Transform handle tip"
+msgid "<b>Shift</b>: scale from the rotation center"
+msgstr ""
+
+#: ../src/ui/tool/transform-handle-set.cpp:207
+msgctxt "Transform handle tip"
+msgid "<b>Alt</b>: scale using an integer ratio"
+msgstr ""
+
+#: ../src/ui/tool/transform-handle-set.cpp:209
+msgctxt "Transform handle tip"
+msgid "<b>Scale handle</b>: drag to scale the selection"
+msgstr ""
+
+#: ../src/ui/tool/transform-handle-set.cpp:214
+#, c-format
+msgctxt "Transform handle tip"
+msgid "Scale by %.2f%% x %.2f%%"
+msgstr ""
+
+#: ../src/ui/tool/transform-handle-set.cpp:438
+#, c-format
+msgctxt "Transform handle tip"
+msgid ""
+"<b>Shift+Ctrl</b>: rotate around the opposite corner and snap angle to %f° "
+"increments"
+msgstr ""
+
+#: ../src/ui/tool/transform-handle-set.cpp:441
+msgctxt "Transform handle tip"
+msgid "<b>Shift</b>: rotate around the opposite corner"
+msgstr ""
+
+#: ../src/ui/tool/transform-handle-set.cpp:445
+#, c-format
+msgctxt "Transform handle tip"
+msgid "<b>Ctrl</b>: snap angle to %f° increments"
+msgstr ""
+
+#: ../src/ui/tool/transform-handle-set.cpp:447
+msgctxt "Transform handle tip"
+msgid ""
+"<b>Rotation handle</b>: drag to rotate the selection around the rotation "
+"center"
+msgstr ""
+
+#. event
+#: ../src/ui/tool/transform-handle-set.cpp:452
+#, c-format
+msgctxt "Transform handle tip"
+msgid "Rotate by %.2f°"
+msgstr ""
+
+#: ../src/ui/tool/transform-handle-set.cpp:578
+#, c-format
+msgctxt "Transform handle tip"
+msgid ""
+"<b>Shift+Ctrl</b>: skew about the rotation center with snapping to %f° "
+"increments"
+msgstr ""
+
+#: ../src/ui/tool/transform-handle-set.cpp:581
+msgctxt "Transform handle tip"
+msgid "<b>Shift</b>: skew about the rotation center"
+msgstr ""
+
+#: ../src/ui/tool/transform-handle-set.cpp:585
+#, c-format
+msgctxt "Transform handle tip"
+msgid "<b>Ctrl</b>: snap skew angle to %f° increments"
+msgstr ""
+
+#: ../src/ui/tool/transform-handle-set.cpp:588
+msgctxt "Transform handle tip"
+msgid ""
+"<b>Skew handle</b>: drag to skew (shear) selection about the opposite handle"
+msgstr ""
+
+#: ../src/ui/tool/transform-handle-set.cpp:594
+#, c-format
+msgctxt "Transform handle tip"
+msgid "Skew horizontally by %.2f°"
+msgstr ""
+
+#: ../src/ui/tool/transform-handle-set.cpp:597
+#, c-format
+msgctxt "Transform handle tip"
+msgid "Skew vertically by %.2f°"
+msgstr ""
+
+#: ../src/ui/tool/transform-handle-set.cpp:656
+msgctxt "Transform handle tip"
+msgid "<b>Rotation center</b>: drag to change the origin of transforms"
+msgstr ""
+
#: ../src/ui/tools/arc-tool.cpp:252
msgid ""
"<b>Ctrl</b>: make circle or integer-ratio ellipse, snap arc/segment angle"
@@ -21981,41 +21640,41 @@ msgstr ""
msgid "Draw calligraphic stroke"
msgstr ""
-#: ../src/ui/tools/connector-tool.cpp:503
+#: ../src/ui/tools/connector-tool.cpp:499
msgid "Creating new connector"
msgstr ""
-#: ../src/ui/tools/connector-tool.cpp:752
+#: ../src/ui/tools/connector-tool.cpp:740
msgid "Connector endpoint drag cancelled."
msgstr ""
-#: ../src/ui/tools/connector-tool.cpp:796
+#: ../src/ui/tools/connector-tool.cpp:783
msgid "Reroute connector"
msgstr ""
-#: ../src/ui/tools/connector-tool.cpp:951
+#: ../src/ui/tools/connector-tool.cpp:936
msgid "Create connector"
msgstr ""
-#: ../src/ui/tools/connector-tool.cpp:969
+#: ../src/ui/tools/connector-tool.cpp:953
msgid "Finishing connector"
msgstr ""
-#: ../src/ui/tools/connector-tool.cpp:1205
+#: ../src/ui/tools/connector-tool.cpp:1191
msgid "<b>Connector endpoint</b>: drag to reroute or connect to new shapes"
msgstr ""
-#: ../src/ui/tools/connector-tool.cpp:1345
+#: ../src/ui/tools/connector-tool.cpp:1336
msgid "Select <b>at least one non-connector object</b>."
msgstr ""
-#: ../src/ui/tools/connector-tool.cpp:1350
-#: ../src/widgets/connector-toolbar.cpp:311
+#: ../src/ui/tools/connector-tool.cpp:1341
+#: ../src/widgets/connector-toolbar.cpp:314
msgid "Make connectors avoid selected objects"
msgstr ""
-#: ../src/ui/tools/connector-tool.cpp:1351
-#: ../src/widgets/connector-toolbar.cpp:321
+#: ../src/ui/tools/connector-tool.cpp:1342
+#: ../src/widgets/connector-toolbar.cpp:324
msgid "Make connectors ignore selected objects"
msgstr ""
@@ -22045,11 +21704,11 @@ msgstr ""
msgid "Set picked color"
msgstr ""
-#: ../src/ui/tools/eraser-tool.cpp:436
+#: ../src/ui/tools/eraser-tool.cpp:437
msgid "<b>Drawing</b> an eraser stroke"
msgstr ""
-#: ../src/ui/tools/eraser-tool.cpp:769
+#: ../src/ui/tools/eraser-tool.cpp:770
msgid "Draw eraser stroke"
msgstr ""
@@ -22337,97 +21996,97 @@ msgctxt "Node tool tip"
msgid "Drag to select objects to edit"
msgstr ""
-#: ../src/ui/tools/pencil-tool.cpp:206 ../src/ui/tools/pen-tool.cpp:409
+#: ../src/ui/tools/pen-tool.cpp:186 ../src/ui/tools/pencil-tool.cpp:465
+msgid "Drawing cancelled"
+msgstr ""
+
+#: ../src/ui/tools/pen-tool.cpp:407 ../src/ui/tools/pencil-tool.cpp:203
msgid "Continuing selected path"
msgstr ""
-#: ../src/ui/tools/pencil-tool.cpp:214 ../src/ui/tools/pen-tool.cpp:419
+#: ../src/ui/tools/pen-tool.cpp:417 ../src/ui/tools/pencil-tool.cpp:211
msgid "Creating new path"
msgstr ""
-#: ../src/ui/tools/pencil-tool.cpp:217 ../src/ui/tools/pen-tool.cpp:421
+#: ../src/ui/tools/pen-tool.cpp:419 ../src/ui/tools/pencil-tool.cpp:214
msgid "Appending to selected path"
msgstr ""
-#: ../src/ui/tools/pencil-tool.cpp:320
-msgid "<b>Release</b> here to close and finish the path."
-msgstr ""
-
-#: ../src/ui/tools/pencil-tool.cpp:326
-msgid "Drawing a freehand path"
-msgstr ""
-
-#: ../src/ui/tools/pencil-tool.cpp:331
-msgid "<b>Drag</b> to continue the path from this point."
-msgstr ""
-
-#. Write curves to object
-#: ../src/ui/tools/pencil-tool.cpp:421
-msgid "Finishing freehand"
-msgstr ""
-
-#: ../src/ui/tools/pencil-tool.cpp:475 ../src/ui/tools/pen-tool.cpp:186
-msgid "Drawing cancelled"
-msgstr ""
-
-#: ../src/ui/tools/pencil-tool.cpp:523
-msgid ""
-"<b>Sketch mode</b>: holding <b>Alt</b> interpolates between sketched paths. "
-"Release <b>Alt</b> to finalize."
-msgstr ""
-
-#: ../src/ui/tools/pencil-tool.cpp:549
-msgid "Finishing freehand sketch"
-msgstr ""
-
-#: ../src/ui/tools/pen-tool.cpp:580
+#: ../src/ui/tools/pen-tool.cpp:575
msgid "<b>Click</b> or <b>click and drag</b> to close and finish the path."
msgstr ""
-#: ../src/ui/tools/pen-tool.cpp:590
+#: ../src/ui/tools/pen-tool.cpp:585
msgid ""
"<b>Click</b> or <b>click and drag</b> to continue the path from this point."
msgstr ""
-#: ../src/ui/tools/pen-tool.cpp:1178
+#: ../src/ui/tools/pen-tool.cpp:1198
#, c-format
msgid ""
"<b>Curve segment</b>: angle %3.2f&#176;, distance %s; with <b>Ctrl</b> to "
"snap angle, <b>Enter</b> to finish the path"
msgstr ""
-#: ../src/ui/tools/pen-tool.cpp:1179
+#: ../src/ui/tools/pen-tool.cpp:1199
#, c-format
msgid ""
"<b>Line segment</b>: angle %3.2f&#176;, distance %s; with <b>Ctrl</b> to "
"snap angle, <b>Enter</b> to finish the path"
msgstr ""
-#: ../src/ui/tools/pen-tool.cpp:1195
+#: ../src/ui/tools/pen-tool.cpp:1215
#, c-format
msgid ""
"<b>Curve handle</b>: angle %3.2f&#176;, length %s; with <b>Ctrl</b> to snap "
"angle"
msgstr ""
-#: ../src/ui/tools/pen-tool.cpp:1217
+#: ../src/ui/tools/pen-tool.cpp:1237
#, c-format
msgid ""
"<b>Curve handle, symmetric</b>: angle %3.2f&#176;, length %s; with <b>Ctrl</"
"b> to snap angle, with <b>Shift</b> to move this handle only"
msgstr ""
-#: ../src/ui/tools/pen-tool.cpp:1218
+#: ../src/ui/tools/pen-tool.cpp:1238
#, c-format
msgid ""
"<b>Curve handle</b>: angle %3.2f&#176;, length %s; with <b>Ctrl</b> to snap "
"angle, with <b>Shift</b> to move this handle only"
msgstr ""
-#: ../src/ui/tools/pen-tool.cpp:1262
+#: ../src/ui/tools/pen-tool.cpp:1281
msgid "Drawing finished"
msgstr ""
+#: ../src/ui/tools/pencil-tool.cpp:315
+msgid "<b>Release</b> here to close and finish the path."
+msgstr ""
+
+#: ../src/ui/tools/pencil-tool.cpp:321
+msgid "Drawing a freehand path"
+msgstr ""
+
+#: ../src/ui/tools/pencil-tool.cpp:326
+msgid "<b>Drag</b> to continue the path from this point."
+msgstr ""
+
+#. Write curves to object
+#: ../src/ui/tools/pencil-tool.cpp:411
+msgid "Finishing freehand"
+msgstr ""
+
+#: ../src/ui/tools/pencil-tool.cpp:514
+msgid ""
+"<b>Sketch mode</b>: holding <b>Alt</b> interpolates between sketched paths. "
+"Release <b>Alt</b> to finalize."
+msgstr ""
+
+#: ../src/ui/tools/pencil-tool.cpp:541
+msgid "Finishing freehand sketch"
+msgstr ""
+
#: ../src/ui/tools/rect-tool.cpp:288
msgid ""
"<b>Ctrl</b>: make square or integer-ratio rect, lock a rounded corner "
@@ -22599,128 +22258,128 @@ msgstr ""
msgid "Create star"
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:384
+#: ../src/ui/tools/text-tool.cpp:379
msgid "<b>Click</b> to edit the text, <b>drag</b> to select part of the text."
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:386
+#: ../src/ui/tools/text-tool.cpp:381
msgid ""
"<b>Click</b> to edit the flowed text, <b>drag</b> to select part of the text."
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:440
+#: ../src/ui/tools/text-tool.cpp:435
msgid "Create text"
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:465
+#: ../src/ui/tools/text-tool.cpp:460
msgid "Non-printable character"
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:480
+#: ../src/ui/tools/text-tool.cpp:475
msgid "Insert Unicode character"
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:515
+#: ../src/ui/tools/text-tool.cpp:510
#, c-format
msgid "Unicode (<b>Enter</b> to finish): %s: %s"
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:517 ../src/ui/tools/text-tool.cpp:824
+#: ../src/ui/tools/text-tool.cpp:512 ../src/ui/tools/text-tool.cpp:817
msgid "Unicode (<b>Enter</b> to finish): "
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:600
+#: ../src/ui/tools/text-tool.cpp:595
#, c-format
msgid "<b>Flowed text frame</b>: %s &#215; %s"
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:658
+#: ../src/ui/tools/text-tool.cpp:653
msgid "Type text; <b>Enter</b> to start new line."
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:669
+#: ../src/ui/tools/text-tool.cpp:664
msgid "Flowed text is created."
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:671
+#: ../src/ui/tools/text-tool.cpp:665
msgid "Create flowed text"
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:673
+#: ../src/ui/tools/text-tool.cpp:667
msgid ""
"The frame is <b>too small</b> for the current font size. Flowed text not "
"created."
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:809
+#: ../src/ui/tools/text-tool.cpp:803
msgid "No-break space"
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:811
+#: ../src/ui/tools/text-tool.cpp:804
msgid "Insert no-break space"
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:848
+#: ../src/ui/tools/text-tool.cpp:840
msgid "Make bold"
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:866
+#: ../src/ui/tools/text-tool.cpp:857
msgid "Make italic"
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:905
+#: ../src/ui/tools/text-tool.cpp:895
msgid "New line"
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:947
+#: ../src/ui/tools/text-tool.cpp:936
msgid "Backspace"
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:1003
+#: ../src/ui/tools/text-tool.cpp:990
msgid "Kern to the left"
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:1028
+#: ../src/ui/tools/text-tool.cpp:1014
msgid "Kern to the right"
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:1053
+#: ../src/ui/tools/text-tool.cpp:1038
msgid "Kern up"
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:1078
+#: ../src/ui/tools/text-tool.cpp:1062
msgid "Kern down"
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:1154
+#: ../src/ui/tools/text-tool.cpp:1137
msgid "Rotate counterclockwise"
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:1175
+#: ../src/ui/tools/text-tool.cpp:1157
msgid "Rotate clockwise"
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:1192
+#: ../src/ui/tools/text-tool.cpp:1173
msgid "Contract line spacing"
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:1199
+#: ../src/ui/tools/text-tool.cpp:1179
msgid "Contract letter spacing"
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:1217
+#: ../src/ui/tools/text-tool.cpp:1196
msgid "Expand line spacing"
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:1224
+#: ../src/ui/tools/text-tool.cpp:1202
msgid "Expand letter spacing"
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:1354
+#: ../src/ui/tools/text-tool.cpp:1332
msgid "Paste text"
msgstr ""
-#: ../src/ui/tools/text-tool.cpp:1608
+#: ../src/ui/tools/text-tool.cpp:1583
#, c-format
msgid ""
"Type or edit flowed text (%d character%s); <b>Enter</b> to start new "
@@ -22731,7 +22390,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: ../src/ui/tools/text-tool.cpp:1610
+#: ../src/ui/tools/text-tool.cpp:1585
#, c-format
msgid "Type or edit text (%d character%s); <b>Enter</b> to start new line."
msgid_plural ""
@@ -22739,11 +22398,11 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: ../src/ui/tools/text-tool.cpp:1720
+#: ../src/ui/tools/text-tool.cpp:1695
msgid "Type text"
msgstr ""
-#: ../src/ui/tools/tool-base.cpp:695
+#: ../src/ui/tools/tool-base.cpp:703
msgid "<b>Space+mouse move</b> to pan canvas"
msgstr ""
@@ -22871,118 +22530,6 @@ msgstr ""
msgid "Blur tweak"
msgstr ""
-#: ../src/ui/tool/transform-handle-set.cpp:195
-msgctxt "Transform handle tip"
-msgid "<b>Shift+Ctrl</b>: scale uniformly about the rotation center"
-msgstr ""
-
-#: ../src/ui/tool/transform-handle-set.cpp:197
-msgctxt "Transform handle tip"
-msgid "<b>Ctrl:</b> scale uniformly"
-msgstr ""
-
-#: ../src/ui/tool/transform-handle-set.cpp:202
-msgctxt "Transform handle tip"
-msgid ""
-"<b>Shift+Alt</b>: scale using an integer ratio about the rotation center"
-msgstr ""
-
-#: ../src/ui/tool/transform-handle-set.cpp:204
-msgctxt "Transform handle tip"
-msgid "<b>Shift</b>: scale from the rotation center"
-msgstr ""
-
-#: ../src/ui/tool/transform-handle-set.cpp:207
-msgctxt "Transform handle tip"
-msgid "<b>Alt</b>: scale using an integer ratio"
-msgstr ""
-
-#: ../src/ui/tool/transform-handle-set.cpp:209
-msgctxt "Transform handle tip"
-msgid "<b>Scale handle</b>: drag to scale the selection"
-msgstr ""
-
-#: ../src/ui/tool/transform-handle-set.cpp:214
-#, c-format
-msgctxt "Transform handle tip"
-msgid "Scale by %.2f%% x %.2f%%"
-msgstr ""
-
-#: ../src/ui/tool/transform-handle-set.cpp:438
-#, c-format
-msgctxt "Transform handle tip"
-msgid ""
-"<b>Shift+Ctrl</b>: rotate around the opposite corner and snap angle to %f° "
-"increments"
-msgstr ""
-
-#: ../src/ui/tool/transform-handle-set.cpp:441
-msgctxt "Transform handle tip"
-msgid "<b>Shift</b>: rotate around the opposite corner"
-msgstr ""
-
-#: ../src/ui/tool/transform-handle-set.cpp:445
-#, c-format
-msgctxt "Transform handle tip"
-msgid "<b>Ctrl</b>: snap angle to %f° increments"
-msgstr ""
-
-#: ../src/ui/tool/transform-handle-set.cpp:447
-msgctxt "Transform handle tip"
-msgid ""
-"<b>Rotation handle</b>: drag to rotate the selection around the rotation "
-"center"
-msgstr ""
-
-#. event
-#: ../src/ui/tool/transform-handle-set.cpp:452
-#, c-format
-msgctxt "Transform handle tip"
-msgid "Rotate by %.2f°"
-msgstr ""
-
-#: ../src/ui/tool/transform-handle-set.cpp:578
-#, c-format
-msgctxt "Transform handle tip"
-msgid ""
-"<b>Shift+Ctrl</b>: skew about the rotation center with snapping to %f° "
-"increments"
-msgstr ""
-
-#: ../src/ui/tool/transform-handle-set.cpp:581
-msgctxt "Transform handle tip"
-msgid "<b>Shift</b>: skew about the rotation center"
-msgstr ""
-
-#: ../src/ui/tool/transform-handle-set.cpp:585
-#, c-format
-msgctxt "Transform handle tip"
-msgid "<b>Ctrl</b>: snap skew angle to %f° increments"
-msgstr ""
-
-#: ../src/ui/tool/transform-handle-set.cpp:588
-msgctxt "Transform handle tip"
-msgid ""
-"<b>Skew handle</b>: drag to skew (shear) selection about the opposite handle"
-msgstr ""
-
-#: ../src/ui/tool/transform-handle-set.cpp:594
-#, c-format
-msgctxt "Transform handle tip"
-msgid "Skew horizontally by %.2f°"
-msgstr ""
-
-#: ../src/ui/tool/transform-handle-set.cpp:597
-#, c-format
-msgctxt "Transform handle tip"
-msgid "Skew vertically by %.2f°"
-msgstr ""
-
-#: ../src/ui/tool/transform-handle-set.cpp:656
-msgctxt "Transform handle tip"
-msgid "<b>Rotation center</b>: drag to change the origin of transforms"
-msgstr ""
-
#: ../src/ui/widget/filter-effect-chooser.cpp:27
msgid "Blur (%)"
msgstr ""
@@ -23624,7 +23171,7 @@ msgstr ""
msgid "3D box: Move vanishing point"
msgstr ""
-#: ../src/vanishing-point.cpp:326
+#: ../src/vanishing-point.cpp:327
#, c-format
msgid "<b>Finite</b> vanishing point shared by <b>%d</b> box"
msgid_plural ""
@@ -23635,7 +23182,7 @@ msgstr[1] ""
#. This won't make sense any more when infinite VPs are not shown on the canvas,
#. but currently we update the status message anyway
-#: ../src/vanishing-point.cpp:333
+#: ../src/vanishing-point.cpp:334
#, c-format
msgid "<b>Infinite</b> vanishing point shared by <b>%d</b> box"
msgid_plural ""
@@ -23644,7 +23191,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: ../src/vanishing-point.cpp:341
+#: ../src/vanishing-point.cpp:342
#, c-format
msgid ""
"shared by <b>%d</b> box; drag with <b>Shift</b> to separate selected box(es)"
@@ -23662,7 +23209,7 @@ msgstr ""
msgid "Context"
msgstr ""
-#: ../src/verbs.cpp:251 ../src/verbs.cpp:2226
+#: ../src/verbs.cpp:251 ../src/verbs.cpp:2219
#: ../share/extensions/jessyInk_view.inx.h:1
#: ../share/extensions/polyhedron_3d.inx.h:26
msgid "View"
@@ -23781,2147 +23328,2147 @@ msgstr ""
#. TRANSLATORS: If you have translated the tutorial-basic.en.svgz file to your language,
#. then translate this string as "tutorial-basic.LANG.svgz" (where LANG is your language
#. code); otherwise leave as "tutorial-basic.svg".
-#: ../src/verbs.cpp:2108
+#: ../src/verbs.cpp:2101
msgid "tutorial-basic.svg"
msgstr ""
#. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:2112
+#: ../src/verbs.cpp:2105
msgid "tutorial-shapes.svg"
msgstr ""
#. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:2116
+#: ../src/verbs.cpp:2109
msgid "tutorial-advanced.svg"
msgstr ""
#. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:2120
+#: ../src/verbs.cpp:2113
msgid "tutorial-tracing.svg"
msgstr ""
-#: ../src/verbs.cpp:2123
+#: ../src/verbs.cpp:2116
msgid "tutorial-tracing-pixelart.svg"
msgstr ""
#. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:2127
+#: ../src/verbs.cpp:2120
msgid "tutorial-calligraphy.svg"
msgstr ""
#. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:2131
+#: ../src/verbs.cpp:2124
msgid "tutorial-interpolate.svg"
msgstr ""
#. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:2135
+#: ../src/verbs.cpp:2128
msgid "tutorial-elements.svg"
msgstr ""
#. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:2139
+#: ../src/verbs.cpp:2132
msgid "tutorial-tips.svg"
msgstr ""
-#: ../src/verbs.cpp:2325 ../src/verbs.cpp:2917
+#: ../src/verbs.cpp:2318 ../src/verbs.cpp:2910
msgid "Unlock all objects in the current layer"
msgstr ""
-#: ../src/verbs.cpp:2329 ../src/verbs.cpp:2919
+#: ../src/verbs.cpp:2322 ../src/verbs.cpp:2912
msgid "Unlock all objects in all layers"
msgstr ""
-#: ../src/verbs.cpp:2333 ../src/verbs.cpp:2921
+#: ../src/verbs.cpp:2326 ../src/verbs.cpp:2914
msgid "Unhide all objects in the current layer"
msgstr ""
-#: ../src/verbs.cpp:2337 ../src/verbs.cpp:2923
+#: ../src/verbs.cpp:2330 ../src/verbs.cpp:2916
msgid "Unhide all objects in all layers"
msgstr ""
-#: ../src/verbs.cpp:2352
+#: ../src/verbs.cpp:2345
msgid "Does nothing"
msgstr ""
-#: ../src/verbs.cpp:2355
+#: ../src/verbs.cpp:2348
msgid "Create new document from the default template"
msgstr ""
-#: ../src/verbs.cpp:2357
+#: ../src/verbs.cpp:2350
msgid "_Open..."
msgstr ""
-#: ../src/verbs.cpp:2358
+#: ../src/verbs.cpp:2351
msgid "Open an existing document"
msgstr ""
-#: ../src/verbs.cpp:2359
+#: ../src/verbs.cpp:2352
msgid "Re_vert"
msgstr ""
-#: ../src/verbs.cpp:2360
+#: ../src/verbs.cpp:2353
msgid "Revert to the last saved version of document (changes will be lost)"
msgstr ""
-#: ../src/verbs.cpp:2361
+#: ../src/verbs.cpp:2354
msgid "Save document"
msgstr ""
-#: ../src/verbs.cpp:2363
+#: ../src/verbs.cpp:2356
msgid "Save _As..."
msgstr ""
-#: ../src/verbs.cpp:2364
+#: ../src/verbs.cpp:2357
msgid "Save document under a new name"
msgstr ""
-#: ../src/verbs.cpp:2365
+#: ../src/verbs.cpp:2358
msgid "Save a Cop_y..."
msgstr ""
-#: ../src/verbs.cpp:2366
+#: ../src/verbs.cpp:2359
msgid "Save a copy of the document under a new name"
msgstr ""
-#: ../src/verbs.cpp:2367
+#: ../src/verbs.cpp:2360
msgid "_Print..."
msgstr ""
-#: ../src/verbs.cpp:2367
+#: ../src/verbs.cpp:2360
msgid "Print document"
msgstr ""
#. TRANSLATORS: "Vacuum Defs" means "Clean up defs" (so as to remove unused definitions)
-#: ../src/verbs.cpp:2370
+#: ../src/verbs.cpp:2363
msgid "Clean _up document"
msgstr ""
-#: ../src/verbs.cpp:2370
+#: ../src/verbs.cpp:2363
msgid ""
"Remove unused definitions (such as gradients or clipping paths) from the &lt;"
"defs&gt; of the document"
msgstr ""
-#: ../src/verbs.cpp:2372
+#: ../src/verbs.cpp:2365
msgid "_Import..."
msgstr ""
-#: ../src/verbs.cpp:2373
+#: ../src/verbs.cpp:2366
msgid "Import a bitmap or SVG image into this document"
msgstr ""
-#: ../src/verbs.cpp:2374
+#: ../src/verbs.cpp:2367
msgid "_Export Bitmap..."
msgstr ""
-#: ../src/verbs.cpp:2375
+#: ../src/verbs.cpp:2368
msgid "Export this document or a selection as a bitmap image"
msgstr ""
-#: ../src/verbs.cpp:2376
+#: ../src/verbs.cpp:2369
msgid "Import Clip Art..."
msgstr ""
-#: ../src/verbs.cpp:2377
+#: ../src/verbs.cpp:2370
msgid "Import clipart from Open Clip Art Library"
msgstr ""
#. new FileVerb(SP_VERB_FILE_EXPORT_TO_OCAL, "FileExportToOCAL", N_("Export To Open Clip Art Library"), N_("Export this document to Open Clip Art Library"), INKSCAPE_ICON_DOCUMENT_EXPORT_OCAL),
-#: ../src/verbs.cpp:2379
+#: ../src/verbs.cpp:2372
msgid "N_ext Window"
msgstr ""
-#: ../src/verbs.cpp:2380
+#: ../src/verbs.cpp:2373
msgid "Switch to the next document window"
msgstr ""
-#: ../src/verbs.cpp:2381
+#: ../src/verbs.cpp:2374
msgid "P_revious Window"
msgstr ""
-#: ../src/verbs.cpp:2382
+#: ../src/verbs.cpp:2375
msgid "Switch to the previous document window"
msgstr ""
-#: ../src/verbs.cpp:2383
+#: ../src/verbs.cpp:2376
msgid "_Close"
msgstr ""
-#: ../src/verbs.cpp:2384
+#: ../src/verbs.cpp:2377
msgid "Close this document window"
msgstr ""
-#: ../src/verbs.cpp:2385
+#: ../src/verbs.cpp:2378
msgid "_Quit"
msgstr ""
-#: ../src/verbs.cpp:2385
+#: ../src/verbs.cpp:2378
msgid "Quit Inkscape"
msgstr ""
-#: ../src/verbs.cpp:2386
+#: ../src/verbs.cpp:2379
msgid "_Templates..."
msgstr ""
-#: ../src/verbs.cpp:2387
+#: ../src/verbs.cpp:2380
msgid "Create new project from template"
msgstr ""
-#: ../src/verbs.cpp:2390
+#: ../src/verbs.cpp:2383
msgid "Undo last action"
msgstr ""
-#: ../src/verbs.cpp:2393
+#: ../src/verbs.cpp:2386
msgid "Do again the last undone action"
msgstr ""
-#: ../src/verbs.cpp:2394
+#: ../src/verbs.cpp:2387
msgid "Cu_t"
msgstr ""
-#: ../src/verbs.cpp:2395
+#: ../src/verbs.cpp:2388
msgid "Cut selection to clipboard"
msgstr ""
-#: ../src/verbs.cpp:2396
+#: ../src/verbs.cpp:2389
msgid "_Copy"
msgstr ""
-#: ../src/verbs.cpp:2397
+#: ../src/verbs.cpp:2390
msgid "Copy selection to clipboard"
msgstr ""
-#: ../src/verbs.cpp:2398
+#: ../src/verbs.cpp:2391
msgid "_Paste"
msgstr ""
-#: ../src/verbs.cpp:2399
+#: ../src/verbs.cpp:2392
msgid "Paste objects from clipboard to mouse point, or paste text"
msgstr ""
-#: ../src/verbs.cpp:2400
+#: ../src/verbs.cpp:2393
msgid "Paste _Style"
msgstr ""
-#: ../src/verbs.cpp:2401
+#: ../src/verbs.cpp:2394
msgid "Apply the style of the copied object to selection"
msgstr ""
-#: ../src/verbs.cpp:2403
+#: ../src/verbs.cpp:2396
msgid "Scale selection to match the size of the copied object"
msgstr ""
-#: ../src/verbs.cpp:2404
+#: ../src/verbs.cpp:2397
msgid "Paste _Width"
msgstr ""
-#: ../src/verbs.cpp:2405
+#: ../src/verbs.cpp:2398
msgid "Scale selection horizontally to match the width of the copied object"
msgstr ""
-#: ../src/verbs.cpp:2406
+#: ../src/verbs.cpp:2399
msgid "Paste _Height"
msgstr ""
-#: ../src/verbs.cpp:2407
+#: ../src/verbs.cpp:2400
msgid "Scale selection vertically to match the height of the copied object"
msgstr ""
-#: ../src/verbs.cpp:2408
+#: ../src/verbs.cpp:2401
msgid "Paste Size Separately"
msgstr ""
-#: ../src/verbs.cpp:2409
+#: ../src/verbs.cpp:2402
msgid "Scale each selected object to match the size of the copied object"
msgstr ""
-#: ../src/verbs.cpp:2410
+#: ../src/verbs.cpp:2403
msgid "Paste Width Separately"
msgstr ""
-#: ../src/verbs.cpp:2411
+#: ../src/verbs.cpp:2404
msgid ""
"Scale each selected object horizontally to match the width of the copied "
"object"
msgstr ""
-#: ../src/verbs.cpp:2412
+#: ../src/verbs.cpp:2405
msgid "Paste Height Separately"
msgstr ""
-#: ../src/verbs.cpp:2413
+#: ../src/verbs.cpp:2406
msgid ""
"Scale each selected object vertically to match the height of the copied "
"object"
msgstr ""
-#: ../src/verbs.cpp:2414
+#: ../src/verbs.cpp:2407
msgid "Paste _In Place"
msgstr ""
-#: ../src/verbs.cpp:2415
+#: ../src/verbs.cpp:2408
msgid "Paste objects from clipboard to the original location"
msgstr ""
-#: ../src/verbs.cpp:2416
+#: ../src/verbs.cpp:2409
msgid "Paste Path _Effect"
msgstr ""
-#: ../src/verbs.cpp:2417
+#: ../src/verbs.cpp:2410
msgid "Apply the path effect of the copied object to selection"
msgstr ""
-#: ../src/verbs.cpp:2418
+#: ../src/verbs.cpp:2411
msgid "Remove Path _Effect"
msgstr ""
-#: ../src/verbs.cpp:2419
+#: ../src/verbs.cpp:2412
msgid "Remove any path effects from selected objects"
msgstr ""
-#: ../src/verbs.cpp:2420
+#: ../src/verbs.cpp:2413
msgid "_Remove Filters"
msgstr ""
-#: ../src/verbs.cpp:2421
+#: ../src/verbs.cpp:2414
msgid "Remove any filters from selected objects"
msgstr ""
-#: ../src/verbs.cpp:2422
+#: ../src/verbs.cpp:2415
msgid "_Delete"
msgstr ""
-#: ../src/verbs.cpp:2423
+#: ../src/verbs.cpp:2416
msgid "Delete selection"
msgstr ""
-#: ../src/verbs.cpp:2424
+#: ../src/verbs.cpp:2417
msgid "Duplic_ate"
msgstr ""
-#: ../src/verbs.cpp:2425
+#: ../src/verbs.cpp:2418
msgid "Duplicate selected objects"
msgstr ""
-#: ../src/verbs.cpp:2426
+#: ../src/verbs.cpp:2419
msgid "Create Clo_ne"
msgstr ""
-#: ../src/verbs.cpp:2427
+#: ../src/verbs.cpp:2420
msgid "Create a clone (a copy linked to the original) of selected object"
msgstr ""
-#: ../src/verbs.cpp:2428
+#: ../src/verbs.cpp:2421
msgid "Unlin_k Clone"
msgstr ""
-#: ../src/verbs.cpp:2429
+#: ../src/verbs.cpp:2422
msgid ""
"Cut the selected clones' links to the originals, turning them into "
"standalone objects"
msgstr ""
-#: ../src/verbs.cpp:2430
+#: ../src/verbs.cpp:2423
msgid "Relink to Copied"
msgstr ""
-#: ../src/verbs.cpp:2431
+#: ../src/verbs.cpp:2424
msgid "Relink the selected clones to the object currently on the clipboard"
msgstr ""
-#: ../src/verbs.cpp:2432
+#: ../src/verbs.cpp:2425
msgid "Select _Original"
msgstr ""
-#: ../src/verbs.cpp:2433
+#: ../src/verbs.cpp:2426
msgid "Select the object to which the selected clone is linked"
msgstr ""
-#: ../src/verbs.cpp:2434
+#: ../src/verbs.cpp:2427
msgid "Clone original path (LPE)"
msgstr ""
-#: ../src/verbs.cpp:2435
+#: ../src/verbs.cpp:2428
msgid ""
"Creates a new path, applies the Clone original LPE, and refers it to the "
"selected path"
msgstr ""
-#: ../src/verbs.cpp:2436
+#: ../src/verbs.cpp:2429
msgid "Objects to _Marker"
msgstr ""
-#: ../src/verbs.cpp:2437
+#: ../src/verbs.cpp:2430
msgid "Convert selection to a line marker"
msgstr ""
-#: ../src/verbs.cpp:2438
+#: ../src/verbs.cpp:2431
msgid "Objects to Gu_ides"
msgstr ""
-#: ../src/verbs.cpp:2439
+#: ../src/verbs.cpp:2432
msgid ""
"Convert selected objects to a collection of guidelines aligned with their "
"edges"
msgstr ""
-#: ../src/verbs.cpp:2440
+#: ../src/verbs.cpp:2433
msgid "Objects to Patter_n"
msgstr ""
-#: ../src/verbs.cpp:2441
+#: ../src/verbs.cpp:2434
msgid "Convert selection to a rectangle with tiled pattern fill"
msgstr ""
-#: ../src/verbs.cpp:2442
+#: ../src/verbs.cpp:2435
msgid "Pattern to _Objects"
msgstr ""
-#: ../src/verbs.cpp:2443
+#: ../src/verbs.cpp:2436
msgid "Extract objects from a tiled pattern fill"
msgstr ""
-#: ../src/verbs.cpp:2444
+#: ../src/verbs.cpp:2437
msgid "Group to Symbol"
msgstr ""
-#: ../src/verbs.cpp:2445
+#: ../src/verbs.cpp:2438
msgid "Convert group to a symbol"
msgstr ""
-#: ../src/verbs.cpp:2446
+#: ../src/verbs.cpp:2439
msgid "Symbol to Group"
msgstr ""
-#: ../src/verbs.cpp:2447
+#: ../src/verbs.cpp:2440
msgid "Extract group from a symbol"
msgstr ""
-#: ../src/verbs.cpp:2448
+#: ../src/verbs.cpp:2441
msgid "Clea_r All"
msgstr ""
-#: ../src/verbs.cpp:2449
+#: ../src/verbs.cpp:2442
msgid "Delete all objects from document"
msgstr ""
-#: ../src/verbs.cpp:2450
+#: ../src/verbs.cpp:2443
msgid "Select Al_l"
msgstr ""
-#: ../src/verbs.cpp:2451
+#: ../src/verbs.cpp:2444
msgid "Select all objects or all nodes"
msgstr ""
-#: ../src/verbs.cpp:2452
+#: ../src/verbs.cpp:2445
msgid "Select All in All La_yers"
msgstr ""
-#: ../src/verbs.cpp:2453
+#: ../src/verbs.cpp:2446
msgid "Select all objects in all visible and unlocked layers"
msgstr ""
-#: ../src/verbs.cpp:2454
+#: ../src/verbs.cpp:2447
msgid "Fill _and Stroke"
msgstr ""
-#: ../src/verbs.cpp:2455
+#: ../src/verbs.cpp:2448
msgid ""
"Select all objects with the same fill and stroke as the selected objects"
msgstr ""
-#: ../src/verbs.cpp:2456
+#: ../src/verbs.cpp:2449
msgid "_Fill Color"
msgstr ""
-#: ../src/verbs.cpp:2457
+#: ../src/verbs.cpp:2450
msgid "Select all objects with the same fill as the selected objects"
msgstr ""
-#: ../src/verbs.cpp:2458
+#: ../src/verbs.cpp:2451
msgid "_Stroke Color"
msgstr ""
-#: ../src/verbs.cpp:2459
+#: ../src/verbs.cpp:2452
msgid "Select all objects with the same stroke as the selected objects"
msgstr ""
-#: ../src/verbs.cpp:2460
+#: ../src/verbs.cpp:2453
msgid "Stroke St_yle"
msgstr ""
-#: ../src/verbs.cpp:2461
+#: ../src/verbs.cpp:2454
msgid ""
"Select all objects with the same stroke style (width, dash, markers) as the "
"selected objects"
msgstr ""
-#: ../src/verbs.cpp:2462
+#: ../src/verbs.cpp:2455
msgid "_Object Type"
msgstr ""
-#: ../src/verbs.cpp:2463
+#: ../src/verbs.cpp:2456
msgid ""
"Select all objects with the same object type (rect, arc, text, path, bitmap "
"etc) as the selected objects"
msgstr ""
-#: ../src/verbs.cpp:2464
+#: ../src/verbs.cpp:2457
msgid "In_vert Selection"
msgstr ""
-#: ../src/verbs.cpp:2465
+#: ../src/verbs.cpp:2458
msgid "Invert selection (unselect what is selected and select everything else)"
msgstr ""
-#: ../src/verbs.cpp:2466
+#: ../src/verbs.cpp:2459
msgid "Invert in All Layers"
msgstr ""
-#: ../src/verbs.cpp:2467
+#: ../src/verbs.cpp:2460
msgid "Invert selection in all visible and unlocked layers"
msgstr ""
-#: ../src/verbs.cpp:2468
+#: ../src/verbs.cpp:2461
msgid "Select Next"
msgstr ""
-#: ../src/verbs.cpp:2469
+#: ../src/verbs.cpp:2462
msgid "Select next object or node"
msgstr ""
-#: ../src/verbs.cpp:2470
+#: ../src/verbs.cpp:2463
msgid "Select Previous"
msgstr ""
-#: ../src/verbs.cpp:2471
+#: ../src/verbs.cpp:2464
msgid "Select previous object or node"
msgstr ""
-#: ../src/verbs.cpp:2472
+#: ../src/verbs.cpp:2465
msgid "D_eselect"
msgstr ""
-#: ../src/verbs.cpp:2473
+#: ../src/verbs.cpp:2466
msgid "Deselect any selected objects or nodes"
msgstr ""
-#: ../src/verbs.cpp:2475
+#: ../src/verbs.cpp:2468
msgid "Delete all the guides in the document"
msgstr ""
-#: ../src/verbs.cpp:2476
+#: ../src/verbs.cpp:2469
msgid "Create _Guides Around the Page"
msgstr ""
-#: ../src/verbs.cpp:2477
+#: ../src/verbs.cpp:2470
msgid "Create four guides aligned with the page borders"
msgstr ""
-#: ../src/verbs.cpp:2478
+#: ../src/verbs.cpp:2471
msgid "Next path effect parameter"
msgstr ""
-#: ../src/verbs.cpp:2479
+#: ../src/verbs.cpp:2472
msgid "Show next editable path effect parameter"
msgstr ""
#. Selection
-#: ../src/verbs.cpp:2482
+#: ../src/verbs.cpp:2475
msgid "Raise to _Top"
msgstr ""
-#: ../src/verbs.cpp:2483
+#: ../src/verbs.cpp:2476
msgid "Raise selection to top"
msgstr ""
-#: ../src/verbs.cpp:2484
+#: ../src/verbs.cpp:2477
msgid "Lower to _Bottom"
msgstr ""
-#: ../src/verbs.cpp:2485
+#: ../src/verbs.cpp:2478
msgid "Lower selection to bottom"
msgstr ""
-#: ../src/verbs.cpp:2486
+#: ../src/verbs.cpp:2479
msgid "_Raise"
msgstr ""
-#: ../src/verbs.cpp:2487
+#: ../src/verbs.cpp:2480
msgid "Raise selection one step"
msgstr ""
-#: ../src/verbs.cpp:2488
+#: ../src/verbs.cpp:2481
msgid "_Lower"
msgstr ""
-#: ../src/verbs.cpp:2489
+#: ../src/verbs.cpp:2482
msgid "Lower selection one step"
msgstr ""
-#: ../src/verbs.cpp:2491
+#: ../src/verbs.cpp:2484
msgid "Group selected objects"
msgstr ""
-#: ../src/verbs.cpp:2493
+#: ../src/verbs.cpp:2486
msgid "Ungroup selected groups"
msgstr ""
-#: ../src/verbs.cpp:2495
+#: ../src/verbs.cpp:2488
msgid "_Put on Path"
msgstr ""
-#: ../src/verbs.cpp:2497
+#: ../src/verbs.cpp:2490
msgid "_Remove from Path"
msgstr ""
-#: ../src/verbs.cpp:2499
+#: ../src/verbs.cpp:2492
msgid "Remove Manual _Kerns"
msgstr ""
#. TRANSLATORS: "glyph": An image used in the visual representation of characters;
#. roughly speaking, how a character looks. A font is a set of glyphs.
-#: ../src/verbs.cpp:2502
+#: ../src/verbs.cpp:2495
msgid "Remove all manual kerns and glyph rotations from a text object"
msgstr ""
-#: ../src/verbs.cpp:2504
+#: ../src/verbs.cpp:2497
msgid "_Union"
msgstr ""
-#: ../src/verbs.cpp:2505
+#: ../src/verbs.cpp:2498
msgid "Create union of selected paths"
msgstr ""
-#: ../src/verbs.cpp:2506
+#: ../src/verbs.cpp:2499
msgid "_Intersection"
msgstr ""
-#: ../src/verbs.cpp:2507
+#: ../src/verbs.cpp:2500
msgid "Create intersection of selected paths"
msgstr ""
-#: ../src/verbs.cpp:2508
+#: ../src/verbs.cpp:2501
msgid "_Difference"
msgstr ""
-#: ../src/verbs.cpp:2509
+#: ../src/verbs.cpp:2502
msgid "Create difference of selected paths (bottom minus top)"
msgstr ""
-#: ../src/verbs.cpp:2510
+#: ../src/verbs.cpp:2503
msgid "E_xclusion"
msgstr ""
-#: ../src/verbs.cpp:2511
+#: ../src/verbs.cpp:2504
msgid ""
"Create exclusive OR of selected paths (those parts that belong to only one "
"path)"
msgstr ""
-#: ../src/verbs.cpp:2512
+#: ../src/verbs.cpp:2505
msgid "Di_vision"
msgstr ""
-#: ../src/verbs.cpp:2513
+#: ../src/verbs.cpp:2506
msgid "Cut the bottom path into pieces"
msgstr ""
#. TRANSLATORS: "to cut a path" is not the same as "to break a path apart" - see the
#. Advanced tutorial for more info
-#: ../src/verbs.cpp:2516
+#: ../src/verbs.cpp:2509
msgid "Cut _Path"
msgstr ""
-#: ../src/verbs.cpp:2517
+#: ../src/verbs.cpp:2510
msgid "Cut the bottom path's stroke into pieces, removing fill"
msgstr ""
#. TRANSLATORS: "outset": expand a shape by offsetting the object's path,
#. i.e. by displacing it perpendicular to the path in each point.
#. See also the Advanced Tutorial for explanation.
-#: ../src/verbs.cpp:2521
+#: ../src/verbs.cpp:2514
msgid "Outs_et"
msgstr ""
-#: ../src/verbs.cpp:2522
+#: ../src/verbs.cpp:2515
msgid "Outset selected paths"
msgstr ""
-#: ../src/verbs.cpp:2524
+#: ../src/verbs.cpp:2517
msgid "O_utset Path by 1 px"
msgstr ""
-#: ../src/verbs.cpp:2525
+#: ../src/verbs.cpp:2518
msgid "Outset selected paths by 1 px"
msgstr ""
-#: ../src/verbs.cpp:2527
+#: ../src/verbs.cpp:2520
msgid "O_utset Path by 10 px"
msgstr ""
-#: ../src/verbs.cpp:2528
+#: ../src/verbs.cpp:2521
msgid "Outset selected paths by 10 px"
msgstr ""
#. TRANSLATORS: "inset": contract a shape by offsetting the object's path,
#. i.e. by displacing it perpendicular to the path in each point.
#. See also the Advanced Tutorial for explanation.
-#: ../src/verbs.cpp:2532
+#: ../src/verbs.cpp:2525
msgid "I_nset"
msgstr ""
-#: ../src/verbs.cpp:2533
+#: ../src/verbs.cpp:2526
msgid "Inset selected paths"
msgstr ""
-#: ../src/verbs.cpp:2535
+#: ../src/verbs.cpp:2528
msgid "I_nset Path by 1 px"
msgstr ""
-#: ../src/verbs.cpp:2536
+#: ../src/verbs.cpp:2529
msgid "Inset selected paths by 1 px"
msgstr ""
-#: ../src/verbs.cpp:2538
+#: ../src/verbs.cpp:2531
msgid "I_nset Path by 10 px"
msgstr ""
-#: ../src/verbs.cpp:2539
+#: ../src/verbs.cpp:2532
msgid "Inset selected paths by 10 px"
msgstr ""
-#: ../src/verbs.cpp:2541
+#: ../src/verbs.cpp:2534
msgid "D_ynamic Offset"
msgstr ""
-#: ../src/verbs.cpp:2541
+#: ../src/verbs.cpp:2534
msgid "Create a dynamic offset object"
msgstr ""
-#: ../src/verbs.cpp:2543
+#: ../src/verbs.cpp:2536
msgid "_Linked Offset"
msgstr ""
-#: ../src/verbs.cpp:2544
+#: ../src/verbs.cpp:2537
msgid "Create a dynamic offset object linked to the original path"
msgstr ""
-#: ../src/verbs.cpp:2546
+#: ../src/verbs.cpp:2539
msgid "_Stroke to Path"
msgstr ""
-#: ../src/verbs.cpp:2547
+#: ../src/verbs.cpp:2540
msgid "Convert selected object's stroke to paths"
msgstr ""
-#: ../src/verbs.cpp:2548
+#: ../src/verbs.cpp:2541
msgid "Si_mplify"
msgstr ""
-#: ../src/verbs.cpp:2549
+#: ../src/verbs.cpp:2542
msgid "Simplify selected paths (remove extra nodes)"
msgstr ""
-#: ../src/verbs.cpp:2550
+#: ../src/verbs.cpp:2543
msgid "_Reverse"
msgstr ""
-#: ../src/verbs.cpp:2551
+#: ../src/verbs.cpp:2544
msgid "Reverse the direction of selected paths (useful for flipping markers)"
msgstr ""
-#: ../src/verbs.cpp:2554
+#: ../src/verbs.cpp:2547
msgid "Create one or more paths from a bitmap by tracing it"
msgstr ""
-#: ../src/verbs.cpp:2555
+#: ../src/verbs.cpp:2548
msgid "Trace Pixel Art..."
msgstr ""
-#: ../src/verbs.cpp:2556
+#: ../src/verbs.cpp:2549
msgid "Create paths using Kopf-Lischinski algorithm to vectorize pixel art"
msgstr ""
-#: ../src/verbs.cpp:2557
+#: ../src/verbs.cpp:2550
msgid "Make a _Bitmap Copy"
msgstr ""
-#: ../src/verbs.cpp:2558
+#: ../src/verbs.cpp:2551
msgid "Export selection to a bitmap and insert it into document"
msgstr ""
-#: ../src/verbs.cpp:2559
+#: ../src/verbs.cpp:2552
msgid "_Combine"
msgstr ""
-#: ../src/verbs.cpp:2560
+#: ../src/verbs.cpp:2553
msgid "Combine several paths into one"
msgstr ""
#. TRANSLATORS: "to cut a path" is not the same as "to break a path apart" - see the
#. Advanced tutorial for more info
-#: ../src/verbs.cpp:2563
+#: ../src/verbs.cpp:2556
msgid "Break _Apart"
msgstr ""
-#: ../src/verbs.cpp:2564
+#: ../src/verbs.cpp:2557
msgid "Break selected paths into subpaths"
msgstr ""
-#: ../src/verbs.cpp:2565
-msgid "Ro_ws and Columns..."
+#: ../src/verbs.cpp:2558
+msgid "_Arrange..."
msgstr ""
-#: ../src/verbs.cpp:2566
-msgid "Arrange selected objects in a table"
+#: ../src/verbs.cpp:2559
+msgid "Arrange selected objects in a table or circle"
msgstr ""
#. Layer
-#: ../src/verbs.cpp:2568
+#: ../src/verbs.cpp:2561
msgid "_Add Layer..."
msgstr ""
-#: ../src/verbs.cpp:2569
+#: ../src/verbs.cpp:2562
msgid "Create a new layer"
msgstr ""
-#: ../src/verbs.cpp:2570
+#: ../src/verbs.cpp:2563
msgid "Re_name Layer..."
msgstr ""
-#: ../src/verbs.cpp:2571
+#: ../src/verbs.cpp:2564
msgid "Rename the current layer"
msgstr ""
-#: ../src/verbs.cpp:2572
+#: ../src/verbs.cpp:2565
msgid "Switch to Layer Abov_e"
msgstr ""
-#: ../src/verbs.cpp:2573
+#: ../src/verbs.cpp:2566
msgid "Switch to the layer above the current"
msgstr ""
-#: ../src/verbs.cpp:2574
+#: ../src/verbs.cpp:2567
msgid "Switch to Layer Belo_w"
msgstr ""
-#: ../src/verbs.cpp:2575
+#: ../src/verbs.cpp:2568
msgid "Switch to the layer below the current"
msgstr ""
-#: ../src/verbs.cpp:2576
+#: ../src/verbs.cpp:2569
msgid "Move Selection to Layer Abo_ve"
msgstr ""
-#: ../src/verbs.cpp:2577
+#: ../src/verbs.cpp:2570
msgid "Move selection to the layer above the current"
msgstr ""
-#: ../src/verbs.cpp:2578
+#: ../src/verbs.cpp:2571
msgid "Move Selection to Layer Bel_ow"
msgstr ""
-#: ../src/verbs.cpp:2579
+#: ../src/verbs.cpp:2572
msgid "Move selection to the layer below the current"
msgstr ""
-#: ../src/verbs.cpp:2580
+#: ../src/verbs.cpp:2573
msgid "Move Selection to Layer..."
msgstr ""
-#: ../src/verbs.cpp:2582
+#: ../src/verbs.cpp:2575
msgid "Layer to _Top"
msgstr ""
-#: ../src/verbs.cpp:2583
+#: ../src/verbs.cpp:2576
msgid "Raise the current layer to the top"
msgstr ""
-#: ../src/verbs.cpp:2584
+#: ../src/verbs.cpp:2577
msgid "Layer to _Bottom"
msgstr ""
-#: ../src/verbs.cpp:2585
+#: ../src/verbs.cpp:2578
msgid "Lower the current layer to the bottom"
msgstr ""
-#: ../src/verbs.cpp:2586
+#: ../src/verbs.cpp:2579
msgid "_Raise Layer"
msgstr ""
-#: ../src/verbs.cpp:2587
+#: ../src/verbs.cpp:2580
msgid "Raise the current layer"
msgstr ""
-#: ../src/verbs.cpp:2588
+#: ../src/verbs.cpp:2581
msgid "_Lower Layer"
msgstr ""
-#: ../src/verbs.cpp:2589
+#: ../src/verbs.cpp:2582
msgid "Lower the current layer"
msgstr ""
-#: ../src/verbs.cpp:2590
+#: ../src/verbs.cpp:2583
msgid "D_uplicate Current Layer"
msgstr ""
-#: ../src/verbs.cpp:2591
+#: ../src/verbs.cpp:2584
msgid "Duplicate an existing layer"
msgstr ""
-#: ../src/verbs.cpp:2592
+#: ../src/verbs.cpp:2585
msgid "_Delete Current Layer"
msgstr ""
-#: ../src/verbs.cpp:2593
+#: ../src/verbs.cpp:2586
msgid "Delete the current layer"
msgstr ""
-#: ../src/verbs.cpp:2594
+#: ../src/verbs.cpp:2587
msgid "_Show/hide other layers"
msgstr ""
-#: ../src/verbs.cpp:2595
+#: ../src/verbs.cpp:2588
msgid "Solo the current layer"
msgstr ""
-#: ../src/verbs.cpp:2596
+#: ../src/verbs.cpp:2589
msgid "_Show all layers"
msgstr ""
-#: ../src/verbs.cpp:2597
+#: ../src/verbs.cpp:2590
msgid "Show all the layers"
msgstr ""
-#: ../src/verbs.cpp:2598
+#: ../src/verbs.cpp:2591
msgid "_Hide all layers"
msgstr ""
-#: ../src/verbs.cpp:2599
+#: ../src/verbs.cpp:2592
msgid "Hide all the layers"
msgstr ""
-#: ../src/verbs.cpp:2600
+#: ../src/verbs.cpp:2593
msgid "_Lock all layers"
msgstr ""
-#: ../src/verbs.cpp:2601
+#: ../src/verbs.cpp:2594
msgid "Lock all the layers"
msgstr ""
-#: ../src/verbs.cpp:2602
+#: ../src/verbs.cpp:2595
msgid "Lock/Unlock _other layers"
msgstr ""
-#: ../src/verbs.cpp:2603
+#: ../src/verbs.cpp:2596
msgid "Lock all the other layers"
msgstr ""
-#: ../src/verbs.cpp:2604
+#: ../src/verbs.cpp:2597
msgid "_Unlock all layers"
msgstr ""
-#: ../src/verbs.cpp:2605
+#: ../src/verbs.cpp:2598
msgid "Unlock all the layers"
msgstr ""
-#: ../src/verbs.cpp:2606
+#: ../src/verbs.cpp:2599
msgid "_Lock/Unlock Current Layer"
msgstr ""
-#: ../src/verbs.cpp:2607
+#: ../src/verbs.cpp:2600
msgid "Toggle lock on current layer"
msgstr ""
-#: ../src/verbs.cpp:2608
+#: ../src/verbs.cpp:2601
msgid "_Show/hide Current Layer"
msgstr ""
-#: ../src/verbs.cpp:2609
+#: ../src/verbs.cpp:2602
msgid "Toggle visibility of current layer"
msgstr ""
#. Object
-#: ../src/verbs.cpp:2612
+#: ../src/verbs.cpp:2605
msgid "Rotate _90° CW"
msgstr ""
#. This is shared between tooltips and statusbar, so they
#. must use UTF-8, not HTML entities for special characters.
-#: ../src/verbs.cpp:2615
+#: ../src/verbs.cpp:2608
msgid "Rotate selection 90° clockwise"
msgstr ""
-#: ../src/verbs.cpp:2616
+#: ../src/verbs.cpp:2609
msgid "Rotate 9_0° CCW"
msgstr ""
#. This is shared between tooltips and statusbar, so they
#. must use UTF-8, not HTML entities for special characters.
-#: ../src/verbs.cpp:2619
+#: ../src/verbs.cpp:2612
msgid "Rotate selection 90° counter-clockwise"
msgstr ""
-#: ../src/verbs.cpp:2620
+#: ../src/verbs.cpp:2613
msgid "Remove _Transformations"
msgstr ""
-#: ../src/verbs.cpp:2621
+#: ../src/verbs.cpp:2614
msgid "Remove transformations from object"
msgstr ""
-#: ../src/verbs.cpp:2622
+#: ../src/verbs.cpp:2615
msgid "_Object to Path"
msgstr ""
-#: ../src/verbs.cpp:2623
+#: ../src/verbs.cpp:2616
msgid "Convert selected object to path"
msgstr ""
-#: ../src/verbs.cpp:2624
+#: ../src/verbs.cpp:2617
msgid "_Flow into Frame"
msgstr ""
-#: ../src/verbs.cpp:2625
+#: ../src/verbs.cpp:2618
msgid ""
"Put text into a frame (path or shape), creating a flowed text linked to the "
"frame object"
msgstr ""
-#: ../src/verbs.cpp:2626
+#: ../src/verbs.cpp:2619
msgid "_Unflow"
msgstr ""
-#: ../src/verbs.cpp:2627
+#: ../src/verbs.cpp:2620
msgid "Remove text from frame (creates a single-line text object)"
msgstr ""
-#: ../src/verbs.cpp:2628
+#: ../src/verbs.cpp:2621
msgid "_Convert to Text"
msgstr ""
-#: ../src/verbs.cpp:2629
+#: ../src/verbs.cpp:2622
msgid "Convert flowed text to regular text object (preserves appearance)"
msgstr ""
-#: ../src/verbs.cpp:2631
+#: ../src/verbs.cpp:2624
msgid "Flip _Horizontal"
msgstr ""
-#: ../src/verbs.cpp:2631
+#: ../src/verbs.cpp:2624
msgid "Flip selected objects horizontally"
msgstr ""
-#: ../src/verbs.cpp:2634
+#: ../src/verbs.cpp:2627
msgid "Flip _Vertical"
msgstr ""
-#: ../src/verbs.cpp:2634
+#: ../src/verbs.cpp:2627
msgid "Flip selected objects vertically"
msgstr ""
-#: ../src/verbs.cpp:2637
+#: ../src/verbs.cpp:2630
msgid "Apply mask to selection (using the topmost object as mask)"
msgstr ""
-#: ../src/verbs.cpp:2639
+#: ../src/verbs.cpp:2632
msgid "Edit mask"
msgstr ""
-#: ../src/verbs.cpp:2640 ../src/verbs.cpp:2646
+#: ../src/verbs.cpp:2633 ../src/verbs.cpp:2639
msgid "_Release"
msgstr ""
-#: ../src/verbs.cpp:2641
+#: ../src/verbs.cpp:2634
msgid "Remove mask from selection"
msgstr ""
-#: ../src/verbs.cpp:2643
+#: ../src/verbs.cpp:2636
msgid ""
"Apply clipping path to selection (using the topmost object as clipping path)"
msgstr ""
-#: ../src/verbs.cpp:2645
+#: ../src/verbs.cpp:2638
msgid "Edit clipping path"
msgstr ""
-#: ../src/verbs.cpp:2647
+#: ../src/verbs.cpp:2640
msgid "Remove clipping path from selection"
msgstr ""
#. Tools
-#: ../src/verbs.cpp:2650
+#: ../src/verbs.cpp:2643
msgctxt "ContextVerb"
msgid "Select"
msgstr ""
-#: ../src/verbs.cpp:2651
+#: ../src/verbs.cpp:2644
msgid "Select and transform objects"
msgstr ""
-#: ../src/verbs.cpp:2652
+#: ../src/verbs.cpp:2645
msgctxt "ContextVerb"
msgid "Node Edit"
msgstr ""
-#: ../src/verbs.cpp:2653
+#: ../src/verbs.cpp:2646
msgid "Edit paths by nodes"
msgstr ""
-#: ../src/verbs.cpp:2654
+#: ../src/verbs.cpp:2647
msgctxt "ContextVerb"
msgid "Tweak"
msgstr ""
-#: ../src/verbs.cpp:2655
+#: ../src/verbs.cpp:2648
msgid "Tweak objects by sculpting or painting"
msgstr ""
-#: ../src/verbs.cpp:2656
+#: ../src/verbs.cpp:2649
msgctxt "ContextVerb"
msgid "Spray"
msgstr ""
-#: ../src/verbs.cpp:2657
+#: ../src/verbs.cpp:2650
msgid "Spray objects by sculpting or painting"
msgstr ""
-#: ../src/verbs.cpp:2658
+#: ../src/verbs.cpp:2651
msgctxt "ContextVerb"
msgid "Rectangle"
msgstr ""
-#: ../src/verbs.cpp:2659
+#: ../src/verbs.cpp:2652
msgid "Create rectangles and squares"
msgstr ""
-#: ../src/verbs.cpp:2660
+#: ../src/verbs.cpp:2653
msgctxt "ContextVerb"
msgid "3D Box"
msgstr ""
-#: ../src/verbs.cpp:2661
+#: ../src/verbs.cpp:2654
msgid "Create 3D boxes"
msgstr ""
-#: ../src/verbs.cpp:2662
+#: ../src/verbs.cpp:2655
msgctxt "ContextVerb"
msgid "Ellipse"
msgstr ""
-#: ../src/verbs.cpp:2663
+#: ../src/verbs.cpp:2656
msgid "Create circles, ellipses, and arcs"
msgstr ""
-#: ../src/verbs.cpp:2664
+#: ../src/verbs.cpp:2657
msgctxt "ContextVerb"
msgid "Star"
msgstr ""
-#: ../src/verbs.cpp:2665
+#: ../src/verbs.cpp:2658
msgid "Create stars and polygons"
msgstr ""
-#: ../src/verbs.cpp:2666
+#: ../src/verbs.cpp:2659
msgctxt "ContextVerb"
msgid "Spiral"
msgstr ""
-#: ../src/verbs.cpp:2667
+#: ../src/verbs.cpp:2660
msgid "Create spirals"
msgstr ""
-#: ../src/verbs.cpp:2668
+#: ../src/verbs.cpp:2661
msgctxt "ContextVerb"
msgid "Pencil"
msgstr ""
-#: ../src/verbs.cpp:2669
+#: ../src/verbs.cpp:2662
msgid "Draw freehand lines"
msgstr ""
-#: ../src/verbs.cpp:2670
+#: ../src/verbs.cpp:2663
msgctxt "ContextVerb"
msgid "Pen"
msgstr ""
-#: ../src/verbs.cpp:2671
+#: ../src/verbs.cpp:2664
msgid "Draw Bezier curves and straight lines"
msgstr ""
-#: ../src/verbs.cpp:2672
+#: ../src/verbs.cpp:2665
msgctxt "ContextVerb"
msgid "Calligraphy"
msgstr ""
-#: ../src/verbs.cpp:2673
+#: ../src/verbs.cpp:2666
msgid "Draw calligraphic or brush strokes"
msgstr ""
-#: ../src/verbs.cpp:2675
+#: ../src/verbs.cpp:2668
msgid "Create and edit text objects"
msgstr ""
-#: ../src/verbs.cpp:2676
+#: ../src/verbs.cpp:2669
msgctxt "ContextVerb"
msgid "Gradient"
msgstr ""
-#: ../src/verbs.cpp:2677
+#: ../src/verbs.cpp:2670
msgid "Create and edit gradients"
msgstr ""
-#: ../src/verbs.cpp:2678
+#: ../src/verbs.cpp:2671
msgctxt "ContextVerb"
msgid "Mesh"
msgstr ""
-#: ../src/verbs.cpp:2679
+#: ../src/verbs.cpp:2672
msgid "Create and edit meshes"
msgstr ""
-#: ../src/verbs.cpp:2680
+#: ../src/verbs.cpp:2673
msgctxt "ContextVerb"
msgid "Zoom"
msgstr ""
-#: ../src/verbs.cpp:2681
+#: ../src/verbs.cpp:2674
msgid "Zoom in or out"
msgstr ""
-#: ../src/verbs.cpp:2683
+#: ../src/verbs.cpp:2676
msgid "Measurement tool"
msgstr ""
-#: ../src/verbs.cpp:2684
+#: ../src/verbs.cpp:2677
msgctxt "ContextVerb"
msgid "Dropper"
msgstr ""
-#: ../src/verbs.cpp:2685 ../src/widgets/sp-color-notebook.cpp:411
+#: ../src/verbs.cpp:2678 ../src/widgets/sp-color-notebook.cpp:411
msgid "Pick colors from image"
msgstr ""
-#: ../src/verbs.cpp:2686
+#: ../src/verbs.cpp:2679
msgctxt "ContextVerb"
msgid "Connector"
msgstr ""
-#: ../src/verbs.cpp:2687
+#: ../src/verbs.cpp:2680
msgid "Create diagram connectors"
msgstr ""
-#: ../src/verbs.cpp:2688
+#: ../src/verbs.cpp:2681
msgctxt "ContextVerb"
msgid "Paint Bucket"
msgstr ""
-#: ../src/verbs.cpp:2689
+#: ../src/verbs.cpp:2682
msgid "Fill bounded areas"
msgstr ""
-#: ../src/verbs.cpp:2690
+#: ../src/verbs.cpp:2683
msgctxt "ContextVerb"
msgid "LPE Edit"
msgstr ""
-#: ../src/verbs.cpp:2691
+#: ../src/verbs.cpp:2684
msgid "Edit Path Effect parameters"
msgstr ""
-#: ../src/verbs.cpp:2692
+#: ../src/verbs.cpp:2685
msgctxt "ContextVerb"
msgid "Eraser"
msgstr ""
-#: ../src/verbs.cpp:2693
+#: ../src/verbs.cpp:2686
msgid "Erase existing paths"
msgstr ""
-#: ../src/verbs.cpp:2694
+#: ../src/verbs.cpp:2687
msgctxt "ContextVerb"
msgid "LPE Tool"
msgstr ""
-#: ../src/verbs.cpp:2695
+#: ../src/verbs.cpp:2688
msgid "Do geometric constructions"
msgstr ""
#. Tool prefs
-#: ../src/verbs.cpp:2697
+#: ../src/verbs.cpp:2690
msgid "Selector Preferences"
msgstr ""
-#: ../src/verbs.cpp:2698
+#: ../src/verbs.cpp:2691
msgid "Open Preferences for the Selector tool"
msgstr ""
-#: ../src/verbs.cpp:2699
+#: ../src/verbs.cpp:2692
msgid "Node Tool Preferences"
msgstr ""
-#: ../src/verbs.cpp:2700
+#: ../src/verbs.cpp:2693
msgid "Open Preferences for the Node tool"
msgstr ""
-#: ../src/verbs.cpp:2701
+#: ../src/verbs.cpp:2694
msgid "Tweak Tool Preferences"
msgstr ""
-#: ../src/verbs.cpp:2702
+#: ../src/verbs.cpp:2695
msgid "Open Preferences for the Tweak tool"
msgstr ""
-#: ../src/verbs.cpp:2703
+#: ../src/verbs.cpp:2696
msgid "Spray Tool Preferences"
msgstr ""
-#: ../src/verbs.cpp:2704
+#: ../src/verbs.cpp:2697
msgid "Open Preferences for the Spray tool"
msgstr ""
-#: ../src/verbs.cpp:2705
+#: ../src/verbs.cpp:2698
msgid "Rectangle Preferences"
msgstr ""
-#: ../src/verbs.cpp:2706
+#: ../src/verbs.cpp:2699
msgid "Open Preferences for the Rectangle tool"
msgstr ""
-#: ../src/verbs.cpp:2707
+#: ../src/verbs.cpp:2700
msgid "3D Box Preferences"
msgstr ""
-#: ../src/verbs.cpp:2708
+#: ../src/verbs.cpp:2701
msgid "Open Preferences for the 3D Box tool"
msgstr ""
-#: ../src/verbs.cpp:2709
+#: ../src/verbs.cpp:2702
msgid "Ellipse Preferences"
msgstr ""
-#: ../src/verbs.cpp:2710
+#: ../src/verbs.cpp:2703
msgid "Open Preferences for the Ellipse tool"
msgstr ""
-#: ../src/verbs.cpp:2711
+#: ../src/verbs.cpp:2704
msgid "Star Preferences"
msgstr ""
-#: ../src/verbs.cpp:2712
+#: ../src/verbs.cpp:2705
msgid "Open Preferences for the Star tool"
msgstr ""
-#: ../src/verbs.cpp:2713
+#: ../src/verbs.cpp:2706
msgid "Spiral Preferences"
msgstr ""
-#: ../src/verbs.cpp:2714
+#: ../src/verbs.cpp:2707
msgid "Open Preferences for the Spiral tool"
msgstr ""
-#: ../src/verbs.cpp:2715
+#: ../src/verbs.cpp:2708
msgid "Pencil Preferences"
msgstr ""
-#: ../src/verbs.cpp:2716
+#: ../src/verbs.cpp:2709
msgid "Open Preferences for the Pencil tool"
msgstr ""
-#: ../src/verbs.cpp:2717
+#: ../src/verbs.cpp:2710
msgid "Pen Preferences"
msgstr ""
-#: ../src/verbs.cpp:2718
+#: ../src/verbs.cpp:2711
msgid "Open Preferences for the Pen tool"
msgstr ""
-#: ../src/verbs.cpp:2719
+#: ../src/verbs.cpp:2712
msgid "Calligraphic Preferences"
msgstr ""
-#: ../src/verbs.cpp:2720
+#: ../src/verbs.cpp:2713
msgid "Open Preferences for the Calligraphy tool"
msgstr ""
-#: ../src/verbs.cpp:2721
+#: ../src/verbs.cpp:2714
msgid "Text Preferences"
msgstr ""
-#: ../src/verbs.cpp:2722
+#: ../src/verbs.cpp:2715
msgid "Open Preferences for the Text tool"
msgstr ""
-#: ../src/verbs.cpp:2723
+#: ../src/verbs.cpp:2716
msgid "Gradient Preferences"
msgstr ""
-#: ../src/verbs.cpp:2724
+#: ../src/verbs.cpp:2717
msgid "Open Preferences for the Gradient tool"
msgstr ""
-#: ../src/verbs.cpp:2725
+#: ../src/verbs.cpp:2718
msgid "Mesh Preferences"
msgstr ""
-#: ../src/verbs.cpp:2726
+#: ../src/verbs.cpp:2719
msgid "Open Preferences for the Mesh tool"
msgstr ""
-#: ../src/verbs.cpp:2727
+#: ../src/verbs.cpp:2720
msgid "Zoom Preferences"
msgstr ""
-#: ../src/verbs.cpp:2728
+#: ../src/verbs.cpp:2721
msgid "Open Preferences for the Zoom tool"
msgstr ""
-#: ../src/verbs.cpp:2729
+#: ../src/verbs.cpp:2722
msgid "Measure Preferences"
msgstr ""
-#: ../src/verbs.cpp:2730
+#: ../src/verbs.cpp:2723
msgid "Open Preferences for the Measure tool"
msgstr ""
-#: ../src/verbs.cpp:2731
+#: ../src/verbs.cpp:2724
msgid "Dropper Preferences"
msgstr ""
-#: ../src/verbs.cpp:2732
+#: ../src/verbs.cpp:2725
msgid "Open Preferences for the Dropper tool"
msgstr ""
-#: ../src/verbs.cpp:2733
+#: ../src/verbs.cpp:2726
msgid "Connector Preferences"
msgstr ""
-#: ../src/verbs.cpp:2734
+#: ../src/verbs.cpp:2727
msgid "Open Preferences for the Connector tool"
msgstr ""
-#: ../src/verbs.cpp:2735
+#: ../src/verbs.cpp:2728
msgid "Paint Bucket Preferences"
msgstr ""
-#: ../src/verbs.cpp:2736
+#: ../src/verbs.cpp:2729
msgid "Open Preferences for the Paint Bucket tool"
msgstr ""
-#: ../src/verbs.cpp:2737
+#: ../src/verbs.cpp:2730
msgid "Eraser Preferences"
msgstr ""
-#: ../src/verbs.cpp:2738
+#: ../src/verbs.cpp:2731
msgid "Open Preferences for the Eraser tool"
msgstr ""
-#: ../src/verbs.cpp:2739
+#: ../src/verbs.cpp:2732
msgid "LPE Tool Preferences"
msgstr ""
-#: ../src/verbs.cpp:2740
+#: ../src/verbs.cpp:2733
msgid "Open Preferences for the LPETool tool"
msgstr ""
#. Zoom/View
-#: ../src/verbs.cpp:2742
+#: ../src/verbs.cpp:2735
msgid "Zoom In"
msgstr ""
-#: ../src/verbs.cpp:2742
+#: ../src/verbs.cpp:2735
msgid "Zoom in"
msgstr ""
-#: ../src/verbs.cpp:2743
+#: ../src/verbs.cpp:2736
msgid "Zoom Out"
msgstr ""
-#: ../src/verbs.cpp:2743
+#: ../src/verbs.cpp:2736
msgid "Zoom out"
msgstr ""
-#: ../src/verbs.cpp:2744
+#: ../src/verbs.cpp:2737
msgid "_Rulers"
msgstr ""
-#: ../src/verbs.cpp:2744
+#: ../src/verbs.cpp:2737
msgid "Show or hide the canvas rulers"
msgstr ""
-#: ../src/verbs.cpp:2745
+#: ../src/verbs.cpp:2738
msgid "Scroll_bars"
msgstr ""
-#: ../src/verbs.cpp:2745
+#: ../src/verbs.cpp:2738
msgid "Show or hide the canvas scrollbars"
msgstr ""
-#: ../src/verbs.cpp:2746
-msgid "_Grid"
+#: ../src/verbs.cpp:2739
+msgid "Page _Grid"
msgstr ""
-#: ../src/verbs.cpp:2746
-msgid "Show or hide the grid"
+#: ../src/verbs.cpp:2739
+msgid "Show or hide the page grid"
msgstr ""
-#: ../src/verbs.cpp:2747
+#: ../src/verbs.cpp:2740
msgid "G_uides"
msgstr ""
-#: ../src/verbs.cpp:2747
+#: ../src/verbs.cpp:2740
msgid "Show or hide guides (drag from a ruler to create a guide)"
msgstr ""
-#: ../src/verbs.cpp:2748
+#: ../src/verbs.cpp:2741
msgid "Enable snapping"
msgstr ""
-#: ../src/verbs.cpp:2749
+#: ../src/verbs.cpp:2742
msgid "_Commands Bar"
msgstr ""
-#: ../src/verbs.cpp:2749
+#: ../src/verbs.cpp:2742
msgid "Show or hide the Commands bar (under the menu)"
msgstr ""
-#: ../src/verbs.cpp:2750
+#: ../src/verbs.cpp:2743
msgid "Sn_ap Controls Bar"
msgstr ""
-#: ../src/verbs.cpp:2750
+#: ../src/verbs.cpp:2743
msgid "Show or hide the snapping controls"
msgstr ""
-#: ../src/verbs.cpp:2751
+#: ../src/verbs.cpp:2744
msgid "T_ool Controls Bar"
msgstr ""
-#: ../src/verbs.cpp:2751
+#: ../src/verbs.cpp:2744
msgid "Show or hide the Tool Controls bar"
msgstr ""
-#: ../src/verbs.cpp:2752
+#: ../src/verbs.cpp:2745
msgid "_Toolbox"
msgstr ""
-#: ../src/verbs.cpp:2752
+#: ../src/verbs.cpp:2745
msgid "Show or hide the main toolbox (on the left)"
msgstr ""
-#: ../src/verbs.cpp:2753
+#: ../src/verbs.cpp:2746
msgid "_Palette"
msgstr ""
-#: ../src/verbs.cpp:2753
+#: ../src/verbs.cpp:2746
msgid "Show or hide the color palette"
msgstr ""
-#: ../src/verbs.cpp:2754
+#: ../src/verbs.cpp:2747
msgid "_Statusbar"
msgstr ""
-#: ../src/verbs.cpp:2754
+#: ../src/verbs.cpp:2747
msgid "Show or hide the statusbar (at the bottom of the window)"
msgstr ""
-#: ../src/verbs.cpp:2755
+#: ../src/verbs.cpp:2748
msgid "Nex_t Zoom"
msgstr ""
-#: ../src/verbs.cpp:2755
+#: ../src/verbs.cpp:2748
msgid "Next zoom (from the history of zooms)"
msgstr ""
-#: ../src/verbs.cpp:2757
+#: ../src/verbs.cpp:2750
msgid "Pre_vious Zoom"
msgstr ""
-#: ../src/verbs.cpp:2757
+#: ../src/verbs.cpp:2750
msgid "Previous zoom (from the history of zooms)"
msgstr ""
-#: ../src/verbs.cpp:2759
+#: ../src/verbs.cpp:2752
msgid "Zoom 1:_1"
msgstr ""
-#: ../src/verbs.cpp:2759
+#: ../src/verbs.cpp:2752
msgid "Zoom to 1:1"
msgstr ""
-#: ../src/verbs.cpp:2761
+#: ../src/verbs.cpp:2754
msgid "Zoom 1:_2"
msgstr ""
-#: ../src/verbs.cpp:2761
+#: ../src/verbs.cpp:2754
msgid "Zoom to 1:2"
msgstr ""
-#: ../src/verbs.cpp:2763
+#: ../src/verbs.cpp:2756
msgid "_Zoom 2:1"
msgstr ""
-#: ../src/verbs.cpp:2763
+#: ../src/verbs.cpp:2756
msgid "Zoom to 2:1"
msgstr ""
-#: ../src/verbs.cpp:2766
+#: ../src/verbs.cpp:2759
msgid "_Fullscreen"
msgstr ""
-#: ../src/verbs.cpp:2766 ../src/verbs.cpp:2768
+#: ../src/verbs.cpp:2759 ../src/verbs.cpp:2761
msgid "Stretch this document window to full screen"
msgstr ""
-#: ../src/verbs.cpp:2768
+#: ../src/verbs.cpp:2761
msgid "Fullscreen & Focus Mode"
msgstr ""
-#: ../src/verbs.cpp:2771
+#: ../src/verbs.cpp:2764
msgid "Toggle _Focus Mode"
msgstr ""
-#: ../src/verbs.cpp:2771
+#: ../src/verbs.cpp:2764
msgid "Remove excess toolbars to focus on drawing"
msgstr ""
-#: ../src/verbs.cpp:2773
+#: ../src/verbs.cpp:2766
msgid "Duplic_ate Window"
msgstr ""
-#: ../src/verbs.cpp:2773
+#: ../src/verbs.cpp:2766
msgid "Open a new window with the same document"
msgstr ""
-#: ../src/verbs.cpp:2775
+#: ../src/verbs.cpp:2768
msgid "_New View Preview"
msgstr ""
-#: ../src/verbs.cpp:2776
+#: ../src/verbs.cpp:2769
msgid "New View Preview"
msgstr ""
#. "view_new_preview"
-#: ../src/verbs.cpp:2778 ../src/verbs.cpp:2786
+#: ../src/verbs.cpp:2771 ../src/verbs.cpp:2779
msgid "_Normal"
msgstr ""
-#: ../src/verbs.cpp:2779
+#: ../src/verbs.cpp:2772
msgid "Switch to normal display mode"
msgstr ""
-#: ../src/verbs.cpp:2780
+#: ../src/verbs.cpp:2773
msgid "No _Filters"
msgstr ""
-#: ../src/verbs.cpp:2781
+#: ../src/verbs.cpp:2774
msgid "Switch to normal display without filters"
msgstr ""
-#: ../src/verbs.cpp:2782
+#: ../src/verbs.cpp:2775
msgid "_Outline"
msgstr ""
-#: ../src/verbs.cpp:2783
+#: ../src/verbs.cpp:2776
msgid "Switch to outline (wireframe) display mode"
msgstr ""
#. new ZoomVerb(SP_VERB_VIEW_COLOR_MODE_PRINT_COLORS_PREVIEW, "ViewColorModePrintColorsPreview", N_("_Print Colors Preview"),
#. N_("Switch to print colors preview mode"), NULL),
-#: ../src/verbs.cpp:2784 ../src/verbs.cpp:2792
+#: ../src/verbs.cpp:2777 ../src/verbs.cpp:2785
msgid "_Toggle"
msgstr ""
-#: ../src/verbs.cpp:2785
+#: ../src/verbs.cpp:2778
msgid "Toggle between normal and outline display modes"
msgstr ""
-#: ../src/verbs.cpp:2787
+#: ../src/verbs.cpp:2780
msgid "Switch to normal color display mode"
msgstr ""
-#: ../src/verbs.cpp:2788
+#: ../src/verbs.cpp:2781
msgid "_Grayscale"
msgstr ""
-#: ../src/verbs.cpp:2789
+#: ../src/verbs.cpp:2782
msgid "Switch to grayscale display mode"
msgstr ""
-#: ../src/verbs.cpp:2793
+#: ../src/verbs.cpp:2786
msgid "Toggle between normal and grayscale color display modes"
msgstr ""
-#: ../src/verbs.cpp:2795
+#: ../src/verbs.cpp:2788
msgid "Color-managed view"
msgstr ""
-#: ../src/verbs.cpp:2796
+#: ../src/verbs.cpp:2789
msgid "Toggle color-managed display for this document window"
msgstr ""
-#: ../src/verbs.cpp:2798
+#: ../src/verbs.cpp:2791
msgid "Ico_n Preview..."
msgstr ""
-#: ../src/verbs.cpp:2799
+#: ../src/verbs.cpp:2792
msgid "Open a window to preview objects at different icon resolutions"
msgstr ""
-#: ../src/verbs.cpp:2801
+#: ../src/verbs.cpp:2794
msgid "Zoom to fit page in window"
msgstr ""
-#: ../src/verbs.cpp:2802
+#: ../src/verbs.cpp:2795
msgid "Page _Width"
msgstr ""
-#: ../src/verbs.cpp:2803
+#: ../src/verbs.cpp:2796
msgid "Zoom to fit page width in window"
msgstr ""
-#: ../src/verbs.cpp:2805
+#: ../src/verbs.cpp:2798
msgid "Zoom to fit drawing in window"
msgstr ""
-#: ../src/verbs.cpp:2807
+#: ../src/verbs.cpp:2800
msgid "Zoom to fit selection in window"
msgstr ""
#. Dialogs
-#: ../src/verbs.cpp:2810
+#: ../src/verbs.cpp:2803
msgid "P_references..."
msgstr ""
-#: ../src/verbs.cpp:2811
+#: ../src/verbs.cpp:2804
msgid "Edit global Inkscape preferences"
msgstr ""
-#: ../src/verbs.cpp:2812
+#: ../src/verbs.cpp:2805
msgid "_Document Properties..."
msgstr ""
-#: ../src/verbs.cpp:2813
+#: ../src/verbs.cpp:2806
msgid "Edit properties of this document (to be saved with the document)"
msgstr ""
-#: ../src/verbs.cpp:2814
+#: ../src/verbs.cpp:2807
msgid "Document _Metadata..."
msgstr ""
-#: ../src/verbs.cpp:2815
+#: ../src/verbs.cpp:2808
msgid "Edit document metadata (to be saved with the document)"
msgstr ""
-#: ../src/verbs.cpp:2817
+#: ../src/verbs.cpp:2810
msgid ""
"Edit objects' colors, gradients, arrowheads, and other fill and stroke "
"properties..."
msgstr ""
#. FIXME: Probably better to either use something from the icon naming spec or ship our own "select-font" icon
-#: ../src/verbs.cpp:2819
+#: ../src/verbs.cpp:2812
msgid "Gl_yphs..."
msgstr ""
-#: ../src/verbs.cpp:2820
+#: ../src/verbs.cpp:2813
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:2823
+#: ../src/verbs.cpp:2816
msgid "S_watches..."
msgstr ""
-#: ../src/verbs.cpp:2824
+#: ../src/verbs.cpp:2817
msgid "Select colors from a swatches palette"
msgstr ""
-#: ../src/verbs.cpp:2825
+#: ../src/verbs.cpp:2818
msgid "S_ymbols..."
msgstr ""
-#: ../src/verbs.cpp:2826
+#: ../src/verbs.cpp:2819
msgid "Select symbol from a symbols palette"
msgstr ""
-#: ../src/verbs.cpp:2827
+#: ../src/verbs.cpp:2820
msgid "Transfor_m..."
msgstr ""
-#: ../src/verbs.cpp:2828
+#: ../src/verbs.cpp:2821
msgid "Precisely control objects' transformations"
msgstr ""
-#: ../src/verbs.cpp:2829
+#: ../src/verbs.cpp:2822
msgid "_Align and Distribute..."
msgstr ""
-#: ../src/verbs.cpp:2830
+#: ../src/verbs.cpp:2823
msgid "Align and distribute objects"
msgstr ""
-#: ../src/verbs.cpp:2831
+#: ../src/verbs.cpp:2824
msgid "_Spray options..."
msgstr ""
-#: ../src/verbs.cpp:2832
+#: ../src/verbs.cpp:2825
msgid "Some options for the spray"
msgstr ""
-#: ../src/verbs.cpp:2833
+#: ../src/verbs.cpp:2826
msgid "Undo _History..."
msgstr ""
-#: ../src/verbs.cpp:2834
+#: ../src/verbs.cpp:2827
msgid "Undo History"
msgstr ""
-#: ../src/verbs.cpp:2836
+#: ../src/verbs.cpp:2829
msgid "View and select font family, font size and other text properties"
msgstr ""
-#: ../src/verbs.cpp:2837
+#: ../src/verbs.cpp:2830
msgid "_XML Editor..."
msgstr ""
-#: ../src/verbs.cpp:2838
+#: ../src/verbs.cpp:2831
msgid "View and edit the XML tree of the document"
msgstr ""
-#: ../src/verbs.cpp:2839
+#: ../src/verbs.cpp:2832
msgid "_Find/Replace..."
msgstr ""
-#: ../src/verbs.cpp:2840
+#: ../src/verbs.cpp:2833
msgid "Find objects in document"
msgstr ""
-#: ../src/verbs.cpp:2841
+#: ../src/verbs.cpp:2834
msgid "Find and _Replace Text..."
msgstr ""
-#: ../src/verbs.cpp:2842
+#: ../src/verbs.cpp:2835
msgid "Find and replace text in document"
msgstr ""
-#: ../src/verbs.cpp:2844
+#: ../src/verbs.cpp:2837
msgid "Check spelling of text in document"
msgstr ""
-#: ../src/verbs.cpp:2845
+#: ../src/verbs.cpp:2838
msgid "_Messages..."
msgstr ""
-#: ../src/verbs.cpp:2846
+#: ../src/verbs.cpp:2839
msgid "View debug messages"
msgstr ""
-#: ../src/verbs.cpp:2847
+#: ../src/verbs.cpp:2840
msgid "Show/Hide D_ialogs"
msgstr ""
-#: ../src/verbs.cpp:2848
+#: ../src/verbs.cpp:2841
msgid "Show or hide all open dialogs"
msgstr ""
-#: ../src/verbs.cpp:2849
+#: ../src/verbs.cpp:2842
msgid "Create Tiled Clones..."
msgstr ""
-#: ../src/verbs.cpp:2850
+#: ../src/verbs.cpp:2843
msgid ""
"Create multiple clones of selected object, arranging them into a pattern or "
"scattering"
msgstr ""
-#: ../src/verbs.cpp:2851
+#: ../src/verbs.cpp:2844
msgid "_Object attributes..."
msgstr ""
-#: ../src/verbs.cpp:2852
+#: ../src/verbs.cpp:2845
msgid "Edit the object attributes..."
msgstr ""
-#: ../src/verbs.cpp:2854
+#: ../src/verbs.cpp:2847
msgid "Edit the ID, locked and visible status, and other object properties"
msgstr ""
-#: ../src/verbs.cpp:2855
+#: ../src/verbs.cpp:2848
msgid "_Input Devices..."
msgstr ""
-#: ../src/verbs.cpp:2856
+#: ../src/verbs.cpp:2849
msgid "Configure extended input devices, such as a graphics tablet"
msgstr ""
-#: ../src/verbs.cpp:2857
+#: ../src/verbs.cpp:2850
msgid "_Extensions..."
msgstr ""
-#: ../src/verbs.cpp:2858
+#: ../src/verbs.cpp:2851
msgid "Query information about extensions"
msgstr ""
-#: ../src/verbs.cpp:2859
+#: ../src/verbs.cpp:2852
msgid "Layer_s..."
msgstr ""
-#: ../src/verbs.cpp:2860
+#: ../src/verbs.cpp:2853
msgid "View Layers"
msgstr ""
-#: ../src/verbs.cpp:2861
+#: ../src/verbs.cpp:2854
msgid "Path E_ffects ..."
msgstr ""
-#: ../src/verbs.cpp:2862
+#: ../src/verbs.cpp:2855
msgid "Manage, edit, and apply path effects"
msgstr ""
-#: ../src/verbs.cpp:2863
+#: ../src/verbs.cpp:2856
msgid "Filter _Editor..."
msgstr ""
-#: ../src/verbs.cpp:2864
+#: ../src/verbs.cpp:2857
msgid "Manage, edit, and apply SVG filters"
msgstr ""
-#: ../src/verbs.cpp:2865
+#: ../src/verbs.cpp:2858
msgid "SVG Font Editor..."
msgstr ""
-#: ../src/verbs.cpp:2866
+#: ../src/verbs.cpp:2859
msgid "Edit SVG fonts"
msgstr ""
-#: ../src/verbs.cpp:2867
+#: ../src/verbs.cpp:2860
msgid "Print Colors..."
msgstr ""
-#: ../src/verbs.cpp:2868
+#: ../src/verbs.cpp:2861
msgid ""
"Select which color separations to render in Print Colors Preview rendermode"
msgstr ""
-#: ../src/verbs.cpp:2869
+#: ../src/verbs.cpp:2862
msgid "_Export PNG Image..."
msgstr ""
-#: ../src/verbs.cpp:2870
+#: ../src/verbs.cpp:2863
msgid "Export this document or a selection as a PNG image"
msgstr ""
#. Help
-#: ../src/verbs.cpp:2872
+#: ../src/verbs.cpp:2865
msgid "About E_xtensions"
msgstr ""
-#: ../src/verbs.cpp:2873
+#: ../src/verbs.cpp:2866
msgid "Information on Inkscape extensions"
msgstr ""
-#: ../src/verbs.cpp:2874
+#: ../src/verbs.cpp:2867
msgid "About _Memory"
msgstr ""
-#: ../src/verbs.cpp:2875
+#: ../src/verbs.cpp:2868
msgid "Memory usage information"
msgstr ""
-#: ../src/verbs.cpp:2876
+#: ../src/verbs.cpp:2869
msgid "_About Inkscape"
msgstr ""
-#: ../src/verbs.cpp:2877
+#: ../src/verbs.cpp:2870
msgid "Inkscape version, authors, license"
msgstr ""
#. new HelpVerb(SP_VERB_SHOW_LICENSE, "ShowLicense", N_("_License"),
#. N_("Distribution terms"), /*"show_license"*/"inkscape_options"),
#. Tutorials
-#: ../src/verbs.cpp:2882
+#: ../src/verbs.cpp:2875
msgid "Inkscape: _Basic"
msgstr ""
-#: ../src/verbs.cpp:2883
+#: ../src/verbs.cpp:2876
msgid "Getting started with Inkscape"
msgstr ""
#. "tutorial_basic"
-#: ../src/verbs.cpp:2884
+#: ../src/verbs.cpp:2877
msgid "Inkscape: _Shapes"
msgstr ""
-#: ../src/verbs.cpp:2885
+#: ../src/verbs.cpp:2878
msgid "Using shape tools to create and edit shapes"
msgstr ""
-#: ../src/verbs.cpp:2886
+#: ../src/verbs.cpp:2879
msgid "Inkscape: _Advanced"
msgstr ""
-#: ../src/verbs.cpp:2887
+#: ../src/verbs.cpp:2880
msgid "Advanced Inkscape topics"
msgstr ""
#. "tutorial_advanced"
#. TRANSLATORS: "to trace" means "to convert a bitmap to vector graphics" (to vectorize)
-#: ../src/verbs.cpp:2889
+#: ../src/verbs.cpp:2882
msgid "Inkscape: T_racing"
msgstr ""
-#: ../src/verbs.cpp:2890
+#: ../src/verbs.cpp:2883
msgid "Using bitmap tracing"
msgstr ""
#. "tutorial_tracing"
-#: ../src/verbs.cpp:2891
+#: ../src/verbs.cpp:2884
msgid "Inkscape: Tracing Pixel Art"
msgstr ""
-#: ../src/verbs.cpp:2892
+#: ../src/verbs.cpp:2885
msgid "Using Trace Pixel Art dialog"
msgstr ""
-#: ../src/verbs.cpp:2893
+#: ../src/verbs.cpp:2886
msgid "Inkscape: _Calligraphy"
msgstr ""
-#: ../src/verbs.cpp:2894
+#: ../src/verbs.cpp:2887
msgid "Using the Calligraphy pen tool"
msgstr ""
-#: ../src/verbs.cpp:2895
+#: ../src/verbs.cpp:2888
msgid "Inkscape: _Interpolate"
msgstr ""
-#: ../src/verbs.cpp:2896
+#: ../src/verbs.cpp:2889
msgid "Using the interpolate extension"
msgstr ""
#. "tutorial_interpolate"
-#: ../src/verbs.cpp:2897
+#: ../src/verbs.cpp:2890
msgid "_Elements of Design"
msgstr ""
-#: ../src/verbs.cpp:2898
+#: ../src/verbs.cpp:2891
msgid "Principles of design in the tutorial form"
msgstr ""
#. "tutorial_design"
-#: ../src/verbs.cpp:2899
+#: ../src/verbs.cpp:2892
msgid "_Tips and Tricks"
msgstr ""
-#: ../src/verbs.cpp:2900
+#: ../src/verbs.cpp:2893
msgid "Miscellaneous tips and tricks"
msgstr ""
#. "tutorial_tips"
#. Effect -- renamed Extension
-#: ../src/verbs.cpp:2903
+#: ../src/verbs.cpp:2896
msgid "Previous Exte_nsion"
msgstr ""
-#: ../src/verbs.cpp:2904
+#: ../src/verbs.cpp:2897
msgid "Repeat the last extension with the same settings"
msgstr ""
-#: ../src/verbs.cpp:2905
+#: ../src/verbs.cpp:2898
msgid "_Previous Extension Settings..."
msgstr ""
-#: ../src/verbs.cpp:2906
+#: ../src/verbs.cpp:2899
msgid "Repeat the last extension with new settings"
msgstr ""
-#: ../src/verbs.cpp:2910
+#: ../src/verbs.cpp:2903
msgid "Fit the page to the current selection"
msgstr ""
-#: ../src/verbs.cpp:2912
+#: ../src/verbs.cpp:2905
msgid "Fit the page to the drawing"
msgstr ""
-#: ../src/verbs.cpp:2914
+#: ../src/verbs.cpp:2907
msgid ""
"Fit the page to the current selection or the drawing if there is no selection"
msgstr ""
#. LockAndHide
-#: ../src/verbs.cpp:2916
+#: ../src/verbs.cpp:2909
msgid "Unlock All"
msgstr ""
-#: ../src/verbs.cpp:2918
+#: ../src/verbs.cpp:2911
msgid "Unlock All in All Layers"
msgstr ""
-#: ../src/verbs.cpp:2920
+#: ../src/verbs.cpp:2913
msgid "Unhide All"
msgstr ""
-#: ../src/verbs.cpp:2922
+#: ../src/verbs.cpp:2915
msgid "Unhide All in All Layers"
msgstr ""
-#: ../src/verbs.cpp:2926
+#: ../src/verbs.cpp:2919
msgid "Link an ICC color profile"
msgstr ""
-#: ../src/verbs.cpp:2927
+#: ../src/verbs.cpp:2920
msgid "Remove Color Profile"
msgstr ""
-#: ../src/verbs.cpp:2928
+#: ../src/verbs.cpp:2921
msgid "Remove a linked ICC color profile"
msgstr ""
-#: ../src/verbs.cpp:2931
+#: ../src/verbs.cpp:2924
msgid "Add External Script"
msgstr ""
-#: ../src/verbs.cpp:2931
+#: ../src/verbs.cpp:2924
msgid "Add an external script"
msgstr ""
-#: ../src/verbs.cpp:2933
+#: ../src/verbs.cpp:2926
msgid "Add Embedded Script"
msgstr ""
-#: ../src/verbs.cpp:2933
+#: ../src/verbs.cpp:2926
msgid "Add an embedded script"
msgstr ""
-#: ../src/verbs.cpp:2935
+#: ../src/verbs.cpp:2928
msgid "Edit Embedded Script"
msgstr ""
-#: ../src/verbs.cpp:2935
+#: ../src/verbs.cpp:2928
msgid "Edit an embedded script"
msgstr ""
-#: ../src/verbs.cpp:2937
+#: ../src/verbs.cpp:2930
msgid "Remove External Script"
msgstr ""
-#: ../src/verbs.cpp:2937
+#: ../src/verbs.cpp:2930
msgid "Remove an external script"
msgstr ""
-#: ../src/verbs.cpp:2939
+#: ../src/verbs.cpp:2932
msgid "Remove Embedded Script"
msgstr ""
-#: ../src/verbs.cpp:2939
+#: ../src/verbs.cpp:2932
msgid "Remove an embedded script"
msgstr ""
-#: ../src/verbs.cpp:2961 ../src/verbs.cpp:2962
+#: ../src/verbs.cpp:2954 ../src/verbs.cpp:2955
msgid "Center on horizontal and vertical axis"
msgstr ""
@@ -25949,10 +25496,18 @@ msgstr ""
msgid "<b>Change:</b>"
msgstr ""
+#: ../src/widgets/arc-toolbar.cpp:326
+msgid "Start:"
+msgstr ""
+
#: ../src/widgets/arc-toolbar.cpp:327
msgid "The angle (in degrees) from the horizontal to the arc's start point"
msgstr ""
+#: ../src/widgets/arc-toolbar.cpp:339
+msgid "End:"
+msgstr ""
+
#: ../src/widgets/arc-toolbar.cpp:340
msgid "The angle (in degrees) from the horizontal to the arc's end point"
msgstr ""
@@ -26062,7 +25617,7 @@ msgstr ""
#. Scale
#: ../src/widgets/calligraphy-toolbar.cpp:427
#: ../src/widgets/calligraphy-toolbar.cpp:460
-#: ../src/widgets/eraser-toolbar.cpp:125 ../src/widgets/pencil-toolbar.cpp:277
+#: ../src/widgets/eraser-toolbar.cpp:125 ../src/widgets/pencil-toolbar.cpp:269
#: ../src/widgets/spray-toolbar.cpp:113 ../src/widgets/spray-toolbar.cpp:129
#: ../src/widgets/spray-toolbar.cpp:145 ../src/widgets/spray-toolbar.cpp:205
#: ../src/widgets/spray-toolbar.cpp:235 ../src/widgets/spray-toolbar.cpp:253
@@ -26137,6 +25692,11 @@ msgstr ""
msgid "Pen Angle"
msgstr ""
+#: ../src/widgets/calligraphy-toolbar.cpp:463
+#: ../share/extensions/motion.inx.h:3 ../share/extensions/restack.inx.h:10
+msgid "Angle:"
+msgstr ""
+
#: ../src/widgets/calligraphy-toolbar.cpp:464
msgid ""
"The angle of the pen's nib (in degrees; 0 = horizontal; has no effect if "
@@ -26318,87 +25878,87 @@ msgstr ""
msgid "Add or edit calligraphic profile"
msgstr ""
-#: ../src/widgets/connector-toolbar.cpp:117
+#: ../src/widgets/connector-toolbar.cpp:120
msgid "Set connector type: orthogonal"
msgstr ""
-#: ../src/widgets/connector-toolbar.cpp:117
+#: ../src/widgets/connector-toolbar.cpp:120
msgid "Set connector type: polyline"
msgstr ""
-#: ../src/widgets/connector-toolbar.cpp:166
+#: ../src/widgets/connector-toolbar.cpp:169
msgid "Change connector curvature"
msgstr ""
-#: ../src/widgets/connector-toolbar.cpp:217
+#: ../src/widgets/connector-toolbar.cpp:220
msgid "Change connector spacing"
msgstr ""
-#: ../src/widgets/connector-toolbar.cpp:310
+#: ../src/widgets/connector-toolbar.cpp:313
msgid "Avoid"
msgstr ""
-#: ../src/widgets/connector-toolbar.cpp:320
+#: ../src/widgets/connector-toolbar.cpp:323
msgid "Ignore"
msgstr ""
-#: ../src/widgets/connector-toolbar.cpp:331
+#: ../src/widgets/connector-toolbar.cpp:334
msgid "Orthogonal"
msgstr ""
-#: ../src/widgets/connector-toolbar.cpp:332
+#: ../src/widgets/connector-toolbar.cpp:335
msgid "Make connector orthogonal or polyline"
msgstr ""
-#: ../src/widgets/connector-toolbar.cpp:346
+#: ../src/widgets/connector-toolbar.cpp:349
msgid "Connector Curvature"
msgstr ""
-#: ../src/widgets/connector-toolbar.cpp:346
+#: ../src/widgets/connector-toolbar.cpp:349
msgid "Curvature:"
msgstr ""
-#: ../src/widgets/connector-toolbar.cpp:347
+#: ../src/widgets/connector-toolbar.cpp:350
msgid "The amount of connectors curvature"
msgstr ""
-#: ../src/widgets/connector-toolbar.cpp:357
+#: ../src/widgets/connector-toolbar.cpp:360
msgid "Connector Spacing"
msgstr ""
-#: ../src/widgets/connector-toolbar.cpp:357
+#: ../src/widgets/connector-toolbar.cpp:360
msgid "Spacing:"
msgstr ""
-#: ../src/widgets/connector-toolbar.cpp:358
+#: ../src/widgets/connector-toolbar.cpp:361
msgid "The amount of space left around objects by auto-routing connectors"
msgstr ""
-#: ../src/widgets/connector-toolbar.cpp:369
+#: ../src/widgets/connector-toolbar.cpp:372
msgid "Graph"
msgstr ""
-#: ../src/widgets/connector-toolbar.cpp:379
+#: ../src/widgets/connector-toolbar.cpp:382
msgid "Connector Length"
msgstr ""
-#: ../src/widgets/connector-toolbar.cpp:379
+#: ../src/widgets/connector-toolbar.cpp:382
msgid "Length:"
msgstr ""
-#: ../src/widgets/connector-toolbar.cpp:380
+#: ../src/widgets/connector-toolbar.cpp:383
msgid "Ideal length for connectors when layout is applied"
msgstr ""
-#: ../src/widgets/connector-toolbar.cpp:392
+#: ../src/widgets/connector-toolbar.cpp:395
msgid "Downwards"
msgstr ""
-#: ../src/widgets/connector-toolbar.cpp:393
+#: ../src/widgets/connector-toolbar.cpp:396
msgid "Make connectors with end-markers (arrows) point downwards"
msgstr ""
-#: ../src/widgets/connector-toolbar.cpp:409
+#: ../src/widgets/connector-toolbar.cpp:412
msgid "Do not allow overlapping shapes"
msgstr ""
@@ -26597,8 +26157,8 @@ msgstr ""
msgid "Set pattern on stroke"
msgstr ""
-#: ../src/widgets/font-selector.cpp:134 ../src/widgets/text-toolbar.cpp:949
-#: ../src/widgets/text-toolbar.cpp:1262
+#: ../src/widgets/font-selector.cpp:134 ../src/widgets/text-toolbar.cpp:955
+#: ../src/widgets/text-toolbar.cpp:1268
msgid "Font size"
msgstr ""
@@ -26844,6 +26404,22 @@ msgstr ""
msgid "Change gradient stop color"
msgstr ""
+#: ../src/widgets/lpe-toolbar.cpp:233
+msgid "Closed"
+msgstr ""
+
+#: ../src/widgets/lpe-toolbar.cpp:235
+msgid "Open start"
+msgstr ""
+
+#: ../src/widgets/lpe-toolbar.cpp:237
+msgid "Open end"
+msgstr ""
+
+#: ../src/widgets/lpe-toolbar.cpp:239
+msgid "Open both"
+msgstr ""
+
#: ../src/widgets/lpe-toolbar.cpp:298
msgid "All inactive"
msgstr ""
@@ -26897,7 +26473,7 @@ msgstr ""
msgid "Open LPE dialog (to adapt parameters numerically)"
msgstr ""
-#: ../src/widgets/measure-toolbar.cpp:86 ../src/widgets/text-toolbar.cpp:1265
+#: ../src/widgets/measure-toolbar.cpp:86 ../src/widgets/text-toolbar.cpp:1271
msgid "Font Size"
msgstr ""
@@ -27172,57 +26748,6 @@ msgstr ""
msgid "Y coordinate of selected node(s)"
msgstr ""
-#: ../src/widgets/paintbucket-toolbar.cpp:133
-msgid "Fill by"
-msgstr ""
-
-#: ../src/widgets/paintbucket-toolbar.cpp:134
-msgid "Fill by:"
-msgstr ""
-
-#: ../src/widgets/paintbucket-toolbar.cpp:146
-msgid "Fill Threshold"
-msgstr ""
-
-#: ../src/widgets/paintbucket-toolbar.cpp:147
-msgid ""
-"The maximum allowed difference between the clicked pixel and the neighboring "
-"pixels to be counted in the fill"
-msgstr ""
-
-#: ../src/widgets/paintbucket-toolbar.cpp:174
-msgid "Grow/shrink by"
-msgstr ""
-
-#: ../src/widgets/paintbucket-toolbar.cpp:174
-msgid "Grow/shrink by:"
-msgstr ""
-
-#: ../src/widgets/paintbucket-toolbar.cpp:175
-msgid ""
-"The amount to grow (positive) or shrink (negative) the created fill path"
-msgstr ""
-
-#: ../src/widgets/paintbucket-toolbar.cpp:200
-msgid "Close gaps"
-msgstr ""
-
-#: ../src/widgets/paintbucket-toolbar.cpp:201
-msgid "Close gaps:"
-msgstr ""
-
-#: ../src/widgets/paintbucket-toolbar.cpp:212
-#: ../src/widgets/pencil-toolbar.cpp:301 ../src/widgets/spiral-toolbar.cpp:289
-#: ../src/widgets/star-toolbar.cpp:564
-msgid "Defaults"
-msgstr ""
-
-#: ../src/widgets/paintbucket-toolbar.cpp:213
-msgid ""
-"Reset paint bucket parameters to defaults (use Inkscape Preferences > Tools "
-"to change defaults)"
-msgstr ""
-
#: ../src/widgets/paint-selector.cpp:234
msgid "No paint"
msgstr ""
@@ -27300,79 +26825,130 @@ msgstr ""
msgid "<b>Swatch fill</b>"
msgstr ""
-#: ../src/widgets/pencil-toolbar.cpp:104
+#: ../src/widgets/paintbucket-toolbar.cpp:133
+msgid "Fill by"
+msgstr ""
+
+#: ../src/widgets/paintbucket-toolbar.cpp:134
+msgid "Fill by:"
+msgstr ""
+
+#: ../src/widgets/paintbucket-toolbar.cpp:146
+msgid "Fill Threshold"
+msgstr ""
+
+#: ../src/widgets/paintbucket-toolbar.cpp:147
+msgid ""
+"The maximum allowed difference between the clicked pixel and the neighboring "
+"pixels to be counted in the fill"
+msgstr ""
+
+#: ../src/widgets/paintbucket-toolbar.cpp:174
+msgid "Grow/shrink by"
+msgstr ""
+
+#: ../src/widgets/paintbucket-toolbar.cpp:174
+msgid "Grow/shrink by:"
+msgstr ""
+
+#: ../src/widgets/paintbucket-toolbar.cpp:175
+msgid ""
+"The amount to grow (positive) or shrink (negative) the created fill path"
+msgstr ""
+
+#: ../src/widgets/paintbucket-toolbar.cpp:200
+msgid "Close gaps"
+msgstr ""
+
+#: ../src/widgets/paintbucket-toolbar.cpp:201
+msgid "Close gaps:"
+msgstr ""
+
+#: ../src/widgets/paintbucket-toolbar.cpp:212
+#: ../src/widgets/pencil-toolbar.cpp:293 ../src/widgets/spiral-toolbar.cpp:289
+#: ../src/widgets/star-toolbar.cpp:564
+msgid "Defaults"
+msgstr ""
+
+#: ../src/widgets/paintbucket-toolbar.cpp:213
+msgid ""
+"Reset paint bucket parameters to defaults (use Inkscape Preferences > Tools "
+"to change defaults)"
+msgstr ""
+
+#: ../src/widgets/pencil-toolbar.cpp:96
msgid "Bezier"
msgstr ""
-#: ../src/widgets/pencil-toolbar.cpp:105
+#: ../src/widgets/pencil-toolbar.cpp:97
msgid "Create regular Bezier path"
msgstr ""
-#: ../src/widgets/pencil-toolbar.cpp:112
+#: ../src/widgets/pencil-toolbar.cpp:104
msgid "Create Spiro path"
msgstr ""
-#: ../src/widgets/pencil-toolbar.cpp:119
+#: ../src/widgets/pencil-toolbar.cpp:111
msgid "Zigzag"
msgstr ""
-#: ../src/widgets/pencil-toolbar.cpp:120
+#: ../src/widgets/pencil-toolbar.cpp:112
msgid "Create a sequence of straight line segments"
msgstr ""
-#: ../src/widgets/pencil-toolbar.cpp:126
+#: ../src/widgets/pencil-toolbar.cpp:118
msgid "Paraxial"
msgstr ""
-#: ../src/widgets/pencil-toolbar.cpp:127
+#: ../src/widgets/pencil-toolbar.cpp:119
msgid "Create a sequence of paraxial line segments"
msgstr ""
-#: ../src/widgets/pencil-toolbar.cpp:135
+#: ../src/widgets/pencil-toolbar.cpp:127
msgid "Mode of new lines drawn by this tool"
msgstr ""
-#: ../src/widgets/pencil-toolbar.cpp:164
+#: ../src/widgets/pencil-toolbar.cpp:156
msgid "Triangle in"
msgstr ""
-#: ../src/widgets/pencil-toolbar.cpp:165
+#: ../src/widgets/pencil-toolbar.cpp:157
msgid "Triangle out"
msgstr ""
-#: ../src/widgets/pencil-toolbar.cpp:167
+#: ../src/widgets/pencil-toolbar.cpp:159
msgid "From clipboard"
msgstr ""
-#: ../src/widgets/pencil-toolbar.cpp:192 ../src/widgets/pencil-toolbar.cpp:193
+#: ../src/widgets/pencil-toolbar.cpp:184 ../src/widgets/pencil-toolbar.cpp:185
msgid "Shape:"
msgstr ""
-#: ../src/widgets/pencil-toolbar.cpp:192
+#: ../src/widgets/pencil-toolbar.cpp:184
msgid "Shape of new paths drawn by this tool"
msgstr ""
-#: ../src/widgets/pencil-toolbar.cpp:277
+#: ../src/widgets/pencil-toolbar.cpp:269
msgid "(many nodes, rough)"
msgstr ""
-#: ../src/widgets/pencil-toolbar.cpp:277
+#: ../src/widgets/pencil-toolbar.cpp:269
msgid "(few nodes, smooth)"
msgstr ""
-#: ../src/widgets/pencil-toolbar.cpp:280
+#: ../src/widgets/pencil-toolbar.cpp:272
msgid "Smoothing:"
msgstr ""
-#: ../src/widgets/pencil-toolbar.cpp:280
+#: ../src/widgets/pencil-toolbar.cpp:272
msgid "Smoothing: "
msgstr ""
-#: ../src/widgets/pencil-toolbar.cpp:281
+#: ../src/widgets/pencil-toolbar.cpp:273
msgid "How much smoothing (simplifying) is applied to the line"
msgstr ""
-#: ../src/widgets/pencil-toolbar.cpp:302
+#: ../src/widgets/pencil-toolbar.cpp:294
msgid ""
"Reset pencil parameters to defaults (use Inkscape Preferences > Tools to "
"change defaults)"
@@ -27735,6 +27311,14 @@ msgstr ""
msgid "Unnamed"
msgstr ""
+#: ../src/widgets/sp-xmlview-attr-list.cpp:64
+msgid "Value"
+msgstr ""
+
+#: ../src/widgets/sp-xmlview-content.cpp:179
+msgid "Type text in a text node"
+msgstr ""
+
#: ../src/widgets/spiral-toolbar.cpp:100
msgid "Change spiral"
msgstr ""
@@ -27959,14 +27543,6 @@ msgid ""
"the original object"
msgstr ""
-#: ../src/widgets/sp-xmlview-attr-list.cpp:64
-msgid "Value"
-msgstr ""
-
-#: ../src/widgets/sp-xmlview-content.cpp:179
-msgid "Type text in a text node"
-msgstr ""
-
#: ../src/widgets/star-toolbar.cpp:102
msgid "Star: Change number of corners"
msgstr ""
@@ -28137,11 +27713,11 @@ msgstr ""
msgid "Scatter randomly the corners and angles"
msgstr ""
-#: ../src/widgets/stroke-style.cpp:191
+#: ../src/widgets/stroke-style.cpp:192
msgid "Stroke width"
msgstr ""
-#: ../src/widgets/stroke-style.cpp:193
+#: ../src/widgets/stroke-style.cpp:194
msgctxt "Stroke width"
msgid "_Width:"
msgstr ""
@@ -28149,88 +27725,88 @@ msgstr ""
#. TRANSLATORS: Miter join: joining lines with a sharp (pointed) corner.
#. For an example, draw a triangle with a large stroke width and modify the
#. "Join" option (in the Fill and Stroke dialog).
-#: ../src/widgets/stroke-style.cpp:238
+#: ../src/widgets/stroke-style.cpp:239
msgid "Miter join"
msgstr ""
#. TRANSLATORS: Round join: joining lines with a rounded corner.
#. For an example, draw a triangle with a large stroke width and modify the
#. "Join" option (in the Fill and Stroke dialog).
-#: ../src/widgets/stroke-style.cpp:246
+#: ../src/widgets/stroke-style.cpp:247
msgid "Round join"
msgstr ""
#. TRANSLATORS: Bevel join: joining lines with a blunted (flattened) corner.
#. For an example, draw a triangle with a large stroke width and modify the
#. "Join" option (in the Fill and Stroke dialog).
-#: ../src/widgets/stroke-style.cpp:254
+#: ../src/widgets/stroke-style.cpp:255
msgid "Bevel join"
msgstr ""
-#: ../src/widgets/stroke-style.cpp:279
+#: ../src/widgets/stroke-style.cpp:280
msgid "Miter _limit:"
msgstr ""
#. Cap type
#. TRANSLATORS: cap type specifies the shape for the ends of lines
#. spw_label(t, _("_Cap:"), 0, i);
-#: ../src/widgets/stroke-style.cpp:295
+#: ../src/widgets/stroke-style.cpp:296
msgid "Cap:"
msgstr ""
#. TRANSLATORS: Butt cap: the line shape does not extend beyond the end point
#. of the line; the ends of the line are square
-#: ../src/widgets/stroke-style.cpp:306
+#: ../src/widgets/stroke-style.cpp:307
msgid "Butt cap"
msgstr ""
#. TRANSLATORS: Round cap: the line shape extends beyond the end point of the
#. line; the ends of the line are rounded
-#: ../src/widgets/stroke-style.cpp:313
+#: ../src/widgets/stroke-style.cpp:314
msgid "Round cap"
msgstr ""
#. TRANSLATORS: Square cap: the line shape extends beyond the end point of the
#. line; the ends of the line are square
-#: ../src/widgets/stroke-style.cpp:320
+#: ../src/widgets/stroke-style.cpp:321
msgid "Square cap"
msgstr ""
#. Dash
-#: ../src/widgets/stroke-style.cpp:325
+#: ../src/widgets/stroke-style.cpp:326
msgid "Dashes:"
msgstr ""
#. Drop down marker selectors
#. TRANSLATORS: Path markers are an SVG feature that allows you to attach arbitrary shapes
#. (arrowheads, bullets, faces, whatever) to the start, end, or middle nodes of a path.
-#: ../src/widgets/stroke-style.cpp:351
+#: ../src/widgets/stroke-style.cpp:352
msgid "Markers:"
msgstr ""
-#: ../src/widgets/stroke-style.cpp:357
+#: ../src/widgets/stroke-style.cpp:358
msgid "Start Markers are drawn on the first node of a path or shape"
msgstr ""
-#: ../src/widgets/stroke-style.cpp:366
+#: ../src/widgets/stroke-style.cpp:367
msgid ""
"Mid Markers are drawn on every node of a path or shape except the first and "
"last nodes"
msgstr ""
-#: ../src/widgets/stroke-style.cpp:375
+#: ../src/widgets/stroke-style.cpp:376
msgid "End Markers are drawn on the last node of a path or shape"
msgstr ""
-#: ../src/widgets/stroke-style.cpp:493
+#: ../src/widgets/stroke-style.cpp:494
msgid "Set markers"
msgstr ""
-#: ../src/widgets/stroke-style.cpp:1022 ../src/widgets/stroke-style.cpp:1107
+#: ../src/widgets/stroke-style.cpp:1024 ../src/widgets/stroke-style.cpp:1109
msgid "Set stroke style"
msgstr ""
-#: ../src/widgets/stroke-style.cpp:1195
+#: ../src/widgets/stroke-style.cpp:1197
msgid "Set marker color"
msgstr ""
@@ -28238,238 +27814,238 @@ msgstr ""
msgid "Change swatch color"
msgstr ""
-#: ../src/widgets/text-toolbar.cpp:161
+#: ../src/widgets/text-toolbar.cpp:168
msgid "Text: Change font family"
msgstr ""
-#: ../src/widgets/text-toolbar.cpp:225
+#: ../src/widgets/text-toolbar.cpp:232
msgid "Text: Change font size"
msgstr ""
-#: ../src/widgets/text-toolbar.cpp:263
+#: ../src/widgets/text-toolbar.cpp:270
msgid "Text: Change font style"
msgstr ""
-#: ../src/widgets/text-toolbar.cpp:341
+#: ../src/widgets/text-toolbar.cpp:348
msgid "Text: Change superscript or subscript"
msgstr ""
-#: ../src/widgets/text-toolbar.cpp:486
+#: ../src/widgets/text-toolbar.cpp:493
msgid "Text: Change alignment"
msgstr ""
-#: ../src/widgets/text-toolbar.cpp:529
+#: ../src/widgets/text-toolbar.cpp:536
msgid "Text: Change line-height"
msgstr ""
-#: ../src/widgets/text-toolbar.cpp:578
+#: ../src/widgets/text-toolbar.cpp:585
msgid "Text: Change word-spacing"
msgstr ""
-#: ../src/widgets/text-toolbar.cpp:619
+#: ../src/widgets/text-toolbar.cpp:626
msgid "Text: Change letter-spacing"
msgstr ""
-#: ../src/widgets/text-toolbar.cpp:659
+#: ../src/widgets/text-toolbar.cpp:666
msgid "Text: Change dx (kern)"
msgstr ""
-#: ../src/widgets/text-toolbar.cpp:693
+#: ../src/widgets/text-toolbar.cpp:700
msgid "Text: Change dy"
msgstr ""
-#: ../src/widgets/text-toolbar.cpp:728
+#: ../src/widgets/text-toolbar.cpp:735
msgid "Text: Change rotate"
msgstr ""
-#: ../src/widgets/text-toolbar.cpp:776
+#: ../src/widgets/text-toolbar.cpp:783
msgid "Text: Change orientation"
msgstr ""
-#: ../src/widgets/text-toolbar.cpp:1213
+#: ../src/widgets/text-toolbar.cpp:1219
msgid "Font Family"
msgstr ""
-#: ../src/widgets/text-toolbar.cpp:1214
+#: ../src/widgets/text-toolbar.cpp:1220
msgid "Select Font Family (Alt-X to access)"
msgstr ""
#. Focus widget
#. Enable entry completion
-#: ../src/widgets/text-toolbar.cpp:1224
+#: ../src/widgets/text-toolbar.cpp:1230
msgid "Select all text with this font-family"
msgstr ""
-#: ../src/widgets/text-toolbar.cpp:1228
+#: ../src/widgets/text-toolbar.cpp:1234
msgid "Font not found on system"
msgstr ""
-#: ../src/widgets/text-toolbar.cpp:1287
+#: ../src/widgets/text-toolbar.cpp:1293
msgid "Font Style"
msgstr ""
-#: ../src/widgets/text-toolbar.cpp:1288
+#: ../src/widgets/text-toolbar.cpp:1294
msgid "Font style"
msgstr ""
#. Name
-#: ../src/widgets/text-toolbar.cpp:1305
+#: ../src/widgets/text-toolbar.cpp:1311
msgid "Toggle Superscript"
msgstr ""
#. Label
-#: ../src/widgets/text-toolbar.cpp:1306
+#: ../src/widgets/text-toolbar.cpp:1312
msgid "Toggle superscript"
msgstr ""
#. Name
-#: ../src/widgets/text-toolbar.cpp:1318
+#: ../src/widgets/text-toolbar.cpp:1324
msgid "Toggle Subscript"
msgstr ""
#. Label
-#: ../src/widgets/text-toolbar.cpp:1319
+#: ../src/widgets/text-toolbar.cpp:1325
msgid "Toggle subscript"
msgstr ""
-#: ../src/widgets/text-toolbar.cpp:1360
+#: ../src/widgets/text-toolbar.cpp:1366
msgid "Justify"
msgstr ""
#. Name
-#: ../src/widgets/text-toolbar.cpp:1367
+#: ../src/widgets/text-toolbar.cpp:1373
msgid "Alignment"
msgstr ""
#. Label
-#: ../src/widgets/text-toolbar.cpp:1368
+#: ../src/widgets/text-toolbar.cpp:1374
msgid "Text alignment"
msgstr ""
-#: ../src/widgets/text-toolbar.cpp:1395
+#: ../src/widgets/text-toolbar.cpp:1401
msgid "Horizontal"
msgstr ""
-#: ../src/widgets/text-toolbar.cpp:1402
+#: ../src/widgets/text-toolbar.cpp:1408
msgid "Vertical"
msgstr ""
#. Label
-#: ../src/widgets/text-toolbar.cpp:1409
+#: ../src/widgets/text-toolbar.cpp:1415
msgid "Text orientation"
msgstr ""
#. Drop down menu
-#: ../src/widgets/text-toolbar.cpp:1432
+#: ../src/widgets/text-toolbar.cpp:1438
msgid "Smaller spacing"
msgstr ""
-#: ../src/widgets/text-toolbar.cpp:1432 ../src/widgets/text-toolbar.cpp:1463
-#: ../src/widgets/text-toolbar.cpp:1494
+#: ../src/widgets/text-toolbar.cpp:1438 ../src/widgets/text-toolbar.cpp:1469
+#: ../src/widgets/text-toolbar.cpp:1500
msgctxt "Text tool"
msgid "Normal"
msgstr ""
-#: ../src/widgets/text-toolbar.cpp:1432
+#: ../src/widgets/text-toolbar.cpp:1438
msgid "Larger spacing"
msgstr ""
#. name
-#: ../src/widgets/text-toolbar.cpp:1437
+#: ../src/widgets/text-toolbar.cpp:1443
msgid "Line Height"
msgstr ""
#. label
-#: ../src/widgets/text-toolbar.cpp:1438
+#: ../src/widgets/text-toolbar.cpp:1444
msgid "Line:"
msgstr ""
#. short label
-#: ../src/widgets/text-toolbar.cpp:1439
+#: ../src/widgets/text-toolbar.cpp:1445
msgid "Spacing between lines (times font size)"
msgstr ""
#. Drop down menu
-#: ../src/widgets/text-toolbar.cpp:1463 ../src/widgets/text-toolbar.cpp:1494
+#: ../src/widgets/text-toolbar.cpp:1469 ../src/widgets/text-toolbar.cpp:1500
msgid "Negative spacing"
msgstr ""
-#: ../src/widgets/text-toolbar.cpp:1463 ../src/widgets/text-toolbar.cpp:1494
+#: ../src/widgets/text-toolbar.cpp:1469 ../src/widgets/text-toolbar.cpp:1500
msgid "Positive spacing"
msgstr ""
#. name
-#: ../src/widgets/text-toolbar.cpp:1468
+#: ../src/widgets/text-toolbar.cpp:1474
msgid "Word spacing"
msgstr ""
#. label
-#: ../src/widgets/text-toolbar.cpp:1469
+#: ../src/widgets/text-toolbar.cpp:1475
msgid "Word:"
msgstr ""
#. short label
-#: ../src/widgets/text-toolbar.cpp:1470
+#: ../src/widgets/text-toolbar.cpp:1476
msgid "Spacing between words (px)"
msgstr ""
#. name
-#: ../src/widgets/text-toolbar.cpp:1499
+#: ../src/widgets/text-toolbar.cpp:1505
msgid "Letter spacing"
msgstr ""
#. label
-#: ../src/widgets/text-toolbar.cpp:1500
+#: ../src/widgets/text-toolbar.cpp:1506
msgid "Letter:"
msgstr ""
#. short label
-#: ../src/widgets/text-toolbar.cpp:1501
+#: ../src/widgets/text-toolbar.cpp:1507
msgid "Spacing between letters (px)"
msgstr ""
#. name
-#: ../src/widgets/text-toolbar.cpp:1530
+#: ../src/widgets/text-toolbar.cpp:1536
msgid "Kerning"
msgstr ""
#. label
-#: ../src/widgets/text-toolbar.cpp:1531
+#: ../src/widgets/text-toolbar.cpp:1537
msgid "Kern:"
msgstr ""
#. short label
-#: ../src/widgets/text-toolbar.cpp:1532
+#: ../src/widgets/text-toolbar.cpp:1538
msgid "Horizontal kerning (px)"
msgstr ""
#. name
-#: ../src/widgets/text-toolbar.cpp:1561
+#: ../src/widgets/text-toolbar.cpp:1567
msgid "Vertical Shift"
msgstr ""
#. label
-#: ../src/widgets/text-toolbar.cpp:1562
+#: ../src/widgets/text-toolbar.cpp:1568
msgid "Vert:"
msgstr ""
#. short label
-#: ../src/widgets/text-toolbar.cpp:1563
+#: ../src/widgets/text-toolbar.cpp:1569
msgid "Vertical shift (px)"
msgstr ""
#. name
-#: ../src/widgets/text-toolbar.cpp:1592
+#: ../src/widgets/text-toolbar.cpp:1598
msgid "Letter rotation"
msgstr ""
#. label
-#: ../src/widgets/text-toolbar.cpp:1593
+#: ../src/widgets/text-toolbar.cpp:1599
msgid "Rot:"
msgstr ""
#. short label
-#: ../src/widgets/text-toolbar.cpp:1594
+#: ../src/widgets/text-toolbar.cpp:1600
msgid "Character rotation (degrees)"
msgstr ""
@@ -29434,6 +29010,17 @@ msgstr ""
msgid "unable to locate marker: %s"
msgstr ""
+#: ../share/extensions/measure.py:50
+msgid ""
+"Failed to import the numpy modules. These modules are required by this "
+"extension. Please install them and try again. On a Debian-like system this "
+"can be done with the command, sudo apt-get install python-numpy."
+msgstr ""
+
+#: ../share/extensions/measure.py:112
+msgid "Area is zero, cannot calculate Center of Mass"
+msgstr ""
+
#: ../share/extensions/pathalongpath.py:208
#: ../share/extensions/pathscatter.py:228
#: ../share/extensions/perspective.py:53
@@ -29506,11 +29093,11 @@ msgid ""
"No paths where found. Please convert all objects you want to plot into paths."
msgstr ""
-#: ../share/extensions/plotter.py:128
+#: ../share/extensions/plotter.py:143
msgid "pySerial is not installed."
msgstr ""
-#: ../share/extensions/plotter.py:148
+#: ../share/extensions/plotter.py:163
msgid ""
"Could not open port. Please check that your plotter is running, connected "
"and the settings are correct."
@@ -29821,10 +29408,57 @@ msgstr ""
msgid "Open presentation exchange files saved in Corel DRAW (UC)"
msgstr ""
+#: ../share/extensions/color_HSL_adjust.inx.h:1
+msgid "HSL Adjust"
+msgstr ""
+
+#: ../share/extensions/color_HSL_adjust.inx.h:3
+msgid "Hue (°)"
+msgstr ""
+
+#: ../share/extensions/color_HSL_adjust.inx.h:4
+msgid "Random hue"
+msgstr ""
+
+#: ../share/extensions/color_HSL_adjust.inx.h:6
+#, no-c-format
+msgid "Saturation (%)"
+msgstr ""
+
+#: ../share/extensions/color_HSL_adjust.inx.h:7
+msgid "Random saturation"
+msgstr ""
+
+#: ../share/extensions/color_HSL_adjust.inx.h:9
+#, no-c-format
+msgid "Lightness (%)"
+msgstr ""
+
+#: ../share/extensions/color_HSL_adjust.inx.h:10
+msgid "Random lightness"
+msgstr ""
+
+#: ../share/extensions/color_HSL_adjust.inx.h:13
+#, no-c-format
+msgid ""
+"Adjusts hue, saturation and lightness in the HSL representation of the "
+"selected objects's color.\n"
+"Options:\n"
+" * Hue: rotate by degrees (wraps around).\n"
+" * Saturation: add/subtract % (min=-100, max=100).\n"
+" * Lightness: add/subtract % (min=-100, max=100).\n"
+" * Random Hue/Saturation/Lightness: randomize the parameter's value.\n"
+" "
+msgstr ""
+
#: ../share/extensions/color_blackandwhite.inx.h:1
msgid "Black and White"
msgstr ""
+#: ../share/extensions/color_blackandwhite.inx.h:2
+msgid "Threshold Color (1-255):"
+msgstr ""
+
#: ../share/extensions/color_brighter.inx.h:1
msgid "Brighter"
msgstr ""
@@ -29875,49 +29509,6 @@ msgstr ""
msgid "Grayscale"
msgstr ""
-#: ../share/extensions/color_HSL_adjust.inx.h:1
-msgid "HSL Adjust"
-msgstr ""
-
-#: ../share/extensions/color_HSL_adjust.inx.h:3
-msgid "Hue (°)"
-msgstr ""
-
-#: ../share/extensions/color_HSL_adjust.inx.h:4
-msgid "Random hue"
-msgstr ""
-
-#: ../share/extensions/color_HSL_adjust.inx.h:6
-#, no-c-format
-msgid "Saturation (%)"
-msgstr ""
-
-#: ../share/extensions/color_HSL_adjust.inx.h:7
-msgid "Random saturation"
-msgstr ""
-
-#: ../share/extensions/color_HSL_adjust.inx.h:9
-#, no-c-format
-msgid "Lightness (%)"
-msgstr ""
-
-#: ../share/extensions/color_HSL_adjust.inx.h:10
-msgid "Random lightness"
-msgstr ""
-
-#: ../share/extensions/color_HSL_adjust.inx.h:13
-#, no-c-format
-msgid ""
-"Adjusts hue, saturation and lightness in the HSL representation of the "
-"selected objects's color.\n"
-"Options:\n"
-" * Hue: rotate by degrees (wraps around).\n"
-" * Saturation: add/subtract % (min=-100, max=100).\n"
-" * Lightness: add/subtract % (min=-100, max=100).\n"
-" * Random Hue/Saturation/Lightness: randomize the parameter's value.\n"
-" "
-msgstr ""
-
#: ../share/extensions/color_lesshue.inx.h:1
msgid "Less Hue"
msgstr ""
@@ -30059,7 +29650,7 @@ msgid "Visual"
msgstr ""
#: ../share/extensions/dimension.inx.h:7 ../share/extensions/dots.inx.h:13
-#: ../share/extensions/handles.inx.h:2 ../share/extensions/measure.inx.h:24
+#: ../share/extensions/handles.inx.h:2 ../share/extensions/measure.inx.h:25
msgid "Visualize Path"
msgstr ""
@@ -32184,6 +31775,26 @@ msgstr ""
msgid "SVG 1.1 Specification"
msgstr ""
+#: ../share/extensions/interp.inx.h:1
+msgid "Interpolate"
+msgstr ""
+
+#: ../share/extensions/interp.inx.h:3
+msgid "Interpolation steps:"
+msgstr ""
+
+#: ../share/extensions/interp.inx.h:4
+msgid "Interpolation method:"
+msgstr ""
+
+#: ../share/extensions/interp.inx.h:5
+msgid "Duplicate endpaths"
+msgstr ""
+
+#: ../share/extensions/interp.inx.h:6
+msgid "Interpolate style"
+msgstr ""
+
#: ../share/extensions/interp_att_g.inx.h:1
msgid "Interpolate Attribute in a group"
msgstr ""
@@ -32271,26 +31882,6 @@ msgid ""
"selection."
msgstr ""
-#: ../share/extensions/interp.inx.h:1
-msgid "Interpolate"
-msgstr ""
-
-#: ../share/extensions/interp.inx.h:3
-msgid "Interpolation steps:"
-msgstr ""
-
-#: ../share/extensions/interp.inx.h:4
-msgid "Interpolation method:"
-msgstr ""
-
-#: ../share/extensions/interp.inx.h:5
-msgid "Duplicate endpaths"
-msgstr ""
-
-#: ../share/extensions/interp.inx.h:6
-msgid "Interpolate style"
-msgstr ""
-
#: ../share/extensions/jessyInk_autoTexts.inx.h:1
msgid "Auto-texts"
msgstr ""
@@ -33041,21 +32632,27 @@ msgstr ""
#: ../share/extensions/measure.inx.h:13
msgctxt "measure extension"
-msgid "Text On Path"
+msgid "Center of Mass"
msgstr ""
#: ../share/extensions/measure.inx.h:14
msgctxt "measure extension"
+msgid "Text On Path"
+msgstr ""
+
+#: ../share/extensions/measure.inx.h:15
+msgctxt "measure extension"
msgid "Fixed Angle"
msgstr ""
-#: ../share/extensions/measure.inx.h:17
+#: ../share/extensions/measure.inx.h:18
#, no-c-format
msgid ""
-"This effect measures the length, or area, of the selected paths and adds it "
-"as a text object with the selected units.\n"
-" \n"
-" * Display format can be either Text-On-Path, or stand-alone text at a "
+"This effect measures the length, area, or center-of-mass of the selected "
+"paths. Length and area are added as a text object with the selected units. "
+"Center-of-mass is shown as a cross symbol.\n"
+"\n"
+" * Text display format can be either Text-On-Path, or stand-alone text at a "
"specified angle.\n"
" * The number of significant digits can be controlled by the Precision "
"field.\n"
@@ -33068,6 +32665,26 @@ msgid ""
"0.03%."
msgstr ""
+#: ../share/extensions/merge_styles.inx.h:1
+msgid "Merge Styles into CSS"
+msgstr ""
+
+#: ../share/extensions/merge_styles.inx.h:2
+msgid ""
+"All selected nodes will be grouped together and their common style "
+"attributes will create a new class, this class will replace the existing "
+"inline style attributes. Please use a name which best describes the kinds of "
+"objects and their common context for best effect."
+msgstr ""
+
+#: ../share/extensions/merge_styles.inx.h:3
+msgid "New Class Name:"
+msgstr ""
+
+#: ../share/extensions/merge_styles.inx.h:4
+msgid "Stylesheet"
+msgstr ""
+
#: ../share/extensions/motion.inx.h:1
msgid "Motion"
msgstr ""
@@ -33644,6 +33261,10 @@ msgstr ""
msgid "View Previous Glyph"
msgstr ""
+#: ../share/extensions/print_win32_vector.inx.h:1
+msgid "Win32 Vector Print"
+msgstr ""
+
#: ../share/extensions/printing_marks.inx.h:1
msgid "Printing Marks"
msgstr ""
@@ -33688,10 +33309,6 @@ msgstr ""
msgid "Bleed Margin"
msgstr ""
-#: ../share/extensions/print_win32_vector.inx.h:1
-msgid "Win32 Vector Print"
-msgstr ""
-
#: ../share/extensions/ps_input.inx.h:1
msgid "PostScript Input"
msgstr ""
@@ -33730,39 +33347,39 @@ msgstr ""
msgid "Alphabet Soup"
msgstr ""
-#: ../share/extensions/render_barcode_datamatrix.inx.h:1
-msgid "Datamatrix"
+#: ../share/extensions/render_barcode.inx.h:1
+msgid "Classic"
msgstr ""
-#: ../share/extensions/render_barcode_datamatrix.inx.h:3
-#: ../share/extensions/render_barcode_qrcode.inx.h:4
-msgid "Size, in unit squares:"
+#: ../share/extensions/render_barcode.inx.h:2
+msgid "Barcode Type:"
msgstr ""
-#: ../share/extensions/render_barcode_datamatrix.inx.h:4
-msgid "Square Size (px):"
+#: ../share/extensions/render_barcode.inx.h:3
+msgid "Barcode Data:"
+msgstr ""
+
+#: ../share/extensions/render_barcode.inx.h:4
+msgid "Bar Height:"
msgstr ""
-#: ../share/extensions/render_barcode_datamatrix.inx.h:6
#: ../share/extensions/render_barcode.inx.h:6
+#: ../share/extensions/render_barcode_datamatrix.inx.h:6
#: ../share/extensions/render_barcode_qrcode.inx.h:19
msgid "Barcode"
msgstr ""
-#: ../share/extensions/render_barcode.inx.h:1
-msgid "Classic"
-msgstr ""
-
-#: ../share/extensions/render_barcode.inx.h:2
-msgid "Barcode Type:"
+#: ../share/extensions/render_barcode_datamatrix.inx.h:1
+msgid "Datamatrix"
msgstr ""
-#: ../share/extensions/render_barcode.inx.h:3
-msgid "Barcode Data:"
+#: ../share/extensions/render_barcode_datamatrix.inx.h:3
+#: ../share/extensions/render_barcode_qrcode.inx.h:4
+msgid "Size, in unit squares:"
msgstr ""
-#: ../share/extensions/render_barcode.inx.h:4
-msgid "Bar Height:"
+#: ../share/extensions/render_barcode_datamatrix.inx.h:4
+msgid "Square Size (px):"
msgstr ""
#: ../share/extensions/render_barcode_qrcode.inx.h:1
@@ -34556,10 +34173,7 @@ msgstr ""
msgid "lowercase"
msgstr ""
-#: ../share/extensions/text_merge.inx.h:14
-msgid "Flow text"
-msgstr ""
-
+#. <param name="flowtext" type="boolean" _gui-text="Flow text">false</param>
#: ../share/extensions/text_merge.inx.h:15
msgid "Keep style"
msgstr ""
@@ -34788,13 +34402,49 @@ msgid ""
msgstr ""
#: ../share/extensions/web-set-att.inx.h:29
+#: ../share/extensions/web-transmit-att.inx.h:27
#: ../share/extensions/webslicer_create_group.inx.h:13
#: ../share/extensions/webslicer_create_rect.inx.h:41
#: ../share/extensions/webslicer_export.inx.h:8
-#: ../share/extensions/web-transmit-att.inx.h:27
msgid "Web"
msgstr ""
+#: ../share/extensions/web-transmit-att.inx.h:1
+msgid "Transmit Attributes"
+msgstr ""
+
+#: ../share/extensions/web-transmit-att.inx.h:3
+msgid "Attribute to transmit:"
+msgstr ""
+
+#: ../share/extensions/web-transmit-att.inx.h:4
+msgid "When to transmit:"
+msgstr ""
+
+#: ../share/extensions/web-transmit-att.inx.h:6
+msgid "Source and destination of transmitting:"
+msgstr ""
+
+#: ../share/extensions/web-transmit-att.inx.h:21
+msgid "All selected ones transmit to the last one"
+msgstr ""
+
+#: ../share/extensions/web-transmit-att.inx.h:22
+msgid "The first selected transmits to all others"
+msgstr ""
+
+#: ../share/extensions/web-transmit-att.inx.h:25
+msgid ""
+"This effect transmits one or more attributes from the first selected element "
+"to the second when an event occurs."
+msgstr ""
+
+#: ../share/extensions/web-transmit-att.inx.h:26
+msgid ""
+"If you want to transmit more than one attribute, you should separate this "
+"with a space, and only with a space."
+msgstr ""
+
#: ../share/extensions/webslicer_create_group.inx.h:1
msgid "Set a layout group"
msgstr ""
@@ -34997,42 +34647,6 @@ msgid ""
"configured and saved to one directory."
msgstr ""
-#: ../share/extensions/web-transmit-att.inx.h:1
-msgid "Transmit Attributes"
-msgstr ""
-
-#: ../share/extensions/web-transmit-att.inx.h:3
-msgid "Attribute to transmit:"
-msgstr ""
-
-#: ../share/extensions/web-transmit-att.inx.h:4
-msgid "When to transmit:"
-msgstr ""
-
-#: ../share/extensions/web-transmit-att.inx.h:6
-msgid "Source and destination of transmitting:"
-msgstr ""
-
-#: ../share/extensions/web-transmit-att.inx.h:21
-msgid "All selected ones transmit to the last one"
-msgstr ""
-
-#: ../share/extensions/web-transmit-att.inx.h:22
-msgid "The first selected transmits to all others"
-msgstr ""
-
-#: ../share/extensions/web-transmit-att.inx.h:25
-msgid ""
-"This effect transmits one or more attributes from the first selected element "
-"to the second when an event occurs."
-msgstr ""
-
-#: ../share/extensions/web-transmit-att.inx.h:26
-msgid ""
-"If you want to transmit more than one attribute, you should separate this "
-"with a space, and only with a space."
-msgstr ""
-
#: ../share/extensions/whirl.inx.h:1
msgid "Whirl"
msgstr ""
diff --git a/po/uk.po b/po/uk.po
index 59fdd68bd..8c4a75f45 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -3,17 +3,18 @@
# 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, 2014.
+#: ../share/filters/filters.svg.h:1
+#: ../src/ui/dialog/inkscape-preferences.cpp:1469
msgid ""
msgstr ""
"Project-Id-Version: uk\n"
"Report-Msgid-Bugs-To: inkscape-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2014-02-05 19:26+0200\n"
-"PO-Revision-Date: 2014-02-05 19:30+0200\n"
+"POT-Creation-Date: 2014-04-27 12:16+0300\n"
+"PO-Revision-Date: 2014-04-27 14:18+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <translation@linux.org.ua>\n"
"Language: uk\n"
@@ -1008,14 +1009,14 @@ 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:154
-#: ../share/extensions/color_blackandwhite.inx.h:2
+#: ../src/ui/dialog/document-properties.cpp:156
+#: ../share/extensions/color_HSL_adjust.inx.h:20
+#: ../share/extensions/color_blackandwhite.inx.h:3
#: ../share/extensions/color_brighter.inx.h:2
#: ../share/extensions/color_custom.inx.h:15
#: ../share/extensions/color_darker.inx.h:2
#: ../share/extensions/color_desaturate.inx.h:2
#: ../share/extensions/color_grayscale.inx.h:2
-#: ../share/extensions/color_HSL_adjust.inx.h:20
#: ../share/extensions/color_lesshue.inx.h:2
#: ../share/extensions/color_lesslight.inx.h:2
#: ../share/extensions/color_lesssaturation.inx.h:2
@@ -1462,14 +1463,6 @@ msgid "Reduce or remove antialiasing around shapes"
msgstr "Зменшити або вилучити згладжування навколо форм"
#: ../share/filters/filters.svg.h:1
-msgid "Set Resolution"
-msgstr "Встановлення роздільності"
-
-#: ../share/filters/filters.svg.h:1
-msgid "Set filter resolution"
-msgstr "Встановити роздільність фільтрування"
-
-#: ../share/filters/filters.svg.h:1
msgid "Basic Diffuse Bump"
msgstr "Базовий рельєф з розсіюванням"
@@ -1592,14 +1585,6 @@ msgid "Adds a white opaque background"
msgstr "Додає біле непрозоре тло"
#: ../share/filters/filters.svg.h:1
-msgid "Fill Area"
-msgstr "Заповнення ділянки"
-
-#: ../share/filters/filters.svg.h:1
-msgid "Fills object bounding box with color"
-msgstr "Заповнює рамку-обгортку об'єкта кольором"
-
-#: ../share/filters/filters.svg.h:1
msgid "Blur Double"
msgstr "Подвійне розмивання"
@@ -5158,26 +5143,26 @@ msgstr "типографічне полотно з напрямними"
msgid "3D Box"
msgstr "Просторовий об'єкт"
-#: ../src/color-profile.cpp:850
+#: ../src/color-profile.cpp:852
#, c-format
msgid "Color profiles directory (%s) is unavailable."
msgstr "Каталог з профілями кольорів (%s) недоступний."
-#: ../src/color-profile.cpp:909 ../src/color-profile.cpp:926
+#: ../src/color-profile.cpp:911 ../src/color-profile.cpp:928
msgid "(invalid UTF-8 string)"
msgstr "(некоректний рядок UTF-8)"
-#: ../src/color-profile.cpp:911 ../src/filter-enums.cpp:119
+#: ../src/color-profile.cpp:913 ../src/filter-enums.cpp:119
#: ../src/live_effects/lpe-ruler.cpp:32
#: ../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
-#: ../src/ui/dialog/inkscape-preferences.cpp:1830
+#: ../src/ui/dialog/inkscape-preferences.cpp:1835
#: ../src/ui/dialog/input.cpp:742 ../src/ui/dialog/input.cpp:743
#: ../src/ui/dialog/input.cpp:1571 ../src/ui/dialog/input.cpp:1625
-#: ../src/verbs.cpp:2352 ../src/widgets/gradient-toolbar.cpp:1130
-#: ../src/widgets/pencil-toolbar.cpp:184
+#: ../src/verbs.cpp:2345 ../src/widgets/gradient-toolbar.cpp:1114
+#: ../src/widgets/pencil-toolbar.cpp:155
#: ../src/widgets/stroke-marker-selector.cpp:388
#: ../share/extensions/gcodetools_area.inx.h:48
#: ../share/extensions/gcodetools_dxf_points.inx.h:20
@@ -5202,32 +5187,32 @@ msgstr ""
"<b>Поточний рівень заблоковано</b>. Розблокуйте його, щоб мати можливість "
"креслити у ньому."
-#: ../src/desktop.cpp:859
-msgid "No previous zoom."
-msgstr "Немає попереднього масштабу."
-
-#: ../src/desktop.cpp:880
-msgid "No next zoom."
-msgstr "Немає наступного масштабу."
-
#: ../src/desktop-events.cpp:225
msgid "Create guide"
msgstr "Створити напрямну"
-#: ../src/desktop-events.cpp:470
+#: ../src/desktop-events.cpp:471
msgid "Move guide"
msgstr "Пересунути напрямну"
-#: ../src/desktop-events.cpp:477 ../src/desktop-events.cpp:536
-#: ../src/ui/dialog/guides.cpp:144
+#: ../src/desktop-events.cpp:478 ../src/desktop-events.cpp:537
+#: ../src/ui/dialog/guides.cpp:138
msgid "Delete guide"
msgstr "Вилучити напрямну"
-#: ../src/desktop-events.cpp:516
+#: ../src/desktop-events.cpp:517
#, c-format
msgid "<b>Guideline</b>: %s"
msgstr "<b>Напрямна</b>: %s"
+#: ../src/desktop.cpp:880
+msgid "No previous zoom."
+msgstr "Немає попереднього масштабу."
+
+#: ../src/desktop.cpp:901
+msgid "No next zoom."
+msgstr "Немає наступного масштабу."
+
#: ../src/display/canvas-axonomgrid.cpp:317 ../src/display/canvas-grid.cpp:693
msgid "Grid _units:"
msgstr "О_диниці сітки:"
@@ -5263,7 +5248,7 @@ msgstr "Базова довжина вісі z"
#: ../src/display/canvas-axonomgrid.cpp:325
#: ../src/ui/dialog/inkscape-preferences.cpp:767
-#: ../src/widgets/box3d-toolbar.cpp:315
+#: ../src/widgets/box3d-toolbar.cpp:299
msgid "Angle X:"
msgstr "Кут X:"
@@ -5274,7 +5259,7 @@ msgstr "Кут вісі x"
#: ../src/display/canvas-axonomgrid.cpp:327
#: ../src/ui/dialog/inkscape-preferences.cpp:768
-#: ../src/widgets/box3d-toolbar.cpp:394
+#: ../src/widgets/box3d-toolbar.cpp:378
msgid "Angle Z:"
msgstr "Кут Z:"
@@ -5533,11 +5518,11 @@ msgstr "Середня точка рамки-обгортки"
msgid "Bounding box side midpoint"
msgstr "Бокова середня точка рамки-обгортки"
-#: ../src/display/snap-indicator.cpp:194 ../src/ui/tool/node.cpp:1315
+#: ../src/display/snap-indicator.cpp:194 ../src/ui/tool/node.cpp:1319
msgid "Smooth node"
msgstr "Гладкий вузол"
-#: ../src/display/snap-indicator.cpp:197 ../src/ui/tool/node.cpp:1314
+#: ../src/display/snap-indicator.cpp:197 ../src/ui/tool/node.cpp:1318
msgid "Cusp node"
msgstr "Гострий вузол"
@@ -5593,35 +5578,35 @@ msgstr "Кратність проміжку між лініями сітки"
msgid " to "
msgstr " у "
-#: ../src/document.cpp:546
+#: ../src/document.cpp:542
#, c-format
msgid "New document %d"
msgstr "Новий документ %d"
-#: ../src/document.cpp:551
+#: ../src/document.cpp:547
#, c-format
msgid "Memory document %d"
msgstr "Документ у пам'яті %d"
-#: ../src/document.cpp:580
+#: ../src/document.cpp:576
msgid "Memory document %1"
msgstr "Документ у пам'яті %1"
-#: ../src/document.cpp:792
+#: ../src/document.cpp:788
#, c-format
msgid "Unnamed document %d"
msgstr "Документ без назви %d"
-#: ../src/event-log.cpp:37
+#: ../src/event-log.cpp:185
msgid "[Unchanged]"
msgstr "(Не змінено)"
#. Edit
-#: ../src/event-log.cpp:275 ../src/event-log.cpp:278 ../src/verbs.cpp:2390
+#: ../src/event-log.cpp:371 ../src/event-log.cpp:374 ../src/verbs.cpp:2383
msgid "_Undo"
msgstr "В_ернути"
-#: ../src/event-log.cpp:285 ../src/event-log.cpp:289 ../src/verbs.cpp:2392
+#: ../src/event-log.cpp:381 ../src/event-log.cpp:385 ../src/verbs.cpp:2385
msgid "_Redo"
msgstr "Повт_орити"
@@ -5649,7 +5634,7 @@ msgstr " опис: "
msgid " (No preferences)"
msgstr " (Немає уподобань)"
-#: ../src/extension/effect.h:70 ../src/verbs.cpp:2163
+#: ../src/extension/effect.h:70 ../src/verbs.cpp:2156
msgid "Extensions"
msgstr "Додатки"
@@ -5794,9 +5779,9 @@ msgstr "Адаптивна постеризація"
#: ../src/extension/internal/bluredge.cpp:138
#: ../src/ui/dialog/object-attributes.cpp:68
#: ../src/ui/dialog/object-attributes.cpp:77
-#: ../src/widgets/calligraphy-toolbar.cpp:447
-#: ../src/widgets/eraser-toolbar.cpp:145 ../src/widgets/spray-toolbar.cpp:128
-#: ../src/widgets/tweak-toolbar.cpp:142
+#: ../src/widgets/calligraphy-toolbar.cpp:430
+#: ../src/widgets/eraser-toolbar.cpp:128 ../src/widgets/spray-toolbar.cpp:116
+#: ../src/widgets/tweak-toolbar.cpp:128
#: ../share/extensions/foldablebox.inx.h:2
msgid "Width:"
msgstr "Ширина:"
@@ -5831,8 +5816,8 @@ msgstr "Зсув:"
#: ../src/extension/internal/bitmap/equalize.cpp:40
#: ../src/extension/internal/bitmap/gaussianBlur.cpp:45
#: ../src/extension/internal/bitmap/implode.cpp:43
-#: ../src/extension/internal/bitmap/levelChannel.cpp:71
#: ../src/extension/internal/bitmap/level.cpp:49
+#: ../src/extension/internal/bitmap/levelChannel.cpp:71
#: ../src/extension/internal/bitmap/medianFilter.cpp:43
#: ../src/extension/internal/bitmap/modulate.cpp:48
#: ../src/extension/internal/bitmap/negate.cpp:41
@@ -5868,8 +5853,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:2833
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2907
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2842
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2916
#: ../src/ui/dialog/object-attributes.cpp:49
#: ../share/extensions/jessyInk_effects.inx.h:5
#: ../share/extensions/jessyInk_export.inx.h:3
@@ -5921,7 +5906,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:2885
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2894
msgid "Radius:"
msgstr "Радіус:"
@@ -6060,7 +6045,7 @@ msgstr "Обертання карти кольорів"
#: ../src/extension/internal/bitmap/cycleColormap.cpp:39
#: ../src/extension/internal/bitmap/spread.cpp:39
#: ../src/extension/internal/bitmap/unsharpmask.cpp:45
-#: ../src/widgets/spray-toolbar.cpp:220
+#: ../src/widgets/spray-toolbar.cpp:208
msgid "Amount:"
msgstr "Кількість:"
@@ -6135,46 +6120,29 @@ msgstr "Концентрація"
msgid "Implode selected bitmap(s)"
msgstr "Застосувати ефект «концентрація» до вибраних растрових зображень"
-#: ../src/extension/internal/bitmap/levelChannel.cpp:52
-msgid "Level (with Channel)"
-msgstr "Рівень (з каналом)"
-
-#: ../src/extension/internal/bitmap/levelChannel.cpp:54
-#: ../src/extension/internal/filter/color.h:636
-msgid "Channel:"
-msgstr "Канал:"
+#: ../src/extension/internal/bitmap/level.cpp:41
+#: ../src/extension/internal/filter/color.h:742
+#: ../src/extension/internal/filter/image.h:56
+#: ../src/extension/internal/filter/morphology.h:66
+#: ../src/extension/internal/filter/paint.h:345
+msgid "Level"
+msgstr "Рівень"
-#: ../src/extension/internal/bitmap/levelChannel.cpp:65
#: ../src/extension/internal/bitmap/level.cpp:43
+#: ../src/extension/internal/bitmap/levelChannel.cpp:65
msgid "Black Point:"
msgstr "Точка чорного:"
-#: ../src/extension/internal/bitmap/levelChannel.cpp:66
#: ../src/extension/internal/bitmap/level.cpp:44
+#: ../src/extension/internal/bitmap/levelChannel.cpp:66
msgid "White Point:"
msgstr "Точка білого:"
-#: ../src/extension/internal/bitmap/levelChannel.cpp:67
#: ../src/extension/internal/bitmap/level.cpp:45
+#: ../src/extension/internal/bitmap/levelChannel.cpp:67
msgid "Gamma Correction:"
msgstr "Виправлення гами:"
-#: ../src/extension/internal/bitmap/levelChannel.cpp:73
-msgid ""
-"Level the specified channel of selected bitmap(s) by scaling values falling "
-"between the given ranges to the full color range"
-msgstr ""
-"Вирівняти заданий канал вибраних растрових зображень шляхом перерахування "
-"величин, що потрапляють до заданих рамок, до повного інтервалу кольорів"
-
-#: ../src/extension/internal/bitmap/level.cpp:41
-#: ../src/extension/internal/filter/color.h:742
-#: ../src/extension/internal/filter/image.h:56
-#: ../src/extension/internal/filter/morphology.h:66
-#: ../src/extension/internal/filter/paint.h:345
-msgid "Level"
-msgstr "Рівень"
-
#: ../src/extension/internal/bitmap/level.cpp:51
msgid ""
"Level selected bitmap(s) by scaling values falling between the given ranges "
@@ -6183,6 +6151,23 @@ msgstr ""
"Встановлює для вибраних растрових зображень повний рівень для кольорів, що "
"потрапляють у задані межі"
+#: ../src/extension/internal/bitmap/levelChannel.cpp:52
+msgid "Level (with Channel)"
+msgstr "Рівень (з каналом)"
+
+#: ../src/extension/internal/bitmap/levelChannel.cpp:54
+#: ../src/extension/internal/filter/color.h:636
+msgid "Channel:"
+msgstr "Канал:"
+
+#: ../src/extension/internal/bitmap/levelChannel.cpp:73
+msgid ""
+"Level the specified channel of selected bitmap(s) by scaling values falling "
+"between the given ranges to the full color range"
+msgstr ""
+"Вирівняти заданий канал вибраних растрових зображень шляхом перерахування "
+"величин, що потрапляють до заданих рамок, до повного інтервалу кольорів"
+
#: ../src/extension/internal/bitmap/medianFilter.cpp:37
msgid "Median"
msgstr "Медіана"
@@ -6251,14 +6236,14 @@ msgstr ""
#: ../src/extension/internal/filter/blurs.h:333
#: ../src/extension/internal/filter/transparency.h:279
#: ../src/ui/dialog/clonetiler.cpp:840 ../src/ui/dialog/clonetiler.cpp:993
-#: ../src/widgets/tweak-toolbar.cpp:348
+#: ../src/widgets/tweak-toolbar.cpp:334
#: ../share/extensions/interp_att_g.inx.h:16
msgid "Opacity"
msgstr "Непрозорість"
#: ../src/extension/internal/bitmap/opacity.cpp:40
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2875
-#: ../src/widgets/dropper-toolbar.cpp:107
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2884
+#: ../src/widgets/dropper-toolbar.cpp:83
msgid "Opacity:"
msgstr "Непрозорість:"
@@ -6375,7 +6360,7 @@ msgstr "Постеризація"
#: ../src/extension/internal/bitmap/threshold.cpp:40
#: ../src/extension/internal/bitmap/unsharpmask.cpp:46
-#: ../src/widgets/paintbucket-toolbar.cpp:167
+#: ../src/widgets/paintbucket-toolbar.cpp:146
msgid "Threshold:"
msgstr "Поріг:"
@@ -6457,8 +6442,8 @@ msgstr "PostScript level 2"
#: ../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:3520
-#: ../src/extension/internal/wmf-inout.cpp:3088
+#: ../src/extension/internal/emf-inout.cpp:3513
+#: ../src/extension/internal/wmf-inout.cpp:3103
msgid "Convert texts to paths"
msgstr "Перетворити текст на контури"
@@ -6626,75 +6611,75 @@ msgstr "Файли обміну презентаціями Corel DRAW (*.cmx)"
msgid "Open presentation exchange files saved in Corel DRAW"
msgstr "Відкрити файли обміну презентаціями, збережені за допомогою Corel DRAW"
-#: ../src/extension/internal/emf-inout.cpp:3504
+#: ../src/extension/internal/emf-inout.cpp:3497
msgid "EMF Input"
msgstr "Імпорт EMF"
-#: ../src/extension/internal/emf-inout.cpp:3509
+#: ../src/extension/internal/emf-inout.cpp:3502
msgid "Enhanced Metafiles (*.emf)"
msgstr "Розширений метафайл (*.emf)"
-#: ../src/extension/internal/emf-inout.cpp:3510
+#: ../src/extension/internal/emf-inout.cpp:3503
msgid "Enhanced Metafiles"
msgstr "Розширені метафайли"
-#: ../src/extension/internal/emf-inout.cpp:3518
+#: ../src/extension/internal/emf-inout.cpp:3511
msgid "EMF Output"
msgstr "Експорт до EMF"
-#: ../src/extension/internal/emf-inout.cpp:3521
-#: ../src/extension/internal/wmf-inout.cpp:3089
+#: ../src/extension/internal/emf-inout.cpp:3514
+#: ../src/extension/internal/wmf-inout.cpp:3104
msgid "Map Unicode to Symbol font"
msgstr "Пов’язати Unicode зі шрифтом Symbol"
-#: ../src/extension/internal/emf-inout.cpp:3522
-#: ../src/extension/internal/wmf-inout.cpp:3090
+#: ../src/extension/internal/emf-inout.cpp:3515
+#: ../src/extension/internal/wmf-inout.cpp:3105
msgid "Map Unicode to Wingdings"
msgstr "Пов’язати Unicode з Wingdings"
-#: ../src/extension/internal/emf-inout.cpp:3523
-#: ../src/extension/internal/wmf-inout.cpp:3091
+#: ../src/extension/internal/emf-inout.cpp:3516
+#: ../src/extension/internal/wmf-inout.cpp:3106
msgid "Map Unicode to Zapf Dingbats"
msgstr "Пов’язати Unicode з Zapf Dingbats"
-#: ../src/extension/internal/emf-inout.cpp:3524
-#: ../src/extension/internal/wmf-inout.cpp:3092
+#: ../src/extension/internal/emf-inout.cpp:3517
+#: ../src/extension/internal/wmf-inout.cpp:3107
msgid "Use MS Unicode PUA (0xF020-0xF0FF) for converted characters"
msgstr ""
"Використовувати для перетворених символів MS Unicode PUA (0xF020-0xF0FF)"
-#: ../src/extension/internal/emf-inout.cpp:3525
-#: ../src/extension/internal/wmf-inout.cpp:3093
+#: ../src/extension/internal/emf-inout.cpp:3518
+#: ../src/extension/internal/wmf-inout.cpp:3108
msgid "Compensate for PPT font bug"
msgstr "Компенсувати ваду щодо шрифтів у PPT"
-#: ../src/extension/internal/emf-inout.cpp:3526
-#: ../src/extension/internal/wmf-inout.cpp:3094
+#: ../src/extension/internal/emf-inout.cpp:3519
+#: ../src/extension/internal/wmf-inout.cpp:3109
msgid "Convert dashed/dotted lines to single lines"
msgstr "Перетворювати штрихову та пунктир у одну лінію"
-#: ../src/extension/internal/emf-inout.cpp:3527
-#: ../src/extension/internal/wmf-inout.cpp:3095
+#: ../src/extension/internal/emf-inout.cpp:3520
+#: ../src/extension/internal/wmf-inout.cpp:3110
msgid "Convert gradients to colored polygon series"
msgstr "Перетворити градієнти на послідовність кольорових багатокутників"
-#: ../src/extension/internal/emf-inout.cpp:3528
+#: ../src/extension/internal/emf-inout.cpp:3521
msgid "Use native rectangular linear gradients"
msgstr "Використовувати природні прямокутні лінійні градієнти"
-#: ../src/extension/internal/emf-inout.cpp:3529
+#: ../src/extension/internal/emf-inout.cpp:3522
msgid "Map all fill patterns to standard EMF hatches"
msgstr "Пов’язати усі заповнення візерунками зі стандартними шаблонами EMF"
-#: ../src/extension/internal/emf-inout.cpp:3530
+#: ../src/extension/internal/emf-inout.cpp:3523
msgid "Ignore image rotations"
msgstr "Ігнорувати обертання зображення"
-#: ../src/extension/internal/emf-inout.cpp:3534
+#: ../src/extension/internal/emf-inout.cpp:3527
msgid "Enhanced Metafile (*.emf)"
msgstr "Розширений метафайл (*.emf)"
-#: ../src/extension/internal/emf-inout.cpp:3535
+#: ../src/extension/internal/emf-inout.cpp:3528
msgid "Enhanced Metafile"
msgstr "Розширений метафайл"
@@ -6757,8 +6742,8 @@ msgstr "Колір підсвічення"
#: ../src/extension/internal/filter/color.h:1615
#: ../src/extension/internal/filter/distort.h:95
#: ../src/extension/internal/filter/distort.h:204
-#: ../src/extension/internal/filter/filter.cpp:214
#: ../src/extension/internal/filter/filter-file.cpp:151
+#: ../src/extension/internal/filter/filter.cpp:214
#: ../src/extension/internal/filter/image.h:61
#: ../src/extension/internal/filter/morphology.h:75
#: ../src/extension/internal/filter/morphology.h:202
@@ -6967,7 +6952,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:112
+#: ../src/ui/dialog/document-properties.cpp:114
msgid "Background color"
msgstr "Колір тла"
@@ -7028,7 +7013,7 @@ msgstr "Витискання джерела"
#: ../src/extension/internal/filter/color.h:637
#: ../src/extension/internal/filter/color.h:821
#: ../src/extension/internal/filter/transparency.h:132
-#: ../src/filter-enums.cpp:125 ../src/ui/tools/flood-tool.cpp:198
+#: ../src/filter-enums.cpp:125 ../src/ui/tools/flood-tool.cpp:193
#: ../src/widgets/sp-color-icc-selector.cpp:355
#: ../src/widgets/sp-color-scales.cpp:429
#: ../src/widgets/sp-color-scales.cpp:430
@@ -7041,7 +7026,7 @@ msgstr "Червоний"
#: ../src/extension/internal/filter/color.h:638
#: ../src/extension/internal/filter/color.h:822
#: ../src/extension/internal/filter/transparency.h:133
-#: ../src/filter-enums.cpp:126 ../src/ui/tools/flood-tool.cpp:199
+#: ../src/filter-enums.cpp:126 ../src/ui/tools/flood-tool.cpp:194
#: ../src/widgets/sp-color-icc-selector.cpp:356
#: ../src/widgets/sp-color-scales.cpp:432
#: ../src/widgets/sp-color-scales.cpp:433
@@ -7054,7 +7039,7 @@ msgstr "Зелений"
#: ../src/extension/internal/filter/color.h:639
#: ../src/extension/internal/filter/color.h:823
#: ../src/extension/internal/filter/transparency.h:134
-#: ../src/filter-enums.cpp:127 ../src/ui/tools/flood-tool.cpp:200
+#: ../src/filter-enums.cpp:127 ../src/ui/tools/flood-tool.cpp:195
#: ../src/widgets/sp-color-icc-selector.cpp:357
#: ../src/widgets/sp-color-scales.cpp:435
#: ../src/widgets/sp-color-scales.cpp:436
@@ -7078,9 +7063,9 @@ msgid "Diffuse"
msgstr "Розсіяний"
#: ../src/extension/internal/filter/bumps.h:98
-#: ../src/extension/internal/filter/bumps.h:329 ../src/libgdl/gdl-dock.c:199
-#: ../src/libgdl/gdl-dock-placeholder.c:175
-#: ../src/widgets/rect-toolbar.cpp:338
+#: ../src/extension/internal/filter/bumps.h:329
+#: ../src/libgdl/gdl-dock-placeholder.c:175 ../src/libgdl/gdl-dock.c:199
+#: ../src/widgets/rect-toolbar.cpp:331
#: ../share/extensions/interp_att_g.inx.h:11
msgid "Height"
msgstr "Висота"
@@ -7093,10 +7078,10 @@ msgstr "Висота"
#: ../src/extension/internal/filter/paint.h:86
#: ../src/extension/internal/filter/paint.h:592
#: ../src/extension/internal/filter/paint.h:707
-#: ../src/ui/tools/flood-tool.cpp:203
+#: ../src/ui/tools/flood-tool.cpp:198
#: ../src/widgets/sp-color-icc-selector.cpp:366
#: ../src/widgets/sp-color-scales.cpp:461
-#: ../src/widgets/sp-color-scales.cpp:462 ../src/widgets/tweak-toolbar.cpp:332
+#: ../src/widgets/sp-color-scales.cpp:462 ../src/widgets/tweak-toolbar.cpp:318
#: ../share/extensions/color_randomize.inx.h:5
msgid "Lightness"
msgstr "Яскравість"
@@ -7208,7 +7193,7 @@ msgstr "Тло:"
#: ../src/extension/internal/filter/bumps.h:322
#: ../src/extension/internal/filter/transparency.h:57
-#: ../src/filter-enums.cpp:29 ../src/sp-image.cpp:616
+#: ../src/filter-enums.cpp:29 ../src/sp-image.cpp:517
msgid "Image"
msgstr "Зображення"
@@ -7293,18 +7278,18 @@ msgstr "Малювання за каналами"
#: ../src/extension/internal/filter/color.h:257
#: ../src/extension/internal/filter/paint.h:87 ../src/filter-enums.cpp:66
#: ../src/ui/dialog/inkscape-preferences.cpp:941
-#: ../src/ui/tools/flood-tool.cpp:202
+#: ../src/ui/tools/flood-tool.cpp:197
#: ../src/widgets/sp-color-icc-selector.cpp:362
#: ../src/widgets/sp-color-icc-selector.cpp:367
#: ../src/widgets/sp-color-scales.cpp:458
-#: ../src/widgets/sp-color-scales.cpp:459 ../src/widgets/tweak-toolbar.cpp:316
+#: ../src/widgets/sp-color-scales.cpp:459 ../src/widgets/tweak-toolbar.cpp:302
#: ../share/extensions/color_randomize.inx.h:4
msgid "Saturation"
msgstr "Насиченість"
#: ../src/extension/internal/filter/color.h:160
#: ../src/extension/internal/filter/transparency.h:135
-#: ../src/filter-enums.cpp:128 ../src/ui/tools/flood-tool.cpp:204
+#: ../src/filter-enums.cpp:128 ../src/ui/tools/flood-tool.cpp:199
msgid "Alpha"
msgstr "Альфа-канал"
@@ -7555,13 +7540,11 @@ msgstr "Освітлення"
msgid "Shadows"
msgstr "Тіні"
-#. initialise your parameters here:
#: ../src/extension/internal/filter/color.h:1044
#: ../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/live_effects/effect.cpp:97
#: ../src/ui/dialog/filter-effects-dialog.cpp:1047
-#: ../src/widgets/gradient-toolbar.cpp:1174
+#: ../src/widgets/gradient-toolbar.cpp:1158
msgid "Offset"
msgstr "Зміщення"
@@ -7887,9 +7870,9 @@ msgid "Open"
msgstr "Відкрите"
#: ../src/extension/internal/filter/morphology.h:65
-#: ../src/libgdl/gdl-dock.c:191 ../src/libgdl/gdl-dock-placeholder.c:167
-#: ../src/widgets/rect-toolbar.cpp:321 ../src/widgets/spray-toolbar.cpp:128
-#: ../src/widgets/tweak-toolbar.cpp:142
+#: ../src/libgdl/gdl-dock-placeholder.c:167 ../src/libgdl/gdl-dock.c:191
+#: ../src/widgets/rect-toolbar.cpp:314 ../src/widgets/spray-toolbar.cpp:116
+#: ../src/widgets/tweak-toolbar.cpp:128
#: ../share/extensions/interp_att_g.inx.h:10
msgid "Width"
msgstr "Ширина"
@@ -7998,8 +7981,8 @@ msgstr "Заливання шумом"
#: ../src/extension/internal/filter/paint.h:690
#: ../src/extension/internal/filter/shadows.h:60 ../src/ui/dialog/find.cpp:87
#: ../src/ui/dialog/tracedialog.cpp:747
-#: ../share/extensions/color_custom.inx.h:2
#: ../share/extensions/color_HSL_adjust.inx.h:2
+#: ../share/extensions/color_custom.inx.h:2
#: ../share/extensions/color_randomize.inx.h:2
#: ../share/extensions/dots.inx.h:2 ../share/extensions/dxf_input.inx.h:2
#: ../share/extensions/dxf_outlines.inx.h:2
@@ -8018,9 +8001,9 @@ msgstr "Заливання шумом"
#: ../share/extensions/radiusrand.inx.h:2 ../share/extensions/scour.inx.h:2
#: ../share/extensions/split.inx.h:2 ../share/extensions/voronoi2svg.inx.h:2
#: ../share/extensions/web-set-att.inx.h:2
+#: ../share/extensions/web-transmit-att.inx.h:2
#: ../share/extensions/webslicer_create_group.inx.h:2
#: ../share/extensions/webslicer_export.inx.h:2
-#: ../share/extensions/web-transmit-att.inx.h:2
msgid "Options"
msgstr "Параметри"
@@ -8125,14 +8108,14 @@ msgstr ""
#: ../src/extension/internal/filter/paint.h:331
#: ../src/ui/dialog/align-and-distribute.cpp:1004
-#: ../src/widgets/desktop-widget.cpp:1998
+#: ../src/widgets/desktop-widget.cpp:1993
msgid "Drawing"
msgstr "Малюнок"
#: ../src/extension/internal/filter/paint.h:335
#: ../src/extension/internal/filter/paint.h:496
#: ../src/extension/internal/filter/paint.h:590
-#: ../src/extension/internal/filter/paint.h:976 ../src/splivarot.cpp:2207
+#: ../src/extension/internal/filter/paint.h:976 ../src/splivarot.cpp:2208
msgid "Simplify"
msgstr "Спростити"
@@ -8408,15 +8391,15 @@ msgid "Source:"
msgstr "Джерело:"
#: ../src/extension/internal/filter/transparency.h:56
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1605
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1551
msgid "Background"
msgstr "Тло"
#: ../src/extension/internal/filter/transparency.h:59
-#: ../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
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2839
+#: ../src/ui/dialog/input.cpp:1088 ../src/widgets/eraser-toolbar.cpp:106
+#: ../src/widgets/pencil-toolbar.cpp:127 ../src/widgets/spray-toolbar.cpp:186
+#: ../src/widgets/tweak-toolbar.cpp:254 ../share/extensions/extrude.inx.h:2
#: ../share/extensions/triangle.inx.h:8
msgid "Mode:"
msgstr "Режим:"
@@ -8462,77 +8445,101 @@ msgstr "Вирізати"
msgid "Repaint anything visible monochrome"
msgstr "Перемалювати всі видимі об'єкти у монохромному режимі"
-#: ../src/extension/internal/gdkpixbuf-input.cpp:169
+#: ../src/extension/internal/gdkpixbuf-input.cpp:184
#, c-format
msgid "%s bitmap image import"
msgstr "Імпортування растрового зображення %s"
-#: ../src/extension/internal/gdkpixbuf-input.cpp:176
+#: ../src/extension/internal/gdkpixbuf-input.cpp:191
+#, c-format
+msgid "Image Import Type:"
+msgstr "Тип імпортування зображення:"
+
+#: ../src/extension/internal/gdkpixbuf-input.cpp:191
#, c-format
-msgid "Link or embed image:"
-msgstr "Пов'язати або вбудувати зображення:"
+msgid ""
+"Embed results in stand-alone, larger SVG files. Link references a file "
+"outside this SVG document and all files must be moved together."
+msgstr ""
+"Вбудувати результати у окремі, більші файли SVG. Посилання на файли поза цим "
+"документом SVG і всі файли буде об'єднано у єдиному документі."
-#: ../src/extension/internal/gdkpixbuf-input.cpp:177
+#: ../src/extension/internal/gdkpixbuf-input.cpp:192
#: ../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/extension/internal/gdkpixbuf-input.cpp:193 ../src/sp-anchor.cpp:119
#: ../src/ui/dialog/inkscape-preferences.cpp:1445
#, c-format
msgid "Link"
msgstr "Пов'язати"
-#: ../src/extension/internal/gdkpixbuf-input.cpp:180
+#: ../src/extension/internal/gdkpixbuf-input.cpp:196
+#, c-format
+msgid "Image DPI:"
+msgstr "Роздільність зображення:"
+
+#: ../src/extension/internal/gdkpixbuf-input.cpp:196
#, 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."
+"Take information from file or use default bitmap import resolution as "
+"defined in the preferences."
msgstr ""
-"Вбудувати результати у окремі, більші файли SVG. Посилання на файли поза цим "
-"документом SVG і всі файли буде об'єднано у єдиному документі."
+"Отримати дані з файла або скористатися типовою роздільністю імпортування "
+"растрових зображень, визначеною у налаштуваннях."
+
+#: ../src/extension/internal/gdkpixbuf-input.cpp:197
+#, c-format
+msgid "From file"
+msgstr "З файла"
+
+#: ../src/extension/internal/gdkpixbuf-input.cpp:198
+#, c-format
+msgid "Default import resolution"
+msgstr "Типова роздільна здатність для імпортування"
-#: ../src/extension/internal/gdkpixbuf-input.cpp:182
+#: ../src/extension/internal/gdkpixbuf-input.cpp:201
#, c-format
-msgid "Scale image preference (image-rendering):"
-msgstr "Режим масштабування зображень (обробки зображення):"
+msgid "Image Rendering Mode:"
+msgstr "Режим обробки зображення:"
-#: ../src/extension/internal/gdkpixbuf-input.cpp:183
+#: ../src/extension/internal/gdkpixbuf-input.cpp:201
+#, c-format
+msgid ""
+"When an image is upscaled, apply smoothing or keep blocky (pixelated). (Will "
+"not work in all browsers.)"
+msgstr ""
+"Визначає, що слід робити, якщо масштаб зображення збільшується: "
+"застосовувати згладжування чи залишати зображення блоковим (точковим). "
+"(Працює не в усіх засобах перегляду.)"
+
+#: ../src/extension/internal/gdkpixbuf-input.cpp:202
#: ../src/ui/dialog/inkscape-preferences.cpp:1452
#, c-format
msgid "None (auto)"
msgstr "Немає (автоматично)"
-#: ../src/extension/internal/gdkpixbuf-input.cpp:184
+#: ../src/extension/internal/gdkpixbuf-input.cpp:203
#: ../src/ui/dialog/inkscape-preferences.cpp:1452
#, c-format
msgid "Smooth (optimizeQuality)"
msgstr "Згладжування (оптимальна якість)"
-#: ../src/extension/internal/gdkpixbuf-input.cpp:185
+#: ../src/extension/internal/gdkpixbuf-input.cpp:204
#: ../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.)"
-msgstr ""
-"Визначає, що слід робити, якщо масштаб зображення збільшується: "
-"застосовувати згладжування чи залишати зображення блоковим (точковим). "
-"(Працює не в усіх засобах перегляду.)"
-
-#: ../src/extension/internal/gdkpixbuf-input.cpp:189
+#: ../src/extension/internal/gdkpixbuf-input.cpp:207
#, c-format
msgid "Hide the dialog next time and always apply the same actions."
msgstr ""
"Не показувати це вікно наступного разу і завжди виконувати ті самі дії."
-#: ../src/extension/internal/gdkpixbuf-input.cpp:189
+#: ../src/extension/internal/gdkpixbuf-input.cpp:207
#, c-format
msgid "Don't ask again"
msgstr "Більше не питати"
@@ -8574,6 +8581,7 @@ msgid "Vertical Offset:"
msgstr "Вертикальний зсув:"
#: ../src/extension/internal/grid.cpp:220
+#: ../src/ui/dialog/inkscape-preferences.cpp:1466
#: ../share/extensions/draw_from_triangle.inx.h:58
#: ../share/extensions/eqtexsvg.inx.h:4
#: ../share/extensions/foldablebox.inx.h:9
@@ -8590,8 +8598,8 @@ msgstr "Вертикальний зсув:"
#: ../share/extensions/polyhedron_3d.inx.h:56
#: ../share/extensions/printing_marks.inx.h:20
#: ../share/extensions/render_alphabetsoup.inx.h:5
-#: ../share/extensions/render_barcode_datamatrix.inx.h:5
#: ../share/extensions/render_barcode.inx.h:5
+#: ../share/extensions/render_barcode_datamatrix.inx.h:5
#: ../share/extensions/render_barcode_qrcode.inx.h:18
#: ../share/extensions/render_gear_rack.inx.h:5
#: ../share/extensions/render_gears.inx.h:11 ../share/extensions/rtree.inx.h:4
@@ -8603,7 +8611,7 @@ msgid "Render"
msgstr "Відтворення"
#: ../src/extension/internal/grid.cpp:221
-#: ../src/ui/dialog/document-properties.cpp:152
+#: ../src/ui/dialog/document-properties.cpp:154
#: ../src/ui/dialog/inkscape-preferences.cpp:776
#: ../src/widgets/toolbox.cpp:1825
msgid "Grids"
@@ -8625,10 +8633,6 @@ msgstr "JavaFX (*.fx)"
msgid "JavaFX Raytracer File"
msgstr "Файл розрахунку променів JavaFX"
-#: ../src/extension/internal/latex-pstricks.cpp:334
-msgid "LaTeX Print"
-msgstr "Друк LaTeX"
-
#: ../src/extension/internal/latex-pstricks-out.cpp:95
msgid "LaTeX Output"
msgstr "Експорт до LaTeX"
@@ -8641,15 +8645,19 @@ msgstr "LaTeX з макросом PSTricks (*.tex)"
msgid "LaTeX PSTricks File"
msgstr "Файл LaTeX PSTricks"
-#: ../src/extension/internal/odf.cpp:2149
+#: ../src/extension/internal/latex-pstricks.cpp:331
+msgid "LaTeX Print"
+msgstr "Друк LaTeX"
+
+#: ../src/extension/internal/odf.cpp:2142
msgid "OpenDocument Drawing Output"
msgstr "Експорт до формату рисунку OpenDocument"
-#: ../src/extension/internal/odf.cpp:2154
+#: ../src/extension/internal/odf.cpp:2147
msgid "OpenDocument drawing (*.odg)"
msgstr "Рисунок OpenDocument (*.odg)"
-#: ../src/extension/internal/odf.cpp:2155
+#: ../src/extension/internal/odf.cpp:2148
msgid "OpenDocument drawing file"
msgstr "Файл рисунку OpenDocument"
@@ -8812,39 +8820,39 @@ msgstr "Експорт до PovRay (*.pov) (лише контури і форм
msgid "PovRay Raytracer File"
msgstr "Файл розрахунку променів PovRay"
-#: ../src/extension/internal/svg.cpp:89
+#: ../src/extension/internal/svg.cpp:100
msgid "SVG Input"
msgstr "Імпорт з SVG"
-#: ../src/extension/internal/svg.cpp:94
+#: ../src/extension/internal/svg.cpp:105
msgid "Scalable Vector Graphic (*.svg)"
msgstr "Файл масштабованої векторної графіки (*.svg)"
-#: ../src/extension/internal/svg.cpp:95
+#: ../src/extension/internal/svg.cpp:106
msgid "Inkscape native file format and W3C standard"
msgstr "Рідний формат файлів Inkscape та стандарт W3C"
-#: ../src/extension/internal/svg.cpp:103
+#: ../src/extension/internal/svg.cpp:114
msgid "SVG Output Inkscape"
msgstr "Експорт до SVG Inkscape"
-#: ../src/extension/internal/svg.cpp:108
+#: ../src/extension/internal/svg.cpp:119
msgid "Inkscape SVG (*.svg)"
msgstr "Файл Inkscape SVG (*.svg)"
-#: ../src/extension/internal/svg.cpp:109
+#: ../src/extension/internal/svg.cpp:120
msgid "SVG format with Inkscape extensions"
msgstr "Формат SVG з додатками Inkscape"
-#: ../src/extension/internal/svg.cpp:117
+#: ../src/extension/internal/svg.cpp:128
msgid "SVG Output"
msgstr "Експорт до SVG"
-#: ../src/extension/internal/svg.cpp:122
+#: ../src/extension/internal/svg.cpp:133
msgid "Plain SVG (*.svg)"
msgstr "Звичайний SVG (*.svg)"
-#: ../src/extension/internal/svg.cpp:123
+#: ../src/extension/internal/svg.cpp:134
msgid "Scalable Vector Graphics format as defined by the W3C"
msgstr "Масштабована векторна графіка у відповідності до стандартів W3C"
@@ -8924,33 +8932,33 @@ msgstr "Імпорт з VSDX"
msgid "Microsoft Visio 2013 drawing (*.vsdx)"
msgstr "Малюнок Microsoft Visio 2013 (*.vsdx)"
-#: ../src/extension/internal/wmf-inout.cpp:3072
+#: ../src/extension/internal/wmf-inout.cpp:3087
msgid "WMF Input"
msgstr "Імпорт WMF"
-#: ../src/extension/internal/wmf-inout.cpp:3077
+#: ../src/extension/internal/wmf-inout.cpp:3092
msgid "Windows Metafiles (*.wmf)"
msgstr "Метафайл Windows (*.wmf)"
-#: ../src/extension/internal/wmf-inout.cpp:3078
+#: ../src/extension/internal/wmf-inout.cpp:3093
msgid "Windows Metafiles"
msgstr "Метафайл Windows"
-#: ../src/extension/internal/wmf-inout.cpp:3086
+#: ../src/extension/internal/wmf-inout.cpp:3101
msgid "WMF Output"
msgstr "Експорт до WMF"
-#: ../src/extension/internal/wmf-inout.cpp:3096
+#: ../src/extension/internal/wmf-inout.cpp:3111
msgid "Map all fill patterns to standard WMF hatches"
msgstr "Пов’язати усі заповнення візерунками зі стандартними шаблонами WMF"
-#: ../src/extension/internal/wmf-inout.cpp:3100
+#: ../src/extension/internal/wmf-inout.cpp:3115
#: ../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:3101
+#: ../src/extension/internal/wmf-inout.cpp:3116
msgid "Windows Metafile"
msgstr "Метафайл Windows (WMF)"
@@ -9061,7 +9069,7 @@ msgid "Document saved."
msgstr "Документ збережено."
#. We are saving for the first time; create a unique default filename
-#: ../src/file.cpp:858
+#: ../src/file.cpp:858 ../src/file.cpp:1406
msgid "drawing"
msgstr "рисунок"
@@ -9086,7 +9094,7 @@ msgid "Saving document..."
msgstr "Збереження документа…"
#: ../src/file.cpp:1244 ../src/ui/dialog/inkscape-preferences.cpp:1439
-#: ../src/ui/dialog/ocaldialogs.cpp:1246
+#: ../src/ui/dialog/ocaldialogs.cpp:1244
msgid "Import"
msgstr "Імпорт"
@@ -9094,16 +9102,11 @@ msgstr "Імпорт"
msgid "Select file to import"
msgstr "Виберіть файл для імпорту"
-#: ../src/file.cpp:1410
-#, c-format
-msgid "drawing%s"
-msgstr "рисунок%s"
-
-#: ../src/file.cpp:1432
+#: ../src/file.cpp:1427
msgid "Select file to export to"
msgstr "Оберіть файл для експорту"
-#: ../src/file.cpp:1685
+#: ../src/file.cpp:1680
msgid "Import Clip Art"
msgstr "Імпортування шаблонів"
@@ -9192,16 +9195,15 @@ msgstr "Розсіяне світло"
msgid "Difference"
msgstr "Різниця"
-#: ../src/filter-enums.cpp:64 ../src/live_effects/lpe-boolops.cpp:28
-#: ../src/splivarot.cpp:100
+#: ../src/filter-enums.cpp:64 ../src/splivarot.cpp:100
msgid "Exclusion"
msgstr "Виключення"
-#: ../src/filter-enums.cpp:65 ../src/ui/tools/flood-tool.cpp:201
+#: ../src/filter-enums.cpp:65 ../src/ui/tools/flood-tool.cpp:196
#: ../src/widgets/sp-color-icc-selector.cpp:361
#: ../src/widgets/sp-color-icc-selector.cpp:365
#: ../src/widgets/sp-color-scales.cpp:455
-#: ../src/widgets/sp-color-scales.cpp:456 ../src/widgets/tweak-toolbar.cpp:300
+#: ../src/widgets/sp-color-scales.cpp:456 ../src/widgets/tweak-toolbar.cpp:286
#: ../share/extensions/color_randomize.inx.h:3
msgid "Hue"
msgstr "Відтінок"
@@ -9227,7 +9229,7 @@ msgid "Luminance to Alpha"
msgstr "Освітленість до прозорості"
#. File
-#: ../src/filter-enums.cpp:84 ../src/verbs.cpp:2355
+#: ../src/filter-enums.cpp:84 ../src/verbs.cpp:2348
#: ../share/extensions/jessyInk_mouseHandler.inx.h:3
#: ../share/extensions/jessyInk_transitions.inx.h:7
msgid "Default"
@@ -9242,7 +9244,7 @@ msgstr "Спорожнити"
msgid "Copy"
msgstr "Копіювати"
-#: ../src/filter-enums.cpp:94 ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1628
+#: ../src/filter-enums.cpp:94 ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1571
msgid "Destination"
msgstr "Призначення"
@@ -9270,7 +9272,7 @@ msgstr "Світліше"
msgid "Arithmetic"
msgstr "Арифметичний"
-#: ../src/filter-enums.cpp:117 ../src/selection-chemistry.cpp:534
+#: ../src/filter-enums.cpp:117 ../src/selection-chemistry.cpp:535
msgid "Duplicate"
msgstr "Дублювати"
@@ -9314,47 +9316,47 @@ msgstr "Обернути градієнт"
msgid "Delete swatch"
msgstr "Вилучити зразок"
-#: ../src/gradient-drag.cpp:96 ../src/ui/tools/gradient-tool.cpp:104
+#: ../src/gradient-drag.cpp:96 ../src/ui/tools/gradient-tool.cpp:100
msgid "Linear gradient <b>start</b>"
msgstr "<b>Початок</b> лінійного градієнта"
#. POINT_LG_BEGIN
-#: ../src/gradient-drag.cpp:97 ../src/ui/tools/gradient-tool.cpp:105
+#: ../src/gradient-drag.cpp:97 ../src/ui/tools/gradient-tool.cpp:101
msgid "Linear gradient <b>end</b>"
msgstr "<b>Кінець</b> лінійного градієнта"
-#: ../src/gradient-drag.cpp:98 ../src/ui/tools/gradient-tool.cpp:106
+#: ../src/gradient-drag.cpp:98 ../src/ui/tools/gradient-tool.cpp:102
msgid "Linear gradient <b>mid stop</b>"
msgstr "<b>Середня опорна точка</b> лінійного градієнта"
-#: ../src/gradient-drag.cpp:99 ../src/ui/tools/gradient-tool.cpp:107
+#: ../src/gradient-drag.cpp:99 ../src/ui/tools/gradient-tool.cpp:103
msgid "Radial gradient <b>center</b>"
msgstr "<b>Центр</b> радіального градієнта"
#: ../src/gradient-drag.cpp:100 ../src/gradient-drag.cpp:101
-#: ../src/ui/tools/gradient-tool.cpp:108 ../src/ui/tools/gradient-tool.cpp:109
+#: ../src/ui/tools/gradient-tool.cpp:104 ../src/ui/tools/gradient-tool.cpp:105
msgid "Radial gradient <b>radius</b>"
msgstr "<b>Радіус</b> радіального градієнта"
-#: ../src/gradient-drag.cpp:102 ../src/ui/tools/gradient-tool.cpp:110
+#: ../src/gradient-drag.cpp:102 ../src/ui/tools/gradient-tool.cpp:106
msgid "Radial gradient <b>focus</b>"
msgstr "<b>Фокус</b> радіального градієнта"
#. POINT_RG_FOCUS
#: ../src/gradient-drag.cpp:103 ../src/gradient-drag.cpp:104
-#: ../src/ui/tools/gradient-tool.cpp:111 ../src/ui/tools/gradient-tool.cpp:112
+#: ../src/ui/tools/gradient-tool.cpp:107 ../src/ui/tools/gradient-tool.cpp:108
msgid "Radial gradient <b>mid stop</b>"
msgstr "<b>Середня опорна точка</b> радіального градієнта"
-#: ../src/gradient-drag.cpp:105 ../src/ui/tools/mesh-tool.cpp:105
+#: ../src/gradient-drag.cpp:105 ../src/ui/tools/mesh-tool.cpp:103
msgid "Mesh gradient <b>corner</b>"
msgstr "<b>Кут</b> сіткового градієнта"
-#: ../src/gradient-drag.cpp:106 ../src/ui/tools/mesh-tool.cpp:106
+#: ../src/gradient-drag.cpp:106 ../src/ui/tools/mesh-tool.cpp:104
msgid "Mesh gradient <b>handle</b>"
msgstr "<b>Вус</b> сіткового градієнта"
-#: ../src/gradient-drag.cpp:107 ../src/ui/tools/mesh-tool.cpp:107
+#: ../src/gradient-drag.cpp:107 ../src/ui/tools/mesh-tool.cpp:105
msgid "Mesh gradient <b>tensor</b>"
msgstr "<b>Тензор</b> сіткового градієнта"
@@ -9366,15 +9368,15 @@ msgstr "Додано рядок або стовпчик"
msgid "Merge gradient handles"
msgstr "Об'єднання вусів градієнта"
-#: ../src/gradient-drag.cpp:1103
+#: ../src/gradient-drag.cpp:1101
msgid "Move gradient handle"
msgstr "Перемістити вус градієнта"
-#: ../src/gradient-drag.cpp:1162 ../src/widgets/gradient-vector.cpp:847
+#: ../src/gradient-drag.cpp:1160 ../src/widgets/gradient-vector.cpp:847
msgid "Delete gradient stop"
msgstr "Вилучити опорну точку градієнта"
-#: ../src/gradient-drag.cpp:1425
+#: ../src/gradient-drag.cpp:1423
#, c-format
msgid ""
"%s %d for: %s%s; drag with <b>Ctrl</b> to snap offset; click with <b>Ctrl"
@@ -9383,11 +9385,11 @@ msgstr ""
"%s %d для: %s%s; перетягування з <b>Ctrl</b> обмежує зсув, клацання з <b>Ctrl"
"+Alt</b> вилучає опорну точку"
-#: ../src/gradient-drag.cpp:1429 ../src/gradient-drag.cpp:1436
+#: ../src/gradient-drag.cpp:1427 ../src/gradient-drag.cpp:1434
msgid " (stroke)"
msgstr " (штрих)"
-#: ../src/gradient-drag.cpp:1433
+#: ../src/gradient-drag.cpp:1431
#, c-format
msgid ""
"%s for: %s%s; drag with <b>Ctrl</b> to snap angle, with <b>Ctrl+Alt</b> to "
@@ -9396,7 +9398,7 @@ msgstr ""
"%s для: %s%s; <b>Ctrl</b> — обмежує кут, <b>Ctrl+Alt</b> фіксує кут, <b>Ctrl"
"+Shift</b> масштабування відносно центру"
-#: ../src/gradient-drag.cpp:1441
+#: ../src/gradient-drag.cpp:1439
msgid ""
"Radial gradient <b>center</b> and <b>focus</b>; drag with <b>Shift</b> to "
"separate focus"
@@ -9404,7 +9406,7 @@ msgstr ""
"<b>Центр</b> та <b>фокус</b> радіального градієнта; для відокремлення фокусу "
"перетягуйте з <b>Shift</b>"
-#: ../src/gradient-drag.cpp:1444
+#: ../src/gradient-drag.cpp:1442
#, c-format
msgid ""
"Gradient point shared by <b>%d</b> gradient; drag with <b>Shift</b> to "
@@ -9422,132 +9424,132 @@ msgstr[2] ""
"Точка градієнта спільна для <b>%d</b> градієнтів; для відокремлення "
"перетягуйте з <b>Shift</b>"
-#: ../src/gradient-drag.cpp:2372
+#: ../src/gradient-drag.cpp:2374
msgid "Move gradient handle(s)"
msgstr "Перемістити вус(а) градієнта"
-#: ../src/gradient-drag.cpp:2408
+#: ../src/gradient-drag.cpp:2410
msgid "Move gradient mid stop(s)"
msgstr "Перемістити опорні точки градієнта"
-#: ../src/gradient-drag.cpp:2697
+#: ../src/gradient-drag.cpp:2699
msgid "Delete gradient stop(s)"
msgstr "Вилучити опорні точки градієнта"
-#: ../src/inkscape.cpp:341
+#: ../src/inkscape.cpp:344
msgid "Autosave failed! Cannot create directory %1."
msgstr ""
"Спроба автоматичного збереження зазнала невдачі! Не вдалося створити каталог "
"%1."
-#: ../src/inkscape.cpp:350
+#: ../src/inkscape.cpp:353
msgid "Autosave failed! Cannot open directory %1."
msgstr ""
"Спроба автоматичного збереження зазнала невдачі! Не вдалося відкрити каталог "
"%1."
-#: ../src/inkscape.cpp:366
+#: ../src/inkscape.cpp:369
msgid "Autosaving documents..."
msgstr "Автозбереження документів…"
-#: ../src/inkscape.cpp:439
+#: ../src/inkscape.cpp:442
msgid "Autosave failed! Could not find inkscape extension to save document."
msgstr ""
"Спроба автоматичного збереження зазнала невдачі! Не вдалося знайти додаток "
"inkscape для зберігання документа."
-#: ../src/inkscape.cpp:442 ../src/inkscape.cpp:449
+#: ../src/inkscape.cpp:445 ../src/inkscape.cpp:452
#, c-format
msgid "Autosave failed! File %s could not be saved."
msgstr ""
"Спроба автоматичного зберігання зазнала невдачі! Файл %s неможливо зберегти."
-#: ../src/inkscape.cpp:464
+#: ../src/inkscape.cpp:467
msgid "Autosave complete."
msgstr "Автоматичне збереження завершено."
-#: ../src/inkscape.cpp:712
+#: ../src/inkscape.cpp:715
msgid "Untitled document"
msgstr "Без назви"
#. Show nice dialog box
-#: ../src/inkscape.cpp:744
+#: ../src/inkscape.cpp:747
msgid "Inkscape encountered an internal error and will close now.\n"
msgstr "Внутрішня помилка. Зараз роботу Inkscape буде завершено.\n"
-#: ../src/inkscape.cpp:745
+#: ../src/inkscape.cpp:748
msgid ""
"Automatic backups of unsaved documents were done to the following "
"locations:\n"
msgstr ""
"Виконано автоматичне збереження резервних копій незбережених документів:\n"
-#: ../src/inkscape.cpp:746
+#: ../src/inkscape.cpp:749
msgid "Automatic backup of the following documents failed:\n"
msgstr "Не вдається створити резервну копію такого документа:\n"
-#: ../src/interface.cpp:751
+#: ../src/interface.cpp:748
msgctxt "Interface setup"
msgid "Default"
msgstr "Типовий"
-#: ../src/interface.cpp:751
+#: ../src/interface.cpp:748
msgid "Default interface setup"
msgstr "Типові налаштування інтерфейсу"
-#: ../src/interface.cpp:752
+#: ../src/interface.cpp:749
msgctxt "Interface setup"
msgid "Custom"
msgstr "Нетиповий"
-#: ../src/interface.cpp:752
+#: ../src/interface.cpp:749
msgid "Setup for custom task"
msgstr "Налаштування для виконання певного завдання"
-#: ../src/interface.cpp:753
+#: ../src/interface.cpp:750
msgctxt "Interface setup"
msgid "Wide"
msgstr "Широкий"
-#: ../src/interface.cpp:753
+#: ../src/interface.cpp:750
msgid "Setup for widescreen work"
msgstr "Налаштування для широкоекранних моніторів"
-#: ../src/interface.cpp:865
+#: ../src/interface.cpp:862
#, c-format
msgid "Verb \"%s\" Unknown"
msgstr "Невідоме дієслово «%s»"
-#: ../src/interface.cpp:904
+#: ../src/interface.cpp:901
msgid "Open _Recent"
msgstr "Відкрити не_давній"
-#: ../src/interface.cpp:1012 ../src/interface.cpp:1098
-#: ../src/interface.cpp:1201 ../src/ui/widget/selected-style.cpp:528
+#: ../src/interface.cpp:1009 ../src/interface.cpp:1095
+#: ../src/interface.cpp:1198 ../src/ui/widget/selected-style.cpp:528
msgid "Drop color"
msgstr "Скинути колір"
-#: ../src/interface.cpp:1051 ../src/interface.cpp:1161
+#: ../src/interface.cpp:1048 ../src/interface.cpp:1158
msgid "Drop color on gradient"
msgstr "Перенесення кольору на градієнт"
-#: ../src/interface.cpp:1214
+#: ../src/interface.cpp:1211
msgid "Could not parse SVG data"
msgstr "Не вдається прочитати SVG-дані"
-#: ../src/interface.cpp:1253
+#: ../src/interface.cpp:1250
msgid "Drop SVG"
msgstr "Скинути SVG"
-#: ../src/interface.cpp:1266
+#: ../src/interface.cpp:1263
msgid "Drop Symbol"
msgstr "Скинути символ"
-#: ../src/interface.cpp:1297
+#: ../src/interface.cpp:1294
msgid "Drop bitmap image"
msgstr "Скинути растрову картинку"
-#: ../src/interface.cpp:1389
+#: ../src/interface.cpp:1386
#, c-format
msgid ""
"<span weight=\"bold\" size=\"larger\">A file named \"%s\" already exists. Do "
@@ -9560,198 +9562,198 @@ 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
+#: ../src/interface.cpp:1392 ../src/ui/dialog/export.cpp:1302
+#: ../src/widgets/desktop-widget.cpp:1122
+#: ../src/widgets/desktop-widget.cpp:1184
msgid "_Cancel"
msgstr "_Скасувати"
-#: ../src/interface.cpp:1396 ../share/extensions/web-set-att.inx.h:21
+#: ../src/interface.cpp:1393 ../share/extensions/web-set-att.inx.h:21
#: ../share/extensions/web-transmit-att.inx.h:19
msgid "Replace"
msgstr "Замінити"
-#: ../src/interface.cpp:1467
+#: ../src/interface.cpp:1464
msgid "Go to parent"
msgstr "На рівень вище"
#. TRANSLATORS: #%1 is the id of the group e.g. <g id="#g7">, not a number.
-#: ../src/interface.cpp:1508
+#: ../src/interface.cpp:1505
msgid "Enter group #%1"
msgstr "Увійти до групи №%1"
#. Item dialog
-#: ../src/interface.cpp:1644 ../src/verbs.cpp:2853
+#: ../src/interface.cpp:1641 ../src/verbs.cpp:2846
msgid "_Object Properties..."
msgstr "В_ластивості об'єкта…"
-#: ../src/interface.cpp:1653
+#: ../src/interface.cpp:1650
msgid "_Select This"
msgstr "_Позначити це"
-#: ../src/interface.cpp:1664
+#: ../src/interface.cpp:1661
msgid "Select Same"
msgstr "Позначити те саме"
#. Select same fill and stroke
-#: ../src/interface.cpp:1674
+#: ../src/interface.cpp:1671
msgid "Fill and Stroke"
msgstr "Заповнення та штрих"
#. Select same fill color
-#: ../src/interface.cpp:1681
+#: ../src/interface.cpp:1678
msgid "Fill Color"
msgstr "Колір заповнення"
#. Select same stroke color
-#: ../src/interface.cpp:1688
+#: ../src/interface.cpp:1685
msgid "Stroke Color"
msgstr "Колір штриха"
#. Select same stroke style
-#: ../src/interface.cpp:1695
+#: ../src/interface.cpp:1692
msgid "Stroke Style"
msgstr "Стиль штриха"
#. Select same stroke style
-#: ../src/interface.cpp:1702
+#: ../src/interface.cpp:1699
msgid "Object type"
msgstr "Тип об'єкта"
#. Move to layer
-#: ../src/interface.cpp:1709
+#: ../src/interface.cpp:1706
msgid "_Move to layer ..."
msgstr "П_ересунути до шару…"
#. Create link
-#: ../src/interface.cpp:1719
+#: ../src/interface.cpp:1716
msgid "Create _Link"
msgstr "С_творити посилання"
#. Set mask
-#: ../src/interface.cpp:1742
+#: ../src/interface.cpp:1739
msgid "Set Mask"
msgstr "Задати маску"
#. Release mask
-#: ../src/interface.cpp:1753
+#: ../src/interface.cpp:1750
msgid "Release Mask"
msgstr "Зняти маску"
#. Set Clip
-#: ../src/interface.cpp:1764
+#: ../src/interface.cpp:1761
msgid "Set Cl_ip"
msgstr "Встановити _обрізання"
#. Release Clip
-#: ../src/interface.cpp:1775
+#: ../src/interface.cpp:1772
msgid "Release C_lip"
msgstr "Зн_яти обрізання"
#. Group
-#: ../src/interface.cpp:1786 ../src/verbs.cpp:2490
+#: ../src/interface.cpp:1783 ../src/verbs.cpp:2483
msgid "_Group"
msgstr "З_групувати"
-#: ../src/interface.cpp:1857
+#: ../src/interface.cpp:1854
msgid "Create link"
msgstr "Створити посилання"
#. Ungroup
-#: ../src/interface.cpp:1888 ../src/verbs.cpp:2492
+#: ../src/interface.cpp:1885 ../src/verbs.cpp:2485
msgid "_Ungroup"
msgstr "Розгр_упувати"
#. Link dialog
-#: ../src/interface.cpp:1913
+#: ../src/interface.cpp:1910
msgid "Link _Properties..."
msgstr "В_ластивості посилання…"
#. Select item
-#: ../src/interface.cpp:1919
+#: ../src/interface.cpp:1916
msgid "_Follow Link"
msgstr "_Перейти за посиланням"
#. Reset transformations
-#: ../src/interface.cpp:1925
+#: ../src/interface.cpp:1922
msgid "_Remove Link"
msgstr "Ви_лучити посилання"
-#: ../src/interface.cpp:1956
+#: ../src/interface.cpp:1953
msgid "Remove link"
msgstr "Вилучити прив'язку"
#. Image properties
-#: ../src/interface.cpp:1967
+#: ../src/interface.cpp:1964
msgid "Image _Properties..."
msgstr "В_ластивості зображення…"
#. Edit externally
-#: ../src/interface.cpp:1973
+#: ../src/interface.cpp:1970
msgid "Edit Externally..."
msgstr "Редагувати у зовнішній програмі…"
#. Trace Bitmap
#. TRANSLATORS: "to trace" means "to convert a bitmap to vector graphics" (to vectorize)
-#: ../src/interface.cpp:1982 ../src/verbs.cpp:2553
+#: ../src/interface.cpp:1979 ../src/verbs.cpp:2546
msgid "_Trace Bitmap..."
msgstr "_Векторизувати растр"
#. Trace Pixel Art
-#: ../src/interface.cpp:1991
+#: ../src/interface.cpp:1988
msgid "Trace Pixel Art"
msgstr "Трасування растрової графіки"
-#: ../src/interface.cpp:2001
+#: ../src/interface.cpp:1998
msgctxt "Context menu"
msgid "Embed Image"
msgstr "Вбудувати зображення"
-#: ../src/interface.cpp:2012
+#: ../src/interface.cpp:2009
msgctxt "Context menu"
msgid "Extract Image..."
msgstr "Видобути зображення…"
#. Item dialog
#. Fill and Stroke dialog
-#: ../src/interface.cpp:2157 ../src/interface.cpp:2177 ../src/verbs.cpp:2816
+#: ../src/interface.cpp:2154 ../src/interface.cpp:2174 ../src/verbs.cpp:2809
msgid "_Fill and Stroke..."
msgstr "_Заповнення та штрих"
#. Edit Text dialog
-#: ../src/interface.cpp:2183 ../src/verbs.cpp:2835
+#: ../src/interface.cpp:2180 ../src/verbs.cpp:2828
msgid "_Text and Font..."
msgstr "_Текст та шрифт…"
#. Spellcheck dialog
-#: ../src/interface.cpp:2189 ../src/verbs.cpp:2843
+#: ../src/interface.cpp:2186 ../src/verbs.cpp:2836
msgid "Check Spellin_g..."
msgstr "Перевірити п_равопис…"
-#: ../src/knot.cpp:443
+#: ../src/knot.cpp:329
msgid "Node or handle drag canceled."
msgstr "Переміщення вузла скасовано."
-#: ../src/knotholder.cpp:160
+#: ../src/knotholder.cpp:158
msgid "Change handle"
msgstr "Змінити вус"
-#: ../src/knotholder.cpp:239
+#: ../src/knotholder.cpp:237
msgid "Move handle"
msgstr "Перемістити вус"
#. TRANSLATORS: This refers to the pattern that's inside the object
-#: ../src/knotholder.cpp:260
+#: ../src/knotholder.cpp:258
msgid "<b>Move</b> the pattern fill inside the object"
msgstr "<b>Переміщувати</b> заповнення візерунком всередині об'єкта"
-#: ../src/knotholder.cpp:264
+#: ../src/knotholder.cpp:262
msgid "<b>Scale</b> the pattern fill; uniformly if with <b>Ctrl</b>"
msgstr ""
"<b>Масштабувати</b> заповнення візерунком; рівномірно, якщо натиснуто "
"<b>Ctrl</b>"
-#: ../src/knotholder.cpp:268
+#: ../src/knotholder.cpp:266
msgid "<b>Rotate</b> the pattern fill; with <b>Ctrl</b> to snap angle"
msgstr "<b>Обертати</b> заповнення візерунком, <b>Ctrl</b> обмежує кут"
@@ -9771,55 +9773,26 @@ msgstr "Стиль панелі"
msgid "Dockbar style to show items on it"
msgstr "Стиль, у якому витримано елементи панелі"
-#: ../src/libgdl/gdl-dock.c:176 ../src/ui/dialog/inkscape-preferences.cpp:631
-#: ../src/ui/dialog/inkscape-preferences.cpp:674
-msgid "Floating"
-msgstr "Вільно переміщуються екраном"
-
-#: ../src/libgdl/gdl-dock.c:177
-msgid "Whether the dock is floating in its own window"
-msgstr "Чи плаває панель у власному вікні"
-
-#: ../src/libgdl/gdl-dock.c:184 ../src/libgdl/gdl-dock-master.c:141
-msgid "Default title"
-msgstr "Типовий заголовок"
-
-#: ../src/libgdl/gdl-dock.c:185
-msgid "Default title for the newly created floating docks"
-msgstr "Типовий заголовок нових плаваючих панелей"
-
-#: ../src/libgdl/gdl-dock.c:192
-msgid "Width for the dock when it's of floating type"
-msgstr "Ширина закріпленої панелі, якщо вона плаваюча"
-
-#: ../src/libgdl/gdl-dock.c:200
-msgid "Height for the dock when it's of floating type"
-msgstr "Висота закріпленої панелі, якщо вона плаваюча"
-
-#: ../src/libgdl/gdl-dock.c:207
-msgid "Float X"
-msgstr "Плаваюча, X"
-
-#: ../src/libgdl/gdl-dock.c:208
-msgid "X coordinate for a floating dock"
-msgstr "Координата X плаваючої панелі"
+#: ../src/libgdl/gdl-dock-item-grip.c:399
+msgid "Iconify this dock"
+msgstr "Згорнути цю панель"
-#: ../src/libgdl/gdl-dock.c:215
-msgid "Float Y"
-msgstr "Плаваюча, Y"
+#: ../src/libgdl/gdl-dock-item-grip.c:401
+msgid "Close this dock"
+msgstr "Закрити цю панель"
-#: ../src/libgdl/gdl-dock.c:216
-msgid "Y coordinate for a floating dock"
-msgstr "Координата Y плаваючої панелі"
+#: ../src/libgdl/gdl-dock-item-grip.c:720
+#: ../src/libgdl/gdl-dock-tablabel.c:125
+msgid "Controlling dock item"
+msgstr "Контролюючий елемент панелі"
-#: ../src/libgdl/gdl-dock.c:478
-#, c-format
-msgid "Dock #%d"
-msgstr "Прикріпити #%d"
+#: ../src/libgdl/gdl-dock-item-grip.c:721
+msgid "Dockitem which 'owns' this grip"
+msgstr "Елемент, що є «володарем» цього"
#. Name
#: ../src/libgdl/gdl-dock-item.c:298 ../src/widgets/ruler.cpp:191
-#: ../src/widgets/text-toolbar.cpp:1421
+#: ../src/widgets/text-toolbar.cpp:1414
#: ../share/extensions/gcodetools_graffiti.inx.h:9
#: ../share/extensions/gcodetools_orientation_points.inx.h:2
msgid "Orientation"
@@ -9921,22 +9894,9 @@ msgstr "Заблокувати"
msgid "Attempt to bind an unbound item %p"
msgstr "Спроба прив'язати неприв'язуваний елемент %p"
-#: ../src/libgdl/gdl-dock-item-grip.c:399
-msgid "Iconify this dock"
-msgstr "Згорнути цю панель"
-
-#: ../src/libgdl/gdl-dock-item-grip.c:401
-msgid "Close this dock"
-msgstr "Закрити цю панель"
-
-#: ../src/libgdl/gdl-dock-item-grip.c:721
-#: ../src/libgdl/gdl-dock-tablabel.c:125
-msgid "Controlling dock item"
-msgstr "Контролюючий елемент панелі"
-
-#: ../src/libgdl/gdl-dock-item-grip.c:722
-msgid "Dockitem which 'owns' this grip"
-msgstr "Елемент, що є «володарем» цього"
+#: ../src/libgdl/gdl-dock-master.c:141 ../src/libgdl/gdl-dock.c:184
+msgid "Default title"
+msgstr "Типовий заголовок"
#: ../src/libgdl/gdl-dock-master.c:142
msgid "Default title for newly created floating docks"
@@ -9979,9 +9939,9 @@ msgstr ""
#: ../src/libgdl/gdl-dock-notebook.c:132
#: ../src/ui/dialog/align-and-distribute.cpp:1003
-#: ../src/ui/dialog/document-properties.cpp:150
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1551
-#: ../src/widgets/desktop-widget.cpp:1994
+#: ../src/ui/dialog/document-properties.cpp:152
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1497
+#: ../src/widgets/desktop-widget.cpp:1989
#: ../share/extensions/voronoi2svg.inx.h:9
msgid "Page"
msgstr "Сторінка"
@@ -9991,7 +9951,7 @@ msgid "The index of the current page"
msgstr "Індекс поточної сторінки"
#: ../src/libgdl/gdl-dock-object.c:125
-#: ../src/ui/dialog/inkscape-preferences.cpp:1495
+#: ../src/ui/dialog/inkscape-preferences.cpp:1500
#: ../src/ui/widget/page-sizer.cpp:258
#: ../src/widgets/gradient-selector.cpp:158
#: ../src/widgets/sp-xmlview-attr-list.cpp:54
@@ -10162,7 +10122,49 @@ msgstr ""
msgid "Dockitem which 'owns' this tablabel"
msgstr "Елемент панелі, що «володіє» цією міткою вкладки"
-#: ../src/libnrtype/FontFactory.cpp:964
+#: ../src/libgdl/gdl-dock.c:176 ../src/ui/dialog/inkscape-preferences.cpp:631
+#: ../src/ui/dialog/inkscape-preferences.cpp:674
+msgid "Floating"
+msgstr "Вільно переміщуються екраном"
+
+#: ../src/libgdl/gdl-dock.c:177
+msgid "Whether the dock is floating in its own window"
+msgstr "Чи плаває панель у власному вікні"
+
+#: ../src/libgdl/gdl-dock.c:185
+msgid "Default title for the newly created floating docks"
+msgstr "Типовий заголовок нових плаваючих панелей"
+
+#: ../src/libgdl/gdl-dock.c:192
+msgid "Width for the dock when it's of floating type"
+msgstr "Ширина закріпленої панелі, якщо вона плаваюча"
+
+#: ../src/libgdl/gdl-dock.c:200
+msgid "Height for the dock when it's of floating type"
+msgstr "Висота закріпленої панелі, якщо вона плаваюча"
+
+#: ../src/libgdl/gdl-dock.c:207
+msgid "Float X"
+msgstr "Плаваюча, X"
+
+#: ../src/libgdl/gdl-dock.c:208
+msgid "X coordinate for a floating dock"
+msgstr "Координата X плаваючої панелі"
+
+#: ../src/libgdl/gdl-dock.c:215
+msgid "Float Y"
+msgstr "Плаваюча, Y"
+
+#: ../src/libgdl/gdl-dock.c:216
+msgid "Y coordinate for a floating dock"
+msgstr "Координата Y плаваючої панелі"
+
+#: ../src/libgdl/gdl-dock.c:476
+#, c-format
+msgid "Dock #%d"
+msgstr "Прикріпити #%d"
+
+#: ../src/libnrtype/FontFactory.cpp:966
msgid "Ignoring font without family that will crash Pango"
msgstr "Шрифт без сімейства, який може привести до збою Pango, ігнорується"
@@ -10299,7 +10301,7 @@ msgstr "Лінійка"
msgid "Power stroke"
msgstr "Потужний штрих"
-#: ../src/live_effects/effect.cpp:124 ../src/selection-chemistry.cpp:2797
+#: ../src/live_effects/effect.cpp:124 ../src/selection-chemistry.cpp:2835
msgid "Clone original path"
msgstr "Клонувати початковий контур"
@@ -10337,40 +10339,6 @@ msgstr ""
"Жоден із застосованих параметрів ефекту контуру не можна редагувати на "
"полотні."
-#: ../src/live_effects/lpe-angle_bisector.cpp:45
-#: ../src/live_effects/lpe-parallel.cpp:51
-#: ../src/live_effects/lpe-perp_bisector.cpp:97
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:63
-msgid "Length left:"
-msgstr "Довжина ліворуч:"
-
-#: ../src/live_effects/lpe-angle_bisector.cpp:45
-#: ../src/live_effects/lpe-perp_bisector.cpp:97
-msgid "Specifies the left end of the bisector"
-msgstr "Визначає довжину лівої частини бісектриси"
-
-#: ../src/live_effects/lpe-angle_bisector.cpp:46
-#: ../src/live_effects/lpe-parallel.cpp:52
-#: ../src/live_effects/lpe-perp_bisector.cpp:98
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:64
-msgid "Length right:"
-msgstr "Довжина праворуч:"
-
-#: ../src/live_effects/lpe-angle_bisector.cpp:46
-#: ../src/live_effects/lpe-perp_bisector.cpp:98
-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
-#: ../src/live_effects/lpe-perp_bisector.cpp:165
-msgid "Adjust the \"right\" end of the bisector"
-msgstr "Коригувати розташування «правого» кінця бісектриси"
-
#: ../src/live_effects/lpe-bendpath.cpp:53
msgid "Bend path:"
msgstr "Контур вигину:"
@@ -10381,7 +10349,7 @@ msgstr "Контур, за яким слід вигнути початковий
#: ../src/live_effects/lpe-bendpath.cpp:54
#: ../src/live_effects/lpe-patternalongpath.cpp:62
-#: ../src/ui/dialog/export.cpp:288 ../src/ui/dialog/transformation.cpp:80
+#: ../src/ui/dialog/export.cpp:290 ../src/ui/dialog/transformation.cpp:80
#: ../src/ui/widget/page-sizer.cpp:236
msgid "_Width:"
msgstr "_Ширина:"
@@ -10406,51 +10374,6 @@ msgstr "По_чатковий контур вертикальний"
msgid "Rotates the original 90 degrees, before bending it along the bend path"
msgstr "Повернути початковий контур на 90°, перш ніж вигинати його за контуром"
-#: ../src/live_effects/lpe-boolops.cpp:22
-msgid "Null"
-msgstr "Нульовий"
-
-#: ../src/live_effects/lpe-boolops.cpp:23
-msgid "Intersect"
-msgstr "Перетин"
-
-#: ../src/live_effects/lpe-boolops.cpp:24
-msgid "Subtract A-B"
-msgstr "Різниця A-B"
-
-#: ../src/live_effects/lpe-boolops.cpp:25
-msgid "Identity A"
-msgstr "Тотожний A"
-
-#: ../src/live_effects/lpe-boolops.cpp:26
-msgid "Subtract B-A"
-msgstr "Різниця B-A"
-
-#: ../src/live_effects/lpe-boolops.cpp:27
-msgid "Identity B"
-msgstr "Тотожний B"
-
-#: ../src/live_effects/lpe-boolops.cpp:29 ../src/splivarot.cpp:70
-#: ../src/splivarot.cpp:76
-msgid "Union"
-msgstr "Об'єднання"
-
-#: ../src/live_effects/lpe-boolops.cpp:35
-msgid "2nd path:"
-msgstr "2-ий контур:"
-
-#: ../src/live_effects/lpe-boolops.cpp:35
-msgid "Path to which the original path will be boolop'ed."
-msgstr "Контур, з яким буде виконано булеву дію з початковим контуром."
-
-#: ../src/live_effects/lpe-boolops.cpp:36
-msgid "Boolop type:"
-msgstr "Тип булевої дії:"
-
-#: ../src/live_effects/lpe-boolops.cpp:36
-msgid "Determines which kind of boolop will be performed."
-msgstr "Визначає тип булевої дії, яку буде виконано."
-
#: ../src/live_effects/lpe-clone-original.cpp:18
msgid "Linked path:"
msgstr "Пов’язаний контур:"
@@ -10475,46 +10398,6 @@ msgstr "Розмір з_а Y:"
msgid "The size of the grid in Y direction."
msgstr "Розмір сітки у напрямку вісі Y."
-#: ../src/live_effects/lpe-copy_rotate.cpp:51
-msgid "Starting:"
-msgstr "Початок:"
-
-#: ../src/live_effects/lpe-copy_rotate.cpp:51
-msgid "Angle of the first copy"
-msgstr "Кут для першої копії"
-
-#: ../src/live_effects/lpe-copy_rotate.cpp:52
-msgid "Rotation angle:"
-msgstr "Кут обертання:"
-
-#: ../src/live_effects/lpe-copy_rotate.cpp:52
-msgid "Angle between two successive copies"
-msgstr "Кут між двома послідовними копіями"
-
-#: ../src/live_effects/lpe-copy_rotate.cpp:53
-msgid "Number of copies:"
-msgstr "Кількість копій:"
-
-#: ../src/live_effects/lpe-copy_rotate.cpp:53
-msgid "Number of copies of the original path"
-msgstr "Кількість копій початкового контуру"
-
-#: ../src/live_effects/lpe-copy_rotate.cpp:54
-msgid "Origin"
-msgstr "Центр"
-
-#: ../src/live_effects/lpe-copy_rotate.cpp:54
-msgid "Origin of the rotation"
-msgstr "Центр обертання"
-
-#: ../src/live_effects/lpe-copy_rotate.cpp:135
-msgid "Adjust the starting angle"
-msgstr "Корекція початкового кута"
-
-#: ../src/live_effects/lpe-copy_rotate.cpp:141
-msgid "Adjust the rotation angle"
-msgstr "Корекція кута повороту"
-
#: ../src/live_effects/lpe-curvestitch.cpp:41
msgid "Stitch path:"
msgstr "Зшиваючий контур:"
@@ -10597,115 +10480,6 @@ msgstr ""
"Змінювати товщину штриха контуру, зберігаючи значення її відношення до його "
"довжини"
-#: ../src/live_effects/lpe-dynastroke.cpp:35
-msgid "Elliptic Pen"
-msgstr "Еліптичне перо"
-
-#: ../src/live_effects/lpe-dynastroke.cpp:36
-msgid "Thick-Thin strokes (fast)"
-msgstr "Штрих, що витоншується (швидко)"
-
-#: ../src/live_effects/lpe-dynastroke.cpp:37
-msgid "Thick-Thin strokes (slow)"
-msgstr "Штрих, що витоншується (повільно)"
-
-#: ../src/live_effects/lpe-dynastroke.cpp:42
-msgid "Sharp"
-msgstr "Загострений"
-
-#: ../src/live_effects/lpe-dynastroke.cpp:43
-#: ../src/live_effects/lpe-powerstroke.cpp:205
-#: ../share/extensions/gcodetools_prepare_path_for_plasma.inx.h:13
-msgid "Round"
-msgstr "Округлені"
-
-#. initialise your parameters here:
-#: ../src/live_effects/lpe-dynastroke.cpp:50
-msgid "Method:"
-msgstr "Метод:"
-
-#: ../src/live_effects/lpe-dynastroke.cpp:50
-msgid "Choose pen type"
-msgstr "Обрати тип пера"
-
-#: ../src/live_effects/lpe-dynastroke.cpp:51
-msgid "Pen width:"
-msgstr "Ширина пера:"
-
-#: ../src/live_effects/lpe-dynastroke.cpp:51
-msgid "Maximal stroke width"
-msgstr "Максимальна товщина штриха"
-
-#: ../src/live_effects/lpe-dynastroke.cpp:52
-msgid "Pen roundness:"
-msgstr "Округлення пера:"
-
-#: ../src/live_effects/lpe-dynastroke.cpp:52
-msgid "Min/Max width ratio"
-msgstr "Відношення мін.-макс. товщини"
-
-#: ../src/live_effects/lpe-dynastroke.cpp:53
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:61
-#: ../src/widgets/calligraphy-toolbar.cpp:480
-#: ../share/extensions/motion.inx.h:3 ../share/extensions/restack.inx.h:10
-msgid "Angle:"
-msgstr "Кут:"
-
-#: ../src/live_effects/lpe-dynastroke.cpp:53
-msgid "direction of thickest strokes (opposite = thinnest)"
-msgstr "напрямок найтовщих штрихів (протилежне = найтонших)"
-
-#. modulo_pi(_("modulo pi"), _("Give forward and backward moves in one direction the same thickness "), "modulo_pi", &wr, this, false),
-#: ../src/live_effects/lpe-dynastroke.cpp:55
-#: ../src/widgets/arc-toolbar.cpp:336
-msgid "Start:"
-msgstr "Початок:"
-
-#: ../src/live_effects/lpe-dynastroke.cpp:55
-msgid "Choose start capping type"
-msgstr "Оберіть тип початкової вершини"
-
-#: ../src/live_effects/lpe-dynastroke.cpp:56
-#: ../src/widgets/arc-toolbar.cpp:349
-msgid "End:"
-msgstr "Кінець:"
-
-#: ../src/live_effects/lpe-dynastroke.cpp:56
-msgid "Choose end capping type"
-msgstr "Оберіть тип кінцевої вершини"
-
-#: ../src/live_effects/lpe-dynastroke.cpp:57
-msgid "Grow for:"
-msgstr "Потовщення:"
-
-#: ../src/live_effects/lpe-dynastroke.cpp:57
-msgid "Make the stroke thinner near it's start"
-msgstr "Зробити штрих тоншим поблизу початку"
-
-#: ../src/live_effects/lpe-dynastroke.cpp:58
-msgid "Fade for:"
-msgstr "Потоншення:"
-
-#: ../src/live_effects/lpe-dynastroke.cpp:58
-msgid "Make the stroke thinner near it's end"
-msgstr "Зробити штрих тоншим поряд з його кінцем"
-
-#: ../src/live_effects/lpe-dynastroke.cpp:59
-msgid "Round ends"
-msgstr "Округлити кінці"
-
-#: ../src/live_effects/lpe-dynastroke.cpp:59
-msgid "Strokes end with a round end"
-msgstr "Штрихи завершуються заокругленим кінцем"
-
-#: ../src/live_effects/lpe-dynastroke.cpp:60
-msgid "Capping:"
-msgstr "Вершина:"
-
-#: ../src/live_effects/lpe-dynastroke.cpp:60
-msgid "left capping"
-msgstr "ліва вершина"
-
#: ../src/live_effects/lpe-envelope.cpp:31
msgid "Top bend path:"
msgstr "Верхній контур вигину:"
@@ -10870,237 +10644,6 @@ msgstr "Перетягніть, щоб вибрати перехрестя, кл
msgid "Change knot crossing"
msgstr "Змінити перехрестя у вузлі"
-#. initialise your parameters here:
-#: ../src/live_effects/lpe-lattice.cpp:45
-msgid "Control handle 0:"
-msgstr "Інструмент керування 0:"
-
-#: ../src/live_effects/lpe-lattice.cpp:45
-msgid "Control handle 0"
-msgstr "Інструмент керування 0"
-
-#: ../src/live_effects/lpe-lattice.cpp:46
-msgid "Control handle 1:"
-msgstr "Інструмент керування 1:"
-
-#: ../src/live_effects/lpe-lattice.cpp:46
-msgid "Control handle 1"
-msgstr "Інструмент керування 1"
-
-#: ../src/live_effects/lpe-lattice.cpp:47
-msgid "Control handle 2:"
-msgstr "Інструмент керування 2:"
-
-#: ../src/live_effects/lpe-lattice.cpp:47
-msgid "Control handle 2"
-msgstr "Інструмент керування 2"
-
-#: ../src/live_effects/lpe-lattice.cpp:48
-msgid "Control handle 3:"
-msgstr "Інструмент керування 3:"
-
-#: ../src/live_effects/lpe-lattice.cpp:48
-msgid "Control handle 3"
-msgstr "Інструмент керування 3"
-
-#: ../src/live_effects/lpe-lattice.cpp:49
-msgid "Control handle 4:"
-msgstr "Інструмент керування 4:"
-
-#: ../src/live_effects/lpe-lattice.cpp:49
-msgid "Control handle 4"
-msgstr "Інструмент керування 4"
-
-#: ../src/live_effects/lpe-lattice.cpp:50
-msgid "Control handle 5:"
-msgstr "Інструмент керування 5:"
-
-#: ../src/live_effects/lpe-lattice.cpp:50
-msgid "Control handle 5"
-msgstr "Інструмент керування 5"
-
-#: ../src/live_effects/lpe-lattice.cpp:51
-msgid "Control handle 6:"
-msgstr "Інструмент керування 6:"
-
-#: ../src/live_effects/lpe-lattice.cpp:51
-msgid "Control handle 6"
-msgstr "Інструмент керування 5"
-
-#: ../src/live_effects/lpe-lattice.cpp:52
-msgid "Control handle 7:"
-msgstr "Інструмент керування 7:"
-
-#: ../src/live_effects/lpe-lattice.cpp:52
-msgid "Control handle 7"
-msgstr "Інструмент керування 7"
-
-#: ../src/live_effects/lpe-lattice.cpp:53
-msgid "Control handle 8:"
-msgstr "Інструмент керування 8:"
-
-#: ../src/live_effects/lpe-lattice.cpp:53
-msgid "Control handle 8"
-msgstr "Інструмент керування 8"
-
-#: ../src/live_effects/lpe-lattice.cpp:54
-msgid "Control handle 9:"
-msgstr "Інструмент керування 9:"
-
-#: ../src/live_effects/lpe-lattice.cpp:54
-msgid "Control handle 9"
-msgstr "Інструмент керування 9"
-
-#: ../src/live_effects/lpe-lattice.cpp:55
-msgid "Control handle 10:"
-msgstr "Інструмент керування 10:"
-
-#: ../src/live_effects/lpe-lattice.cpp:55
-msgid "Control handle 10"
-msgstr "Інструмент керування 10"
-
-#: ../src/live_effects/lpe-lattice.cpp:56
-msgid "Control handle 11:"
-msgstr "Інструмент керування 11:"
-
-#: ../src/live_effects/lpe-lattice.cpp:56
-msgid "Control handle 11"
-msgstr "Інструмент керування 11"
-
-#: ../src/live_effects/lpe-lattice.cpp:57
-msgid "Control handle 12:"
-msgstr "Інструмент керування 12:"
-
-#: ../src/live_effects/lpe-lattice.cpp:57
-msgid "Control handle 12"
-msgstr "Інструмент керування 12"
-
-#: ../src/live_effects/lpe-lattice.cpp:58
-msgid "Control handle 13:"
-msgstr "Інструмент керування 13:"
-
-#: ../src/live_effects/lpe-lattice.cpp:58
-msgid "Control handle 13"
-msgstr "Інструмент керування 13"
-
-#: ../src/live_effects/lpe-lattice.cpp:59
-msgid "Control handle 14:"
-msgstr "Інструмент керування 14:"
-
-#: ../src/live_effects/lpe-lattice.cpp:59
-msgid "Control handle 14"
-msgstr "Інструмент керування 14"
-
-#: ../src/live_effects/lpe-lattice.cpp:60
-msgid "Control handle 15:"
-msgstr "Інструмент керування 15:"
-
-#: ../src/live_effects/lpe-lattice.cpp:60
-msgid "Control handle 15"
-msgstr "Інструмент керування 15"
-
-#: ../src/live_effects/lpe-line_segment.cpp:25
-#: ../src/widgets/lpe-toolbar.cpp:254
-msgid "Closed"
-msgstr "Заблокований"
-
-#: ../src/live_effects/lpe-line_segment.cpp:26
-#: ../src/widgets/lpe-toolbar.cpp:256
-msgid "Open start"
-msgstr "Відкритий початок"
-
-#: ../src/live_effects/lpe-line_segment.cpp:27
-#: ../src/widgets/lpe-toolbar.cpp:258
-msgid "Open end"
-msgstr "Відкритий кінець"
-
-#: ../src/live_effects/lpe-line_segment.cpp:28
-#: ../src/widgets/lpe-toolbar.cpp:260
-msgid "Open both"
-msgstr "Відкриті обидва кінці"
-
-#: ../src/live_effects/lpe-line_segment.cpp:34
-msgid "End type:"
-msgstr "Тип кінця^"
-
-#: ../src/live_effects/lpe-line_segment.cpp:34
-msgid "Determines on which side the line or line segment is infinite."
-msgstr "Визначає, який з кінців лінії або її сегмента буде нескінченним."
-
-#: ../src/live_effects/lpe-mirror_symmetry.cpp:32
-msgid "Discard original path?"
-msgstr "Відкинути початковий контур?"
-
-#: ../src/live_effects/lpe-mirror_symmetry.cpp:32
-msgid "Check this to only keep the mirrored part of the path"
-msgstr ""
-"Позначте цей пункт, щоб програма зберегла лише віддзеркалену частину контуру"
-
-#: ../src/live_effects/lpe-mirror_symmetry.cpp:33
-msgid "Reflection line:"
-msgstr "Лінія відбиття:"
-
-#: ../src/live_effects/lpe-mirror_symmetry.cpp:33
-msgid "Line which serves as 'mirror' for the reflection"
-msgstr "Лінія, яка слугуватиме «дзеркалом» відбиття"
-
-#: ../src/live_effects/lpe-offset.cpp:31
-msgid "Handle to control the distance of the offset from the curve"
-msgstr "Інструмент керування, який визначатиме відстань відступу від кривої"
-
-#: ../src/live_effects/lpe-parallel.cpp:50
-msgid "Adjust the offset"
-msgstr "Скоригувати відступ"
-
-#: ../src/live_effects/lpe-parallel.cpp:51
-msgid "Specifies the left end of the parallel"
-msgstr "Визначає лівий кінець паралельної"
-
-#: ../src/live_effects/lpe-parallel.cpp:52
-msgid "Specifies the right end of the parallel"
-msgstr "Визначає правий кінець паралельної"
-
-#: ../src/live_effects/lpe-parallel.cpp:102
-msgid "Adjust the \"left\" end of the parallel"
-msgstr "Скоригувати «лівий» кінець паралельної"
-
-#: ../src/live_effects/lpe-parallel.cpp:108
-msgid "Adjust the \"right\" end of the parallel"
-msgstr "Скоригувати «правий» кінець паралельної"
-
-#: ../src/live_effects/lpe-path_length.cpp:26
-#: ../src/live_effects/lpe-sketch.cpp:58
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2869
-#: ../share/extensions/render_alphabetsoup.inx.h:3
-msgid "Scale:"
-msgstr "Масштаб:"
-
-#: ../src/live_effects/lpe-path_length.cpp:26
-msgid "Scaling factor"
-msgstr "Коефіцієнт масштабування"
-
-#: ../src/live_effects/lpe-path_length.cpp:28
-#: ../src/live_effects/lpe-ruler.cpp:42
-#: ../share/extensions/foldablebox.inx.h:7
-#: ../share/extensions/interp_att_g.inx.h:9
-#: ../share/extensions/layout_nup.inx.h:3
-#: ../share/extensions/printing_marks.inx.h:11
-msgid "Unit:"
-msgstr "Одиниця:"
-
-#: ../src/live_effects/lpe-path_length.cpp:28
-#: ../src/live_effects/lpe-ruler.cpp:42 ../src/widgets/ruler.cpp:201
-msgid "Unit"
-msgstr "Одиниця"
-
-#: ../src/live_effects/lpe-path_length.cpp:29
-msgid "Display unit"
-msgstr "Одиниця показу"
-
-#: ../src/live_effects/lpe-path_length.cpp:29
-msgid "Print unit after path length"
-msgstr "Показувати одиницю поряд з довжиною контуру"
-
#: ../src/live_effects/lpe-patternalongpath.cpp:50
#: ../share/extensions/pathalongpath.inx.h:10
msgid "Single"
@@ -11199,55 +10742,6 @@ msgid "Fuse ends closer than this number. 0 means don't fuse."
msgstr ""
"Об'єднувати кінці, ближчі за вказане значення. 0 означає «не об'єднувати»."
-#. initialise your parameters here:
-#: ../src/live_effects/lpe-perspective_path.cpp:47
-msgid "Scale x"
-msgstr "Масштаб за x"
-
-#: ../src/live_effects/lpe-perspective_path.cpp:47
-msgid "Scale factor in x direction"
-msgstr "Коефіцієнт масштабування у напрямку вісі x"
-
-#: ../src/live_effects/lpe-perspective_path.cpp:48
-msgid "Scale y"
-msgstr "Масштаб за y"
-
-#: ../src/live_effects/lpe-perspective_path.cpp:48
-msgid "Scale factor in y direction"
-msgstr "Коефіцієнт масштабування у напрямку вісі y"
-
-#: ../src/live_effects/lpe-perspective_path.cpp:49
-msgid "Offset x"
-msgstr "Зміщення за x"
-
-#: ../src/live_effects/lpe-perspective_path.cpp:49
-msgid "Offset in x direction"
-msgstr "Зміщення у напрямку вісі x"
-
-#: ../src/live_effects/lpe-perspective_path.cpp:50
-msgid "Offset y"
-msgstr "Зміщення за y"
-
-#: ../src/live_effects/lpe-perspective_path.cpp:50
-msgid "Offset in y direction"
-msgstr "Зміщення у напрямку вісі y"
-
-#: ../src/live_effects/lpe-perspective_path.cpp:51
-msgid "Uses XY plane?"
-msgstr "Використовує площину XY?"
-
-#: ../src/live_effects/lpe-perspective_path.cpp:51
-msgid ""
-"If true, put the path on the left side of an imaginary box, otherwise on the "
-"right side"
-msgstr ""
-"Якщо буде позначено, розташувати контур на лівому боці уявного прямокутника, "
-"інакше його буде розташовано на правому боці"
-
-#: ../src/live_effects/lpe-perspective_path.cpp:145
-msgid "Adjust the origin"
-msgstr "Корекція центру"
-
#: ../src/live_effects/lpe-powerstroke.cpp:189
msgid "CubicBezierFit"
msgstr "Кубічний Безьє з коригуванням"
@@ -11268,6 +10762,11 @@ msgstr "Обрізок"
msgid "Square"
msgstr "Квадрат"
+#: ../src/live_effects/lpe-powerstroke.cpp:205
+#: ../share/extensions/gcodetools_prepare_path_for_plasma.inx.h:13
+msgid "Round"
+msgstr "Округлені"
+
#: ../src/live_effects/lpe-powerstroke.cpp:206
msgid "Peak"
msgstr "Пік"
@@ -11281,7 +10780,7 @@ msgid "Beveled"
msgstr "З фаскою"
#: ../src/live_effects/lpe-powerstroke.cpp:221
-#: ../src/widgets/star-toolbar.cpp:542
+#: ../src/widgets/star-toolbar.cpp:534
msgid "Rounded"
msgstr "Округленість"
@@ -11294,7 +10793,7 @@ msgid "Miter"
msgstr "Накласти"
#: ../src/live_effects/lpe-powerstroke.cpp:224
-#: ../src/widgets/pencil-toolbar.cpp:132
+#: ../src/widgets/pencil-toolbar.cpp:103
msgid "Spiro"
msgstr "Криві Спіро"
@@ -11353,7 +10852,7 @@ msgstr "Визначає форму початку контуру"
#. TRANSLATORS: The line join style specifies the shape to be used at the
#. corners of paths. It can be "miter", "round" or "bevel".
#: ../src/live_effects/lpe-powerstroke.cpp:238
-#: ../src/widgets/stroke-style.cpp:226
+#: ../src/widgets/stroke-style.cpp:227
msgid "Join:"
msgstr "З'єднання:"
@@ -11366,7 +10865,7 @@ msgid "Miter limit:"
msgstr "Межа вістря:"
#: ../src/live_effects/lpe-powerstroke.cpp:239
-#: ../src/widgets/stroke-style.cpp:277
+#: ../src/widgets/stroke-style.cpp:278
msgid "Maximum length of the miter (in units of stroke width)"
msgstr "Найбільша довжина вістря (у одиницях товщини штриха)"
@@ -11378,14 +10877,6 @@ msgstr "Кінець:"
msgid "Determines the shape of the path's end"
msgstr "Визначає форму кінця контуру"
-#: ../src/live_effects/lpe-recursiveskeleton.cpp:30
-msgid "Iterations:"
-msgstr "Ітерацій:"
-
-#: ../src/live_effects/lpe-recursiveskeleton.cpp:30
-msgid "recursivity"
-msgstr "повторюваність"
-
#: ../src/live_effects/lpe-rough-hatches.cpp:225
msgid "Frequency randomness:"
msgstr "Випадковість частоти:"
@@ -11589,11 +11080,11 @@ msgstr "Праворуч"
msgid "Both"
msgstr "Обидва"
-#: ../src/live_effects/lpe-ruler.cpp:33 ../src/widgets/arc-toolbar.cpp:336
+#: ../src/live_effects/lpe-ruler.cpp:33 ../src/widgets/arc-toolbar.cpp:326
msgid "Start"
msgstr "Початок"
-#: ../src/live_effects/lpe-ruler.cpp:34 ../src/widgets/arc-toolbar.cpp:349
+#: ../src/live_effects/lpe-ruler.cpp:34 ../src/widgets/arc-toolbar.cpp:339
msgid "End"
msgstr "Кінець"
@@ -11605,6 +11096,18 @@ msgstr "Ві_дстань між позначками:"
msgid "Distance between successive ruler marks"
msgstr "Відстань між послідовними позначками на лінійці"
+#: ../src/live_effects/lpe-ruler.cpp:42
+#: ../share/extensions/foldablebox.inx.h:7
+#: ../share/extensions/interp_att_g.inx.h:9
+#: ../share/extensions/layout_nup.inx.h:3
+#: ../share/extensions/printing_marks.inx.h:11
+msgid "Unit:"
+msgstr "Одиниця:"
+
+#: ../src/live_effects/lpe-ruler.cpp:42 ../src/widgets/ruler.cpp:201
+msgid "Unit"
+msgstr "Одиниця"
+
#: ../src/live_effects/lpe-ruler.cpp:43
msgid "Ma_jor length:"
msgstr "_Основна довжина:"
@@ -11662,15 +11165,6 @@ msgid "Choose whether to draw marks at the beginning and end of the path"
msgstr "Оберіть, чи малювати позначки на початку і у кінці контуру"
#. initialise your parameters here:
-#: ../src/live_effects/lpe-skeleton.cpp:37
-msgid "Float parameter"
-msgstr "Дійсний параметр"
-
-#: ../src/live_effects/lpe-skeleton.cpp:37
-msgid "just a real number like 1.4!"
-msgstr "просто дійсне число, наприклад 1.4!"
-
-#. initialise your parameters here:
#. testpointA(_("Test Point A"), _("Test A"), "ptA", &wr, this, Geom::Point(100,100)),
#: ../src/live_effects/lpe-sketch.cpp:38
msgid "Strokes:"
@@ -11758,6 +11252,12 @@ msgstr "Ліній побудови:"
msgid "How many construction lines (tangents) to draw"
msgstr "Кількість ліній побудови (дотичних) для малювання"
+#: ../src/live_effects/lpe-sketch.cpp:58
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2878
+#: ../share/extensions/render_alphabetsoup.inx.h:3
+msgid "Scale:"
+msgstr "Масштаб:"
+
#: ../src/live_effects/lpe-sketch.cpp:59
msgid ""
"Scale factor relating curvature and length of construction lines (try "
@@ -11807,62 +11307,6 @@ msgstr "k_max:"
msgid "max curvature"
msgstr "максимальна кривина"
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:61
-msgid "Additional angle between tangent and curve"
-msgstr "Додатковий кут між дотичною і кривою"
-
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:62
-msgid "Location along curve:"
-msgstr "Місце на кривій:"
-
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:62
-msgid ""
-"Location of the point of attachment along the curve (between 0.0 and number-"
-"of-segments)"
-msgstr ""
-"Розташування точки дотику вздовж кривої (значення між 0.0 і кількістю "
-"сегментів)"
-
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:63
-msgid "Specifies the left end of the tangent"
-msgstr "Визначає лівий кінець дотичної"
-
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:64
-msgid "Specifies the right end of the tangent"
-msgstr "Визначає правий кінець дотичної"
-
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:105
-msgid "Adjust the point of attachment of the tangent"
-msgstr "Скоригувати точку дотику дотичної"
-
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:111
-msgid "Adjust the \"left\" end of the tangent"
-msgstr "Скоригувати «лівий» кінець дотичної"
-
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:117
-msgid "Adjust the \"right\" end of the tangent"
-msgstr "Скоригувати «правий» кінець дотичної"
-
-#: ../src/live_effects/lpe-test-doEffect-stack.cpp:22
-msgid "Stack step:"
-msgstr "Крок стосу:"
-
-#: ../src/live_effects/lpe-test-doEffect-stack.cpp:23
-msgid "Point param:"
-msgstr "Параметр точки:"
-
-#: ../src/live_effects/lpe-test-doEffect-stack.cpp:24
-msgid "Path param:"
-msgstr "Параметр контуру:"
-
-#: ../src/live_effects/lpe-text_label.cpp:23
-msgid "Label:"
-msgstr "Мітка:"
-
-#: ../src/live_effects/lpe-text_label.cpp:23
-msgid "Text label attached to the path"
-msgstr "Текстова мітка, з’єднана з цим контуром"
-
#: ../src/live_effects/lpe-vonkoch.cpp:47
msgid "N_r of generations:"
msgstr "Кі_лькість поколінь:"
@@ -12107,7 +11551,7 @@ msgid "The ID of the object to export"
msgstr "Ідентифікатор об'єкта, що експортується"
#: ../src/main.cpp:366 ../src/main.cpp:479
-#: ../src/ui/dialog/inkscape-preferences.cpp:1498
+#: ../src/ui/dialog/inkscape-preferences.cpp:1503
msgid "ID"
msgstr "Ідентифікатор"
@@ -12303,7 +11747,7 @@ msgstr "ІД-ОБ'ЄКТА"
msgid "Start Inkscape in interactive shell mode."
msgstr "Запустити Inkscape у режимі інтерактивної оболонки."
-#: ../src/main.cpp:871 ../src/main.cpp:1270
+#: ../src/main.cpp:871 ../src/main.cpp:1282
msgid ""
"[OPTIONS...] [FILE...]\n"
"\n"
@@ -12324,11 +11768,11 @@ msgstr "_Створити"
#. " <verb verb-id=\"FileExportToOCAL\" />\n"
#. " <verb verb-id=\"DialogMetadata\" />\n"
-#: ../src/menus-skeleton.h:43 ../src/verbs.cpp:2638 ../src/verbs.cpp:2644
+#: ../src/menus-skeleton.h:43 ../src/verbs.cpp:2631 ../src/verbs.cpp:2637
msgid "_Edit"
msgstr "_Зміни"
-#: ../src/menus-skeleton.h:53 ../src/verbs.cpp:2402
+#: ../src/menus-skeleton.h:53 ../src/verbs.cpp:2395
msgid "Paste Si_ze"
msgstr "Вставити за р_озміром"
@@ -12362,54 +11806,54 @@ msgstr "Режим показу _кольорів"
#. Better location in menu needs to be found
#. " <verb verb-id=\"ViewColorModePrintColorsPreview\" radio=\"yes\"/>\n"
#. " <verb verb-id=\"DialogPrintColorsPreview\" />\n"
-#: ../src/menus-skeleton.h:137
+#: ../src/menus-skeleton.h:136
msgid "Sh_ow/Hide"
msgstr "По_казати/Сховати"
#. Not quite ready to be in the menus.
#. " <verb verb-id=\"FocusToggle\" />\n"
-#: ../src/menus-skeleton.h:157
+#: ../src/menus-skeleton.h:156
msgid "_Layer"
msgstr "_Шар"
-#: ../src/menus-skeleton.h:181
+#: ../src/menus-skeleton.h:180
msgid "_Object"
msgstr "_Об'єкт"
-#: ../src/menus-skeleton.h:189
+#: ../src/menus-skeleton.h:188
msgid "Cli_p"
msgstr "Відсі_кання"
-#: ../src/menus-skeleton.h:193
+#: ../src/menus-skeleton.h:192
msgid "Mas_k"
msgstr "Ма_ска"
-#: ../src/menus-skeleton.h:197
+#: ../src/menus-skeleton.h:196
msgid "Patter_n"
msgstr "В_ізерунок"
-#: ../src/menus-skeleton.h:221
+#: ../src/menus-skeleton.h:220
msgid "_Path"
msgstr "_Контур"
-#: ../src/menus-skeleton.h:249 ../src/ui/dialog/find.cpp:77
+#: ../src/menus-skeleton.h:248 ../src/ui/dialog/find.cpp:77
#: ../src/ui/dialog/text-edit.cpp:72
msgid "_Text"
msgstr "_Текст"
-#: ../src/menus-skeleton.h:267
+#: ../src/menus-skeleton.h:266
msgid "Filter_s"
msgstr "Філ_ьтри"
-#: ../src/menus-skeleton.h:273
+#: ../src/menus-skeleton.h:272
msgid "Exte_nsions"
msgstr "Дод_атки"
-#: ../src/menus-skeleton.h:279
+#: ../src/menus-skeleton.h:278
msgid "_Help"
msgstr "_Довідка"
-#: ../src/menus-skeleton.h:283
+#: ../src/menus-skeleton.h:282
msgid "Tutorials"
msgstr "Підручники"
@@ -12534,59 +11978,59 @@ msgstr "Оберіть <b>об'єкт(и)</b> для комбінування."
msgid "Combining paths..."
msgstr "Сполучення контурів…"
-#: ../src/path-chemistry.cpp:175
+#: ../src/path-chemistry.cpp:170
msgid "Combine"
msgstr "Об'єднання"
-#: ../src/path-chemistry.cpp:182
+#: ../src/path-chemistry.cpp:177
msgid "<b>No path(s)</b> to combine in the selection."
msgstr "<b>Не вказано контурів</b> для комбінування у вибраному."
-#: ../src/path-chemistry.cpp:194
+#: ../src/path-chemistry.cpp:189
msgid "Select <b>path(s)</b> to break apart."
msgstr "Виберіть <b>контур(и)</b> для розділення."
-#: ../src/path-chemistry.cpp:198
+#: ../src/path-chemistry.cpp:193
msgid "Breaking apart paths..."
msgstr "Поділ контурів на частини…"
-#: ../src/path-chemistry.cpp:289
+#: ../src/path-chemistry.cpp:284
msgid "Break apart"
msgstr "Розділення"
-#: ../src/path-chemistry.cpp:291
+#: ../src/path-chemistry.cpp:286
msgid "<b>No path(s)</b> to break apart in the selection."
msgstr "У позначеному <b>немає контурів</b>, що можуть розділитись."
-#: ../src/path-chemistry.cpp:301
+#: ../src/path-chemistry.cpp:296
msgid "Select <b>object(s)</b> to convert to path."
msgstr "Позначте <b>об'єкти</b> для перетворення у контур."
-#: ../src/path-chemistry.cpp:307
+#: ../src/path-chemistry.cpp:302
msgid "Converting objects to paths..."
msgstr "Перетворення об'єктів на контури…"
-#: ../src/path-chemistry.cpp:329
+#: ../src/path-chemistry.cpp:324
msgid "Object to path"
msgstr "Об'єкт у контур"
-#: ../src/path-chemistry.cpp:331
+#: ../src/path-chemistry.cpp:326
msgid "<b>No objects</b> to convert to path in the selection."
msgstr "У позначеному <b>немає об'єктів</b>, що перетворюються у контур."
-#: ../src/path-chemistry.cpp:608
+#: ../src/path-chemistry.cpp:603
msgid "Select <b>path(s)</b> to reverse."
msgstr "Виберіть <b>контур(и)</b> для зміни напряму."
-#: ../src/path-chemistry.cpp:617
+#: ../src/path-chemistry.cpp:612
msgid "Reversing paths..."
msgstr "Розвертання контурів…"
-#: ../src/path-chemistry.cpp:652
+#: ../src/path-chemistry.cpp:647
msgid "Reverse path"
msgstr "Розвернути контур"
-#: ../src/path-chemistry.cpp:654
+#: ../src/path-chemistry.cpp:649
msgid "<b>No paths</b> to reverse in the selection."
msgstr "У позначеному <b>немає контурів</b> для зміни напряму."
@@ -12598,6 +12042,30 @@ msgstr "Перемикання точки сходу"
msgid "Toggle multiple vanishing points"
msgstr "Перемикання декількох точок сходу"
+#: ../src/preferences-skeleton.h:101
+msgid "Dip pen"
+msgstr "Крапання"
+
+#: ../src/preferences-skeleton.h:102
+msgid "Marker"
+msgstr "Маркер"
+
+#: ../src/preferences-skeleton.h:103
+msgid "Brush"
+msgstr "Пензель"
+
+#: ../src/preferences-skeleton.h:104
+msgid "Wiggly"
+msgstr "Погойдування"
+
+#: ../src/preferences-skeleton.h:105
+msgid "Splotchy"
+msgstr "Плямиста"
+
+#: ../src/preferences-skeleton.h:106
+msgid "Tracing"
+msgstr "Трасування"
+
#: ../src/preferences.cpp:134
msgid ""
"Inkscape will run with default settings, and new settings will not be saved. "
@@ -12649,30 +12117,6 @@ msgstr "Файл налаштувань %s не є коректним докум
msgid "The file %s is not a valid Inkscape preferences file."
msgstr "Файл %s не є коректним файлом налаштувань Inkscape."
-#: ../src/preferences-skeleton.h:101
-msgid "Dip pen"
-msgstr "Крапання"
-
-#: ../src/preferences-skeleton.h:102
-msgid "Marker"
-msgstr "Маркер"
-
-#: ../src/preferences-skeleton.h:103
-msgid "Brush"
-msgstr "Пензель"
-
-#: ../src/preferences-skeleton.h:104
-msgid "Wiggly"
-msgstr "Погойдування"
-
-#: ../src/preferences-skeleton.h:105
-msgid "Splotchy"
-msgstr "Плямиста"
-
-#: ../src/preferences-skeleton.h:106
-msgid "Tracing"
-msgstr "Трасування"
-
#: ../src/rdf.cpp:175
msgid "CC Attribution"
msgstr "CC Attribution"
@@ -12785,7 +12229,7 @@ msgstr "Зв'язок:"
msgid "A related resource"
msgstr "Пов’язаний ресурс"
-#: ../src/rdf.cpp:267 ../src/ui/dialog/inkscape-preferences.cpp:1850
+#: ../src/rdf.cpp:267 ../src/ui/dialog/inkscape-preferences.cpp:1855
msgid "Language:"
msgstr "Мова:"
@@ -12856,268 +12300,274 @@ msgstr "XML-фрагмент RDF-розділу «Ліцензія»"
msgid "Fixup broken links"
msgstr "Виправлення помилкових посилань"
-#: ../src/selection-chemistry.cpp:395
+#: ../src/selection-chemistry.cpp:396
msgid "Delete text"
msgstr "Вилучити текст"
-#: ../src/selection-chemistry.cpp:403
+#: ../src/selection-chemistry.cpp:404
msgid "<b>Nothing</b> was deleted."
msgstr "<b>Нічого</b> не було вилучено."
-#: ../src/selection-chemistry.cpp:422
+#: ../src/selection-chemistry.cpp:423
#: ../src/ui/dialog/calligraphic-profile-rename.cpp:75
-#: ../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
-#: ../src/widgets/gradient-toolbar.cpp:1224
-#: ../src/widgets/node-toolbar.cpp:414
+#: ../src/ui/dialog/swatches.cpp:278 ../src/ui/tools/text-tool.cpp:974
+#: ../src/widgets/eraser-toolbar.cpp:93
+#: ../src/widgets/gradient-toolbar.cpp:1180
+#: ../src/widgets/gradient-toolbar.cpp:1194
+#: ../src/widgets/gradient-toolbar.cpp:1208
+#: ../src/widgets/node-toolbar.cpp:401
msgid "Delete"
msgstr "Вилучити"
-#: ../src/selection-chemistry.cpp:450
+#: ../src/selection-chemistry.cpp:451
msgid "Select <b>object(s)</b> to duplicate."
msgstr "Позначте <b>об'єкт(и)</b> для дублювання."
-#: ../src/selection-chemistry.cpp:559
+#: ../src/selection-chemistry.cpp:560
msgid "Delete all"
msgstr "Вилучити все"
-#: ../src/selection-chemistry.cpp:749
+#: ../src/selection-chemistry.cpp:750
msgid "Select <b>some objects</b> to group."
msgstr "Позначте <b>два або більше об'єктів</b> для групування."
-#: ../src/selection-chemistry.cpp:764 ../src/sp-item-group.cpp:331
+#: ../src/selection-chemistry.cpp:765 ../src/sp-item-group.cpp:331
msgid "Group"
msgstr "Згрупувати"
-#: ../src/selection-chemistry.cpp:773
+#: ../src/selection-chemistry.cpp:788
msgid "Select a <b>group</b> to ungroup."
msgstr "Позначте <b>групу</b> для розгрупування."
-#: ../src/selection-chemistry.cpp:816
+#: ../src/selection-chemistry.cpp:803
msgid "<b>No groups</b> to ungroup in the selection."
msgstr "У позначеному <b>немає груп</b>."
-#: ../src/selection-chemistry.cpp:822 ../src/sp-item-group.cpp:564
+#: ../src/selection-chemistry.cpp:861 ../src/sp-item-group.cpp:564
msgid "Ungroup"
msgstr "Розгрупувати"
-#: ../src/selection-chemistry.cpp:903
+#: ../src/selection-chemistry.cpp:942
msgid "Select <b>object(s)</b> to raise."
msgstr "Оберіть <b>об'єкт(и)</b> для підняття."
-#: ../src/selection-chemistry.cpp:909 ../src/selection-chemistry.cpp:965
-#: ../src/selection-chemistry.cpp:993 ../src/selection-chemistry.cpp:1054
+#: ../src/selection-chemistry.cpp:948 ../src/selection-chemistry.cpp:1004
+#: ../src/selection-chemistry.cpp:1032 ../src/selection-chemistry.cpp:1093
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:949
+#: ../src/selection-chemistry.cpp:988
msgctxt "Undo action"
msgid "Raise"
msgstr "підняття"
-#: ../src/selection-chemistry.cpp:957
+#: ../src/selection-chemistry.cpp:996
msgid "Select <b>object(s)</b> to raise to top."
msgstr "Позначте <b>об'єкт(и)</b> для піднімання нагору."
-#: ../src/selection-chemistry.cpp:980
+#: ../src/selection-chemistry.cpp:1019
msgid "Raise to top"
msgstr "Підняти на передній план"
-#: ../src/selection-chemistry.cpp:987
+#: ../src/selection-chemistry.cpp:1026
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:1038
+#: ../src/selection-chemistry.cpp:1077
msgctxt "Undo action"
msgid "Lower"
msgstr "опускання"
-#: ../src/selection-chemistry.cpp:1046
+#: ../src/selection-chemistry.cpp:1085
msgid "Select <b>object(s)</b> to lower to bottom."
msgstr "Позначте <b>об'єкт(и)</b> для опускання на низ."
-#: ../src/selection-chemistry.cpp:1081
+#: ../src/selection-chemistry.cpp:1120
msgid "Lower to bottom"
msgstr "Опустити на задній план"
-#: ../src/selection-chemistry.cpp:1091
+#: ../src/selection-chemistry.cpp:1130
msgid "Nothing to undo."
msgstr "Немає операцій, що можна скасувати."
-#: ../src/selection-chemistry.cpp:1102
+#: ../src/selection-chemistry.cpp:1141
msgid "Nothing to redo."
msgstr "Немає операцій, що можна вернути."
-#: ../src/selection-chemistry.cpp:1169
+#: ../src/selection-chemistry.cpp:1208
msgid "Paste"
msgstr "Вставити"
-#: ../src/selection-chemistry.cpp:1177
+#: ../src/selection-chemistry.cpp:1216
msgid "Paste style"
msgstr "Вставити стиль"
-#: ../src/selection-chemistry.cpp:1187
+#: ../src/selection-chemistry.cpp:1226
msgid "Paste live path effect"
msgstr "Вставити ефект динамічного контуру"
-#: ../src/selection-chemistry.cpp:1209
+#: ../src/selection-chemistry.cpp:1248
msgid "Select <b>object(s)</b> to remove live path effects from."
msgstr "Оберіть <b>об'єкт(и)</b> для вилучення анімованих ефектів контурів."
-#: ../src/selection-chemistry.cpp:1221
+#: ../src/selection-chemistry.cpp:1260
msgid "Remove live path effect"
msgstr "Вилучити анімований ефект контуру"
-#: ../src/selection-chemistry.cpp:1232
+#: ../src/selection-chemistry.cpp:1271
msgid "Select <b>object(s)</b> to remove filters from."
msgstr "Виберіть <b>об'єкт(и)</b>, з яких слід вилучити фільтри."
-#: ../src/selection-chemistry.cpp:1242
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1669
+#: ../src/selection-chemistry.cpp:1281
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1678
msgid "Remove filter"
msgstr "Вилучити фільтр"
-#: ../src/selection-chemistry.cpp:1251
+#: ../src/selection-chemistry.cpp:1290
msgid "Paste size"
msgstr "Вставити розмір"
-#: ../src/selection-chemistry.cpp:1260
+#: ../src/selection-chemistry.cpp:1299
msgid "Paste size separately"
msgstr "Вставити розмір окремо"
-#: ../src/selection-chemistry.cpp:1270
+#: ../src/selection-chemistry.cpp:1309
msgid "Select <b>object(s)</b> to move to the layer above."
msgstr "Позначте <b>об'єкти</b> для переміщення на шар вище."
-#: ../src/selection-chemistry.cpp:1296
+#: ../src/selection-chemistry.cpp:1335
msgid "Raise to next layer"
msgstr "Піднятися на наступний шар"
-#: ../src/selection-chemistry.cpp:1303
+#: ../src/selection-chemistry.cpp:1342
msgid "No more layers above."
msgstr "Більше немає вищих шарів."
-#: ../src/selection-chemistry.cpp:1315
+#: ../src/selection-chemistry.cpp:1354
msgid "Select <b>object(s)</b> to move to the layer below."
msgstr "Позначте <b>об'єкти</b> для переміщення на шар нижче."
-#: ../src/selection-chemistry.cpp:1341
+#: ../src/selection-chemistry.cpp:1380
msgid "Lower to previous layer"
msgstr "Опуститися на попередній шар"
-#: ../src/selection-chemistry.cpp:1348
+#: ../src/selection-chemistry.cpp:1387
msgid "No more layers below."
msgstr "Немає нижчого шару."
-#: ../src/selection-chemistry.cpp:1360
+#: ../src/selection-chemistry.cpp:1399
msgid "Select <b>object(s)</b> to move."
msgstr "Позначте <b>об'єкти</b> для пересування."
-#: ../src/selection-chemistry.cpp:1377 ../src/verbs.cpp:2581
+#: ../src/selection-chemistry.cpp:1416 ../src/verbs.cpp:2574
msgid "Move selection to layer"
msgstr "Пересунути позначене до шару"
-#: ../src/selection-chemistry.cpp:1601
+#. An SVG element cannot have a transform. We could change 'x' and 'y' in response
+#. to a translation... but leave that for another day.
+#: ../src/selection-chemistry.cpp:1503 ../src/seltrans.cpp:387
+msgid "Cannot transform an embedded SVG."
+msgstr "Перетворення вбудованого SVG неможливе."
+
+#: ../src/selection-chemistry.cpp:1647
msgid "Remove transform"
msgstr "Прибрати трансформацію"
-#: ../src/selection-chemistry.cpp:1704
-msgid "Rotate 90&#176; CCW"
-msgstr "Обернути на 90&#176; проти годинникової стрілки"
+#: ../src/selection-chemistry.cpp:1750
+msgid "Rotate 90° CCW"
+msgstr "Обернути на 90° проти годинникової стрілки"
-#: ../src/selection-chemistry.cpp:1704
-msgid "Rotate 90&#176; CW"
-msgstr "Обернути на 90&#176; за годинниковою стрілкою"
+#: ../src/selection-chemistry.cpp:1750
+msgid "Rotate 90° CW"
+msgstr "Обернути на 90° за годинниковою стрілкою"
-#: ../src/selection-chemistry.cpp:1725 ../src/seltrans.cpp:468
+#: ../src/selection-chemistry.cpp:1771 ../src/seltrans.cpp:474
#: ../src/ui/dialog/transformation.cpp:894
msgid "Rotate"
msgstr "Обертати"
-#: ../src/selection-chemistry.cpp:2104
+#: ../src/selection-chemistry.cpp:2142
msgid "Rotate by pixels"
msgstr "Обертати поточково"
-#: ../src/selection-chemistry.cpp:2134 ../src/seltrans.cpp:465
+#: ../src/selection-chemistry.cpp:2172 ../src/seltrans.cpp:471
#: ../src/ui/dialog/transformation.cpp:869
#: ../share/extensions/interp_att_g.inx.h:12
msgid "Scale"
msgstr "Масштабувати"
-#: ../src/selection-chemistry.cpp:2159
+#: ../src/selection-chemistry.cpp:2197
msgid "Scale by whole factor"
msgstr "Масштабувати за повним коефіцієнтом"
-#: ../src/selection-chemistry.cpp:2174
+#: ../src/selection-chemistry.cpp:2212
msgid "Move vertically"
msgstr "Перемістити вертикально"
-#: ../src/selection-chemistry.cpp:2177
+#: ../src/selection-chemistry.cpp:2215
msgid "Move horizontally"
msgstr "Перемістити горизонтально"
-#: ../src/selection-chemistry.cpp:2180 ../src/selection-chemistry.cpp:2206
-#: ../src/seltrans.cpp:462 ../src/ui/dialog/transformation.cpp:807
+#: ../src/selection-chemistry.cpp:2218 ../src/selection-chemistry.cpp:2244
+#: ../src/seltrans.cpp:468 ../src/ui/dialog/transformation.cpp:807
msgid "Move"
msgstr "Перемістити"
-#: ../src/selection-chemistry.cpp:2200
+#: ../src/selection-chemistry.cpp:2238
msgid "Move vertically by pixels"
msgstr "Перемістити вертикально поточково"
-#: ../src/selection-chemistry.cpp:2203
+#: ../src/selection-chemistry.cpp:2241
msgid "Move horizontally by pixels"
msgstr "Перемістити горизонтально поточково"
-#: ../src/selection-chemistry.cpp:2335
+#: ../src/selection-chemistry.cpp:2373
msgid "The selection has no applied path effect."
msgstr "Обране не має застосованого ефекту контуру."
-#: ../src/selection-chemistry.cpp:2504 ../src/ui/dialog/clonetiler.cpp:2218
+#: ../src/selection-chemistry.cpp:2542 ../src/ui/dialog/clonetiler.cpp:2218
msgid "Select an <b>object</b> to clone."
msgstr "Позначте <b>об'єкт</b> для клонування."
-#: ../src/selection-chemistry.cpp:2540
+#: ../src/selection-chemistry.cpp:2578
msgctxt "Action"
msgid "Clone"
msgstr "Клонувати"
-#: ../src/selection-chemistry.cpp:2556
+#: ../src/selection-chemistry.cpp:2594
msgid "Select <b>clones</b> to relink."
msgstr "Позначте <b>клон</b> для перез'єднання."
-#: ../src/selection-chemistry.cpp:2563
+#: ../src/selection-chemistry.cpp:2601
msgid "Copy an <b>object</b> to clipboard to relink clones to."
msgstr ""
"Копіювати <b>об'єкт</b> до буфера обміну інформації для перез'єднання клонів."
-#: ../src/selection-chemistry.cpp:2587
+#: ../src/selection-chemistry.cpp:2625
msgid "<b>No clones to relink</b> in the selection."
msgstr "У позначеному <b>немає клонів для перез'єднання</b>."
-#: ../src/selection-chemistry.cpp:2590
+#: ../src/selection-chemistry.cpp:2628
msgid "Relink clone"
msgstr "Перез'єднати клон"
-#: ../src/selection-chemistry.cpp:2604
+#: ../src/selection-chemistry.cpp:2642
msgid "Select <b>clones</b> to unlink."
msgstr "Позначте <b>клон</b> для від'єднання."
-#: ../src/selection-chemistry.cpp:2658
+#: ../src/selection-chemistry.cpp:2696
msgid "<b>No clones to unlink</b> in the selection."
msgstr "У позначеному <b>немає клонів</b>."
-#: ../src/selection-chemistry.cpp:2662
+#: ../src/selection-chemistry.cpp:2700
msgid "Unlink clone"
msgstr "Від'єднати клон"
-#: ../src/selection-chemistry.cpp:2675
+#: ../src/selection-chemistry.cpp:2713
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 "
@@ -13127,7 +12577,7 @@ msgstr ""
"перейти до її контуру; <b>текст вздовж контуру</b>, щоб перейти до його "
"контуру. Позначте <b>текст у рамці</b>, щоб перейти до рамки."
-#: ../src/selection-chemistry.cpp:2708
+#: ../src/selection-chemistry.cpp:2746
msgid ""
"<b>Cannot find</b> the object to select (orphaned clone, offset, textpath, "
"flowed text?)"
@@ -13135,7 +12585,7 @@ msgstr ""
"<b>Не вдається знайти</b> об'єкт, що позначається (осиротілий клон, втяжка, "
"текст вздовж контуру чи текст у рамці?)"
-#: ../src/selection-chemistry.cpp:2714
+#: ../src/selection-chemistry.cpp:2752
msgid ""
"The object you're trying to select is <b>not visible</b> (it is in &lt;"
"defs&gt;)"
@@ -13143,135 +12593,132 @@ msgstr ""
"Об'єкт, який ви намагаєтесь позначити, є <b>невидимим</b> (знаходиться у &lt;"
"defs&gt;)"
-#: ../src/selection-chemistry.cpp:2759
+#: ../src/selection-chemistry.cpp:2797
msgid "Select <b>one</b> path to clone."
msgstr "Позначте <b>один</b> контур для клонування."
-#: ../src/selection-chemistry.cpp:2763
+#: ../src/selection-chemistry.cpp:2801
msgid "Select one <b>path</b> to clone."
msgstr "Позначте один <b>контур</b> для клонування."
-#: ../src/selection-chemistry.cpp:2819
+#: ../src/selection-chemistry.cpp:2857
msgid "Select <b>object(s)</b> to convert to marker."
msgstr "Позначте <b>об'єкт(и)</b> для перетворення у маркер."
-#: ../src/selection-chemistry.cpp:2886
+#: ../src/selection-chemistry.cpp:2924
msgid "Objects to marker"
msgstr "Об'єкти у маркер"
-#: ../src/selection-chemistry.cpp:2910
+#: ../src/selection-chemistry.cpp:2948
msgid "Select <b>object(s)</b> to convert to guides."
msgstr "Позначте <b>об'єкт(и)</b> для перетворення у напрямні."
-#: ../src/selection-chemistry.cpp:2933
+#: ../src/selection-chemistry.cpp:2971
msgid "Objects to guides"
msgstr "Об'єкти у напрямні"
-#: ../src/selection-chemistry.cpp:2952
-msgid "Select <b>groups</b> to convert to symbols."
-msgstr "Позначте <b>групи</b> для перетворення на символи."
-
-#: ../src/selection-chemistry.cpp:2972
-msgid "No <b>groups</b> converted to symbols."
-msgstr "На символи не перетвореною жодної <b>групи</b>."
+#: ../src/selection-chemistry.cpp:3007
+msgid "Select <b>objects</b> to convert to symbol."
+msgstr "Позначте <b>об’єкти</b> для перетворення на символ."
-#. Group just disappears, nothing to select.
-#: ../src/selection-chemistry.cpp:2979
+#: ../src/selection-chemistry.cpp:3113
msgid "Group to symbol"
msgstr "Групу у символ"
-#: ../src/selection-chemistry.cpp:3045
+#: ../src/selection-chemistry.cpp:3132
msgid "Select a <b>symbol</b> to extract objects from."
msgstr "Позначте <b>символ</b> для видобування з нього об’єктів."
-#: ../src/selection-chemistry.cpp:3054
-msgid "Select only one <b>symbol</b> to convert to group."
-msgstr "Позначте лише один <b>символ</b> для перетворення на групу."
+#: ../src/selection-chemistry.cpp:3141
+msgid "Select only one <b>symbol</b> in Symbol dialog to convert to group."
+msgstr ""
+"Позначте лише один <b>символ</b> у діалоговому вікні символів для "
+"перетворення на групу."
-#: ../src/selection-chemistry.cpp:3096
+#: ../src/selection-chemistry.cpp:3199
msgid "Group from symbol"
msgstr "Група з символу"
-#: ../src/selection-chemistry.cpp:3114
+#: ../src/selection-chemistry.cpp:3217
msgid "Select <b>object(s)</b> to convert to pattern."
msgstr "Позначте <b>об'єкт(и)</b> для перетворення у візерунок."
-#: ../src/selection-chemistry.cpp:3204
+#: ../src/selection-chemistry.cpp:3307
msgid "Objects to pattern"
msgstr "Об'єкти у візерунок"
-#: ../src/selection-chemistry.cpp:3220
+#: ../src/selection-chemistry.cpp:3323
msgid "Select an <b>object with pattern fill</b> to extract objects from."
msgstr ""
"Позначте <b>об'єкт із заповненням візерунком</b> для витягування об'єктів з "
"нього."
-#: ../src/selection-chemistry.cpp:3275
+#: ../src/selection-chemistry.cpp:3378
msgid "<b>No pattern fills</b> in the selection."
msgstr "У позначеному <b>немає заповнення візерунком</b>."
-#: ../src/selection-chemistry.cpp:3278
+#: ../src/selection-chemistry.cpp:3381
msgid "Pattern to objects"
msgstr "Візерунок у об'єкти"
-#: ../src/selection-chemistry.cpp:3369
+#: ../src/selection-chemistry.cpp:3472
msgid "Select <b>object(s)</b> to make a bitmap copy."
msgstr "Позначте <b>об'єкти</b> для створення їхньої растрової копії."
-#: ../src/selection-chemistry.cpp:3373
+#: ../src/selection-chemistry.cpp:3476
msgid "Rendering bitmap..."
msgstr "Показ растрового зображення…"
-#: ../src/selection-chemistry.cpp:3552
+#: ../src/selection-chemistry.cpp:3655
msgid "Create bitmap"
msgstr "Створення растрового зображення"
-#: ../src/selection-chemistry.cpp:3584
+#: ../src/selection-chemistry.cpp:3687
msgid "Select <b>object(s)</b> to create clippath or mask from."
msgstr ""
"Оберіть <b>об'єкт(и)</b> для створення з них контуру вирізання або маски."
-#: ../src/selection-chemistry.cpp:3587
+#: ../src/selection-chemistry.cpp:3690
msgid "Select mask object and <b>object(s)</b> to apply clippath or mask to."
msgstr ""
"Оберіть об'єкт-маску та <b>об'єкт(и)</b> для застосування вирізання або "
"маскування."
-#: ../src/selection-chemistry.cpp:3770
+#: ../src/selection-chemistry.cpp:3873
msgid "Set clipping path"
msgstr "Задати контур вирізання"
-#: ../src/selection-chemistry.cpp:3772
+#: ../src/selection-chemistry.cpp:3875
msgid "Set mask"
msgstr "Задати маску"
-#: ../src/selection-chemistry.cpp:3787
+#: ../src/selection-chemistry.cpp:3890
msgid "Select <b>object(s)</b> to remove clippath or mask from."
msgstr ""
"Оберіть <b>об'єкт(и)</b> для вилучення контуру вирізання або маскування."
-#: ../src/selection-chemistry.cpp:3898
+#: ../src/selection-chemistry.cpp:4001
msgid "Release clipping path"
msgstr "Від'єднати закріплений контур"
-#: ../src/selection-chemistry.cpp:3900
+#: ../src/selection-chemistry.cpp:4003
msgid "Release mask"
msgstr "Маску знято"
-#: ../src/selection-chemistry.cpp:3919
+#: ../src/selection-chemistry.cpp:4022
msgid "Select <b>object(s)</b> to fit canvas to."
msgstr "Оберіть <b>об'єкт(и)</b> для підбирання їхніх розмірів під полотно."
#. Fit Page
-#: ../src/selection-chemistry.cpp:3939 ../src/verbs.cpp:2909
+#: ../src/selection-chemistry.cpp:4042 ../src/verbs.cpp:2902
msgid "Fit Page to Selection"
msgstr "Підігнати полотно до позначеної області"
-#: ../src/selection-chemistry.cpp:3968 ../src/verbs.cpp:2911
+#: ../src/selection-chemistry.cpp:4071 ../src/verbs.cpp:2904
msgid "Fit Page to Drawing"
msgstr "Підігнати полотно під намальоване"
-#: ../src/selection-chemistry.cpp:3989 ../src/verbs.cpp:2913
+#: ../src/selection-chemistry.cpp:4092 ../src/verbs.cpp:2906
msgid "Fit Page to Selection or Drawing"
msgstr "Підігнати полотно під позначену область чи область креслення"
@@ -13362,23 +12809,63 @@ msgstr[0] "; <i>%d фільтрований об'єкт</i> "
msgstr[1] "; <i>%d фільтровані об'єкти</i> "
msgstr[2] "; <i>%d фільтрованих об'єктів</i> "
-#: ../src/seltrans.cpp:471 ../src/ui/dialog/transformation.cpp:982
+#: ../src/seltrans-handles.cpp:9
+msgid ""
+"<b>Squeeze or stretch</b> selection; with <b>Ctrl</b> to scale uniformly; "
+"with <b>Shift</b> to scale around rotation center"
+msgstr ""
+"<b>Стиснути чи розтягнути</b> позначені об'єкти; з <b>Ctrl</b> — зберігати "
+"пропорцію; з <b>Shift</b> — навколо центру обертання"
+
+#: ../src/seltrans-handles.cpp:10
+msgid ""
+"<b>Scale</b> selection; with <b>Ctrl</b> to scale uniformly; with <b>Shift</"
+"b> to scale around rotation center"
+msgstr ""
+"<b>Змінювати розмір</b> позначених об'єктів; з <b>Ctrl</b> — зберігати "
+"пропорцію; з <b>Shift</b> — навколо центру обертання"
+
+#: ../src/seltrans-handles.cpp:11
+msgid ""
+"<b>Skew</b> selection; with <b>Ctrl</b> to snap angle; with <b>Shift</b> to "
+"skew around the opposite side"
+msgstr ""
+"<b>Нахилити</b> позначені об'єкти; з <b>Ctrl</b> — обмежувати кут; з "
+"<b>Shift</b> — навколо протилежного кута"
+
+#: ../src/seltrans-handles.cpp:12
+msgid ""
+"<b>Rotate</b> selection; with <b>Ctrl</b> to snap angle; with <b>Shift</b> "
+"to rotate around the opposite corner"
+msgstr ""
+"<b>Обертати</b> позначені об'єкти; з <b>Ctrl</b> — обмежувати кут; з "
+"<b>Shift</b> — навколо протилежного кута"
+
+#: ../src/seltrans-handles.cpp:13
+msgid ""
+"<b>Center</b> of rotation and skewing: drag to reposition; scaling with "
+"Shift also uses this center"
+msgstr ""
+"<b>Центр</b> обертання та нахилу: його можна перетягнути; зміна розміру з "
+"Shift також відбувається навколо нього"
+
+#: ../src/seltrans.cpp:477 ../src/ui/dialog/transformation.cpp:982
msgid "Skew"
msgstr "Нахил"
-#: ../src/seltrans.cpp:483
+#: ../src/seltrans.cpp:489
msgid "Set center"
msgstr "Встановлення центру"
-#: ../src/seltrans.cpp:558
+#: ../src/seltrans.cpp:564
msgid "Stamp"
msgstr "Штамп"
-#: ../src/seltrans.cpp:711
+#: ../src/seltrans.cpp:713
msgid "Reset center"
msgstr "Повернення до початкового центру"
-#: ../src/seltrans.cpp:938 ../src/seltrans.cpp:1035
+#: ../src/seltrans.cpp:940 ../src/seltrans.cpp:1037
#, c-format
msgid "<b>Scale</b>: %0.2f%% x %0.2f%%; with <b>Ctrl</b> to lock ratio"
msgstr ""
@@ -13386,24 +12873,24 @@ msgstr ""
#. TRANSLATORS: don't modify the first ";"
#. (it will NOT be displayed as ";" - only the second one will be)
-#: ../src/seltrans.cpp:1167
+#: ../src/seltrans.cpp:1169
#, c-format
msgid "<b>Skew</b>: %0.2f&#176;; with <b>Ctrl</b> to snap angle"
msgstr "<b>Нахил</b>: %0.2f&#176;; з <b>Ctrl</b> — обмежити кут"
#. TRANSLATORS: don't modify the first ";"
#. (it will NOT be displayed as ";" - only the second one will be)
-#: ../src/seltrans.cpp:1242
+#: ../src/seltrans.cpp:1244
#, c-format
msgid "<b>Rotate</b>: %0.2f&#176;; with <b>Ctrl</b> to snap angle"
msgstr "<b>Обертання</b>: %0.2f&#176;; з <b>Ctrl</b> — обмежити кут"
-#: ../src/seltrans.cpp:1279
+#: ../src/seltrans.cpp:1281
#, c-format
msgid "Move <b>center</b> to %s, %s"
msgstr "Перемістити <b>центр</b> до %s, %s"
-#: ../src/seltrans.cpp:1433
+#: ../src/seltrans.cpp:1435
#, c-format
msgid ""
"<b>Move</b> by %s, %s; with <b>Ctrl</b> to restrict to horizontal/vertical; "
@@ -13412,53 +12899,13 @@ msgstr ""
"<b>Перемістити</b> на %s, %s. <b>Ctrl</b> — лише по горизонталі/вертикалі, "
"<b>Shift</b> — без прилипання"
-#: ../src/seltrans-handles.cpp:9
-msgid ""
-"<b>Squeeze or stretch</b> selection; with <b>Ctrl</b> to scale uniformly; "
-"with <b>Shift</b> to scale around rotation center"
-msgstr ""
-"<b>Стиснути чи розтягнути</b> позначені об'єкти; з <b>Ctrl</b> — зберігати "
-"пропорцію; з <b>Shift</b> — навколо центру обертання"
-
-#: ../src/seltrans-handles.cpp:10
-msgid ""
-"<b>Scale</b> selection; with <b>Ctrl</b> to scale uniformly; with <b>Shift</"
-"b> to scale around rotation center"
-msgstr ""
-"<b>Змінювати розмір</b> позначених об'єктів; з <b>Ctrl</b> — зберігати "
-"пропорцію; з <b>Shift</b> — навколо центру обертання"
-
-#: ../src/seltrans-handles.cpp:11
-msgid ""
-"<b>Skew</b> selection; with <b>Ctrl</b> to snap angle; with <b>Shift</b> to "
-"skew around the opposite side"
-msgstr ""
-"<b>Нахилити</b> позначені об'єкти; з <b>Ctrl</b> — обмежувати кут; з "
-"<b>Shift</b> — навколо протилежного кута"
-
-#: ../src/seltrans-handles.cpp:12
-msgid ""
-"<b>Rotate</b> selection; with <b>Ctrl</b> to snap angle; with <b>Shift</b> "
-"to rotate around the opposite corner"
-msgstr ""
-"<b>Обертати</b> позначені об'єкти; з <b>Ctrl</b> — обмежувати кут; з "
-"<b>Shift</b> — навколо протилежного кута"
-
-#: ../src/seltrans-handles.cpp:13
-msgid ""
-"<b>Center</b> of rotation and skewing: drag to reposition; scaling with "
-"Shift also uses this center"
-msgstr ""
-"<b>Центр</b> обертання та нахилу: його можна перетягнути; зміна розміру з "
-"Shift також відбувається навколо нього"
-
#: ../src/shortcuts.cpp:226
#, c-format
msgid "Keyboard directory (%s) is unavailable."
msgstr "Каталог з параметрами клавіатури (%s) недоступний."
-#: ../src/shortcuts.cpp:337 ../src/ui/dialog/export.cpp:1295
-#: ../src/ui/dialog/export.cpp:1329
+#: ../src/shortcuts.cpp:337 ../src/ui/dialog/export.cpp:1299
+#: ../src/ui/dialog/export.cpp:1333
msgid "Select a filename for exporting"
msgstr "Виберіть назву файла для експорту"
@@ -13486,7 +12933,7 @@ msgstr "Дуга"
#. Ellipse
#: ../src/sp-ellipse.cpp:379 ../src/sp-ellipse.cpp:386
#: ../src/ui/dialog/inkscape-preferences.cpp:403
-#: ../src/widgets/pencil-toolbar.cpp:187
+#: ../src/widgets/pencil-toolbar.cpp:158
msgid "Ellipse"
msgstr "Еліпс"
@@ -13516,7 +12963,7 @@ msgid "Linked Flowed Text"
msgstr "Пов’язаний контурний текст"
#: ../src/sp-flowtext.cpp:298 ../src/sp-text.cpp:357
-#: ../src/ui/tools/text-tool.cpp:1600
+#: ../src/ui/tools/text-tool.cpp:1566
msgid " [truncated]"
msgstr " (обрізано)"
@@ -13528,20 +12975,20 @@ msgstr[0] "(%d символ%s)"
msgstr[1] "(%d символи%s)"
msgstr[2] "(%d символів%s)"
-#: ../src/sp-guide.cpp:301
+#: ../src/sp-guide.cpp:303
msgid "Create Guides Around the Page"
msgstr "Створити напрямні навколо сторінки"
-#: ../src/sp-guide.cpp:313 ../src/verbs.cpp:2474
+#: ../src/sp-guide.cpp:315 ../src/verbs.cpp:2467
msgid "Delete All Guides"
msgstr "Вилучити всі напрямні"
#. Guide has probably been deleted and no longer has an attached namedview.
-#: ../src/sp-guide.cpp:473
+#: ../src/sp-guide.cpp:475
msgid "Deleted"
msgstr "Вилучено"
-#: ../src/sp-guide.cpp:482
+#: ../src/sp-guide.cpp:484
msgid ""
"<b>Shift+drag</b> to rotate, <b>Ctrl+drag</b> to move origin, <b>Del</b> to "
"delete"
@@ -13549,183 +12996,74 @@ msgstr ""
"<b>Shift+Перетягування</b> починає обертання. <b>Ctrl+Перетягування</b> "
"пересуває центр обертання. <b>Del</b> вилучає."
-#: ../src/sp-guide.cpp:486
+#: ../src/sp-guide.cpp:488
#, c-format
msgid "vertical, at %s"
msgstr "вертикальна, на %s"
-#: ../src/sp-guide.cpp:489
+#: ../src/sp-guide.cpp:491
#, c-format
msgid "horizontal, at %s"
msgstr "горизонтальна, на %s"
-#: ../src/sp-guide.cpp:494
+#: ../src/sp-guide.cpp:496
#, c-format
msgid "at %d degrees, through (%s,%s)"
msgstr "на %d градусів, через (%s,%s)"
-#: ../src/sp-image.cpp:624
+#: ../src/sp-image.cpp:525
msgid "embedded"
msgstr "включене"
-#: ../src/sp-image.cpp:632
+#: ../src/sp-image.cpp:533
#, c-format
msgid "[bad reference]: %s"
msgstr "[помилкове посилання]: %s"
-#: ../src/sp-image.cpp:633
+#: ../src/sp-image.cpp:534
#, c-format
msgid "%d &#215; %d: %s"
msgstr "%d &#215; %d: %s"
-#: ../src/sp-item.cpp:942 ../src/verbs.cpp:213
+#: ../src/sp-item-group.cpp:337 ../src/sp-switch.cpp:82
+#, c-format
+msgid "of <b>%d</b> object"
+msgstr "з <b>%d</b> об'єкта"
+
+#: ../src/sp-item-group.cpp:337 ../src/sp-switch.cpp:82
+#, c-format
+msgid "of <b>%d</b> objects"
+msgstr "з <b>%d</b> об'єкта"
+
+#: ../src/sp-item.cpp:943 ../src/verbs.cpp:213
msgid "Object"
msgstr "Об'єкт"
-#: ../src/sp-item.cpp:959
+#: ../src/sp-item.cpp:960
#, c-format
msgid "%s; <i>clipped</i>"
msgstr "%s; <i>закріплено</i>"
-#: ../src/sp-item.cpp:965
+#: ../src/sp-item.cpp:966
#, c-format
msgid "%s; <i>masked</i>"
msgstr "%s; <i>масковано</i>"
-#: ../src/sp-item.cpp:975
+#: ../src/sp-item.cpp:976
#, c-format
msgid "%s; <i>filtered (%s)</i>"
msgstr "%s; <i>відфільтровано (%s)</i>"
-#: ../src/sp-item.cpp:977
+#: ../src/sp-item.cpp:978
#, c-format
msgid "%s; <i>filtered</i>"
msgstr "%s; <i>відфільтровано</i>"
-#: ../src/sp-item-group.cpp:337 ../src/sp-switch.cpp:82
-#, c-format
-msgid "of <b>%d</b> object"
-msgstr "з <b>%d</b> об'єкта"
-
-#: ../src/sp-item-group.cpp:337 ../src/sp-switch.cpp:82
-#, c-format
-msgid "of <b>%d</b> objects"
-msgstr "з <b>%d</b> об'єкта"
-
#: ../src/sp-line.cpp:126
msgid "Line"
msgstr "Лінія"
-#: ../src/splivarot.cpp:82
-msgid "Intersection"
-msgstr "Перетин"
-
-#: ../src/splivarot.cpp:105
-msgid "Division"
-msgstr "Ділення"
-
-#: ../src/splivarot.cpp:110
-msgid "Cut path"
-msgstr "Обрізати контур"
-
-#: ../src/splivarot.cpp:333
-msgid "Select <b>at least 2 paths</b> to perform a boolean operation."
-msgstr "Для логічної операції треба позначити <b>не менше двох</b> контурів."
-
-#: ../src/splivarot.cpp:337
-msgid "Select <b>at least 1 path</b> to perform a boolean union."
-msgstr "Оберіть <b>хоча б 1 контур</b> для виконання об'єднання."
-
-#: ../src/splivarot.cpp:345
-msgid ""
-"Select <b>exactly 2 paths</b> to perform difference, division, or path cut."
-msgstr ""
-"Для операції виключного АБО, ділення та розрізання контуру виберіть <b>точно "
-"2 контури</b>."
-
-#: ../src/splivarot.cpp:361 ../src/splivarot.cpp:376
-msgid ""
-"Unable to determine the <b>z-order</b> of the objects selected for "
-"difference, XOR, division, or path cut."
-msgstr ""
-"Не вдається визначити <b>порядок розташування дуг одна над одною</b> "
-"об'єктів, позначених для операції різниці, виключного АБО, ділення "
-"розрізання контуру."
-
-#: ../src/splivarot.cpp:407
-msgid ""
-"One of the objects is <b>not a path</b>, cannot perform boolean operation."
-msgstr "Один з об'єктів <b>не є контуром</b>, логічна операція неможлива."
-
-#: ../src/splivarot.cpp:1156
-msgid "Select <b>stroked path(s)</b> to convert stroke to path."
-msgstr "Оберіть <b>контур(и) з штрихів</b> для перетворення на контур."
-
-#: ../src/splivarot.cpp:1511
-msgid "Convert stroke to path"
-msgstr "Перетворити штрих на контур"
-
-#. TRANSLATORS: "to outline" means "to convert stroke to path"
-#: ../src/splivarot.cpp:1514
-msgid "<b>No stroked paths</b> in the selection."
-msgstr "У позначеному <b>немає контурів зі штрихів</b>."
-
-#: ../src/splivarot.cpp:1585
-msgid "Selected object is <b>not a path</b>, cannot inset/outset."
-msgstr ""
-"позначений об'єкт <b>не є контуром</b>, втягування/розтягування неможливі."
-
-#: ../src/splivarot.cpp:1676 ../src/splivarot.cpp:1741
-msgid "Create linked offset"
-msgstr "Створити зв'язану втяжку"
-
-#: ../src/splivarot.cpp:1677 ../src/splivarot.cpp:1742
-msgid "Create dynamic offset"
-msgstr "Створити динамічний відступ"
-
-#: ../src/splivarot.cpp:1767
-msgid "Select <b>path(s)</b> to inset/outset."
-msgstr "Позначте <b>контур(и)</b> для втягування/розтягування."
-
-#: ../src/splivarot.cpp:1963
-msgid "Outset path"
-msgstr "Розтягнений контур"
-
-#: ../src/splivarot.cpp:1963
-msgid "Inset path"
-msgstr "Втягнутий контур"
-
-#: ../src/splivarot.cpp:1965
-msgid "<b>No paths</b> to inset/outset in the selection."
-msgstr "У позначеному <b>немає контурів</b> для втягування/розтягування."
-
-#: ../src/splivarot.cpp:2127
-msgid "Simplifying paths (separately):"
-msgstr "Спрощення контурів (окремо):"
-
-#: ../src/splivarot.cpp:2129
-msgid "Simplifying paths:"
-msgstr "Спрощення контурів:"
-
-#: ../src/splivarot.cpp:2166
-#, c-format
-msgid "%s <b>%d</b> of <b>%d</b> paths simplified..."
-msgstr "%s <b>%d</b> з <b>%d</b> контурів спрощено…"
-
-#: ../src/splivarot.cpp:2179
-#, c-format
-msgid "<b>%d</b> paths simplified."
-msgstr "<b>%d</b> контурів спрощено."
-
-#: ../src/splivarot.cpp:2193
-msgid "Select <b>path(s)</b> to simplify."
-msgstr "Позначте <b>контур(и)</b> для спрощення."
-
-#: ../src/splivarot.cpp:2209
-msgid "<b>No paths</b> to simplify in the selection."
-msgstr "У позначеному <b>немає контурів</b> для спрощення."
-
-#: ../src/sp-lpe-item.cpp:249
+#: ../src/sp-lpe-item.cpp:255
msgid "An exception occurred during execution of the Path Effect."
msgstr "Під час застосування ефекту контуру сталася помилка типу виключення."
@@ -13798,11 +13136,11 @@ msgstr "з %3f обертами"
#. Star
#: ../src/sp-star.cpp:256 ../src/ui/dialog/inkscape-preferences.cpp:407
-#: ../src/widgets/star-toolbar.cpp:477
+#: ../src/widgets/star-toolbar.cpp:469
msgid "Star"
msgstr "Зірка"
-#: ../src/sp-star.cpp:257 ../src/widgets/star-toolbar.cpp:470
+#: ../src/sp-star.cpp:257 ../src/widgets/star-toolbar.cpp:462
msgid "Polygon"
msgstr "Багатокутник"
@@ -13861,7 +13199,7 @@ msgstr "Клоновані символьні дані"
msgid " from "
msgstr " з "
-#: ../src/sp-tref.cpp:259 ../src/sp-use.cpp:244
+#: ../src/sp-tref.cpp:259 ../src/sp-use.cpp:249
msgid "[orphaned]"
msgstr "[осиротілий]"
@@ -13869,30 +13207,147 @@ msgstr "[осиротілий]"
msgid "Text Span"
msgstr "Блок тексту"
-#: ../src/sp-use.cpp:213
+#: ../src/sp-use.cpp:214
msgid "Symbol"
msgstr "Символ"
-#: ../src/sp-use.cpp:216
+#: ../src/sp-use.cpp:217
msgid "Clone"
msgstr "Клон"
-#: ../src/sp-use.cpp:222
+#: ../src/sp-use.cpp:224 ../src/sp-use.cpp:226
#, c-format
msgid "called %s"
msgstr "викликано %s"
+#: ../src/sp-use.cpp:226
+msgid "Unnamed Symbol"
+msgstr "Символ без назви"
+
#. TRANSLATORS: Used for statusbar description for long <use> chains:
#. * "Clone of: Clone of: ... in Layer 1".
-#: ../src/sp-use.cpp:230
+#: ../src/sp-use.cpp:235
msgid "..."
msgstr "…"
-#: ../src/sp-use.cpp:239
+#: ../src/sp-use.cpp:244
#, c-format
msgid "of: %s"
msgstr "з: %s"
+#: ../src/splivarot.cpp:70 ../src/splivarot.cpp:76
+msgid "Union"
+msgstr "Об'єднання"
+
+#: ../src/splivarot.cpp:82
+msgid "Intersection"
+msgstr "Перетин"
+
+#: ../src/splivarot.cpp:105
+msgid "Division"
+msgstr "Ділення"
+
+#: ../src/splivarot.cpp:110
+msgid "Cut path"
+msgstr "Обрізати контур"
+
+#: ../src/splivarot.cpp:333
+msgid "Select <b>at least 2 paths</b> to perform a boolean operation."
+msgstr "Для логічної операції треба позначити <b>не менше двох</b> контурів."
+
+#: ../src/splivarot.cpp:337
+msgid "Select <b>at least 1 path</b> to perform a boolean union."
+msgstr "Оберіть <b>хоча б 1 контур</b> для виконання об'єднання."
+
+#: ../src/splivarot.cpp:345
+msgid ""
+"Select <b>exactly 2 paths</b> to perform difference, division, or path cut."
+msgstr ""
+"Для операції виключного АБО, ділення та розрізання контуру виберіть <b>точно "
+"2 контури</b>."
+
+#: ../src/splivarot.cpp:361 ../src/splivarot.cpp:376
+msgid ""
+"Unable to determine the <b>z-order</b> of the objects selected for "
+"difference, XOR, division, or path cut."
+msgstr ""
+"Не вдається визначити <b>порядок розташування дуг одна над одною</b> "
+"об'єктів, позначених для операції різниці, виключного АБО, ділення "
+"розрізання контуру."
+
+#: ../src/splivarot.cpp:407
+msgid ""
+"One of the objects is <b>not a path</b>, cannot perform boolean operation."
+msgstr "Один з об'єктів <b>не є контуром</b>, логічна операція неможлива."
+
+#: ../src/splivarot.cpp:1157
+msgid "Select <b>stroked path(s)</b> to convert stroke to path."
+msgstr "Оберіть <b>контур(и) з штрихів</b> для перетворення на контур."
+
+#: ../src/splivarot.cpp:1512
+msgid "Convert stroke to path"
+msgstr "Перетворити штрих на контур"
+
+#. TRANSLATORS: "to outline" means "to convert stroke to path"
+#: ../src/splivarot.cpp:1515
+msgid "<b>No stroked paths</b> in the selection."
+msgstr "У позначеному <b>немає контурів зі штрихів</b>."
+
+#: ../src/splivarot.cpp:1586
+msgid "Selected object is <b>not a path</b>, cannot inset/outset."
+msgstr ""
+"позначений об'єкт <b>не є контуром</b>, втягування/розтягування неможливі."
+
+#: ../src/splivarot.cpp:1677 ../src/splivarot.cpp:1742
+msgid "Create linked offset"
+msgstr "Створити зв'язану втяжку"
+
+#: ../src/splivarot.cpp:1678 ../src/splivarot.cpp:1743
+msgid "Create dynamic offset"
+msgstr "Створити динамічний відступ"
+
+#: ../src/splivarot.cpp:1768
+msgid "Select <b>path(s)</b> to inset/outset."
+msgstr "Позначте <b>контур(и)</b> для втягування/розтягування."
+
+#: ../src/splivarot.cpp:1964
+msgid "Outset path"
+msgstr "Розтягнений контур"
+
+#: ../src/splivarot.cpp:1964
+msgid "Inset path"
+msgstr "Втягнутий контур"
+
+#: ../src/splivarot.cpp:1966
+msgid "<b>No paths</b> to inset/outset in the selection."
+msgstr "У позначеному <b>немає контурів</b> для втягування/розтягування."
+
+#: ../src/splivarot.cpp:2128
+msgid "Simplifying paths (separately):"
+msgstr "Спрощення контурів (окремо):"
+
+#: ../src/splivarot.cpp:2130
+msgid "Simplifying paths:"
+msgstr "Спрощення контурів:"
+
+#: ../src/splivarot.cpp:2167
+#, c-format
+msgid "%s <b>%d</b> of <b>%d</b> paths simplified..."
+msgstr "%s <b>%d</b> з <b>%d</b> контурів спрощено…"
+
+#: ../src/splivarot.cpp:2180
+#, c-format
+msgid "<b>%d</b> paths simplified."
+msgstr "<b>%d</b> контурів спрощено."
+
+#: ../src/splivarot.cpp:2194
+msgid "Select <b>path(s)</b> to simplify."
+msgstr "Позначте <b>контур(и)</b> для спрощення."
+
+#: ../src/splivarot.cpp:2210
+msgid "<b>No paths</b> to simplify in the selection."
+msgstr "У позначеному <b>немає контурів</b> для спрощення."
+
#: ../src/text-chemistry.cpp:94
msgid "Select <b>a text and a path</b> to put text on path."
msgstr "Позначте <b>текст та контур</b> для розміщення тексту за контуром."
@@ -13920,7 +13375,7 @@ msgstr ""
"Щоб розташувати текст за контуром, контурний текст слід зробити <b>видимим</"
"b>."
-#: ../src/text-chemistry.cpp:185 ../src/verbs.cpp:2496
+#: ../src/text-chemistry.cpp:185 ../src/verbs.cpp:2489
msgid "Put text on path"
msgstr "Розмістити текст вздовж контуру"
@@ -13932,7 +13387,7 @@ msgstr "Позначте <b>текст вздовж контуру</b>, щоб
msgid "<b>No texts-on-paths</b> in the selection."
msgstr "У позначеному <b>немає тексту на контурі</b>."
-#: ../src/text-chemistry.cpp:221 ../src/verbs.cpp:2498
+#: ../src/text-chemistry.cpp:221 ../src/verbs.cpp:2491
msgid "Remove text from path"
msgstr "Зняти текст з контуру"
@@ -14076,7 +13531,7 @@ msgstr ""
"напрямної, <b>Клавіші-стрілки</b> — налаштування товщини (ліворуч/праворуч) "
"і кута (вгору/вниз)."
-#: ../src/tools-switch.cpp:103 ../src/ui/tools/text-tool.cpp:1627
+#: ../src/tools-switch.cpp:103 ../src/ui/tools/text-tool.cpp:1593
msgid ""
"<b>Click</b> to select or create text, <b>drag</b> to create flowed text; "
"then type."
@@ -14112,7 +13567,7 @@ msgstr ""
msgid "<b>Drag</b> to measure the dimensions of objects."
msgstr "<b>Перетягніть</b> вказівник, щоб виміряти об'єкти."
-#: ../src/tools-switch.cpp:108 ../src/ui/tools/dropper-tool.cpp:287
+#: ../src/tools-switch.cpp:108 ../src/ui/tools/dropper-tool.cpp:285
msgid ""
"<b>Click</b> to set fill, <b>Shift+click</b> to set stroke; <b>drag</b> to "
"average color in area; with <b>Alt</b> to pick inverse color; <b>Ctrl+C</b> "
@@ -14153,8 +13608,8 @@ msgstr "Векторизація: %1. %2 вузлів"
#: ../src/trace/trace.cpp:59 ../src/trace/trace.cpp:124
#: ../src/trace/trace.cpp:132 ../src/trace/trace.cpp:225
-#: ../src/ui/dialog/pixelartdialog.cpp:338
-#: ../src/ui/dialog/pixelartdialog.cpp:356
+#: ../src/ui/dialog/pixelartdialog.cpp:370
+#: ../src/ui/dialog/pixelartdialog.cpp:402
msgid "Select an <b>image</b> to trace"
msgstr "Виберіть <b>растрове зображення</b> для векторизації"
@@ -14315,12 +13770,12 @@ msgstr "_В:"
#: ../src/ui/dialog/align-and-distribute.cpp:468
#: ../src/ui/dialog/align-and-distribute.cpp:855
-#: ../src/widgets/connector-toolbar.cpp:423
+#: ../src/widgets/connector-toolbar.cpp:411
msgid "Remove overlaps"
msgstr "Вилучити перекриття"
#: ../src/ui/dialog/align-and-distribute.cpp:499
-#: ../src/widgets/connector-toolbar.cpp:252
+#: ../src/widgets/connector-toolbar.cpp:240
msgid "Arrange connector network"
msgstr "Впорядкувати сітку з'єднувальних ліній"
@@ -14362,53 +13817,53 @@ msgid "_Treat selection as group: "
msgstr "Вва_жати вибране групою: "
#. Align
-#: ../src/ui/dialog/align-and-distribute.cpp:877 ../src/verbs.cpp:2941
-#: ../src/verbs.cpp:2942
+#: ../src/ui/dialog/align-and-distribute.cpp:877 ../src/verbs.cpp:2934
+#: ../src/verbs.cpp:2935
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:2943
-#: ../src/verbs.cpp:2944
+#: ../src/ui/dialog/align-and-distribute.cpp:880 ../src/verbs.cpp:2936
+#: ../src/verbs.cpp:2937
msgid "Align left edges"
msgstr "Вирівняти ліві сторони"
-#: ../src/ui/dialog/align-and-distribute.cpp:883 ../src/verbs.cpp:2945
-#: ../src/verbs.cpp:2946
+#: ../src/ui/dialog/align-and-distribute.cpp:883 ../src/verbs.cpp:2938
+#: ../src/verbs.cpp:2939
msgid "Center on vertical axis"
msgstr "Центрувати за вертикальною віссю"
-#: ../src/ui/dialog/align-and-distribute.cpp:886 ../src/verbs.cpp:2947
-#: ../src/verbs.cpp:2948
+#: ../src/ui/dialog/align-and-distribute.cpp:886 ../src/verbs.cpp:2940
+#: ../src/verbs.cpp:2941
msgid "Align right sides"
msgstr "Вирівняти праві сторони"
-#: ../src/ui/dialog/align-and-distribute.cpp:889 ../src/verbs.cpp:2949
-#: ../src/verbs.cpp:2950
+#: ../src/ui/dialog/align-and-distribute.cpp:889 ../src/verbs.cpp:2942
+#: ../src/verbs.cpp:2943
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:2951
-#: ../src/verbs.cpp:2952
+#: ../src/ui/dialog/align-and-distribute.cpp:892 ../src/verbs.cpp:2944
+#: ../src/verbs.cpp:2945
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:2953
-#: ../src/verbs.cpp:2954
+#: ../src/ui/dialog/align-and-distribute.cpp:895 ../src/verbs.cpp:2946
+#: ../src/verbs.cpp:2947
msgid "Align top edges"
msgstr "Вирівняти верхні сторони"
-#: ../src/ui/dialog/align-and-distribute.cpp:898 ../src/verbs.cpp:2955
-#: ../src/verbs.cpp:2956
+#: ../src/ui/dialog/align-and-distribute.cpp:898 ../src/verbs.cpp:2948
+#: ../src/verbs.cpp:2949
msgid "Center on horizontal axis"
msgstr "Центрувати на горизонтальній осі"
-#: ../src/ui/dialog/align-and-distribute.cpp:901 ../src/verbs.cpp:2957
-#: ../src/verbs.cpp:2958
+#: ../src/ui/dialog/align-and-distribute.cpp:901 ../src/verbs.cpp:2950
+#: ../src/verbs.cpp:2951
msgid "Align bottom edges"
msgstr "Вирівняти нижні сторони"
-#: ../src/ui/dialog/align-and-distribute.cpp:904 ../src/verbs.cpp:2959
-#: ../src/verbs.cpp:2960
+#: ../src/ui/dialog/align-and-distribute.cpp:904 ../src/verbs.cpp:2952
+#: ../src/verbs.cpp:2953
msgid "Align top edges of objects to the bottom edge of the anchor"
msgstr "Вирівняти верхні краї об'єктів до нижнього краю якоря"
@@ -14461,7 +13916,7 @@ msgid "Distribute baselines of texts vertically"
msgstr "Розподілити базові лінії тексту вертикально"
#: ../src/ui/dialog/align-and-distribute.cpp:955
-#: ../src/widgets/connector-toolbar.cpp:385
+#: ../src/widgets/connector-toolbar.cpp:373
msgid "Nicely arrange selected connector network"
msgstr "Гармонійно розташувати вибране з'єднання об'єктів"
@@ -14529,11 +13984,8 @@ msgid "Smallest object"
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:2002
-#: ../share/extensions/printing_marks.inx.h:18
-msgid "Selection"
-msgstr "позначене"
+msgid "Selection Area"
+msgstr "Позначена область"
#: ../src/ui/dialog/calligraphic-profile-rename.cpp:40
#: ../src/ui/dialog/calligraphic-profile-rename.cpp:138
@@ -15324,57 +14776,67 @@ msgid "Release log messages"
msgstr "Вимкнути повідомлення журналу"
#: ../src/ui/dialog/document-metadata.cpp:88
-#: ../src/ui/dialog/document-properties.cpp:156
+#: ../src/ui/dialog/document-properties.cpp:158
msgid "Metadata"
msgstr "Метадані"
#: ../src/ui/dialog/document-metadata.cpp:89
-#: ../src/ui/dialog/document-properties.cpp:157
+#: ../src/ui/dialog/document-properties.cpp:159
msgid "License"
msgstr "Ліцензія"
#: ../src/ui/dialog/document-metadata.cpp:126
-#: ../src/ui/dialog/document-properties.cpp:1002
+#: ../src/ui/dialog/document-properties.cpp:1005
msgid "<b>Dublin Core Entities</b>"
msgstr "<b>Пункти Dublin Core</b>"
#: ../src/ui/dialog/document-metadata.cpp:168
-#: ../src/ui/dialog/document-properties.cpp:1064
+#: ../src/ui/dialog/document-properties.cpp:1067
msgid "<b>License</b>"
msgstr "<b>Ліцензія</b>"
#. ---------------------------------------------------------------
-#: ../src/ui/dialog/document-properties.cpp:109
+#: ../src/ui/dialog/document-properties.cpp:110
+msgid "Use antialiasing"
+msgstr "Згладжування"
+
+#: ../src/ui/dialog/document-properties.cpp:110
+msgid "If unset, no antialiasing will be done on the drawing"
+msgstr ""
+"Якщо не позначено, для показу зображення на екрані не використовуватиметься "
+"згладжування"
+
+#: ../src/ui/dialog/document-properties.cpp:111
msgid "Show page _border"
msgstr "Показувати _рамку полотна"
-#: ../src/ui/dialog/document-properties.cpp:109
+#: ../src/ui/dialog/document-properties.cpp:111
msgid "If set, rectangular page border is shown"
msgstr "У разі встановлення буде показано прямокутну рамку сторінки"
-#: ../src/ui/dialog/document-properties.cpp:110
+#: ../src/ui/dialog/document-properties.cpp:112
msgid "Border on _top of drawing"
msgstr "Рамка полотна завжди _над малюнком"
-#: ../src/ui/dialog/document-properties.cpp:110
+#: ../src/ui/dialog/document-properties.cpp:112
msgid "If set, border is always on top of the drawing"
msgstr "У разі встановлення над малюнком завжди буде рамка полотна"
-#: ../src/ui/dialog/document-properties.cpp:111
+#: ../src/ui/dialog/document-properties.cpp:113
msgid "_Show border shadow"
msgstr "_Показувати тінь від рамки"
-#: ../src/ui/dialog/document-properties.cpp:111
+#: ../src/ui/dialog/document-properties.cpp:113
msgid "If set, page border shows a shadow on its right and lower side"
msgstr ""
"У разі встановлення границі сторінок відбиватимуть тіні на правій та нижній "
"сторонах"
-#: ../src/ui/dialog/document-properties.cpp:112
+#: ../src/ui/dialog/document-properties.cpp:114
msgid "Back_ground color:"
msgstr "Ко_лір тла:"
-#: ../src/ui/dialog/document-properties.cpp:112
+#: ../src/ui/dialog/document-properties.cpp:114
msgid ""
"Color of the page background. Note: transparency setting ignored while "
"editing but used when exporting to bitmap."
@@ -15382,80 +14844,80 @@ msgstr ""
"Колір тла сторінки. Зауваження: параметр прозорості буде проігноровано під "
"час редагування, але враховано під час експортування до растра."
-#: ../src/ui/dialog/document-properties.cpp:113
+#: ../src/ui/dialog/document-properties.cpp:115
msgid "Border _color:"
msgstr "_Колір рамки:"
-#: ../src/ui/dialog/document-properties.cpp:113
+#: ../src/ui/dialog/document-properties.cpp:115
msgid "Page border color"
msgstr "Колір рамки полотна"
-#: ../src/ui/dialog/document-properties.cpp:113
+#: ../src/ui/dialog/document-properties.cpp:115
msgid "Color of the page border"
msgstr "Колір рамки полотна"
-#: ../src/ui/dialog/document-properties.cpp:114
+#: ../src/ui/dialog/document-properties.cpp:116
msgid "Default _units:"
msgstr "Типові о_диниці:"
#. ---------------------------------------------------------------
#. General snap options
-#: ../src/ui/dialog/document-properties.cpp:118
+#: ../src/ui/dialog/document-properties.cpp:120
msgid "Show _guides"
msgstr "Показувати _напрямні"
-#: ../src/ui/dialog/document-properties.cpp:118
+#: ../src/ui/dialog/document-properties.cpp:120
msgid "Show or hide guides"
msgstr "Показати/сховати напрямні"
-#: ../src/ui/dialog/document-properties.cpp:119
+#: ../src/ui/dialog/document-properties.cpp:121
msgid "Guide co_lor:"
msgstr "Ко_лір напрямних:"
-#: ../src/ui/dialog/document-properties.cpp:119
+#: ../src/ui/dialog/document-properties.cpp:121
msgid "Guideline color"
msgstr "Колір напрямних"
-#: ../src/ui/dialog/document-properties.cpp:119
+#: ../src/ui/dialog/document-properties.cpp:121
msgid "Color of guidelines"
msgstr "Колір напрямних"
-#: ../src/ui/dialog/document-properties.cpp:120
+#: ../src/ui/dialog/document-properties.cpp:122
msgid "_Highlight color:"
msgstr "Колір _підсвічення:"
-#: ../src/ui/dialog/document-properties.cpp:120
+#: ../src/ui/dialog/document-properties.cpp:122
msgid "Highlighted guideline color"
msgstr "Колір підсвіченої напрямної"
-#: ../src/ui/dialog/document-properties.cpp:120
+#: ../src/ui/dialog/document-properties.cpp:122
msgid "Color of a guideline when it is under mouse"
msgstr "Колір напрямної при наведенні на неї миші"
#. ---------------------------------------------------------------
-#: ../src/ui/dialog/document-properties.cpp:122
+#: ../src/ui/dialog/document-properties.cpp:124
msgid "Snap _distance"
msgstr "_Відстань для прилипання"
-#: ../src/ui/dialog/document-properties.cpp:122
+#: ../src/ui/dialog/document-properties.cpp:124
msgid "Snap only when _closer than:"
msgstr "Прилипати на відстані, _меншій за:"
-#: ../src/ui/dialog/document-properties.cpp:122
-#: ../src/ui/dialog/document-properties.cpp:127
-#: ../src/ui/dialog/document-properties.cpp:132
+#: ../src/ui/dialog/document-properties.cpp:124
+#: ../src/ui/dialog/document-properties.cpp:129
+#: ../src/ui/dialog/document-properties.cpp:134
msgid "Always snap"
msgstr "Повсюдне прилипання"
-#: ../src/ui/dialog/document-properties.cpp:123
+#: ../src/ui/dialog/document-properties.cpp:125
msgid "Snapping distance, in screen pixels, for snapping to objects"
msgstr "Дистанція прилипання до об'єктів, у точках"
-#: ../src/ui/dialog/document-properties.cpp:123
+#: ../src/ui/dialog/document-properties.cpp:125
msgid "Always snap to objects, regardless of their distance"
msgstr "Повсюдне прилипання до об'єктів, незалежно від відстані"
-#: ../src/ui/dialog/document-properties.cpp:124
+#: ../src/ui/dialog/document-properties.cpp:126
msgid ""
"If set, objects only snap to another object when it's within the range "
"specified below"
@@ -15464,23 +14926,23 @@ msgstr ""
"знаходитимуться на відстані заданій нижче"
#. Options for snapping to grids
-#: ../src/ui/dialog/document-properties.cpp:127
+#: ../src/ui/dialog/document-properties.cpp:129
msgid "Snap d_istance"
msgstr "_Відстань для прилипання"
-#: ../src/ui/dialog/document-properties.cpp:127
+#: ../src/ui/dialog/document-properties.cpp:129
msgid "Snap only when c_loser than:"
msgstr "Прилипати на відстані, м_еншій за:"
-#: ../src/ui/dialog/document-properties.cpp:128
+#: ../src/ui/dialog/document-properties.cpp:130
msgid "Snapping distance, in screen pixels, for snapping to grid"
msgstr "Дистанція прилипання до сітки, у точках"
-#: ../src/ui/dialog/document-properties.cpp:128
+#: ../src/ui/dialog/document-properties.cpp:130
msgid "Always snap to grids, regardless of the distance"
msgstr "Повсюдне прилипання до сітки, незалежно від відстані"
-#: ../src/ui/dialog/document-properties.cpp:129
+#: ../src/ui/dialog/document-properties.cpp:131
msgid ""
"If set, objects only snap to a grid line when it's within the range "
"specified below"
@@ -15489,23 +14951,23 @@ msgstr ""
"знаходитимуться на заданій нижче відстані"
#. Options for snapping to guides
-#: ../src/ui/dialog/document-properties.cpp:132
+#: ../src/ui/dialog/document-properties.cpp:134
msgid "Snap dist_ance"
msgstr "В_ідстань для прилипання"
-#: ../src/ui/dialog/document-properties.cpp:132
+#: ../src/ui/dialog/document-properties.cpp:134
msgid "Snap only when close_r than:"
msgstr "Прилипати на відстані, ме_ншій за:"
-#: ../src/ui/dialog/document-properties.cpp:133
+#: ../src/ui/dialog/document-properties.cpp:135
msgid "Snapping distance, in screen pixels, for snapping to guides"
msgstr "Дистанція прилипання до напрямних, у точках"
-#: ../src/ui/dialog/document-properties.cpp:133
+#: ../src/ui/dialog/document-properties.cpp:135
msgid "Always snap to guides, regardless of the distance"
msgstr "Повсюдне прилипання до напрямних, незалежно від відстані"
-#: ../src/ui/dialog/document-properties.cpp:134
+#: ../src/ui/dialog/document-properties.cpp:136
msgid ""
"If set, objects only snap to a guide when it's within the range specified "
"below"
@@ -15514,106 +14976,102 @@ msgstr ""
"знаходитимуться на заданій нижче відстані"
#. ---------------------------------------------------------------
-#: ../src/ui/dialog/document-properties.cpp:137
+#: ../src/ui/dialog/document-properties.cpp:139
msgid "Snap to clip paths"
msgstr "Прилипання до контурів обрізання"
-#: ../src/ui/dialog/document-properties.cpp:137
+#: ../src/ui/dialog/document-properties.cpp:139
msgid "When snapping to paths, then also try snapping to clip paths"
msgstr "Намагатися виконати прилипання до контурів обрізання"
-#: ../src/ui/dialog/document-properties.cpp:138
+#: ../src/ui/dialog/document-properties.cpp:140
msgid "Snap to mask paths"
msgstr "Прилипання до контурів масок"
-#: ../src/ui/dialog/document-properties.cpp:138
+#: ../src/ui/dialog/document-properties.cpp:140
msgid "When snapping to paths, then also try snapping to mask paths"
msgstr "Намагатися виконати прилипання до контурів масок"
-#: ../src/ui/dialog/document-properties.cpp:139
+#: ../src/ui/dialog/document-properties.cpp:141
msgid "Snap perpendicularly"
msgstr "Перпендикулярне прилипання"
-#: ../src/ui/dialog/document-properties.cpp:139
+#: ../src/ui/dialog/document-properties.cpp:141
msgid ""
"When snapping to paths or guides, then also try snapping perpendicularly"
msgstr ""
"Намагатися під час прилипання виконувати і прилипання у перпендикулярному "
"напрямку"
-#: ../src/ui/dialog/document-properties.cpp:140
+#: ../src/ui/dialog/document-properties.cpp:142
msgid "Snap tangentially"
msgstr "Дотичне прилипання"
-#: ../src/ui/dialog/document-properties.cpp:140
+#: ../src/ui/dialog/document-properties.cpp:142
msgid "When snapping to paths or guides, then also try snapping tangentially"
msgstr ""
"Намагатися під час прилипання виконувати і прилипання у дотичному напрямку"
-#: ../src/ui/dialog/document-properties.cpp:143
+#: ../src/ui/dialog/document-properties.cpp:145
msgctxt "Grid"
msgid "_New"
msgstr "_Створити"
-#: ../src/ui/dialog/document-properties.cpp:143
+#: ../src/ui/dialog/document-properties.cpp:145
msgid "Create new grid."
msgstr "Створити нову напрямну."
-#: ../src/ui/dialog/document-properties.cpp:144
+#: ../src/ui/dialog/document-properties.cpp:146
msgctxt "Grid"
msgid "_Remove"
msgstr "Ви_лучити"
-#: ../src/ui/dialog/document-properties.cpp:144
+#: ../src/ui/dialog/document-properties.cpp:146
msgid "Remove selected grid."
msgstr "Вилучити вибрану сітку."
-#: ../src/ui/dialog/document-properties.cpp:151
+#: ../src/ui/dialog/document-properties.cpp:153
#: ../src/widgets/toolbox.cpp:1834
msgid "Guides"
msgstr "Напрямні"
-#: ../src/ui/dialog/document-properties.cpp:153 ../src/verbs.cpp:2748
+#: ../src/ui/dialog/document-properties.cpp:155 ../src/verbs.cpp:2741
msgid "Snap"
msgstr "Прилипання"
-#: ../src/ui/dialog/document-properties.cpp:155
+#: ../src/ui/dialog/document-properties.cpp:157
msgid "Scripting"
msgstr "Запис сценаріїв"
-#: ../src/ui/dialog/document-properties.cpp:318
+#: ../src/ui/dialog/document-properties.cpp:321
msgid "<b>General</b>"
msgstr "<b>Загальні</b>"
-#: ../src/ui/dialog/document-properties.cpp:320
-msgid "<b>Color</b>"
-msgstr "<b>Колір</b>"
-
-#: ../src/ui/dialog/document-properties.cpp:322
-msgid "<b>Border</b>"
-msgstr "<b>Рамка</b>"
-
-#: ../src/ui/dialog/document-properties.cpp:324
+#: ../src/ui/dialog/document-properties.cpp:323
msgid "<b>Page Size</b>"
msgstr "<b>Розмір сторінки</b>"
-#: ../src/ui/dialog/document-properties.cpp:357
+#: ../src/ui/dialog/document-properties.cpp:325
+msgid "<b>Display</b>"
+msgstr "<b>Показ</b>"
+
+#: ../src/ui/dialog/document-properties.cpp:360
msgid "<b>Guides</b>"
msgstr "<b>Напрямні</b>"
-#: ../src/ui/dialog/document-properties.cpp:375
+#: ../src/ui/dialog/document-properties.cpp:378
msgid "<b>Snap to objects</b>"
msgstr "<b>Прилипання до об'єктів</b>"
-#: ../src/ui/dialog/document-properties.cpp:377
+#: ../src/ui/dialog/document-properties.cpp:380
msgid "<b>Snap to grids</b>"
msgstr "<b>Прилипання до сітки</b>"
-#: ../src/ui/dialog/document-properties.cpp:379
+#: ../src/ui/dialog/document-properties.cpp:382
msgid "<b>Snap to guides</b>"
msgstr "<b>Прилипання до напрямних</b>"
-#: ../src/ui/dialog/document-properties.cpp:381
+#: ../src/ui/dialog/document-properties.cpp:384
msgid "<b>Miscellaneous</b>"
msgstr "<b>Інше</b>"
@@ -15621,127 +15079,127 @@ msgstr "<b>Інше</b>"
#. Inkscape::GC::release(defsRepr);
#. inform the document, so we can undo
#. Color Management
-#: ../src/ui/dialog/document-properties.cpp:494 ../src/verbs.cpp:2925
+#: ../src/ui/dialog/document-properties.cpp:497 ../src/verbs.cpp:2918
msgid "Link Color Profile"
msgstr "Пов'язати профіль кольорів"
-#: ../src/ui/dialog/document-properties.cpp:595
+#: ../src/ui/dialog/document-properties.cpp:598
msgid "Remove linked color profile"
msgstr "Вилучити пов'язаний профіль кольорів"
-#: ../src/ui/dialog/document-properties.cpp:608
+#: ../src/ui/dialog/document-properties.cpp:611
msgid "<b>Linked Color Profiles:</b>"
msgstr "<b>Пов'язані профілі кольорів:</b>"
-#: ../src/ui/dialog/document-properties.cpp:610
+#: ../src/ui/dialog/document-properties.cpp:613
msgid "<b>Available Color Profiles:</b>"
msgstr "<b>Доступні профілі кольорів:</b>"
-#: ../src/ui/dialog/document-properties.cpp:612
+#: ../src/ui/dialog/document-properties.cpp:615
msgid "Link Profile"
msgstr "Пов'язати з профілем"
-#: ../src/ui/dialog/document-properties.cpp:621
+#: ../src/ui/dialog/document-properties.cpp:624
msgid "Unlink Profile"
msgstr "Від'єднати від профілю"
-#: ../src/ui/dialog/document-properties.cpp:705
+#: ../src/ui/dialog/document-properties.cpp:708
msgid "Profile Name"
msgstr "Назва профілю"
-#: ../src/ui/dialog/document-properties.cpp:741
+#: ../src/ui/dialog/document-properties.cpp:744
msgid "External scripts"
msgstr "Зовнішні скрипти"
-#: ../src/ui/dialog/document-properties.cpp:742
+#: ../src/ui/dialog/document-properties.cpp:745
msgid "Embedded scripts"
msgstr "Вбудовані скрипти"
-#: ../src/ui/dialog/document-properties.cpp:747
+#: ../src/ui/dialog/document-properties.cpp:750
msgid "<b>External script files:</b>"
msgstr "<b>Файли зовнішніх скриптів:</b>"
-#: ../src/ui/dialog/document-properties.cpp:749
+#: ../src/ui/dialog/document-properties.cpp:752
msgid "Add the current file name or browse for a file"
msgstr "Додайте назву поточного файла або вкажіть якийсь файл"
-#: ../src/ui/dialog/document-properties.cpp:758
-#: ../src/ui/dialog/document-properties.cpp:847
+#: ../src/ui/dialog/document-properties.cpp:761
+#: ../src/ui/dialog/document-properties.cpp:850
#: ../src/ui/widget/selected-style.cpp:339
msgid "Remove"
msgstr "Вилучити"
-#: ../src/ui/dialog/document-properties.cpp:828
+#: ../src/ui/dialog/document-properties.cpp:831
msgid "Filename"
msgstr "Назва файла"
-#: ../src/ui/dialog/document-properties.cpp:836
+#: ../src/ui/dialog/document-properties.cpp:839
msgid "<b>Embedded script files:</b>"
msgstr "<b>Файли вбудованих скриптів:</b>"
-#: ../src/ui/dialog/document-properties.cpp:838
+#: ../src/ui/dialog/document-properties.cpp:841
msgid "New"
msgstr "Створити"
-#: ../src/ui/dialog/document-properties.cpp:917
+#: ../src/ui/dialog/document-properties.cpp:920
msgid "Script id"
msgstr "Ід. скрипту"
-#: ../src/ui/dialog/document-properties.cpp:923
+#: ../src/ui/dialog/document-properties.cpp:926
msgid "<b>Content:</b>"
msgstr "<b>Вміст:</b>"
-#: ../src/ui/dialog/document-properties.cpp:1040
+#: ../src/ui/dialog/document-properties.cpp:1043
msgid "_Save as default"
msgstr "З_берегти як типові"
-#: ../src/ui/dialog/document-properties.cpp:1041
+#: ../src/ui/dialog/document-properties.cpp:1044
msgid "Save this metadata as the default metadata"
msgstr "Зберегти ці метадані як типові метадані"
-#: ../src/ui/dialog/document-properties.cpp:1042
+#: ../src/ui/dialog/document-properties.cpp:1045
msgid "Use _default"
msgstr "Використовувати _типові"
-#: ../src/ui/dialog/document-properties.cpp:1043
+#: ../src/ui/dialog/document-properties.cpp:1046
msgid "Use the previously saved default metadata here"
msgstr "Скористатися тут раніше збереженими типовими метаданими"
#. inform the document, so we can undo
-#: ../src/ui/dialog/document-properties.cpp:1116
+#: ../src/ui/dialog/document-properties.cpp:1119
msgid "Add external script..."
msgstr "Додати зовнішній скрипт…"
-#: ../src/ui/dialog/document-properties.cpp:1155
+#: ../src/ui/dialog/document-properties.cpp:1158
msgid "Select a script to load"
msgstr "Виберіть скрипт для завантаження"
#. inform the document, so we can undo
-#: ../src/ui/dialog/document-properties.cpp:1183
+#: ../src/ui/dialog/document-properties.cpp:1186
msgid "Add embedded script..."
msgstr "Додати вбудований скрипт…"
#. inform the document, so we can undo
-#: ../src/ui/dialog/document-properties.cpp:1214
+#: ../src/ui/dialog/document-properties.cpp:1217
msgid "Remove external script"
msgstr "Вилучити зовнішній скрипт"
#. inform the document, so we can undo
-#: ../src/ui/dialog/document-properties.cpp:1248
+#: ../src/ui/dialog/document-properties.cpp:1247
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:1348
+#: ../src/ui/dialog/document-properties.cpp:1344
msgid "Edit embedded script"
msgstr "Редагувати вбудований скрипт"
-#: ../src/ui/dialog/document-properties.cpp:1431
+#: ../src/ui/dialog/document-properties.cpp:1427
msgid "<b>Creation</b>"
msgstr "<b>Створення</b>"
-#: ../src/ui/dialog/document-properties.cpp:1432
+#: ../src/ui/dialog/document-properties.cpp:1428
msgid "<b>Defined grids</b>"
msgstr "<b>Визначені сітки</b>"
@@ -15749,41 +15207,41 @@ msgstr "<b>Визначені сітки</b>"
msgid "Remove grid"
msgstr "Вилучити сітку"
-#: ../src/ui/dialog/document-properties.cpp:1743
+#: ../src/ui/dialog/document-properties.cpp:1754
msgid "Changed document unit"
msgstr "Змінено одиницю виміру у документі"
-#: ../src/ui/dialog/export.cpp:151 ../src/verbs.cpp:2800
+#: ../src/ui/dialog/export.cpp:152 ../src/verbs.cpp:2793
msgid "_Page"
msgstr "_Сторінка"
-#: ../src/ui/dialog/export.cpp:151 ../src/verbs.cpp:2804
+#: ../src/ui/dialog/export.cpp:152 ../src/verbs.cpp:2797
msgid "_Drawing"
msgstr "_Малюнок"
-#: ../src/ui/dialog/export.cpp:151 ../src/verbs.cpp:2806
+#: ../src/ui/dialog/export.cpp:152 ../src/verbs.cpp:2799
msgid "_Selection"
msgstr "Поз_начене"
-#: ../src/ui/dialog/export.cpp:151
+#: ../src/ui/dialog/export.cpp:152
msgid "_Custom"
msgstr "_Інше"
-#: ../src/ui/dialog/export.cpp:168 ../src/widgets/measure-toolbar.cpp:116
-#: ../src/widgets/measure-toolbar.cpp:124
+#: ../src/ui/dialog/export.cpp:170 ../src/widgets/measure-toolbar.cpp:99
+#: ../src/widgets/measure-toolbar.cpp:107
#: ../share/extensions/render_gears.inx.h:6
msgid "Units:"
msgstr "Одиниці:"
-#: ../src/ui/dialog/export.cpp:170
+#: ../src/ui/dialog/export.cpp:172
msgid "_Export As..."
msgstr "_Експортувати як…"
-#: ../src/ui/dialog/export.cpp:173
+#: ../src/ui/dialog/export.cpp:175
msgid "B_atch export all selected objects"
msgstr "Па_кетний експорт усіх позначених об'єктів"
-#: ../src/ui/dialog/export.cpp:173
+#: ../src/ui/dialog/export.cpp:175
msgid ""
"Export each selected object into its own PNG file, using export hints if any "
"(caution, overwrites without asking!)"
@@ -15792,88 +15250,88 @@ msgstr ""
"підказки експорту, якщо вони є (застереження, перезапис ведеться без "
"попередження!)"
-#: ../src/ui/dialog/export.cpp:175
+#: ../src/ui/dialog/export.cpp:177
msgid "Hide a_ll except selected"
msgstr "С_ховати все за винятком позначених"
-#: ../src/ui/dialog/export.cpp:175
+#: ../src/ui/dialog/export.cpp:177
msgid "In the exported image, hide all objects except those that are selected"
msgstr ""
"В експортованому зображенні приховувати всі об'єкти, за винятком позначених"
-#: ../src/ui/dialog/export.cpp:176
+#: ../src/ui/dialog/export.cpp:178
msgid "Close when complete"
msgstr "Закрити після завершення"
-#: ../src/ui/dialog/export.cpp:176
+#: ../src/ui/dialog/export.cpp:178
msgid "Once the export completes, close this dialog"
msgstr "Після завершення експортування закрити це діалогове вікно"
-#: ../src/ui/dialog/export.cpp:178
+#: ../src/ui/dialog/export.cpp:180
msgid "_Export"
msgstr "_Експортувати"
-#: ../src/ui/dialog/export.cpp:196
+#: ../src/ui/dialog/export.cpp:198
msgid "<b>Export area</b>"
msgstr "<b>Експортувати ділянку</b>"
-#: ../src/ui/dialog/export.cpp:235
+#: ../src/ui/dialog/export.cpp:237
msgid "_x0:"
msgstr "_x0:"
-#: ../src/ui/dialog/export.cpp:239
+#: ../src/ui/dialog/export.cpp:241
msgid "x_1:"
msgstr "x_1:"
-#: ../src/ui/dialog/export.cpp:243
+#: ../src/ui/dialog/export.cpp:245
msgid "Wid_th:"
msgstr "Ши_рина:"
-#: ../src/ui/dialog/export.cpp:247
+#: ../src/ui/dialog/export.cpp:249
msgid "_y0:"
msgstr "_y0:"
-#: ../src/ui/dialog/export.cpp:251
+#: ../src/ui/dialog/export.cpp:253
msgid "y_1:"
msgstr "y_1:"
-#: ../src/ui/dialog/export.cpp:255
+#: ../src/ui/dialog/export.cpp:257
msgid "Hei_ght:"
msgstr "Ви_сота:"
-#: ../src/ui/dialog/export.cpp:270
+#: ../src/ui/dialog/export.cpp:272
msgid "<b>Image size</b>"
msgstr "<b>Розмір зображення</b>"
-#: ../src/ui/dialog/export.cpp:288 ../src/ui/dialog/export.cpp:299
+#: ../src/ui/dialog/export.cpp:290 ../src/ui/dialog/export.cpp:301
msgid "pixels at"
msgstr "точок"
-#: ../src/ui/dialog/export.cpp:294
+#: ../src/ui/dialog/export.cpp:296
msgid "dp_i"
msgstr "dp_i"
-#: ../src/ui/dialog/export.cpp:299 ../src/ui/dialog/transformation.cpp:82
+#: ../src/ui/dialog/export.cpp:301 ../src/ui/dialog/transformation.cpp:82
#: ../src/ui/widget/page-sizer.cpp:237
msgid "_Height:"
msgstr "_Висота:"
-#: ../src/ui/dialog/export.cpp:307
+#: ../src/ui/dialog/export.cpp:309
#: ../src/ui/dialog/inkscape-preferences.cpp:1432
#: ../src/ui/dialog/inkscape-preferences.cpp:1436
#: ../src/ui/dialog/inkscape-preferences.cpp:1460
msgid "dpi"
msgstr "т/д"
-#: ../src/ui/dialog/export.cpp:315
+#: ../src/ui/dialog/export.cpp:317
msgid "<b>_Filename</b>"
msgstr "<b>_Назва файла</b>"
-#: ../src/ui/dialog/export.cpp:357
+#: ../src/ui/dialog/export.cpp:359
msgid "Export the bitmap file with these settings"
msgstr "Експортувати файл з цими параметрами"
-#: ../src/ui/dialog/export.cpp:608
+#: ../src/ui/dialog/export.cpp:612
#, c-format
msgid "B_atch export %d selected object"
msgid_plural "B_atch export %d selected objects"
@@ -15881,75 +15339,75 @@ msgstr[0] "Па_кетний експорт %d позначеного об'єк
msgstr[1] "Па_кетний експорт %d позначених об'єктів"
msgstr[2] "Па_кетний експорт %d позначених об'єктів"
-#: ../src/ui/dialog/export.cpp:924
+#: ../src/ui/dialog/export.cpp:928
msgid "Export in progress"
msgstr "Триває експортування"
-#: ../src/ui/dialog/export.cpp:1014
+#: ../src/ui/dialog/export.cpp:1018
msgid "No items selected."
msgstr "Не позначено жодного пункту."
-#: ../src/ui/dialog/export.cpp:1018 ../src/ui/dialog/export.cpp:1020
+#: ../src/ui/dialog/export.cpp:1022 ../src/ui/dialog/export.cpp:1024
msgid "Exporting %1 files"
msgstr "Експортування %1 файлів"
-#: ../src/ui/dialog/export.cpp:1060 ../src/ui/dialog/export.cpp:1062
+#: ../src/ui/dialog/export.cpp:1064 ../src/ui/dialog/export.cpp:1066
#, c-format
msgid "Exporting file <b>%s</b>..."
msgstr "Експортування файла <b>%s</b>…"
-#: ../src/ui/dialog/export.cpp:1071 ../src/ui/dialog/export.cpp:1162
+#: ../src/ui/dialog/export.cpp:1075 ../src/ui/dialog/export.cpp:1166
#, c-format
msgid "Could not export to filename %s.\n"
msgstr "Не вдається експортувати до файла %s.\n"
-#: ../src/ui/dialog/export.cpp:1074
+#: ../src/ui/dialog/export.cpp:1078
#, c-format
msgid "Could not export to filename <b>%s</b>."
msgstr "Не вдалося експортувати до файла <b>%s</b>."
-#: ../src/ui/dialog/export.cpp:1089
+#: ../src/ui/dialog/export.cpp:1093
#, c-format
msgid "Successfully exported <b>%d</b> files from <b>%d</b> selected items."
msgstr "Успішно експортовано <b>%d</b> файлів з <b>%d</b> позначених пунктів."
-#: ../src/ui/dialog/export.cpp:1100
+#: ../src/ui/dialog/export.cpp:1104
msgid "You have to enter a filename."
msgstr "Слід вказати назву файла."
-#: ../src/ui/dialog/export.cpp:1101
+#: ../src/ui/dialog/export.cpp:1105
msgid "You have to enter a filename"
msgstr "Необхідно ввести назву файла"
-#: ../src/ui/dialog/export.cpp:1115
+#: ../src/ui/dialog/export.cpp:1119
msgid "The chosen area to be exported is invalid."
msgstr "Некоректна область для експортування."
-#: ../src/ui/dialog/export.cpp:1116
+#: ../src/ui/dialog/export.cpp:1120
msgid "The chosen area to be exported is invalid"
msgstr "Некоректна область для експорту"
-#: ../src/ui/dialog/export.cpp:1131
+#: ../src/ui/dialog/export.cpp:1135
#, c-format
msgid "Directory %s does not exist or is not a directory.\n"
msgstr "Каталог %s не існує, або ж це не каталог.\n"
#. TRANSLATORS: %1 will be the filename, %2 the width, and %3 the height of the image
-#: ../src/ui/dialog/export.cpp:1145 ../src/ui/dialog/export.cpp:1147
+#: ../src/ui/dialog/export.cpp:1149 ../src/ui/dialog/export.cpp:1151
msgid "Exporting %1 (%2 x %3)"
msgstr "Експортування %1 (%2 ⨯ %3)"
-#: ../src/ui/dialog/export.cpp:1173
+#: ../src/ui/dialog/export.cpp:1177
#, c-format
msgid "Drawing exported to <b>%s</b>."
msgstr "Малюнок експортовано до <b>%s</b>."
-#: ../src/ui/dialog/export.cpp:1177
+#: ../src/ui/dialog/export.cpp:1181
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
+#: ../src/ui/dialog/export.cpp:1303 ../src/ui/dialog/input.cpp:1082
+#: ../src/verbs.cpp:2354 ../src/widgets/desktop-widget.cpp:1123
msgid "_Save"
msgstr "З_берегти"
@@ -15958,8 +15416,8 @@ msgid "Information"
msgstr "Інформація"
#: ../src/ui/dialog/extension-editor.cpp:82 ../src/verbs.cpp:290
-#: ../src/verbs.cpp:309 ../share/extensions/color_custom.inx.h:7
-#: ../share/extensions/color_HSL_adjust.inx.h:11
+#: ../src/verbs.cpp:309 ../share/extensions/color_HSL_adjust.inx.h:11
+#: ../share/extensions/color_custom.inx.h:7
#: ../share/extensions/color_randomize.inx.h:6
#: ../share/extensions/dots.inx.h:7
#: ../share/extensions/draw_from_triangle.inx.h:35
@@ -15994,15 +15452,15 @@ msgstr "Інформація"
#: ../share/extensions/layout_nup.inx.h:24
#: ../share/extensions/lindenmayer.inx.h:13
#: ../share/extensions/lorem_ipsum.inx.h:6
-#: ../share/extensions/measure.inx.h:15
+#: ../share/extensions/measure.inx.h:16
#: ../share/extensions/pathalongpath.inx.h:16
#: ../share/extensions/pathscatter.inx.h:18
#: ../share/extensions/radiusrand.inx.h:8 ../share/extensions/split.inx.h:8
#: ../share/extensions/voronoi2svg.inx.h:11
#: ../share/extensions/web-set-att.inx.h:25
+#: ../share/extensions/web-transmit-att.inx.h:23
#: ../share/extensions/webslicer_create_group.inx.h:11
#: ../share/extensions/webslicer_export.inx.h:6
-#: ../share/extensions/web-transmit-att.inx.h:23
msgid "Help"
msgstr "Довідка"
@@ -16010,103 +15468,104 @@ msgstr "Довідка"
msgid "Parameters"
msgstr "Параметри"
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:398
+#. Fill in the template
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:376
msgid "No preview"
msgstr "Без перегляду"
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:504
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:480
msgid "too large for preview"
msgstr "завелике для перегляду"
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:594
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:565
msgid "Enable preview"
msgstr "Дозволити перегляд"
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:751
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:764
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:768
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:771
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:779
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:795
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:810
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:715
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:728
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:732
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:735
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:743
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:759
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:774
#: ../src/ui/dialog/filedialogimpl-win32.cpp:289
#: ../src/ui/dialog/filedialogimpl-win32.cpp:420
msgid "All Files"
msgstr "Усі файли"
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:776
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:792
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:807
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:740
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:756
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:771
#: ../src/ui/dialog/filedialogimpl-win32.cpp:290
msgid "All Inkscape Files"
msgstr "Усі файли Inkscape"
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:783
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:799
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:813
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:747
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:763
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:777
#: ../src/ui/dialog/filedialogimpl-win32.cpp:291
msgid "All Images"
msgstr "Усі зображення"
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:786
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:802
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:816
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:750
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:766
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:780
#: ../src/ui/dialog/filedialogimpl-win32.cpp:292
msgid "All Vectors"
msgstr "Всі векторні"
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:789
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:805
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:819
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:753
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:769
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:783
#: ../src/ui/dialog/filedialogimpl-win32.cpp:293
msgid "All Bitmaps"
msgstr "Всі растрові"
#. ###### File options
#. ###### Do we want the .xxx extension automatically added?
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1048
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1616
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1002
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1560
msgid "Append filename extension automatically"
msgstr "Додавати розширення файла автоматично"
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1226
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1480
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1175
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1428
msgid "Guess from extension"
msgstr "Визначити з розширення"
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1501
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1447
msgid "Left edge of source"
msgstr "Лівий край джерела"
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1502
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1448
msgid "Top edge of source"
msgstr "Верхній край джерела"
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1503
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1449
msgid "Right edge of source"
msgstr "Правий край джерела"
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1504
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1450
msgid "Bottom edge of source"
msgstr "Нижній край джерела"
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1505
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1451
msgid "Source width"
msgstr "Ширина джерела"
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1506
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1452
msgid "Source height"
msgstr "Висота джерела"
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1507
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1453
msgid "Destination width"
msgstr "Ширина призначення"
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1508
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1454
msgid "Destination height"
msgstr "Висота призначення"
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1509
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1455
msgid "Resolution (dots per inch)"
msgstr "Роздільна здатність (у т./дюйм)"
@@ -16114,24 +15573,30 @@ msgstr "Роздільна здатність (у т./дюйм)"
#. ## EXTRA WIDGET -- SOURCE SIDE
#. #########################################
#. ##### Export options buttons/spinners, etc
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1547
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1493
msgid "Document"
msgstr "Документ"
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1559
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1501 ../src/verbs.cpp:175
+#: ../src/widgets/desktop-widget.cpp:1997
+#: ../share/extensions/printing_marks.inx.h:18
+msgid "Selection"
+msgstr "позначене"
+
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1505
msgctxt "Export dialog"
msgid "Custom"
msgstr "Нетипове"
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1579
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1525
msgid "Source"
msgstr "Джерело"
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1599
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1545
msgid "Cairo"
msgstr "Cairo"
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1602
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1548
msgid "Antialias"
msgstr "Плавне змінювання"
@@ -16295,99 +15760,99 @@ msgstr "_Дублювати"
msgid "_Filter"
msgstr "_Фільтр"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1381
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1379
msgid "R_ename"
msgstr "Пере_йменувати"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1511
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1512
msgid "Rename filter"
msgstr "Перейменувати фільтр"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1556
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1565
msgid "Apply filter"
msgstr "Застосувати фільтр"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1626
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1635
msgid "filter"
msgstr "фільтрувати"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1633
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1642
msgid "Add filter"
msgstr "Додати фільтр"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1685
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1694
msgid "Duplicate filter"
msgstr "Дублювати фільтр"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1784
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1793
msgid "_Effect"
msgstr "_Ефект"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1794
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1803
msgid "Connections"
msgstr "З'єднання"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1932
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1941
msgid "Remove filter primitive"
msgstr "Вилучити примітив фільтра"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2520
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2529
msgid "Remove merge node"
msgstr "Вилучити вузол об'єднання"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2640
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2649
msgid "Reorder filter primitive"
msgstr "Зміна порядку примітивів фільтра"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2720
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2729
msgid "Add Effect:"
msgstr "Додати ефект:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2721
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2730
msgid "No effect selected"
msgstr "Не вибрано жодного ефекту"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2722
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2731
msgid "No filter selected"
msgstr "Не вибрано жодного фільтра"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2767
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2776
msgid "Effect parameters"
msgstr "Параметри ефекту"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2768
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2777
msgid "Filter General Settings"
msgstr "Загальні параметри фільтра"
#. default x:
#. default y:
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2826
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2835
msgid "Coordinates:"
msgstr "Координати:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2826
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2835
msgid "X coordinate of the left corners of filter effects region"
msgstr "Координата X лівих кутів області дії ефектів фільтра"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2826
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2835
msgid "Y coordinate of the upper corners of filter effects region"
msgstr "Координата X верхніх кутів області дії ефектів фільтра"
#. default width:
#. default height:
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2827
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2836
msgid "Dimensions:"
msgstr "Розміри:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2827
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2836
msgid "Width of filter effects region"
msgstr "Ширина області дії ефектів фільтра"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2827
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2836
msgid "Height of filter effects region"
msgstr "Висота області дії ефектів фільтра"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2833
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2842
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 "
@@ -16398,40 +15863,40 @@ msgstr ""
"матрицю значень розміром 5×4. Інші варіанти — це простий спосіб виконати "
"найпростіші операції без визначення всієї матриці вручну."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2834
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2843
msgid "Value(s):"
msgstr "Значення:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2838
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2847
msgid "R:"
msgstr "Ч:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2839
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2848
#: ../src/widgets/sp-color-icc-selector.cpp:359
msgid "G:"
msgstr "З:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2840
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2849
msgid "B:"
msgstr "С:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2841
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2850
msgid "A:"
msgstr "П:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2844
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2884
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2853
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2893
msgid "Operator:"
msgstr "Оператор:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2845
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2854
msgid "K1:"
msgstr "K1:"
-#: ../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
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2854
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2855
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2856
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2857
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 "
@@ -16441,38 +15906,38 @@ msgstr ""
"за формулою k1*i1*i2 + k2*i1 + k3*i2 + k4, де i1 і i2 — значення пікселів "
"першого і другого вхідних значень відповідно."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2846
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2855
msgid "K2:"
msgstr "K2:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2847
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2856
msgid "K3:"
msgstr "K3:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2848
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2857
msgid "K4:"
msgstr "K4:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2851
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2860
msgid "Size:"
msgstr "Розмір:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2851
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2860
msgid "width of the convolve matrix"
msgstr "ширина матриці згортки"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2851
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2860
msgid "height of the convolve matrix"
msgstr "висота матриці згортки"
#. default x:
#. default y:
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2852
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2861
#: ../src/ui/dialog/object-attributes.cpp:48
msgid "Target:"
msgstr "Target:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2852
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2861
msgid ""
"X coordinate of the target point in the convolve matrix. The convolution is "
"applied to pixels around this point."
@@ -16480,7 +15945,7 @@ msgstr ""
"Координата X кінцевої точки матриці згортки. Згортка застосовується до "
"пікселів навколо цієї точки."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2852
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2861
msgid ""
"Y coordinate of the target point in the convolve matrix. The convolution is "
"applied to pixels around this point."
@@ -16489,11 +15954,11 @@ msgstr ""
"пікселів навколо цієї точки."
#. TRANSLATORS: for info on "Kernel", see http://en.wikipedia.org/wiki/Kernel_(matrix)
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2854
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2863
msgid "Kernel:"
msgstr "Ядро:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2854
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2863
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 "
@@ -16508,11 +15973,11 @@ msgstr ""
"у той час, як матриця, заповнена сталим ненульовим значенням дасть звичайний "
"ефект розмивання."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2856
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2865
msgid "Divisor:"
msgstr "Дільник:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2856
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2865
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 "
@@ -16524,11 +15989,11 @@ msgstr ""
"кольору. Дільник, що є сумою всіх значень матриці, приглушує загальну "
"інтенсивність кольорів остаточного зображення."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2857
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2866
msgid "Bias:"
msgstr "Зміщення:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2857
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2866
msgid ""
"This value is added to each component. This is useful to define a constant "
"value as the zero response of the filter."
@@ -16536,11 +16001,11 @@ msgstr ""
"Це значення додається до кожного компонента. Корисно для задання сталої, як "
"нульового відгуку фільтра."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2858
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2867
msgid "Edge Mode:"
msgstr "Режим країв:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2858
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2867
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 "
@@ -16550,31 +16015,31 @@ msgstr ""
"щоб матричні операції могли працювати з ядром, розташованим на краю "
"зображення або поблизу нього."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2859
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2868
msgid "Preserve Alpha"
msgstr "Зберігати α-канал"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2859
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2868
msgid "If set, the alpha channel won't be altered by this filter primitive."
msgstr "Якщо встановлено, α-канал не буде змінено цим примітивом фільтра."
#. default: white
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2862
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2871
msgid "Diffuse Color:"
msgstr "Колір дифузії:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2862
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2895
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2871
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2904
msgid "Defines the color of the light source"
msgstr "Визначає колір джерела світла"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2863
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2896
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2872
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2905
msgid "Surface Scale:"
msgstr "Масштаб поверхні:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2863
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2896
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2872
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2905
msgid ""
"This value amplifies the heights of the bump map defined by the input alpha "
"channel"
@@ -16582,59 +16047,59 @@ msgstr ""
"Це значення визначає множник висоти карти рельєфу, що задається вхідним α-"
"каналом"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2864
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2897
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2873
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2906
msgid "Constant:"
msgstr "Константа:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2864
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2897
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2873
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2906
msgid "This constant affects the Phong lighting model."
msgstr "Ця стала стосується моделі освітлення Фонга"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2865
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2899
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2874
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2908
msgid "Kernel Unit Length:"
msgstr "Одиниця довжини у ядрі:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2869
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2878
msgid "This defines the intensity of the displacement effect."
msgstr "Ця величина визначає інтенсивність ефекту зміщення."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2870
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2879
msgid "X displacement:"
msgstr "Зміщення за X:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2870
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2879
msgid "Color component that controls the displacement in the X direction"
msgstr "Компонент кольору, що керує зміщенням у напрямку осі X"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2871
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2880
msgid "Y displacement:"
msgstr "Зміщення за Y:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2871
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2880
msgid "Color component that controls the displacement in the Y direction"
msgstr "Компонент кольору, що керує зміщенням у напрямку осі Y"
#. default: black
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2874
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2883
msgid "Flood Color:"
msgstr "Колір заливки:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2874
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2883
msgid "The whole filter region will be filled with this color."
msgstr "Всю область дії фільтра буде залито цим кольором."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2878
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2887
msgid "Standard Deviation:"
msgstr "Стандартне відхилення:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2878
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2887
msgid "The standard deviation for the blur operation."
msgstr "Стандартне відхилення під час виконання операції розмивання"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2884
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2893
msgid ""
"Erode: performs \"thinning\" of input image.\n"
"Dilate: performs \"fattenning\" of input image."
@@ -16642,41 +16107,41 @@ msgstr ""
"Ерозія: виконує «витончення» вхідного зображення\n"
"Розтягування: «потовщує» вхідне зображення"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2888
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2897
msgid "Source of Image:"
msgstr "Джерело зображення:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2891
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2900
msgid "Delta X:"
msgstr "Крок за X:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2891
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2900
msgid "This is how far the input image gets shifted to the right"
msgstr "Визначає як далеко вхідне зображення зміщується праворуч"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2892
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2901
msgid "Delta Y:"
msgstr "Крок за Y:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2892
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2901
msgid "This is how far the input image gets shifted downwards"
msgstr "Визначає як далеко вхідне зображення зміщується донизу"
#. default: white
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2895
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2904
msgid "Specular Color:"
msgstr "Колір відбиття:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2898
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2907
#: ../share/extensions/interp.inx.h:2
msgid "Exponent:"
msgstr "Експонента:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2898
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2907
msgid "Exponent for specular term, larger is more \"shiny\"."
msgstr "Степінь відбиття: більше значення дає «яскравіше»."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2907
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2916
msgid ""
"Indicates whether the filter primitive should perform a noise or turbulence "
"function."
@@ -16684,27 +16149,27 @@ msgstr ""
"Позначає чи повинен примітив виконувати функцію створення турбулентності або "
"шуму."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2908
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2917
msgid "Base Frequency:"
msgstr "Опорна частота:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2909
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2918
msgid "Octaves:"
msgstr "Октави:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2910
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2919
msgid "Seed:"
msgstr "Випадкове значення:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2910
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2919
msgid "The starting number for the pseudo random number generator."
msgstr "Початкове число для генератора псевдовипадкових чисел."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2922
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2931
msgid "Add filter primitive"
msgstr "Додати примітив фільтра"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2939
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2948
msgid ""
"The <b>feBlend</b> filter primitive provides 4 image blending modes: screen, "
"multiply, darken and lighten."
@@ -16712,7 +16177,7 @@ msgstr ""
"Примітив фільтра <b>feBlend</b> надає можливість використовувати 4 режими "
"змішування: просвічування, множення, темнішання та світлішання."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2943
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2952
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 "
@@ -16722,7 +16187,7 @@ msgstr ""
"кольору до кожної відображеної точки. Все це включає до себе перетворення "
"об'єкта до півтонів сірого, зміну насиченості кольору і зміну відтінку."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2947
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2956
msgid ""
"The <b>feComponentTransfer</b> filter primitive manipulates the input's "
"color components (red, green, blue, and alpha) according to particular "
@@ -16734,7 +16199,7 @@ msgstr ""
"з окремими функціями переходу, роблячи можливим операції на зразок "
"регулювання яскравості і контрасту, баланс кольорів та постеризацію."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2951
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2960
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 "
@@ -16746,7 +16211,7 @@ msgstr ""
"описаного у стандарті SVG. Режими змішування Портера-Даффа по суті є "
"булівськими операціями між значеннями кольорів відповідних точок зображень."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2955
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2964
msgid ""
"The <b>feConvolveMatrix</b> lets you specify a Convolution to be applied on "
"the image. Common effects created using convolution matrices are blur, "
@@ -16761,7 +16226,7 @@ msgstr ""
"за допомогою цього примітиву фільтра, особливий примітив фільтра для "
"Гаусового розмивання є швидшим та незалежним від роздільної здатності."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2959
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2968
msgid ""
"The <b>feDiffuseLighting</b> and feSpecularLighting filter primitives create "
"\"embossed\" shadings. The input's alpha channel is used to provide depth "
@@ -16773,7 +16238,7 @@ msgstr ""
"використовується для відтворення глибини: непрозоріші області наближаються "
"до глядача, а прозоріші — віддаляються."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2963
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2972
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 "
@@ -16785,7 +16250,7 @@ msgstr ""
"у якому напрямку і на яку відстань слід змістити точку. Класичними "
"прикладами фільтра є ефекти «вихор» і «затискання»."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2967
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2976
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 "
@@ -16795,7 +16260,7 @@ msgstr ""
"непрозорістю. Зазвичай, його використовують як початковий для інших "
"фільтрів, з метою надати графіці кольору."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2971
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2980
msgid ""
"The <b>feGaussianBlur</b> filter primitive uniformly blurs its input. It is "
"commonly used together with feOffset to create a drop shadow effect."
@@ -16804,7 +16269,7 @@ msgstr ""
"його застосовано. Зазвичай, він використовується разом з feOffset для "
"створення ефекту відкидання тіні."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2975
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2984
msgid ""
"The <b>feImage</b> filter primitive fills the region with an external image "
"or another part of the document."
@@ -16812,7 +16277,7 @@ msgstr ""
"Примітив фільтра <b>feImage</b> заливає область зовнішнім зображенням або "
"іншою частиною документа."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2979
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2988
msgid ""
"The <b>feMerge</b> filter primitive composites several temporary images "
"inside the filter primitive to a single image. It uses normal alpha "
@@ -16825,7 +16290,7 @@ msgstr ""
"кратне застосування примітивів feBlend у 'звичайному' режимі або кратне "
"застосування примітивів feComposite у 'над'-режимі."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2983
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2992
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 "
@@ -16835,7 +16300,7 @@ msgstr ""
"ерозії та розширення. Для однокольорових об'єктів ерозія робить об'єкт "
"меншим, а розширення — більшим."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2987
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2996
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 "
@@ -16845,7 +16310,7 @@ msgstr ""
"відстань. Це, наприклад, корисно для відображення тіней, коли тінь "
"розташовано з невеликим зсувом відносно об'єкта, що її відкидає."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2991
+#: ../src/ui/dialog/filter-effects-dialog.cpp:3000
msgid ""
"The <b>feDiffuseLighting</b> and <b>feSpecularLighting</b> filter primitives "
"create \"embossed\" shadings. The input's alpha channel is used to provide "
@@ -16857,14 +16322,14 @@ msgstr ""
"матеріалу, використовується для відтворення глибини: непрозоріші області "
"наближаються до глядача, а прозоріші — віддаляються."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2995
+#: ../src/ui/dialog/filter-effects-dialog.cpp:3004
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:2999
+#: ../src/ui/dialog/filter-effects-dialog.cpp:3008
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 "
@@ -16874,11 +16339,11 @@ msgstr ""
"шумів корисний для імітації деяких природних явищ на зразок хмар, полум'я та "
"диму, та під час створення складних текстур на зразок мармуру та граніту."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:3018
+#: ../src/ui/dialog/filter-effects-dialog.cpp:3027
msgid "Duplicate filter primitive"
msgstr "Дублювати примітив фільтра"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:3071
+#: ../src/ui/dialog/filter-effects-dialog.cpp:3080
msgid "Set filter primitive attribute"
msgstr "Встановити атрибут примітива фільтра"
@@ -17941,6 +17406,78 @@ msgstr "Додати"
msgid "Append text"
msgstr "Додати текст"
+#: ../src/ui/dialog/grid-arrange-tab.cpp:351
+msgid "Arrange in a grid"
+msgstr "Розташування на сітці"
+
+#: ../src/ui/dialog/grid-arrange-tab.cpp:589
+#: ../src/ui/dialog/object-attributes.cpp:66
+#: ../src/ui/dialog/object-attributes.cpp:75
+#: ../src/widgets/desktop-widget.cpp:666 ../src/widgets/node-toolbar.cpp:581
+msgid "X:"
+msgstr "X:"
+
+#: ../src/ui/dialog/grid-arrange-tab.cpp:589
+msgid "Horizontal spacing between columns."
+msgstr "Горизонтальний інтервал між стовпчиками."
+
+#: ../src/ui/dialog/grid-arrange-tab.cpp:590
+#: ../src/ui/dialog/object-attributes.cpp:67
+#: ../src/ui/dialog/object-attributes.cpp:76
+#: ../src/widgets/desktop-widget.cpp:676 ../src/widgets/node-toolbar.cpp:599
+msgid "Y:"
+msgstr "Y:"
+
+#: ../src/ui/dialog/grid-arrange-tab.cpp:590
+msgid "Vertical spacing between rows."
+msgstr "Вертикальний проміжок між рядками."
+
+#: ../src/ui/dialog/grid-arrange-tab.cpp:637
+msgid "_Rows:"
+msgstr "_Рядків:"
+
+#: ../src/ui/dialog/grid-arrange-tab.cpp:646
+msgid "Number of rows"
+msgstr "Кількість рядків"
+
+#: ../src/ui/dialog/grid-arrange-tab.cpp:650
+msgid "Equal _height"
+msgstr "Однакова _висота"
+
+#: ../src/ui/dialog/grid-arrange-tab.cpp:661
+msgid "If not set, each row has the height of the tallest object in it"
+msgstr ""
+"Якщо не відмічено, висота кожного рядка дорівнює висоті найвищого об'єкта в "
+"ньому"
+
+#. #### Number of columns ####
+#: ../src/ui/dialog/grid-arrange-tab.cpp:677
+msgid "_Columns:"
+msgstr "Ст_овпчиків:"
+
+#: ../src/ui/dialog/grid-arrange-tab.cpp:686
+msgid "Number of columns"
+msgstr "Кількість стовпчиків"
+
+#: ../src/ui/dialog/grid-arrange-tab.cpp:690
+msgid "Equal _width"
+msgstr "О_днакова ширина"
+
+#: ../src/ui/dialog/grid-arrange-tab.cpp:700
+msgid "If not set, each column has the width of the widest object in it"
+msgstr ""
+"Якщо не відмічено, ширина кожного стовпчика дорівнює ширині найширшого "
+"об'єкта в ньому"
+
+#. #### Radio buttons to control spacing manually or to fit selection bbox ####
+#: ../src/ui/dialog/grid-arrange-tab.cpp:720
+msgid "_Fit into selection box"
+msgstr "З_берегти ширину та висоту позначення"
+
+#: ../src/ui/dialog/grid-arrange-tab.cpp:727
+msgid "_Set spacing:"
+msgstr "Вс_тановити інтервал:"
+
#: ../src/ui/dialog/guides.cpp:47
msgid "Rela_tive change"
msgstr "Відно_сна зміна"
@@ -17959,7 +17496,7 @@ msgctxt "Guides"
msgid "_Y:"
msgstr "_Y:"
-#: ../src/ui/dialog/guides.cpp:50 ../src/ui/dialog/object-properties.cpp:64
+#: ../src/ui/dialog/guides.cpp:50 ../src/ui/dialog/object-properties.cpp:59
msgid "_Label:"
msgstr "_Мітка:"
@@ -17971,20 +17508,20 @@ msgstr "Ви також можете надати цій напрямній на
msgid "_Angle:"
msgstr "_Кут:"
-#: ../src/ui/dialog/guides.cpp:131
+#: ../src/ui/dialog/guides.cpp:130
msgid "Set guide properties"
msgstr "Властивості напрямної"
-#: ../src/ui/dialog/guides.cpp:170
+#: ../src/ui/dialog/guides.cpp:160
msgid "Guideline"
msgstr "Напрямна"
-#: ../src/ui/dialog/guides.cpp:323
+#: ../src/ui/dialog/guides.cpp:310
#, c-format
msgid "Guideline ID: %s"
msgstr "Ід. напрямної: %s"
-#: ../src/ui/dialog/guides.cpp:329
+#: ../src/ui/dialog/guides.cpp:316
#, c-format
msgid "Current: %s"
msgstr "Поточний: %s"
@@ -18352,12 +17889,12 @@ msgstr "Стиль малювання об'єктів"
#. Zoom
#: ../src/ui/dialog/inkscape-preferences.cpp:376
-#: ../src/widgets/desktop-widget.cpp:636
+#: ../src/widgets/desktop-widget.cpp:631
msgid "Zoom"
msgstr "Масштаб"
#. Measure
-#: ../src/ui/dialog/inkscape-preferences.cpp:381 ../src/verbs.cpp:2682
+#: ../src/ui/dialog/inkscape-preferences.cpp:381 ../src/verbs.cpp:2675
msgctxt "ContextVerb"
msgid "Measure"
msgstr "Міра"
@@ -18422,7 +17959,7 @@ msgstr ""
"знімається попереднє позначення)"
#. Text
-#: ../src/ui/dialog/inkscape-preferences.cpp:439 ../src/verbs.cpp:2674
+#: ../src/ui/dialog/inkscape-preferences.cpp:439 ../src/verbs.cpp:2667
msgctxt "ContextVerb"
msgid "Text"
msgstr "Текст"
@@ -19164,8 +18701,6 @@ msgid "_Time of opacity change animation:"
msgstr "_Час зміни непрозорості у анімації:"
#: ../src/ui/dialog/inkscape-preferences.cpp:703
-#: ../share/extensions/hpgl_output.inx.h:33
-#: ../share/extensions/plotter.inx.h:49
msgid "Miscellaneous"
msgstr "Інше"
@@ -19957,7 +19492,7 @@ msgstr "Позначення"
#. Transforms options
#: ../src/ui/dialog/inkscape-preferences.cpp:1169
-#: ../src/widgets/select-toolbar.cpp:578
+#: ../src/widgets/select-toolbar.cpp:570
msgid "Scale stroke width"
msgstr "Змінювати ширину штриха"
@@ -19978,25 +19513,25 @@ msgid "Preserved"
msgstr "Без оптимізації"
#: ../src/ui/dialog/inkscape-preferences.cpp:1177
-#: ../src/widgets/select-toolbar.cpp:579
+#: ../src/widgets/select-toolbar.cpp:571
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:590
+#: ../src/widgets/select-toolbar.cpp:582
msgid "When scaling rectangles, scale the radii of rounded corners"
msgstr ""
"При зміні розміру прямокутників міняти радіус округлених кутів у тій самій "
"пропорції"
#: ../src/ui/dialog/inkscape-preferences.cpp:1181
-#: ../src/widgets/select-toolbar.cpp:601
+#: ../src/widgets/select-toolbar.cpp:593
msgid "Move gradients (in fill or stroke) along with the objects"
msgstr "Трансформувати градієнти (у заповненні чи штрихах) разом з об'єктом"
#: ../src/ui/dialog/inkscape-preferences.cpp:1183
-#: ../src/widgets/select-toolbar.cpp:612
+#: ../src/widgets/select-toolbar.cpp:604
msgid "Move patterns (in fill or stroke) along with the objects"
msgstr "Трансформувати візерунки (у заповненнях чи штрихах) разом з об'єктом"
@@ -20449,7 +19984,7 @@ msgid "Number of _Threads:"
msgstr "Кількість _потоків:"
#: ../src/ui/dialog/inkscape-preferences.cpp:1362
-#: ../src/ui/dialog/inkscape-preferences.cpp:1889
+#: ../src/ui/dialog/inkscape-preferences.cpp:1894
msgid "(requires restart)"
msgstr "(потребує перезапуску)"
@@ -20549,7 +20084,7 @@ msgstr "Обробка"
#. Note: /options/bitmapoversample removed with Cairo renderer
#: ../src/ui/dialog/inkscape-preferences.cpp:1423 ../src/verbs.cpp:156
-#: ../src/widgets/calligraphy-toolbar.cpp:643
+#: ../src/widgets/calligraphy-toolbar.cpp:626
msgid "Edit"
msgstr "Змінити"
@@ -20567,7 +20102,7 @@ msgid "_Bitmap editor:"
msgstr "_Растровий редактор:"
#: ../src/ui/dialog/inkscape-preferences.cpp:1430
-#: ../share/extensions/guillotine.inx.h:5
+#: ../share/extensions/guillotine.inx.h:5 ../share/extensions/plotter.inx.h:52
#: ../share/extensions/print_win32_vector.inx.h:2
msgid "Export"
msgstr "Експорт"
@@ -20581,7 +20116,7 @@ msgid "Default bitmap resolution (in dots per inch) in the Export dialog"
msgstr "Типова роздільна здатність (у точках на дюйм) у вікні експорту"
#: ../src/ui/dialog/inkscape-preferences.cpp:1434
-#: ../src/ui/dialog/xml-tree.cpp:909
+#: ../src/ui/dialog/xml-tree.cpp:912
msgid "Create"
msgstr "Створити"
@@ -20630,11 +20165,24 @@ msgstr "Перевизначити роздільну здатність з фа
msgid "Use default bitmap resolution in favor of information from file"
msgstr "Надавати перевагу типові роздільній здатності перед даними з файла"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1466
+#. rendering outlines for pixmap image tags
+#: ../src/ui/dialog/inkscape-preferences.cpp:1468
+msgid "Images in Outline Mode"
+msgstr "Зображення у режимі ескіза"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:1469
+msgid ""
+"When active will render images while in outline mode instead of a red box "
+"with an x. This is useful for manual tracing."
+msgstr ""
+"Якщо позначено, у режимі ескіза замість червоного прямокутника з x "
+"показувати зображення. Корисно для трасування вручну."
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:1471
msgid "Bitmaps"
msgstr "Растрові зображення"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1478
+#: ../src/ui/dialog/inkscape-preferences.cpp:1483
msgid ""
"Select a file of predefined shortcuts to use. Any customized shortcuts you "
"create will be added seperately to "
@@ -20642,33 +20190,33 @@ msgstr ""
"Виберіть файл попередньо визначених скорочень, яким слід скористатися. Всі "
"створені вами нетипові скорочення буде окремо додано до "
-#: ../src/ui/dialog/inkscape-preferences.cpp:1481
+#: ../src/ui/dialog/inkscape-preferences.cpp:1486
msgid "Shortcut file:"
msgstr "Файл скорочень:"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1484
+#: ../src/ui/dialog/inkscape-preferences.cpp:1489
#: ../src/ui/dialog/template-load-tab.cpp:48
msgid "Search:"
msgstr "Шукати:"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1496
+#: ../src/ui/dialog/inkscape-preferences.cpp:1501
msgid "Shortcut"
msgstr "Скорочення"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1497
+#: ../src/ui/dialog/inkscape-preferences.cpp:1502
#: ../src/ui/widget/page-sizer.cpp:260
msgid "Description"
msgstr "Опис"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1552
-#: ../src/ui/dialog/pixelartdialog.cpp:268
+#: ../src/ui/dialog/inkscape-preferences.cpp:1557
+#: ../src/ui/dialog/pixelartdialog.cpp:296
#: ../src/ui/dialog/svg-fonts-dialog.cpp:698
#: ../src/ui/dialog/tracedialog.cpp:813
#: ../src/ui/widget/preferences-widget.cpp:749
msgid "Reset"
msgstr "Скинути"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1552
+#: ../src/ui/dialog/inkscape-preferences.cpp:1557
msgid ""
"Remove all your customized keyboard shortcuts, and revert to the shortcuts "
"in the shortcut file listed above"
@@ -20676,40 +20224,40 @@ msgstr ""
"Вилучити всі нетипові клавіатурні скорочення і повернутися до скорочень, "
"визначених у файлів, вказаному вище."
-#: ../src/ui/dialog/inkscape-preferences.cpp:1556
+#: ../src/ui/dialog/inkscape-preferences.cpp:1561
msgid "Import ..."
msgstr "Імпорт…"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1556
+#: ../src/ui/dialog/inkscape-preferences.cpp:1561
msgid "Import custom keyboard shortcuts from a file"
msgstr "Імпортувати нетипові клавіатурні скорочення з файла"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1559
+#: ../src/ui/dialog/inkscape-preferences.cpp:1564
msgid "Export ..."
msgstr "Експортувати…"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1559
+#: ../src/ui/dialog/inkscape-preferences.cpp:1564
msgid "Export custom keyboard shortcuts to a file"
msgstr "Експортувати нетипові клавіатурні скорочення до файла"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1569
+#: ../src/ui/dialog/inkscape-preferences.cpp:1574
msgid "Keyboard Shortcuts"
msgstr "Клавіатурні скорочення"
#. Find this group in the tree
-#: ../src/ui/dialog/inkscape-preferences.cpp:1732
+#: ../src/ui/dialog/inkscape-preferences.cpp:1737
msgid "Misc"
msgstr "Інше"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1851
+#: ../src/ui/dialog/inkscape-preferences.cpp:1856
msgid "Set the main spell check language"
msgstr "Встановити основну мову перевірки правопису"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1854
+#: ../src/ui/dialog/inkscape-preferences.cpp:1859
msgid "Second language:"
msgstr "Друга мова:"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1855
+#: ../src/ui/dialog/inkscape-preferences.cpp:1860
msgid ""
"Set the second spell check language; checking will only stop on words "
"unknown in ALL chosen languages"
@@ -20717,11 +20265,11 @@ msgstr ""
"Встановіть другу мову для перевірки правопису: перевірка зупинятиметься лише "
"на словах, яких немає у ВСІХ вказаних мовах"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1858
+#: ../src/ui/dialog/inkscape-preferences.cpp:1863
msgid "Third language:"
msgstr "Третя мова:"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1859
+#: ../src/ui/dialog/inkscape-preferences.cpp:1864
msgid ""
"Set the third spell check language; checking will only stop on words unknown "
"in ALL chosen languages"
@@ -20729,31 +20277,31 @@ msgstr ""
"Встановіть третю мову для перевірки правопису: перевірка зупинятиметься лише "
"на словах, яких немає у ВСІХ вказаних мовах"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1861
+#: ../src/ui/dialog/inkscape-preferences.cpp:1866
msgid "Ignore words with digits"
msgstr "Ігнорувати слова з цифрами"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1863
+#: ../src/ui/dialog/inkscape-preferences.cpp:1868
msgid "Ignore words containing digits, such as \"R2D2\""
msgstr "Ігнорувати слова, що містять цифри, наприклад, «R2D2»"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1865
+#: ../src/ui/dialog/inkscape-preferences.cpp:1870
msgid "Ignore words in ALL CAPITALS"
msgstr "Ігнорувати слова ПРОПИСНИМИ"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1867
+#: ../src/ui/dialog/inkscape-preferences.cpp:1872
msgid "Ignore words in all capitals, such as \"IUPAC\""
msgstr "Ігнорувати слова, написані прописними літерами, наприклад, «IUPAC»"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1869
+#: ../src/ui/dialog/inkscape-preferences.cpp:1874
msgid "Spellcheck"
msgstr "Перевірка правопису"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1889
+#: ../src/ui/dialog/inkscape-preferences.cpp:1894
msgid "Latency _skew:"
msgstr "Від_хилення латентності:"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1890
+#: ../src/ui/dialog/inkscape-preferences.cpp:1895
msgid ""
"Factor by which the event clock is skewed from the actual time (0.9766 on "
"some systems)"
@@ -20761,11 +20309,11 @@ msgstr ""
"Коефіцієнт, на який годинник подій відхилятиметься від справжнього часу "
"(0,9766 на деяких системах)."
-#: ../src/ui/dialog/inkscape-preferences.cpp:1892
+#: ../src/ui/dialog/inkscape-preferences.cpp:1897
msgid "Pre-render named icons"
msgstr "Іменовані піктограми, що залежать від показу"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1894
+#: ../src/ui/dialog/inkscape-preferences.cpp:1899
msgid ""
"When on, named icons will be rendered before displaying the ui. This is for "
"working around bugs in GTK+ named icon notification"
@@ -20774,85 +20322,85 @@ msgstr ""
"користувача. Це зроблено для обходу вад у сповіщенні іменованою піктограмою "
"у GTK+"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1902
+#: ../src/ui/dialog/inkscape-preferences.cpp:1907
msgid "System info"
msgstr "Відомості щодо системи"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1906
+#: ../src/ui/dialog/inkscape-preferences.cpp:1911
msgid "User config: "
msgstr "Налаштування користувача: "
-#: ../src/ui/dialog/inkscape-preferences.cpp:1906
+#: ../src/ui/dialog/inkscape-preferences.cpp:1911
msgid "Location of users configuration"
msgstr "Розташування налаштувань користувача"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1910
+#: ../src/ui/dialog/inkscape-preferences.cpp:1915
msgid "User preferences: "
msgstr "Параметри користувача: "
-#: ../src/ui/dialog/inkscape-preferences.cpp:1910
+#: ../src/ui/dialog/inkscape-preferences.cpp:1915
msgid "Location of the users preferences file"
msgstr "Розташування файлів з параметрами користувачів"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1914
+#: ../src/ui/dialog/inkscape-preferences.cpp:1919
msgid "User extensions: "
msgstr "Додатки користувача: "
-#: ../src/ui/dialog/inkscape-preferences.cpp:1914
+#: ../src/ui/dialog/inkscape-preferences.cpp:1919
msgid "Location of the users extensions"
msgstr "Розташування додатків користувача"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1918
+#: ../src/ui/dialog/inkscape-preferences.cpp:1923
msgid "User cache: "
msgstr "Кеш користувача: "
-#: ../src/ui/dialog/inkscape-preferences.cpp:1918
+#: ../src/ui/dialog/inkscape-preferences.cpp:1923
msgid "Location of users cache"
msgstr "Розташування кешу даних користувача"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1926
+#: ../src/ui/dialog/inkscape-preferences.cpp:1931
msgid "Temporary files: "
msgstr "Тимчасові файли: "
-#: ../src/ui/dialog/inkscape-preferences.cpp:1926
+#: ../src/ui/dialog/inkscape-preferences.cpp:1931
msgid "Location of the temporary files used for autosave"
msgstr ""
"Розташування тимчасових файлів, які використовуватимуться для створення "
"автоматичних копій"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1930
+#: ../src/ui/dialog/inkscape-preferences.cpp:1935
msgid "Inkscape data: "
msgstr "Дані Inkscape: "
-#: ../src/ui/dialog/inkscape-preferences.cpp:1930
+#: ../src/ui/dialog/inkscape-preferences.cpp:1935
msgid "Location of Inkscape data"
msgstr "Розташування даних Inkscape"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1934
+#: ../src/ui/dialog/inkscape-preferences.cpp:1939
msgid "Inkscape extensions: "
msgstr "Додатки Inkscape: "
-#: ../src/ui/dialog/inkscape-preferences.cpp:1934
+#: ../src/ui/dialog/inkscape-preferences.cpp:1939
msgid "Location of the Inkscape extensions"
msgstr "Розташування додатків Inkscape"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1943
+#: ../src/ui/dialog/inkscape-preferences.cpp:1948
msgid "System data: "
msgstr "Системна дата: "
-#: ../src/ui/dialog/inkscape-preferences.cpp:1943
+#: ../src/ui/dialog/inkscape-preferences.cpp:1948
msgid "Locations of system data"
msgstr "Розташування загальносистемних даних"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1967
+#: ../src/ui/dialog/inkscape-preferences.cpp:1972
msgid "Icon theme: "
msgstr "Тема піктограм: "
-#: ../src/ui/dialog/inkscape-preferences.cpp:1967
+#: ../src/ui/dialog/inkscape-preferences.cpp:1972
msgid "Locations of icon themes"
msgstr "Розташування тем піктограм"
-#: ../src/ui/dialog/inkscape-preferences.cpp:1969
+#: ../src/ui/dialog/inkscape-preferences.cpp:1974
msgid "System"
msgstr "Система"
@@ -20906,7 +20454,7 @@ msgstr "Кількість кнопок:"
msgid "Tablet"
msgstr "Планшет"
-#: ../src/ui/dialog/input.cpp:1039 ../src/ui/dialog/input.cpp:1931
+#: ../src/ui/dialog/input.cpp:1039 ../src/ui/dialog/input.cpp:1928
msgid "pad"
msgstr "панель"
@@ -20932,8 +20480,8 @@ msgstr ""
"Пристрій може бути «Вимкнено», його координати відображено на весь «Екран» "
"або на окреме (зазвичай те, яке перебуває у фокусі) «Вікно»"
-#: ../src/ui/dialog/input.cpp:1616 ../src/widgets/calligraphy-toolbar.cpp:595
-#: ../src/widgets/spray-toolbar.cpp:236 ../src/widgets/tweak-toolbar.cpp:386
+#: ../src/ui/dialog/input.cpp:1616 ../src/widgets/calligraphy-toolbar.cpp:578
+#: ../src/widgets/spray-toolbar.cpp:224 ../src/widgets/tweak-toolbar.cpp:372
msgid "Pressure"
msgstr "Тиск"
@@ -20977,7 +20525,7 @@ msgstr "Перейменування шару"
#. TODO: find an unused layer number, forming name from _("Layer ") + "%d"
#: ../src/ui/dialog/layer-properties.cpp:354
#: ../src/ui/dialog/layer-properties.cpp:410 ../src/verbs.cpp:194
-#: ../src/verbs.cpp:2292
+#: ../src/verbs.cpp:2285
msgid "Layer"
msgstr "Шар"
@@ -21227,71 +20775,51 @@ msgstr "Actuate:"
msgid "URL:"
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: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:681 ../src/widgets/node-toolbar.cpp:612
-msgid "Y:"
-msgstr "Y:"
-
#: ../src/ui/dialog/object-attributes.cpp:70
msgid "Image Rendering:"
msgstr "Обробка зображення:"
-#: ../src/ui/dialog/object-properties.cpp:63
-#: ../src/ui/dialog/object-properties.cpp:398
-#: ../src/ui/dialog/object-properties.cpp:473
-#: ../src/ui/dialog/object-properties.cpp:480
+#: ../src/ui/dialog/object-properties.cpp:58
+#: ../src/ui/dialog/object-properties.cpp:399
+#: ../src/ui/dialog/object-properties.cpp:470
+#: ../src/ui/dialog/object-properties.cpp:477
msgid "_ID:"
msgstr "_Ід.:"
-#: ../src/ui/dialog/object-properties.cpp:65
+#: ../src/ui/dialog/object-properties.cpp:60
msgid "_Title:"
msgstr "_Заголовок:"
-#: ../src/ui/dialog/object-properties.cpp:66
+#: ../src/ui/dialog/object-properties.cpp:61
msgid "_Image Rendering:"
msgstr "_Обробка зображення:"
-#: ../src/ui/dialog/object-properties.cpp:67
-msgid "_Description:"
-msgstr "Оп_ис:"
-
-#: ../src/ui/dialog/object-properties.cpp:75
+#: ../src/ui/dialog/object-properties.cpp:62
msgid "_Hide"
msgstr "С_ховати"
-#: ../src/ui/dialog/object-properties.cpp:76
+#: ../src/ui/dialog/object-properties.cpp:63
msgid "L_ock"
msgstr "За_мкнути"
-#: ../src/ui/dialog/object-properties.cpp:77 ../src/verbs.cpp:2636
-#: ../src/verbs.cpp:2642
-msgid "_Set"
-msgstr "_Встановити"
-
-#: ../src/ui/dialog/object-properties.cpp:78
-msgid "_Interactivity"
-msgstr "_Інтерактивність"
-
#. Create the entry box for the object id
-#: ../src/ui/dialog/object-properties.cpp:156
+#: ../src/ui/dialog/object-properties.cpp:139
msgid ""
"The id= attribute (only letters, digits, and the characters .-_: allowed)"
msgstr ""
"Атрибут id= (дозволяються лише латинські літери, цифри та символи .-_:)"
#. Create the entry box for the object label
-#: ../src/ui/dialog/object-properties.cpp:189
+#: ../src/ui/dialog/object-properties.cpp:174
msgid "A freeform label for the object"
msgstr "Довільна позначка об'єкта"
-#: ../src/ui/dialog/object-properties.cpp:272
+#. Create the frame for the object description
+#: ../src/ui/dialog/object-properties.cpp:225
+msgid "_Description:"
+msgstr "Оп_ис:"
+
+#: ../src/ui/dialog/object-properties.cpp:260
msgid ""
"The 'image-rendering' property can influence how a bitmap is up-scaled:\n"
"\t'auto' no preference;\n"
@@ -21319,48 +20847,59 @@ msgstr "Зробити об'єкт невидимим"
msgid "Check to make the object insensitive (not selectable by mouse)"
msgstr "Зробити цей об'єкт нечутливим до позначення"
-#: ../src/ui/dialog/object-properties.cpp:385
-#: ../src/ui/dialog/object-properties.cpp:390
+#. Button for setting the object's id, label, title and description.
+#: ../src/ui/dialog/object-properties.cpp:325 ../src/verbs.cpp:2629
+#: ../src/verbs.cpp:2635
+msgid "_Set"
+msgstr "_Встановити"
+
+#. Create the frame for interactivity options
+#: ../src/ui/dialog/object-properties.cpp:339
+msgid "_Interactivity"
+msgstr "_Інтерактивність"
+
+#: ../src/ui/dialog/object-properties.cpp:386
+#: ../src/ui/dialog/object-properties.cpp:391
msgid "Ref"
msgstr "Ref"
-#: ../src/ui/dialog/object-properties.cpp:475
+#: ../src/ui/dialog/object-properties.cpp:472
msgid "Id invalid! "
msgstr "Некоректний ідентифікатор!"
-#: ../src/ui/dialog/object-properties.cpp:477
+#: ../src/ui/dialog/object-properties.cpp:474
msgid "Id exists! "
msgstr "Такий ідентифікатор вже є!"
-#: ../src/ui/dialog/object-properties.cpp:483
+#: ../src/ui/dialog/object-properties.cpp:480
msgid "Set object ID"
msgstr "Встановити ідентифікатор об'єкта"
-#: ../src/ui/dialog/object-properties.cpp:497
+#: ../src/ui/dialog/object-properties.cpp:494
msgid "Set object label"
msgstr "Встановити мітку об'єкта"
-#: ../src/ui/dialog/object-properties.cpp:503
+#: ../src/ui/dialog/object-properties.cpp:500
msgid "Set object title"
msgstr "Встановити назву об'єкта"
-#: ../src/ui/dialog/object-properties.cpp:511
+#: ../src/ui/dialog/object-properties.cpp:509
msgid "Set object description"
msgstr "Встановити опис об'єкта"
-#: ../src/ui/dialog/object-properties.cpp:555
+#: ../src/ui/dialog/object-properties.cpp:552
msgid "Lock object"
msgstr "Заблокувати об'єкт"
-#: ../src/ui/dialog/object-properties.cpp:555
+#: ../src/ui/dialog/object-properties.cpp:552
msgid "Unlock object"
msgstr "Відімкнути об'єкт"
-#: ../src/ui/dialog/object-properties.cpp:572
+#: ../src/ui/dialog/object-properties.cpp:568
msgid "Hide object"
msgstr "Сховати об'єкт"
-#: ../src/ui/dialog/object-properties.cpp:572
+#: ../src/ui/dialog/object-properties.cpp:568
msgid "Unhide object"
msgstr "Показати об'єкт"
@@ -21400,11 +20939,11 @@ msgstr "Не вдалося встановити зв'язок з бібліот
msgid "Could not parse search results"
msgstr "Не вдалося обробити результати пошуку"
-#: ../src/ui/dialog/ocaldialogs.cpp:1179
+#: ../src/ui/dialog/ocaldialogs.cpp:1177
msgid "No clipart named <b>%1</b> was found."
msgstr "Не виявлено шаблонів з назвою <b>%1</b>."
-#: ../src/ui/dialog/ocaldialogs.cpp:1181
+#: ../src/ui/dialog/ocaldialogs.cpp:1179
msgid ""
"Please make sure all keywords are spelled correctly, or try again with "
"different keywords."
@@ -21412,106 +20951,114 @@ msgstr ""
"Будь ласка, переконайтеся, що всі вказані ключові слова написано правильно "
"або повторіть спробу пошуку, вказавши інші ключові слова."
-#: ../src/ui/dialog/ocaldialogs.cpp:1233
+#: ../src/ui/dialog/ocaldialogs.cpp:1231
msgid "Search"
msgstr "Пошук"
-#: ../src/ui/dialog/ocaldialogs.cpp:1245
+#: ../src/ui/dialog/ocaldialogs.cpp:1243
msgid "Close"
msgstr "Закрити"
-#: ../src/ui/dialog/pixelartdialog.cpp:162
+#: ../src/ui/dialog/pixelartdialog.cpp:190
msgid "_Curves (multiplier):"
msgstr "_Криві (множник):"
-#: ../src/ui/dialog/pixelartdialog.cpp:165
+#: ../src/ui/dialog/pixelartdialog.cpp:193
msgid "Favors connections that are part of a long curve"
msgstr "Надавати перевагу з’єднанням, які є частиною довших кривих"
-#: ../src/ui/dialog/pixelartdialog.cpp:176
+#: ../src/ui/dialog/pixelartdialog.cpp:204
msgid "_Islands (weight):"
msgstr "_Області (вага):"
-#: ../src/ui/dialog/pixelartdialog.cpp:179
+#: ../src/ui/dialog/pixelartdialog.cpp:207
msgid "Avoid single disconnected pixels"
msgstr "Уникати окремих нез’єднаних пікселів"
-#: ../src/ui/dialog/pixelartdialog.cpp:181
+#: ../src/ui/dialog/pixelartdialog.cpp:209
msgid "A constant vote value"
msgstr "Стале значення рівня"
-#: ../src/ui/dialog/pixelartdialog.cpp:191
+#: ../src/ui/dialog/pixelartdialog.cpp:219
msgid "Sparse pixels (window _radius):"
msgstr "Розріджені пікселі (_радіус вікна):"
-#: ../src/ui/dialog/pixelartdialog.cpp:200
+#: ../src/ui/dialog/pixelartdialog.cpp:228
msgid "The radius of the window analyzed"
msgstr "Радіус вікна, яке буде проаналізовано"
-#: ../src/ui/dialog/pixelartdialog.cpp:201
+#: ../src/ui/dialog/pixelartdialog.cpp:229
msgid "Sparse pixels (_multiplier):"
msgstr "Розріджені пікселі (_множник):"
-#: ../src/ui/dialog/pixelartdialog.cpp:212
+#: ../src/ui/dialog/pixelartdialog.cpp:240
msgid "Favors connections that are part of foreground color"
msgstr "Надавати перевагу з’єднанням, які є частиною кольору тла"
-#: ../src/ui/dialog/pixelartdialog.cpp:218
+#: ../src/ui/dialog/pixelartdialog.cpp:246
msgid "The heuristic computed vote will be multiplied by this value"
msgstr "Значення евристично обчисленого рівня буде помножено на це значення"
-#: ../src/ui/dialog/pixelartdialog.cpp:231
+#: ../src/ui/dialog/pixelartdialog.cpp:259
msgid "Heuristics"
msgstr "Евристика"
-#: ../src/ui/dialog/pixelartdialog.cpp:238
+#: ../src/ui/dialog/pixelartdialog.cpp:266
msgid "_Voronoi diagram"
msgstr "_Діаграма Вороного"
-#: ../src/ui/dialog/pixelartdialog.cpp:239
+#: ../src/ui/dialog/pixelartdialog.cpp:267
msgid "Output composed of straight lines"
msgstr "Результат складається з прямих ліній"
-#: ../src/ui/dialog/pixelartdialog.cpp:245
+#: ../src/ui/dialog/pixelartdialog.cpp:273
msgid "Convert to _B-spline curves"
msgstr "Перетворити на криві з _B-сплайнів"
-#: ../src/ui/dialog/pixelartdialog.cpp:246
+#: ../src/ui/dialog/pixelartdialog.cpp:274
msgid "Preserve staircasing artifacts"
msgstr "Зберігати викривлення у вигляді драбинки"
-#: ../src/ui/dialog/pixelartdialog.cpp:253
+#: ../src/ui/dialog/pixelartdialog.cpp:281
msgid "_Smooth curves"
msgstr "З_гладити криві"
-#: ../src/ui/dialog/pixelartdialog.cpp:254
+#: ../src/ui/dialog/pixelartdialog.cpp:282
msgid "The Kopf-Lischinski algorithm"
msgstr "Алгоритм Копфа-Ліщинського"
-#: ../src/ui/dialog/pixelartdialog.cpp:261
+#: ../src/ui/dialog/pixelartdialog.cpp:289
msgid "Output"
msgstr "Вивід"
-#: ../src/ui/dialog/pixelartdialog.cpp:269
+#: ../src/ui/dialog/pixelartdialog.cpp:297
#: ../src/ui/dialog/tracedialog.cpp:814
msgid "Reset all settings to defaults"
msgstr "Скинути значення всіх параметрів до типових"
-#: ../src/ui/dialog/pixelartdialog.cpp:274
+#: ../src/ui/dialog/pixelartdialog.cpp:302
#: ../src/ui/dialog/tracedialog.cpp:819
msgid "Abort a trace in progress"
msgstr "Перервати векторизацію"
-#: ../src/ui/dialog/pixelartdialog.cpp:278
+#: ../src/ui/dialog/pixelartdialog.cpp:306
#: ../src/ui/dialog/tracedialog.cpp:823
msgid "Execute the trace"
msgstr "Провести векторизацію"
-#: ../src/ui/dialog/pixelartdialog.cpp:362
-msgid "Trace pixel art"
-msgstr "Трасування растрової графіки"
+#: ../src/ui/dialog/pixelartdialog.cpp:388
+msgid ""
+"Image looks too big. Process may take a while and is wise to save your "
+"document before continue.\n"
+"\n"
+"Continue the procedure (without saving)?"
+msgstr ""
+"Здається, зображення є надто великим. Його обробка може бути тривалою. Варто "
+"зберегти ваш документ, перш ніж продовжувати.\n"
+"\n"
+"Продовжити обробку (без збереження)?"
-#: ../src/ui/dialog/pixelartdialog.cpp:376
+#: ../src/ui/dialog/pixelartdialog.cpp:422
msgid ""
"Image looks too big. Process may take a while and it is wise to save your "
"document before continuing.\n"
@@ -21523,6 +21070,69 @@ msgstr ""
"\n"
"Продовжити обробку (без збереження)?"
+#: ../src/ui/dialog/pixelartdialog.cpp:499
+msgid "Trace pixel art"
+msgstr "Трасування растрової графіки"
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:43
+msgctxt "Polar arrange tab"
+msgid "Anchor point:"
+msgstr "Точка прив’язки:"
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:47
+msgctxt "Polar arrange tab"
+msgid "Object's bounding box:"
+msgstr "Видима рамка об’єкта:"
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:54
+msgctxt "Polar arrange tab"
+msgid "Object's rotational center"
+msgstr "Центр обертання об'єкта"
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:59
+msgctxt "Polar arrange tab"
+msgid "Arrange on:"
+msgstr "Крива компонування:"
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:63
+msgctxt "Polar arrange tab"
+msgid "First selected circle/ellipse/arc"
+msgstr "Перше позначене коло, еліпс чи дуга"
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:68
+msgctxt "Polar arrange tab"
+msgid "Last selected circle/ellipse/arc"
+msgstr "Останнє позначене коло, еліпс чи дуга"
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:73
+msgctxt "Polar arrange tab"
+msgid "Parameterized:"
+msgstr "Параметризоване:"
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:78
+msgid "Center X/Y:"
+msgstr "Центр за X/Y:"
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:91
+msgid "Radius X/Y:"
+msgstr "Радіус X/Y:"
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:104
+msgid "Angle X/Y:"
+msgstr "Кут X/Y:"
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:118
+msgid "Rotate objects"
+msgstr "Обертання об’єктів"
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:306
+msgid "Couldn't find an ellipse in selection"
+msgstr "Не вдалося знайти еліпс у позначеному"
+
+#: ../src/ui/dialog/polar-arrange-tab.cpp:371
+msgid "Arrange on ellipse"
+msgstr "Компонувати за еліпсом"
+
#: ../src/ui/dialog/print.cpp:104
msgid "Could not open temporary PNG for bitmap printing"
msgstr "Не вдалося відкрити тимчасовий файл PNG для растрового друку"
@@ -21610,11 +21220,11 @@ msgstr "<b>Завершено</b>, видимих помилок не знайд
msgid "Not in dictionary (%s): <b>%s</b>"
msgstr "Немає у словнику (%s): <b>%s</b>"
-#: ../src/ui/dialog/spellcheck.cpp:725
+#: ../src/ui/dialog/spellcheck.cpp:727
msgid "<i>Checking...</i>"
msgstr "<i>Перевірка…</i>"
-#: ../src/ui/dialog/spellcheck.cpp:794
+#: ../src/ui/dialog/spellcheck.cpp:796
msgid "Fix spelling"
msgstr "Виправити правопис"
@@ -21781,8 +21391,8 @@ msgstr "Текст зразка"
msgid "Preview Text:"
msgstr "Перегляд тексту:"
-#: ../src/ui/dialog/swatches.cpp:203 ../src/ui/tools/gradient-tool.cpp:371
-#: ../src/ui/tools/gradient-tool.cpp:469
+#: ../src/ui/dialog/swatches.cpp:203 ../src/ui/tools/gradient-tool.cpp:367
+#: ../src/ui/tools/gradient-tool.cpp:465
#: ../src/widgets/gradient-vector.cpp:814
msgid "Add gradient stop"
msgstr "Додавання опорної точки градієнта"
@@ -21840,7 +21450,7 @@ msgstr "Робити піктограми меншими зменшенням м
msgid "Toggle 'fit' symbols in icon space."
msgstr "Вмикати/Вимикати символи підбирання розмірів у просторі піктограм."
-#: ../src/ui/dialog/symbols.cpp:574
+#: ../src/ui/dialog/symbols.cpp:576
msgid "Unnamed Symbols"
msgstr "Символи без назв"
@@ -21877,31 +21487,31 @@ msgid "AaBbCcIiPpQq12369$€¢?.;/()"
msgstr "АаБбВвЇїЄєҐґIiPpQq12369$€¢?.;/()"
#. Align buttons
-#: ../src/ui/dialog/text-edit.cpp:97 ../src/widgets/text-toolbar.cpp:1349
-#: ../src/widgets/text-toolbar.cpp:1350
+#: ../src/ui/dialog/text-edit.cpp:97 ../src/widgets/text-toolbar.cpp:1342
+#: ../src/widgets/text-toolbar.cpp:1343
msgid "Align left"
msgstr "Вирівнювання ліворуч"
-#: ../src/ui/dialog/text-edit.cpp:98 ../src/widgets/text-toolbar.cpp:1357
-#: ../src/widgets/text-toolbar.cpp:1358
+#: ../src/ui/dialog/text-edit.cpp:98 ../src/widgets/text-toolbar.cpp:1350
+#: ../src/widgets/text-toolbar.cpp:1351
msgid "Align center"
msgstr "Посередині"
-#: ../src/ui/dialog/text-edit.cpp:99 ../src/widgets/text-toolbar.cpp:1365
-#: ../src/widgets/text-toolbar.cpp:1366
+#: ../src/ui/dialog/text-edit.cpp:99 ../src/widgets/text-toolbar.cpp:1358
+#: ../src/widgets/text-toolbar.cpp:1359
msgid "Align right"
msgstr "Вирівнювання праворуч"
-#: ../src/ui/dialog/text-edit.cpp:100 ../src/widgets/text-toolbar.cpp:1374
+#: ../src/ui/dialog/text-edit.cpp:100 ../src/widgets/text-toolbar.cpp:1367
msgid "Justify (only flowed text)"
msgstr "Вирівняти раз шириною (лише неконтурний текст)"
#. Direction buttons
-#: ../src/ui/dialog/text-edit.cpp:109 ../src/widgets/text-toolbar.cpp:1409
+#: ../src/ui/dialog/text-edit.cpp:109 ../src/widgets/text-toolbar.cpp:1402
msgid "Horizontal text"
msgstr "Горизонтальний текст"
-#: ../src/ui/dialog/text-edit.cpp:110 ../src/widgets/text-toolbar.cpp:1416
+#: ../src/ui/dialog/text-edit.cpp:110 ../src/widgets/text-toolbar.cpp:1409
msgid "Vertical text"
msgstr "Вертикальний текст"
@@ -21914,81 +21524,26 @@ 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:1488
+#: ../src/ui/tools/text-tool.cpp:1455
msgid "Set text style"
msgstr "Встановити стиль тексту"
-#: ../src/ui/dialog/tile.cpp:349
-msgid "Arrange in a grid"
-msgstr "Розташування на сітці"
-
-#: ../src/ui/dialog/tile.cpp:618
-msgid "Horizontal spacing between columns."
-msgstr "Горизонтальний інтервал між стовпчиками."
-
-#: ../src/ui/dialog/tile.cpp:619
-msgid "Vertical spacing between rows."
-msgstr "Вертикальний проміжок між рядками."
-
-#: ../src/ui/dialog/tile.cpp:666
-msgid "_Rows:"
-msgstr "_Рядків:"
-
-#: ../src/ui/dialog/tile.cpp:675
-msgid "Number of rows"
-msgstr "Кількість рядків"
-
-#: ../src/ui/dialog/tile.cpp:679
-msgid "Equal _height"
-msgstr "Однакова _висота"
-
-#: ../src/ui/dialog/tile.cpp:690
-msgid "If not set, each row has the height of the tallest object in it"
-msgstr ""
-"Якщо не відмічено, висота кожного рядка дорівнює висоті найвищого об'єкта в "
-"ньому"
-
-#. #### Radio buttons to control vertical alignment ####
-#. #### Radio buttons to control horizontal alignment ####
-#: ../src/ui/dialog/tile.cpp:696 ../src/ui/dialog/tile.cpp:768
-msgid "Align:"
-msgstr "Вирівнювання:"
-
-#. #### Number of columns ####
-#: ../src/ui/dialog/tile.cpp:738
-msgid "_Columns:"
-msgstr "Ст_овпчиків:"
-
-#: ../src/ui/dialog/tile.cpp:747
-msgid "Number of columns"
-msgstr "Кількість стовпчиків"
-
-#: ../src/ui/dialog/tile.cpp:751
-msgid "Equal _width"
-msgstr "О_днакова ширина"
-
-#: ../src/ui/dialog/tile.cpp:761
-msgid "If not set, each column has the width of the widest object in it"
-msgstr ""
-"Якщо не відмічено, ширина кожного стовпчика дорівнює ширині найширшого "
-"об'єкта в ньому"
-
-#. #### Radio buttons to control spacing manually or to fit selection bbox ####
-#: ../src/ui/dialog/tile.cpp:807
-msgid "_Fit into selection box"
-msgstr "З_берегти ширину та висоту позначення"
+#: ../src/ui/dialog/tile.cpp:36
+msgctxt "Arrange dialog"
+msgid "Rectangular grid"
+msgstr "Прямокутна сітка"
-#: ../src/ui/dialog/tile.cpp:814
-msgid "_Set spacing:"
-msgstr "Вс_тановити інтервал:"
+#: ../src/ui/dialog/tile.cpp:37
+msgctxt "Arrange dialog"
+msgid "Polar Coordinates"
+msgstr "Полярні координати"
-#. ## The OK button
-#: ../src/ui/dialog/tile.cpp:876
-msgctxt "Rows and columns dialog"
+#: ../src/ui/dialog/tile.cpp:40
+msgctxt "Arrange dialog"
msgid "_Arrange"
msgstr "_Компонувати"
-#: ../src/ui/dialog/tile.cpp:878
+#: ../src/ui/dialog/tile.cpp:42
msgid "Arrange selected objects"
msgstr "Впорядкувати позначені об'єкти"
@@ -22412,25 +21967,25 @@ msgstr "Редагування матриці трансформації"
msgid "Rotation angle (positive = clockwise)"
msgstr "Кут повороту (додатний = за годинниковою стрілкою)"
-#: ../src/ui/dialog/xml-tree.cpp:70 ../src/ui/dialog/xml-tree.cpp:123
+#: ../src/ui/dialog/xml-tree.cpp:70 ../src/ui/dialog/xml-tree.cpp:126
msgid "New element node"
msgstr "Створити вузол елемента"
-#: ../src/ui/dialog/xml-tree.cpp:71 ../src/ui/dialog/xml-tree.cpp:129
+#: ../src/ui/dialog/xml-tree.cpp:71 ../src/ui/dialog/xml-tree.cpp:132
msgid "New text node"
msgstr "Створити вузол з текстом"
-#: ../src/ui/dialog/xml-tree.cpp:72 ../src/ui/dialog/xml-tree.cpp:143
+#: ../src/ui/dialog/xml-tree.cpp:72 ../src/ui/dialog/xml-tree.cpp:146
msgid "nodeAsInXMLdialogTooltip|Delete node"
msgstr "Вилучити вузол"
-#: ../src/ui/dialog/xml-tree.cpp:73 ../src/ui/dialog/xml-tree.cpp:135
-#: ../src/ui/dialog/xml-tree.cpp:974
+#: ../src/ui/dialog/xml-tree.cpp:73 ../src/ui/dialog/xml-tree.cpp:138
+#: ../src/ui/dialog/xml-tree.cpp:977
msgid "Duplicate node"
msgstr "Дублювати вузол"
-#: ../src/ui/dialog/xml-tree.cpp:79 ../src/ui/dialog/xml-tree.cpp:188
-#: ../src/ui/dialog/xml-tree.cpp:1010
+#: ../src/ui/dialog/xml-tree.cpp:79 ../src/ui/dialog/xml-tree.cpp:191
+#: ../src/ui/dialog/xml-tree.cpp:1013
msgid "Delete attribute"
msgstr "Вилучити атрибут"
@@ -22438,49 +21993,49 @@ msgstr "Вилучити атрибут"
msgid "Set"
msgstr "Встановити"
-#: ../src/ui/dialog/xml-tree.cpp:118
+#: ../src/ui/dialog/xml-tree.cpp:121
msgid "Drag to reorder nodes"
msgstr "Перевпорядкуйте вузли перетягуванням"
-#: ../src/ui/dialog/xml-tree.cpp:149 ../src/ui/dialog/xml-tree.cpp:150
-#: ../src/ui/dialog/xml-tree.cpp:1131
+#: ../src/ui/dialog/xml-tree.cpp:152 ../src/ui/dialog/xml-tree.cpp:153
+#: ../src/ui/dialog/xml-tree.cpp:1134
msgid "Unindent node"
msgstr "Перемістити до кореня"
-#: ../src/ui/dialog/xml-tree.cpp:154 ../src/ui/dialog/xml-tree.cpp:155
-#: ../src/ui/dialog/xml-tree.cpp:1109
+#: ../src/ui/dialog/xml-tree.cpp:157 ../src/ui/dialog/xml-tree.cpp:158
+#: ../src/ui/dialog/xml-tree.cpp:1112
msgid "Indent node"
msgstr "Перемістити від кореня"
-#: ../src/ui/dialog/xml-tree.cpp:159 ../src/ui/dialog/xml-tree.cpp:160
-#: ../src/ui/dialog/xml-tree.cpp:1060
+#: ../src/ui/dialog/xml-tree.cpp:162 ../src/ui/dialog/xml-tree.cpp:163
+#: ../src/ui/dialog/xml-tree.cpp:1063
msgid "Raise node"
msgstr "Підняти вузол"
-#: ../src/ui/dialog/xml-tree.cpp:164 ../src/ui/dialog/xml-tree.cpp:165
-#: ../src/ui/dialog/xml-tree.cpp:1078
+#: ../src/ui/dialog/xml-tree.cpp:167 ../src/ui/dialog/xml-tree.cpp:168
+#: ../src/ui/dialog/xml-tree.cpp:1081
msgid "Lower node"
msgstr "Опустити вузол"
-#: ../src/ui/dialog/xml-tree.cpp:205
+#: ../src/ui/dialog/xml-tree.cpp:208
msgid "Attribute name"
msgstr "Назва атрибута"
-#: ../src/ui/dialog/xml-tree.cpp:220
+#: ../src/ui/dialog/xml-tree.cpp:223
msgid "Attribute value"
msgstr "Значення атрибута"
-#: ../src/ui/dialog/xml-tree.cpp:308
+#: ../src/ui/dialog/xml-tree.cpp:311
msgid "<b>Click</b> to select nodes, <b>drag</b> to rearrange."
msgstr ""
"<b>Клацніть</b>, щоб позначити вузли, <b>перетягуванням</b> можна змінити "
"порядок."
-#: ../src/ui/dialog/xml-tree.cpp:319
+#: ../src/ui/dialog/xml-tree.cpp:322
msgid "<b>Click</b> attribute to edit."
msgstr "<b>Клацніть мишею</b> на атрибуті для редагування."
-#: ../src/ui/dialog/xml-tree.cpp:323
+#: ../src/ui/dialog/xml-tree.cpp:326
#, c-format
msgid ""
"Attribute <b>%s</b> selected. Press <b>Ctrl+Enter</b> when done editing to "
@@ -22489,31 +22044,31 @@ msgstr ""
"позначено атрибут <b>%s</b>. Натисніть <b>Ctrl+Enter</b>, коли закінчите "
"редагування."
-#: ../src/ui/dialog/xml-tree.cpp:563
+#: ../src/ui/dialog/xml-tree.cpp:566
msgid "Drag XML subtree"
msgstr "Перетягування піддерева XML"
-#: ../src/ui/dialog/xml-tree.cpp:865
+#: ../src/ui/dialog/xml-tree.cpp:868
msgid "New element node..."
msgstr "Створити новий вузол…"
-#: ../src/ui/dialog/xml-tree.cpp:903
+#: ../src/ui/dialog/xml-tree.cpp:906
msgid "Cancel"
msgstr "Скасувати"
-#: ../src/ui/dialog/xml-tree.cpp:940
+#: ../src/ui/dialog/xml-tree.cpp:943
msgid "Create new element node"
msgstr "Створити вузол елемента"
-#: ../src/ui/dialog/xml-tree.cpp:956
+#: ../src/ui/dialog/xml-tree.cpp:959
msgid "Create new text node"
msgstr "Створити вузол з текстом"
-#: ../src/ui/dialog/xml-tree.cpp:991
+#: ../src/ui/dialog/xml-tree.cpp:994
msgid "nodeAsInXMLinHistoryDialog|Delete node"
msgstr "Вилучити вузол"
-#: ../src/ui/dialog/xml-tree.cpp:1034
+#: ../src/ui/dialog/xml-tree.cpp:1037
msgid "Change attribute"
msgstr "Змінити атрибут"
@@ -22584,12 +22139,12 @@ msgid "Duplicate nodes"
msgstr "Дублювати вузли"
#: ../src/ui/tool/multi-path-manipulator.cpp:409
-#: ../src/widgets/node-toolbar.cpp:421
+#: ../src/widgets/node-toolbar.cpp:408
msgid "Join nodes"
msgstr "З'єднати вузли"
#: ../src/ui/tool/multi-path-manipulator.cpp:416
-#: ../src/widgets/node-toolbar.cpp:432
+#: ../src/widgets/node-toolbar.cpp:419
msgid "Break nodes"
msgstr "Розрізати вузли"
@@ -22746,35 +22301,35 @@ msgctxt "Path handle tip"
msgid "Move handle by %s, %s; angle %.2f°, length %s"
msgstr "Пересунути елемент керування на %s, %s; кут %.2f°, відстань %s"
-#: ../src/ui/tool/node.cpp:1266
+#: ../src/ui/tool/node.cpp:1270
msgctxt "Path node tip"
msgid "<b>Shift</b>: drag out a handle, click to toggle selection"
msgstr ""
"<b>Shift</b>: перетягніть елемент керування, клацніть, щоб увімкнути/"
"вимкнути режим позначення"
-#: ../src/ui/tool/node.cpp:1268
+#: ../src/ui/tool/node.cpp:1272
msgctxt "Path node tip"
msgid "<b>Shift</b>: click to toggle selection"
msgstr "<b>Shift</b>: клацніть, щоб увімкнути/вимкнути режим позначення"
-#: ../src/ui/tool/node.cpp:1273
+#: ../src/ui/tool/node.cpp:1277
msgctxt "Path node tip"
msgid "<b>Ctrl+Alt</b>: move along handle lines, click to delete node"
msgstr ""
"<b>Ctrl+Alt</b>: пересунути лінії елемента керування, клацання вилучає вузол"
-#: ../src/ui/tool/node.cpp:1276
+#: ../src/ui/tool/node.cpp:1280
msgctxt "Path node tip"
msgid "<b>Ctrl</b>: move along axes, click to change node type"
msgstr "<b>Ctrl</b>: пересунути вздовж осей, клацання змінює тип вузла"
-#: ../src/ui/tool/node.cpp:1280
+#: ../src/ui/tool/node.cpp:1284
msgctxt "Path node tip"
msgid "<b>Alt</b>: sculpt nodes"
msgstr "<b>Alt</b>: надати форму вузлам"
-#: ../src/ui/tool/node.cpp:1288
+#: ../src/ui/tool/node.cpp:1292
#, c-format
msgctxt "Path node tip"
msgid "<b>%s</b>: drag to shape the path (more: Shift, Ctrl, Alt)"
@@ -22782,7 +22337,7 @@ msgstr ""
"<b>%s</b>: перетягніть вказівник, щоб змінити форму контуру (більше: Shift, "
"Ctrl, Alt)"
-#: ../src/ui/tool/node.cpp:1291
+#: ../src/ui/tool/node.cpp:1295
#, c-format
msgctxt "Path node tip"
msgid ""
@@ -22793,7 +22348,7 @@ msgstr ""
"перемикає елементи керування масштабування/обертання (більше: Shift, Ctrl, "
"Alt)"
-#: ../src/ui/tool/node.cpp:1294
+#: ../src/ui/tool/node.cpp:1298
#, c-format
msgctxt "Path node tip"
msgid ""
@@ -22803,17 +22358,17 @@ msgstr ""
"<b>%s</b>: перетягніть вказівник, щоб змінити форму контуру, клацніть, щоб "
"позначити лише цей вузол (більше: Shift, Ctrl, Alt)"
-#: ../src/ui/tool/node.cpp:1305
+#: ../src/ui/tool/node.cpp:1309
#, c-format
msgctxt "Path node tip"
msgid "Move node by %s, %s"
msgstr "Пересунути вузол на %s, %s"
-#: ../src/ui/tool/node.cpp:1316
+#: ../src/ui/tool/node.cpp:1320
msgid "Symmetric node"
msgstr "Симетричний вузол"
-#: ../src/ui/tool/node.cpp:1317
+#: ../src/ui/tool/node.cpp:1321
msgid "Auto-smooth node"
msgstr "Автоматично згладжений вузол"
@@ -22827,7 +22382,7 @@ msgstr "Обертати вус"
#. We need to call MPM's method because it could have been our last node
#: ../src/ui/tool/path-manipulator.cpp:1384
-#: ../src/widgets/node-toolbar.cpp:410
+#: ../src/widgets/node-toolbar.cpp:397
msgid "Delete node"
msgstr "Вилучити вузол"
@@ -22843,18 +22398,141 @@ msgstr "Перетягування вуса"
msgid "Retract handle"
msgstr "Вилучити вус"
-#: ../src/ui/tools/arc-tool.cpp:269
+#: ../src/ui/tool/transform-handle-set.cpp:195
+msgctxt "Transform handle tip"
+msgid "<b>Shift+Ctrl</b>: scale uniformly about the rotation center"
+msgstr "<b>Shift+Ctrl</b>: рівномірне масштабування відносно центра обертання"
+
+#: ../src/ui/tool/transform-handle-set.cpp:197
+msgctxt "Transform handle tip"
+msgid "<b>Ctrl:</b> scale uniformly"
+msgstr "<b>Ctrl:</b> рівномірне масштабування"
+
+#: ../src/ui/tool/transform-handle-set.cpp:202
+msgctxt "Transform handle tip"
+msgid ""
+"<b>Shift+Alt</b>: scale using an integer ratio about the rotation center"
+msgstr "<b>Shift+Alt</b>: кратне масштабування відносно центра обертання"
+
+#: ../src/ui/tool/transform-handle-set.cpp:204
+msgctxt "Transform handle tip"
+msgid "<b>Shift</b>: scale from the rotation center"
+msgstr "<b>Shift</b>: масштабування від центра обертання"
+
+#: ../src/ui/tool/transform-handle-set.cpp:207
+msgctxt "Transform handle tip"
+msgid "<b>Alt</b>: scale using an integer ratio"
+msgstr "<b>Alt</b>: масштабування, кратне до початкових розмірів"
+
+#: ../src/ui/tool/transform-handle-set.cpp:209
+msgctxt "Transform handle tip"
+msgid "<b>Scale handle</b>: drag to scale the selection"
+msgstr ""
+"<b>Елемент керування зміною масштабу</b>: перетягніть, щоб змінити масштаб "
+"позначеного"
+
+#: ../src/ui/tool/transform-handle-set.cpp:214
+#, c-format
+msgctxt "Transform handle tip"
+msgid "Scale by %.2f%% x %.2f%%"
+msgstr "Масштабувати до %.2f%% ⨯ %.2f%%"
+
+#: ../src/ui/tool/transform-handle-set.cpp:438
+#, c-format
+msgctxt "Transform handle tip"
+msgid ""
+"<b>Shift+Ctrl</b>: rotate around the opposite corner and snap angle to %f° "
+"increments"
+msgstr ""
+"<b>Shift+Ctrl</b>: обертати навколо протилежного кута, змінювати кут кроками "
+"у %f°"
+
+#: ../src/ui/tool/transform-handle-set.cpp:441
+msgctxt "Transform handle tip"
+msgid "<b>Shift</b>: rotate around the opposite corner"
+msgstr "<b>Shift</b>: обертати навколо протилежного кута"
+
+#: ../src/ui/tool/transform-handle-set.cpp:445
+#, c-format
+msgctxt "Transform handle tip"
+msgid "<b>Ctrl</b>: snap angle to %f° increments"
+msgstr "<b>Ctrl</b>: змінювати кут кроками у %f°"
+
+#: ../src/ui/tool/transform-handle-set.cpp:447
+msgctxt "Transform handle tip"
+msgid ""
+"<b>Rotation handle</b>: drag to rotate the selection around the rotation "
+"center"
+msgstr ""
+"<b>Елемент керування обертанням</b>: перетягніть, щоб обернути позначений "
+"фрагмент навколо центра обертання"
+
+#. event
+#: ../src/ui/tool/transform-handle-set.cpp:452
+#, c-format
+msgctxt "Transform handle tip"
+msgid "Rotate by %.2f°"
+msgstr "Обертання на %.2f°"
+
+#: ../src/ui/tool/transform-handle-set.cpp:578
+#, c-format
+msgctxt "Transform handle tip"
+msgid ""
+"<b>Shift+Ctrl</b>: skew about the rotation center with snapping to %f° "
+"increments"
+msgstr ""
+"<b>Shift+Ctrl</b>: перекошування навколо центра обертання кроками у %f°"
+
+#: ../src/ui/tool/transform-handle-set.cpp:581
+msgctxt "Transform handle tip"
+msgid "<b>Shift</b>: skew about the rotation center"
+msgstr "<b>Shift</b>: переконування відносно центра обертання"
+
+#: ../src/ui/tool/transform-handle-set.cpp:585
+#, c-format
+msgctxt "Transform handle tip"
+msgid "<b>Ctrl</b>: snap skew angle to %f° increments"
+msgstr "<b>Ctrl</b>: перекошувати кроками у %f°"
+
+#: ../src/ui/tool/transform-handle-set.cpp:588
+msgctxt "Transform handle tip"
+msgid ""
+"<b>Skew handle</b>: drag to skew (shear) selection about the opposite handle"
+msgstr ""
+"<b>Елемент керування перекошуванням</b>: перетягніть, щоб перекосити "
+"(зсунути) позначений фрагмент відносно протилежного елемента керування"
+
+#: ../src/ui/tool/transform-handle-set.cpp:594
+#, c-format
+msgctxt "Transform handle tip"
+msgid "Skew horizontally by %.2f°"
+msgstr "Горизонтальне перекошування на %.2f°"
+
+#: ../src/ui/tool/transform-handle-set.cpp:597
+#, c-format
+msgctxt "Transform handle tip"
+msgid "Skew vertically by %.2f°"
+msgstr "Вертикальне перекошування на %.2f°"
+
+#: ../src/ui/tool/transform-handle-set.cpp:656
+msgctxt "Transform handle tip"
+msgid "<b>Rotation center</b>: drag to change the origin of transforms"
+msgstr ""
+"<b>Центр обертання</b>: перетягніть, щоб змінити розташування центра "
+"перетворень"
+
+#: ../src/ui/tools/arc-tool.cpp:252
msgid ""
"<b>Ctrl</b>: make circle or integer-ratio ellipse, snap arc/segment angle"
msgstr ""
"<b>Ctrl</b>: створює коло або еліпс з цілим відношенням сторін, обмежує кут "
"дуги/сегмента"
-#: ../src/ui/tools/arc-tool.cpp:270 ../src/ui/tools/rect-tool.cpp:297
+#: ../src/ui/tools/arc-tool.cpp:253 ../src/ui/tools/rect-tool.cpp:289
msgid "<b>Shift</b>: draw around the starting point"
msgstr "<b>Shift</b>: малювати навколо початкової точки"
-#: ../src/ui/tools/arc-tool.cpp:439
+#: ../src/ui/tools/arc-tool.cpp:422
#, c-format
msgid ""
"<b>Ellipse</b>: %s &#215; %s (constrained to ratio %d:%d); with <b>Shift</b> "
@@ -22863,7 +22541,7 @@ msgstr ""
"<b>Еліпс</b>: %s &#215; %s (обмежений співвідношенням %d:%d); з <b>Shift</b> "
"малює навколо початкової точки"
-#: ../src/ui/tools/arc-tool.cpp:441
+#: ../src/ui/tools/arc-tool.cpp:424
#, c-format
msgid ""
"<b>Ellipse</b>: %s &#215; %s; with <b>Ctrl</b> to make square or integer-"
@@ -22872,117 +22550,117 @@ msgstr ""
"<b>Еліпс</b>: %s &#215; %s; з натиснутим <b>Ctrl</b> малює коло або еліпс з "
"цілим відношенням півосей; з <b>Shift</b> малює навколо початкової точки"
-#: ../src/ui/tools/arc-tool.cpp:464
+#: ../src/ui/tools/arc-tool.cpp:447
msgid "Create ellipse"
msgstr "Створити еліпс"
-#: ../src/ui/tools/box3d-tool.cpp:379 ../src/ui/tools/box3d-tool.cpp:386
-#: ../src/ui/tools/box3d-tool.cpp:393 ../src/ui/tools/box3d-tool.cpp:400
-#: ../src/ui/tools/box3d-tool.cpp:407 ../src/ui/tools/box3d-tool.cpp:414
+#: ../src/ui/tools/box3d-tool.cpp:370 ../src/ui/tools/box3d-tool.cpp:377
+#: ../src/ui/tools/box3d-tool.cpp:384 ../src/ui/tools/box3d-tool.cpp:391
+#: ../src/ui/tools/box3d-tool.cpp:398 ../src/ui/tools/box3d-tool.cpp:405
msgid "Change perspective (angle of PLs)"
msgstr "Зміна перспективи (кута між лініями перспективи)"
#. status text
-#: ../src/ui/tools/box3d-tool.cpp:592
+#: ../src/ui/tools/box3d-tool.cpp:583
msgid "<b>3D Box</b>; with <b>Shift</b> to extrude along the Z axis"
msgstr ""
"<b>Просторовий об'єкт</b>; утримування <b>Shift</b> витягуватиме об'єкт "
"вздовж осі Z"
-#: ../src/ui/tools/box3d-tool.cpp:618
+#: ../src/ui/tools/box3d-tool.cpp:609
msgid "Create 3D box"
msgstr "Створити тривимірний об'єкт"
-#: ../src/ui/tools/calligraphic-tool.cpp:542
+#: ../src/ui/tools/calligraphic-tool.cpp:536
msgid ""
"<b>Guide path selected</b>; start drawing along the guide with <b>Ctrl</b>"
msgstr ""
"<b>позначено напрямний контур</b>; початок креслення вздовж напрямної "
"<b>Ctrl</b>"
-#: ../src/ui/tools/calligraphic-tool.cpp:544
+#: ../src/ui/tools/calligraphic-tool.cpp:538
msgid "<b>Select a guide path</b> to track with <b>Ctrl</b>"
msgstr "<b>Виберіть напрямну</b> для операції з клавішею <b>Ctrl</b>"
-#: ../src/ui/tools/calligraphic-tool.cpp:679
+#: ../src/ui/tools/calligraphic-tool.cpp:673
msgid "Tracking: <b>connection to guide path lost!</b>"
msgstr "Трекінг: <b>з'єднання з напрямним контуром втрачено!</b>"
-#: ../src/ui/tools/calligraphic-tool.cpp:679
+#: ../src/ui/tools/calligraphic-tool.cpp:673
msgid "<b>Tracking</b> a guide path"
msgstr "<b>Трекінг</b> напрямним контуром"
-#: ../src/ui/tools/calligraphic-tool.cpp:682
+#: ../src/ui/tools/calligraphic-tool.cpp:676
msgid "<b>Drawing</b> a calligraphic stroke"
msgstr "<b>Малювання</b> каліграфічного штриху"
-#: ../src/ui/tools/calligraphic-tool.cpp:983
+#: ../src/ui/tools/calligraphic-tool.cpp:977
msgid "Draw calligraphic stroke"
msgstr "Створити каліграфічний штрих"
-#: ../src/ui/tools/connector-tool.cpp:547
+#: ../src/ui/tools/connector-tool.cpp:499
msgid "Creating new connector"
msgstr "Створення нової з'єднувальної лінії"
-#: ../src/ui/tools/connector-tool.cpp:802
+#: ../src/ui/tools/connector-tool.cpp:740
msgid "Connector endpoint drag cancelled."
msgstr "Переміщення кінцевих точок з'єднувальної лінії скасовано."
-#: ../src/ui/tools/connector-tool.cpp:849
+#: ../src/ui/tools/connector-tool.cpp:783
msgid "Reroute connector"
msgstr "Змінити напрямок з'єднання"
-#: ../src/ui/tools/connector-tool.cpp:1016
+#: ../src/ui/tools/connector-tool.cpp:936
msgid "Create connector"
msgstr "Створити лінію з'єднання"
-#: ../src/ui/tools/connector-tool.cpp:1039
+#: ../src/ui/tools/connector-tool.cpp:953
msgid "Finishing connector"
msgstr "Завершення лінії з'єднання"
-#: ../src/ui/tools/connector-tool.cpp:1280
+#: ../src/ui/tools/connector-tool.cpp:1191
msgid "<b>Connector endpoint</b>: drag to reroute or connect to new shapes"
msgstr ""
"<b>Кінцева з'єднувальна точка</b>: перетягніть щоб змінити напрямок "
"з'єднання або з'єднання з новими фігурами"
-#: ../src/ui/tools/connector-tool.cpp:1420
+#: ../src/ui/tools/connector-tool.cpp:1336
msgid "Select <b>at least one non-connector object</b>."
msgstr "Позначте <b>принаймні два об'єкти</b> для з'єднання."
-#: ../src/ui/tools/connector-tool.cpp:1425
-#: ../src/widgets/connector-toolbar.cpp:326
+#: ../src/ui/tools/connector-tool.cpp:1341
+#: ../src/widgets/connector-toolbar.cpp:314
msgid "Make connectors avoid selected objects"
msgstr "Змусити лінії огинати вибрані об'єкти"
-#: ../src/ui/tools/connector-tool.cpp:1426
-#: ../src/widgets/connector-toolbar.cpp:336
+#: ../src/ui/tools/connector-tool.cpp:1342
+#: ../src/widgets/connector-toolbar.cpp:324
msgid "Make connectors ignore selected objects"
msgstr "Змусити лінії ігнорувати вибрані об'єкти"
#. alpha of color under cursor, to show in the statusbar
#. locale-sensitive printf is OK, since this goes to the UI, not into SVG
-#: ../src/ui/tools/dropper-tool.cpp:283
+#: ../src/ui/tools/dropper-tool.cpp:281
#, c-format
msgid " alpha %.3g"
msgstr " α %.3g"
#. where the color is picked, to show in the statusbar
-#: ../src/ui/tools/dropper-tool.cpp:285
+#: ../src/ui/tools/dropper-tool.cpp:283
#, c-format
msgid ", averaged with radius %d"
msgstr ", усереднений з радіусом %d"
-#: ../src/ui/tools/dropper-tool.cpp:285
+#: ../src/ui/tools/dropper-tool.cpp:283
msgid " under cursor"
msgstr " під курсором"
#. message, to show in the statusbar
-#: ../src/ui/tools/dropper-tool.cpp:287
+#: ../src/ui/tools/dropper-tool.cpp:285
msgid "<b>Release mouse</b> to set color."
msgstr "<b>Відпустіть кнопку</b> для встановлення кольору."
-#: ../src/ui/tools/dropper-tool.cpp:335
+#: ../src/ui/tools/dropper-tool.cpp:333
msgid "Set picked color"
msgstr "Встановити знятий піпеткою колір"
@@ -22994,35 +22672,35 @@ msgstr "<b>Малювання</b> штриха гумки"
msgid "Draw eraser stroke"
msgstr "Намалювати штрих гумкою"
-#: ../src/ui/tools/flood-tool.cpp:197
+#: ../src/ui/tools/flood-tool.cpp:192
msgid "Visible Colors"
msgstr "Видимі кольори"
-#: ../src/ui/tools/flood-tool.cpp:215
+#: ../src/ui/tools/flood-tool.cpp:210
msgctxt "Flood autogap"
msgid "None"
msgstr "Немає"
-#: ../src/ui/tools/flood-tool.cpp:216
+#: ../src/ui/tools/flood-tool.cpp:211
msgctxt "Flood autogap"
msgid "Small"
msgstr "Малий"
-#: ../src/ui/tools/flood-tool.cpp:217
+#: ../src/ui/tools/flood-tool.cpp:212
msgctxt "Flood autogap"
msgid "Medium"
msgstr "Середній"
-#: ../src/ui/tools/flood-tool.cpp:218
+#: ../src/ui/tools/flood-tool.cpp:213
msgctxt "Flood autogap"
msgid "Large"
msgstr "Великий"
-#: ../src/ui/tools/flood-tool.cpp:440
+#: ../src/ui/tools/flood-tool.cpp:435
msgid "<b>Too much inset</b>, the result is empty."
msgstr "<b>Надто багато втягувань</b>, результат порожній."
-#: ../src/ui/tools/flood-tool.cpp:481
+#: ../src/ui/tools/flood-tool.cpp:476
#, c-format
msgid ""
"Area filled, path with <b>%d</b> node created and unioned with selection."
@@ -23038,7 +22716,7 @@ msgstr[2] ""
"Область заповнено, контур з <b>%d</b> вузлами створено та поєднано з "
"позначеною областю."
-#: ../src/ui/tools/flood-tool.cpp:487
+#: ../src/ui/tools/flood-tool.cpp:482
#, c-format
msgid "Area filled, path with <b>%d</b> node created."
msgid_plural "Area filled, path with <b>%d</b> nodes created."
@@ -23046,11 +22724,11 @@ msgstr[0] "Область заповнено, створено контур з <
msgstr[1] "Область заповнено, створено контур з <b>%d</b> вузлами."
msgstr[2] "Область заповнено, створено контур з <b>%d</b> вузлами."
-#: ../src/ui/tools/flood-tool.cpp:755 ../src/ui/tools/flood-tool.cpp:1065
+#: ../src/ui/tools/flood-tool.cpp:750 ../src/ui/tools/flood-tool.cpp:1060
msgid "<b>Area is not bounded</b>, cannot fill."
msgstr "<b>Область не обмежена</b>, заповнення неможливе."
-#: ../src/ui/tools/flood-tool.cpp:1070
+#: ../src/ui/tools/flood-tool.cpp:1065
msgid ""
"<b>Only the visible part of the bounded area was filled.</b> If you want to "
"fill all of the area, undo, zoom out, and fill again."
@@ -23059,50 +22737,50 @@ msgstr ""
"заповнити всю область, верніть зміни, зробіть меншим масштаб та заповніть "
"знову."
-#: ../src/ui/tools/flood-tool.cpp:1088 ../src/ui/tools/flood-tool.cpp:1239
+#: ../src/ui/tools/flood-tool.cpp:1083 ../src/ui/tools/flood-tool.cpp:1234
msgid "Fill bounded area"
msgstr "Заповнення замкненої області"
-#: ../src/ui/tools/flood-tool.cpp:1104
+#: ../src/ui/tools/flood-tool.cpp:1099
msgid "Set style on object"
msgstr "Встановити стиль об'єкта"
-#: ../src/ui/tools/flood-tool.cpp:1164
+#: ../src/ui/tools/flood-tool.cpp:1159
msgid "<b>Draw over</b> areas to add to fill, hold <b>Alt</b> for touch fill"
msgstr ""
"<b>Малювати по</b> областям для додавання заповнення, при утриманні <b>Alt</"
"b> — для заповнення дотиком"
#. We hit green anchor, closing Green-Blue-Red
-#: ../src/ui/tools/freehand-base.cpp:494
+#: ../src/ui/tools/freehand-base.cpp:490
msgid "Path is closed."
msgstr "Контур замкнено."
#. We hit bot start and end of single curve, closing paths
-#: ../src/ui/tools/freehand-base.cpp:509
+#: ../src/ui/tools/freehand-base.cpp:505
msgid "Closing path."
msgstr "Закривається контур."
-#: ../src/ui/tools/freehand-base.cpp:611
+#: ../src/ui/tools/freehand-base.cpp:607
msgid "Draw path"
msgstr "Малювання контуру"
-#: ../src/ui/tools/freehand-base.cpp:768
+#: ../src/ui/tools/freehand-base.cpp:764
msgid "Creating single dot"
msgstr "Створення одиночної точки"
-#: ../src/ui/tools/freehand-base.cpp:769
+#: ../src/ui/tools/freehand-base.cpp:765
msgid "Create single dot"
msgstr "Створити одиночну точку"
#. TRANSLATORS: %s will be substituted with the point name (see previous messages); This is part of a compound message
-#: ../src/ui/tools/gradient-tool.cpp:135 ../src/ui/tools/mesh-tool.cpp:132
+#: ../src/ui/tools/gradient-tool.cpp:131 ../src/ui/tools/mesh-tool.cpp:130
#, c-format
msgid "%s selected"
msgstr "%s вибрано"
#. TRANSLATORS: Mind the space in front. This is part of a compound message
-#: ../src/ui/tools/gradient-tool.cpp:137 ../src/ui/tools/gradient-tool.cpp:146
+#: ../src/ui/tools/gradient-tool.cpp:133 ../src/ui/tools/gradient-tool.cpp:142
#, c-format
msgid " out of %d gradient handle"
msgid_plural " out of %d gradient handles"
@@ -23111,9 +22789,9 @@ msgstr[1] " з %d вусів градієнта"
msgstr[2] " з %d вусів градієнта"
#. TRANSLATORS: Mind the space in front. (Refers to gradient handles selected). This is part of a compound message
-#: ../src/ui/tools/gradient-tool.cpp:138 ../src/ui/tools/gradient-tool.cpp:147
-#: ../src/ui/tools/gradient-tool.cpp:154 ../src/ui/tools/mesh-tool.cpp:135
-#: ../src/ui/tools/mesh-tool.cpp:146 ../src/ui/tools/mesh-tool.cpp:154
+#: ../src/ui/tools/gradient-tool.cpp:134 ../src/ui/tools/gradient-tool.cpp:143
+#: ../src/ui/tools/gradient-tool.cpp:150 ../src/ui/tools/mesh-tool.cpp:133
+#: ../src/ui/tools/mesh-tool.cpp:144 ../src/ui/tools/mesh-tool.cpp:152
#, c-format
msgid " on %d selected object"
msgid_plural " on %d selected objects"
@@ -23122,7 +22800,7 @@ msgstr[1] " у %d позначених об'єктах"
msgstr[2] " у %d позначених об'єктах"
#. TRANSLATORS: This is a part of a compound message (out of two more indicating: grandint handle count & object count)
-#: ../src/ui/tools/gradient-tool.cpp:144 ../src/ui/tools/mesh-tool.cpp:142
+#: ../src/ui/tools/gradient-tool.cpp:140 ../src/ui/tools/mesh-tool.cpp:140
#, c-format
msgid ""
"One handle merging %d stop (drag with <b>Shift</b> to separate) selected"
@@ -23139,7 +22817,7 @@ msgstr[2] ""
"<b>Shift</b>, щоб роз'єднати)"
#. TRANSLATORS: The plural refers to number of selected gradient handles. This is part of a compound message (part two indicates selected object count)
-#: ../src/ui/tools/gradient-tool.cpp:152
+#: ../src/ui/tools/gradient-tool.cpp:148
#, c-format
msgid "<b>%d</b> gradient handle selected out of %d"
msgid_plural "<b>%d</b> gradient handles selected out of %d"
@@ -23148,7 +22826,7 @@ msgstr[1] "Вибрано <b>%d</b> вуси градієнта з %d"
msgstr[2] "Вибрано <b>%d</b> вусів градієнта з %d"
#. TRANSLATORS: The plural refers to number of selected objects
-#: ../src/ui/tools/gradient-tool.cpp:159
+#: ../src/ui/tools/gradient-tool.cpp:155
#, c-format
msgid "<b>No</b> gradient handles selected out of %d on %d selected object"
msgid_plural ""
@@ -23157,27 +22835,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:444
+#: ../src/ui/tools/gradient-tool.cpp:440
msgid "Simplify gradient"
msgstr "Спростити градієнт"
-#: ../src/ui/tools/gradient-tool.cpp:520
+#: ../src/ui/tools/gradient-tool.cpp:516
msgid "Create default gradient"
msgstr "Створити типовий градієнт"
-#: ../src/ui/tools/gradient-tool.cpp:579 ../src/ui/tools/mesh-tool.cpp:572
+#: ../src/ui/tools/gradient-tool.cpp:575 ../src/ui/tools/mesh-tool.cpp:570
msgid "<b>Draw around</b> handles to select them"
msgstr "<b>Обведіть</b> вуса, щоб вибрати їх"
-#: ../src/ui/tools/gradient-tool.cpp:702
+#: ../src/ui/tools/gradient-tool.cpp:698
msgid "<b>Ctrl</b>: snap gradient angle"
msgstr "<b>Ctrl</b>: обмежити кут градієнта"
-#: ../src/ui/tools/gradient-tool.cpp:703
+#: ../src/ui/tools/gradient-tool.cpp:699
msgid "<b>Shift</b>: draw gradient around the starting point"
msgstr "<b>Shift</b>: малювати навколо початкової точки"
-#: ../src/ui/tools/gradient-tool.cpp:957 ../src/ui/tools/mesh-tool.cpp:995
+#: ../src/ui/tools/gradient-tool.cpp:953 ../src/ui/tools/mesh-tool.cpp:993
#, 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"
@@ -23185,16 +22863,16 @@ 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:961 ../src/ui/tools/mesh-tool.cpp:999
+#: ../src/ui/tools/gradient-tool.cpp:957 ../src/ui/tools/mesh-tool.cpp:997
msgid "Select <b>objects</b> on which to create gradient."
msgstr "Позначте <b>об'єкти</b> до яких буде застосовано градієнт."
-#: ../src/ui/tools/lpe-tool.cpp:209
+#: ../src/ui/tools/lpe-tool.cpp:207
msgid "Choose a construction tool from the toolbar."
msgstr "Вибрати інструмент побудови з панелі інструментів."
#. TRANSLATORS: Mind the space in front. This is part of a compound message
-#: ../src/ui/tools/mesh-tool.cpp:134 ../src/ui/tools/mesh-tool.cpp:145
+#: ../src/ui/tools/mesh-tool.cpp:132 ../src/ui/tools/mesh-tool.cpp:143
#, c-format
msgid " out of %d mesh handle"
msgid_plural " out of %d mesh handles"
@@ -23202,7 +22880,7 @@ msgstr[0] " з %d елемента керування сіткою"
msgstr[1] " з %d елементів керування сіткою"
msgstr[2] " з %d елементів керування сіткою"
-#: ../src/ui/tools/mesh-tool.cpp:152
+#: ../src/ui/tools/mesh-tool.cpp:150
#, c-format
msgid "<b>%d</b> mesh handle selected out of %d"
msgid_plural "<b>%d</b> mesh handles selected out of %d"
@@ -23211,7 +22889,7 @@ msgstr[1] "Вибрано <b>%d</b> елементи керування сітк
msgstr[2] "Вибрано <b>%d</b> елементів керування сіткою з %d"
#. TRANSLATORS: The plural refers to number of selected objects
-#: ../src/ui/tools/mesh-tool.cpp:159
+#: ../src/ui/tools/mesh-tool.cpp:157
#, c-format
msgid "<b>No</b> mesh handles selected out of %d on %d selected object"
msgid_plural "<b>No</b> mesh handles selected out of %d on %d selected objects"
@@ -23222,43 +22900,43 @@ msgstr[1] ""
msgstr[2] ""
"<b>Жодного</b> елемента керування сіткою з %d у %d вибраних об'єктах"
-#: ../src/ui/tools/mesh-tool.cpp:323
+#: ../src/ui/tools/mesh-tool.cpp:321
msgid "Split mesh row/column"
msgstr "Розділити рядок або стовпчик сітки"
-#: ../src/ui/tools/mesh-tool.cpp:409
+#: ../src/ui/tools/mesh-tool.cpp:407
msgid "Toggled mesh path type."
msgstr "Перемкнений тип контуру сітки."
-#: ../src/ui/tools/mesh-tool.cpp:413
+#: ../src/ui/tools/mesh-tool.cpp:411
msgid "Approximated arc for mesh side."
msgstr "Наближена дуга бічного краю сітки."
-#: ../src/ui/tools/mesh-tool.cpp:417
+#: ../src/ui/tools/mesh-tool.cpp:415
msgid "Toggled mesh tensors."
msgstr "Перемкнені тензори сітки."
-#: ../src/ui/tools/mesh-tool.cpp:421
+#: ../src/ui/tools/mesh-tool.cpp:419
msgid "Smoothed mesh corner color."
msgstr "Колір згладженого кута сітки."
-#: ../src/ui/tools/mesh-tool.cpp:425
+#: ../src/ui/tools/mesh-tool.cpp:423
msgid "Picked mesh corner color."
msgstr "Вибраний колір кута сітки."
-#: ../src/ui/tools/mesh-tool.cpp:500
+#: ../src/ui/tools/mesh-tool.cpp:498
msgid "Create default mesh"
msgstr "Створити типову сітку"
-#: ../src/ui/tools/mesh-tool.cpp:720
+#: ../src/ui/tools/mesh-tool.cpp:718
msgid "FIXME<b>Ctrl</b>: snap mesh angle"
msgstr "<b>Ctrl</b>: прилипання до кута сітки"
-#: ../src/ui/tools/mesh-tool.cpp:721
+#: ../src/ui/tools/mesh-tool.cpp:719
msgid "FIXME<b>Shift</b>: draw mesh around the starting point"
msgstr "<b>Shift</b>: намалювати навколо початкової точки сітку"
-#: ../src/ui/tools/node-tool.cpp:557
+#: ../src/ui/tools/node-tool.cpp:554
msgctxt "Node tool tip"
msgid ""
"<b>Shift</b>: drag to add nodes to the selection, click to toggle object "
@@ -23267,12 +22945,12 @@ msgstr ""
"<b>Shift</b>: перетягніть, щоб додати вузли до позначеного, клацніть, щоб "
"перемкнути режим позначення об'єктів"
-#: ../src/ui/tools/node-tool.cpp:561
+#: ../src/ui/tools/node-tool.cpp:558
msgctxt "Node tool tip"
msgid "<b>Shift</b>: drag to add nodes to the selection"
msgstr "<b>Shift</b>: перетягування додає вузли до позначеного фрагмента"
-#: ../src/ui/tools/node-tool.cpp:573
+#: ../src/ui/tools/node-tool.cpp:570
#, c-format
msgid "<b>%u of %u</b> node selected."
msgid_plural "<b>%u of %u</b> nodes selected."
@@ -23280,7 +22958,7 @@ msgstr[0] "Позначено <b>%u з %u</b> вузла."
msgstr[1] "Позначено <b>%u з %u</b> вузлів."
msgstr[2] "Позначено <b>%u з %u</b> вузлів."
-#: ../src/ui/tools/node-tool.cpp:579
+#: ../src/ui/tools/node-tool.cpp:576
#, c-format
msgctxt "Node tool tip"
msgid "%s Drag to select nodes, click to edit only this object (more: Shift)"
@@ -23288,93 +22966,64 @@ msgstr ""
"%s Перетягніть, щоб позначити вузли, клацніть, щоб редагувати лише цей "
"об'єкт (інше: Shift)"
-#: ../src/ui/tools/node-tool.cpp:585
+#: ../src/ui/tools/node-tool.cpp:582
#, c-format
msgctxt "Node tool tip"
msgid "%s Drag to select nodes, click clear the selection"
msgstr ""
"%s Перетягніть вказівник, щоб позначити вузли, клацніть, щоб зняти позначення"
-#: ../src/ui/tools/node-tool.cpp:594
+#: ../src/ui/tools/node-tool.cpp:591
msgctxt "Node tool tip"
msgid "Drag to select nodes, click to edit only this object"
msgstr ""
"Перетягніть, щоб позначити вузли, клацніть, щоб редагувати лише цей об'єкт"
-#: ../src/ui/tools/node-tool.cpp:597
+#: ../src/ui/tools/node-tool.cpp:594
msgctxt "Node tool tip"
msgid "Drag to select nodes, click to clear the selection"
msgstr ""
"Перетягніть вказівник, щоб позначити вузли, клацніть, щоб зняти позначення"
-#: ../src/ui/tools/node-tool.cpp:602
+#: ../src/ui/tools/node-tool.cpp:599
msgctxt "Node tool tip"
msgid "Drag to select objects to edit, click to edit this object (more: Shift)"
msgstr ""
"Перетягніть, щоб позначити об'єкти редагування, клацніть для редагування "
"поточного об'єкта (більше: Shift)"
-#: ../src/ui/tools/node-tool.cpp:605
+#: ../src/ui/tools/node-tool.cpp:602
msgctxt "Node tool tip"
msgid "Drag to select objects to edit"
msgstr "Перетягніть вказівник для позначення об'єктів редагування"
-#: ../src/ui/tools/pencil-tool.cpp:229 ../src/ui/tools/pen-tool.cpp:413
+#: ../src/ui/tools/pen-tool.cpp:186 ../src/ui/tools/pencil-tool.cpp:465
+msgid "Drawing cancelled"
+msgstr "Малювання скасовано"
+
+#: ../src/ui/tools/pen-tool.cpp:407 ../src/ui/tools/pencil-tool.cpp:203
msgid "Continuing selected path"
msgstr "Продовжується позначений контур"
-#: ../src/ui/tools/pencil-tool.cpp:237 ../src/ui/tools/pen-tool.cpp:423
+#: ../src/ui/tools/pen-tool.cpp:417 ../src/ui/tools/pencil-tool.cpp:211
msgid "Creating new path"
msgstr "Створення контуру"
-#: ../src/ui/tools/pencil-tool.cpp:240 ../src/ui/tools/pen-tool.cpp:425
+#: ../src/ui/tools/pen-tool.cpp:419 ../src/ui/tools/pencil-tool.cpp:214
msgid "Appending to selected path"
msgstr "Додається до позначеного контуру"
-#: ../src/ui/tools/pencil-tool.cpp:345
-msgid "<b>Release</b> here to close and finish the path."
-msgstr "<b>Відпустіть</b> тут для закривання та завершення контуру."
-
-#: ../src/ui/tools/pencil-tool.cpp:351
-msgid "Drawing a freehand path"
-msgstr "Малювання довільного контуру"
-
-#: ../src/ui/tools/pencil-tool.cpp:356
-msgid "<b>Drag</b> to continue the path from this point."
-msgstr "<b>Перетягніть</b> для продовження контуру з цієї точки."
-
-#. Write curves to object
-#: ../src/ui/tools/pencil-tool.cpp:448
-msgid "Finishing freehand"
-msgstr "Контур створено"
-
-#: ../src/ui/tools/pencil-tool.cpp:504 ../src/ui/tools/pen-tool.cpp:193
-msgid "Drawing cancelled"
-msgstr "Малювання скасовано"
-
-#: ../src/ui/tools/pencil-tool.cpp:554
-msgid ""
-"<b>Sketch mode</b>: holding <b>Alt</b> interpolates between sketched paths. "
-"Release <b>Alt</b> to finalize."
-msgstr ""
-"<b>Режим ескіза</b>: утримування <b>Alt</b> виконає інтерполяцію контурів "
-"ескіза. Відпустіть <b>Alt</b>, щоб завершити малювання."
-
-#: ../src/ui/tools/pencil-tool.cpp:582
-msgid "Finishing freehand sketch"
-msgstr "Завершення довільного ескіза"
-
-#: ../src/ui/tools/pen-tool.cpp:585
+#: ../src/ui/tools/pen-tool.cpp:575
msgid "<b>Click</b> or <b>click and drag</b> to close and finish the path."
msgstr "<b>Клацання</b> або <b>перетягування</b> закривають цей контур."
-#: ../src/ui/tools/pen-tool.cpp:595
+#: ../src/ui/tools/pen-tool.cpp:585
msgid ""
"<b>Click</b> or <b>click and drag</b> to continue the path from this point."
msgstr ""
"<b>Клацання</b> або <b>перетягування</b> продовжує контур з цієї точки."
-#: ../src/ui/tools/pen-tool.cpp:1195
+#: ../src/ui/tools/pen-tool.cpp:1198
#, c-format
msgid ""
"<b>Curve segment</b>: angle %3.2f&#176;, distance %s; with <b>Ctrl</b> to "
@@ -23383,7 +23032,7 @@ msgstr ""
"<b>Сегмент кривої</b>: кут %3.2f&#176;, відстань %s; з <b>Ctrl</b> — кут "
"прилипання, <b>Enter</b> — завершити контур"
-#: ../src/ui/tools/pen-tool.cpp:1196
+#: ../src/ui/tools/pen-tool.cpp:1199
#, c-format
msgid ""
"<b>Line segment</b>: angle %3.2f&#176;, distance %s; with <b>Ctrl</b> to "
@@ -23392,7 +23041,7 @@ msgstr ""
"<b>Сегмент лінії</b>: кут %3.2f&#176;, відстань %s; з <b>Ctrl</b> — кут "
"прилипання, <b>Enter</b> — завершити контур"
-#: ../src/ui/tools/pen-tool.cpp:1213
+#: ../src/ui/tools/pen-tool.cpp:1215
#, c-format
msgid ""
"<b>Curve handle</b>: angle %3.2f&#176;, length %s; with <b>Ctrl</b> to snap "
@@ -23400,7 +23049,7 @@ msgid ""
msgstr ""
"<b>Вус вузла кривої</b>: кут %3.2f&#176;, довжина %s; <b>Ctrl</b> обмежує кут"
-#: ../src/ui/tools/pen-tool.cpp:1235
+#: ../src/ui/tools/pen-tool.cpp:1237
#, c-format
msgid ""
"<b>Curve handle, symmetric</b>: angle %3.2f&#176;, length %s; with <b>Ctrl</"
@@ -23409,7 +23058,7 @@ msgstr ""
"<b>Вус кривої, симетричний</b>: кут %3.2f&#176;, довжина %s; з <b>Ctrl</b> — "
"кут прилипання, з <b>Shift</b> — лише пересунути вус"
-#: ../src/ui/tools/pen-tool.cpp:1236
+#: ../src/ui/tools/pen-tool.cpp:1238
#, c-format
msgid ""
"<b>Curve handle</b>: angle %3.2f&#176;, length %s; with <b>Ctrl</b> to snap "
@@ -23418,11 +23067,40 @@ msgstr ""
"<b>Вус кривої</b>: кут %3.2f&#176;, довжина %s; з <b>Ctrl</b> — кут "
"прилипання, <b>Shift</b> — лише пересування вуса"
-#: ../src/ui/tools/pen-tool.cpp:1282
+#: ../src/ui/tools/pen-tool.cpp:1281
msgid "Drawing finished"
msgstr "Малювання завершено"
-#: ../src/ui/tools/rect-tool.cpp:296
+#: ../src/ui/tools/pencil-tool.cpp:315
+msgid "<b>Release</b> here to close and finish the path."
+msgstr "<b>Відпустіть</b> тут для закривання та завершення контуру."
+
+#: ../src/ui/tools/pencil-tool.cpp:321
+msgid "Drawing a freehand path"
+msgstr "Малювання довільного контуру"
+
+#: ../src/ui/tools/pencil-tool.cpp:326
+msgid "<b>Drag</b> to continue the path from this point."
+msgstr "<b>Перетягніть</b> для продовження контуру з цієї точки."
+
+#. Write curves to object
+#: ../src/ui/tools/pencil-tool.cpp:411
+msgid "Finishing freehand"
+msgstr "Контур створено"
+
+#: ../src/ui/tools/pencil-tool.cpp:514
+msgid ""
+"<b>Sketch mode</b>: holding <b>Alt</b> interpolates between sketched paths. "
+"Release <b>Alt</b> to finalize."
+msgstr ""
+"<b>Режим ескіза</b>: утримування <b>Alt</b> виконає інтерполяцію контурів "
+"ескіза. Відпустіть <b>Alt</b>, щоб завершити малювання."
+
+#: ../src/ui/tools/pencil-tool.cpp:541
+msgid "Finishing freehand sketch"
+msgstr "Завершення довільного ескіза"
+
+#: ../src/ui/tools/rect-tool.cpp:288
msgid ""
"<b>Ctrl</b>: make square or integer-ratio rect, lock a rounded corner "
"circular"
@@ -23430,7 +23108,7 @@ msgstr ""
"<b>Ctrl</b>: квадрати чи прямокутник з цілим відношенням сторін, кругле "
"округлення"
-#: ../src/ui/tools/rect-tool.cpp:457
+#: ../src/ui/tools/rect-tool.cpp:449
#, c-format
msgid ""
"<b>Rectangle</b>: %s &#215; %s (constrained to ratio %d:%d); with <b>Shift</"
@@ -23439,7 +23117,7 @@ msgstr ""
"<b>Прямокутник</b>: %s &#215; %s (обмежено відношенням %d:%d); за допомогою "
"<b>Shift</b> можна малювати навколо початкової точки"
-#: ../src/ui/tools/rect-tool.cpp:460
+#: ../src/ui/tools/rect-tool.cpp:452
#, c-format
msgid ""
"<b>Rectangle</b>: %s &#215; %s (constrained to golden ratio 1.618 : 1); with "
@@ -23448,7 +23126,7 @@ msgstr ""
"<b>Прямокутник</b>: %s &#215; %s (обмежено параметром «золотого» перерізу "
"1,618 : 1); за допомогою <b>Shift</b> можна малювати навколо початкової точки"
-#: ../src/ui/tools/rect-tool.cpp:462
+#: ../src/ui/tools/rect-tool.cpp:454
#, c-format
msgid ""
"<b>Rectangle</b>: %s &#215; %s (constrained to golden ratio 1 : 1.618); with "
@@ -23457,7 +23135,7 @@ msgstr ""
"<b>Прямокутник</b>: %s &#215; %s (обмежено параметром «золотого» перерізу "
"1 : 1,618); за допомогою <b>Shift</b> можна малювати навколо початкової точки"
-#: ../src/ui/tools/rect-tool.cpp:466
+#: ../src/ui/tools/rect-tool.cpp:458
#, c-format
msgid ""
"<b>Rectangle</b>: %s &#215; %s; with <b>Ctrl</b> to make square or integer-"
@@ -23466,15 +23144,15 @@ msgstr ""
"<b>Прямокутник</b>: %s &#215; %s; <b>Ctrl</b> — квадрат чи прямокутник з "
"цілим відношенням сторін, <b>Shift</b> — малювати навколо початкової точки"
-#: ../src/ui/tools/rect-tool.cpp:489
+#: ../src/ui/tools/rect-tool.cpp:481
msgid "Create rectangle"
msgstr "Створити прямокутник"
-#: ../src/ui/tools/select-tool.cpp:170
+#: ../src/ui/tools/select-tool.cpp:169
msgid "Click selection to toggle scale/rotation handles"
msgstr "Клацання на об'єкті перемикає стрілки зміни масштабу/обертання"
-#: ../src/ui/tools/select-tool.cpp:171
+#: ../src/ui/tools/select-tool.cpp:170
msgid ""
"No objects selected. Click, Shift+click, Alt+scroll mouse on top of objects, "
"or drag around objects to select."
@@ -23483,15 +23161,15 @@ msgstr ""
"Shift+клацанням, Alt+прокручуванням коліщатка над об'єктами або обведіть "
"об'єкт."
-#: ../src/ui/tools/select-tool.cpp:224
+#: ../src/ui/tools/select-tool.cpp:223
msgid "Move canceled."
msgstr "Переміщення скасовано."
-#: ../src/ui/tools/select-tool.cpp:232
+#: ../src/ui/tools/select-tool.cpp:231
msgid "Selection canceled."
msgstr "Позначення скасовано."
-#: ../src/ui/tools/select-tool.cpp:649
+#: ../src/ui/tools/select-tool.cpp:642
msgid ""
"<b>Draw over</b> objects to select them; release <b>Alt</b> to switch to "
"rubberband selection"
@@ -23499,7 +23177,7 @@ msgstr ""
"<b>Малювати по</b> об'єктах для їхнього позначення; відпустіть <b>Alt</b> "
"для переходу до позначення гумовою ниткою"
-#: ../src/ui/tools/select-tool.cpp:651
+#: ../src/ui/tools/select-tool.cpp:644
msgid ""
"<b>Drag around</b> objects to select them; press <b>Alt</b> to switch to "
"touch selection"
@@ -23507,19 +23185,19 @@ msgstr ""
"<b>Малювати навколо</b> об'єктів для їхнього позначення; відпустіть <b>Alt</"
"b> для переходу до позначення дотиком"
-#: ../src/ui/tools/select-tool.cpp:941
+#: ../src/ui/tools/select-tool.cpp:932
msgid "<b>Ctrl</b>: click to select in groups; drag to move hor/vert"
msgstr ""
"<b>Ctrl</b>: позначення у групі; перетягування — переміщення по горизонталі/"
"вертикалі"
-#: ../src/ui/tools/select-tool.cpp:942
+#: ../src/ui/tools/select-tool.cpp:933
msgid "<b>Shift</b>: click to toggle select; drag for rubberband selection"
msgstr ""
"<b>Shift</b>: позначити/зняти позначення; перетягування — позначення гумовою "
"ниткою"
-#: ../src/ui/tools/select-tool.cpp:943
+#: ../src/ui/tools/select-tool.cpp:934
msgid ""
"<b>Alt</b>: click to select under; scroll mouse-wheel to cycle-select; drag "
"to move selected or select by touch"
@@ -23527,29 +23205,29 @@ msgstr ""
"<b>Alt</b>: клацніть для позначення; прокручування коліщатка — циклічний "
"вибір; перетягування — переміщення позначеної області чи вибір торканням"
-#: ../src/ui/tools/select-tool.cpp:1151
+#: ../src/ui/tools/select-tool.cpp:1142
msgid "Selected object is not a group. Cannot enter."
msgstr "позначений об'єкт не є групою. Неможливо увійти."
-#: ../src/ui/tools/spiral-tool.cpp:267
+#: ../src/ui/tools/spiral-tool.cpp:259
msgid "<b>Ctrl</b>: snap angle"
msgstr "<b>Ctrl</b>: обмежити кут"
-#: ../src/ui/tools/spiral-tool.cpp:269
+#: ../src/ui/tools/spiral-tool.cpp:261
msgid "<b>Alt</b>: lock spiral radius"
msgstr "<b>Alt</b>: заблокувати радіус спіралі"
-#: ../src/ui/tools/spiral-tool.cpp:408
+#: ../src/ui/tools/spiral-tool.cpp:400
#, c-format
msgid ""
"<b>Spiral</b>: radius %s, angle %5g&#176;; with <b>Ctrl</b> to snap angle"
msgstr "<b>Спіраль</b>: радіус %s, кут %5g&#176;; з <b>Ctrl</b> — обмежує кут"
-#: ../src/ui/tools/spiral-tool.cpp:429
+#: ../src/ui/tools/spiral-tool.cpp:421
msgid "Create spiral"
msgstr "Створення спіралі"
-#: ../src/ui/tools/spray-tool.cpp:192 ../src/ui/tools/tweak-tool.cpp:174
+#: ../src/ui/tools/spray-tool.cpp:192 ../src/ui/tools/tweak-tool.cpp:167
#, c-format
msgid "<b>%i</b> object selected"
msgid_plural "<b>%i</b> objects selected"
@@ -23557,7 +23235,7 @@ msgstr[0] "<b>%i</b> об'єкт позначено"
msgstr[1] "<b>%i</b> об'єкти позначено"
msgstr[2] "<b>%i</b> об'єктів позначено"
-#: ../src/ui/tools/spray-tool.cpp:194 ../src/ui/tools/tweak-tool.cpp:176
+#: ../src/ui/tools/spray-tool.cpp:194 ../src/ui/tools/tweak-tool.cpp:169
msgid "<b>Nothing</b> selected"
msgstr "<b>Нічого</b> не вибрано"
@@ -23588,94 +23266,94 @@ msgstr ""
"%s. Перетягніть, клацніть або натисніть і прокрутіть коліщатко миші, щоб "
"розкидати <b>окремий контур</b> позначеної області."
-#: ../src/ui/tools/spray-tool.cpp:645
+#: ../src/ui/tools/spray-tool.cpp:656
msgid "<b>Nothing selected!</b> Select objects to spray."
msgstr "<b>Нічого не позначено!</b> Позначте об'єкти, які слід розкидати."
-#: ../src/ui/tools/spray-tool.cpp:720 ../src/widgets/spray-toolbar.cpp:178
+#: ../src/ui/tools/spray-tool.cpp:731 ../src/widgets/spray-toolbar.cpp:166
msgid "Spray with copies"
msgstr "Розкидання копій"
-#: ../src/ui/tools/spray-tool.cpp:724 ../src/widgets/spray-toolbar.cpp:185
+#: ../src/ui/tools/spray-tool.cpp:735 ../src/widgets/spray-toolbar.cpp:173
msgid "Spray with clones"
msgstr "Розкидання клонів"
-#: ../src/ui/tools/spray-tool.cpp:728
+#: ../src/ui/tools/spray-tool.cpp:739
msgid "Spray in single path"
msgstr "Розкидання окремого контуру"
-#: ../src/ui/tools/star-tool.cpp:281
+#: ../src/ui/tools/star-tool.cpp:271
msgid "<b>Ctrl</b>: snap angle; keep rays radial"
msgstr "<b>Ctrl</b>: обмежити кут; промені за радіусом без перекосу"
-#: ../src/ui/tools/star-tool.cpp:427
+#: ../src/ui/tools/star-tool.cpp:417
#, c-format
msgid ""
"<b>Polygon</b>: radius %s, angle %5g&#176;; with <b>Ctrl</b> to snap angle"
msgstr ""
"<b>Багатокутник</b>: радіус %s, кут %5g&#176;; з <b>Ctrl</b> — обмежує кут"
-#: ../src/ui/tools/star-tool.cpp:428
+#: ../src/ui/tools/star-tool.cpp:418
#, c-format
msgid "<b>Star</b>: radius %s, angle %5g&#176;; with <b>Ctrl</b> to snap angle"
msgstr "<b>Зірка</b>: радіус %s, кут %5g&#176;; з <b>Ctrl</b> — обмежує кут"
-#: ../src/ui/tools/star-tool.cpp:456
+#: ../src/ui/tools/star-tool.cpp:446
msgid "Create star"
msgstr "Створення зірки"
-#: ../src/ui/tools/text-tool.cpp:393
+#: ../src/ui/tools/text-tool.cpp:379
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:395
+#: ../src/ui/tools/text-tool.cpp:381
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:449
+#: ../src/ui/tools/text-tool.cpp:435
msgid "Create text"
msgstr "Створити текст"
-#: ../src/ui/tools/text-tool.cpp:474
+#: ../src/ui/tools/text-tool.cpp:460
msgid "Non-printable character"
msgstr "Недрукований символ"
-#: ../src/ui/tools/text-tool.cpp:489
+#: ../src/ui/tools/text-tool.cpp:475
msgid "Insert Unicode character"
msgstr "Вставити символ з таблиці Unicode"
-#: ../src/ui/tools/text-tool.cpp:524
+#: ../src/ui/tools/text-tool.cpp:510
#, c-format
msgid "Unicode (<b>Enter</b> to finish): %s: %s"
msgstr "Юнікод (<b>Enter</b> для завершення): %s: %s"
-#: ../src/ui/tools/text-tool.cpp:526 ../src/ui/tools/text-tool.cpp:833
+#: ../src/ui/tools/text-tool.cpp:512 ../src/ui/tools/text-tool.cpp:817
msgid "Unicode (<b>Enter</b> to finish): "
msgstr "Unicode (<b>Enter</b> для завершення): "
-#: ../src/ui/tools/text-tool.cpp:609
+#: ../src/ui/tools/text-tool.cpp:595
#, c-format
msgid "<b>Flowed text frame</b>: %s &#215; %s"
msgstr "<b>Текст у рамці</b>: %s &#215; %s"
-#: ../src/ui/tools/text-tool.cpp:667
+#: ../src/ui/tools/text-tool.cpp:653
msgid "Type text; <b>Enter</b> to start new line."
msgstr "Введіть текст; <b>Enter</b> — початок нового рядка."
-#: ../src/ui/tools/text-tool.cpp:678
+#: ../src/ui/tools/text-tool.cpp:664
msgid "Flowed text is created."
msgstr "Текстову область створено."
-#: ../src/ui/tools/text-tool.cpp:680
+#: ../src/ui/tools/text-tool.cpp:665
msgid "Create flowed text"
msgstr "Створити контурний текст"
-#: ../src/ui/tools/text-tool.cpp:682
+#: ../src/ui/tools/text-tool.cpp:667
msgid ""
"The frame is <b>too small</b> for the current font size. Flowed text not "
"created."
@@ -23683,75 +23361,75 @@ msgstr ""
"Рамка <b>надто мала</b> для поточного розміру шрифту. Текстову область не "
"створено."
-#: ../src/ui/tools/text-tool.cpp:818
+#: ../src/ui/tools/text-tool.cpp:803
msgid "No-break space"
msgstr "Нерозривний пробіл"
-#: ../src/ui/tools/text-tool.cpp:820
+#: ../src/ui/tools/text-tool.cpp:804
msgid "Insert no-break space"
msgstr "Вставити нерозривний пробіл"
-#: ../src/ui/tools/text-tool.cpp:857
+#: ../src/ui/tools/text-tool.cpp:840
msgid "Make bold"
msgstr "Зробити жирним"
-#: ../src/ui/tools/text-tool.cpp:875
+#: ../src/ui/tools/text-tool.cpp:857
msgid "Make italic"
msgstr "Зробити курсивним"
-#: ../src/ui/tools/text-tool.cpp:914
+#: ../src/ui/tools/text-tool.cpp:895
msgid "New line"
msgstr "Новий рядок"
-#: ../src/ui/tools/text-tool.cpp:956
+#: ../src/ui/tools/text-tool.cpp:936
msgid "Backspace"
msgstr "Забій"
-#: ../src/ui/tools/text-tool.cpp:1012
+#: ../src/ui/tools/text-tool.cpp:990
msgid "Kern to the left"
msgstr "Відбивка ліворуч"
-#: ../src/ui/tools/text-tool.cpp:1037
+#: ../src/ui/tools/text-tool.cpp:1014
msgid "Kern to the right"
msgstr "Відбивка праворуч"
-#: ../src/ui/tools/text-tool.cpp:1062
+#: ../src/ui/tools/text-tool.cpp:1038
msgid "Kern up"
msgstr "Відбивка нагору"
-#: ../src/ui/tools/text-tool.cpp:1087
+#: ../src/ui/tools/text-tool.cpp:1062
msgid "Kern down"
msgstr "Відбивка донизу"
-#: ../src/ui/tools/text-tool.cpp:1163
+#: ../src/ui/tools/text-tool.cpp:1137
msgid "Rotate counterclockwise"
msgstr "Обертати проти годинникової стрілки"
-#: ../src/ui/tools/text-tool.cpp:1184
+#: ../src/ui/tools/text-tool.cpp:1157
msgid "Rotate clockwise"
msgstr "Обертати за годинниковою стрілкою"
-#: ../src/ui/tools/text-tool.cpp:1201
+#: ../src/ui/tools/text-tool.cpp:1173
msgid "Contract line spacing"
msgstr "Скорочення міжрядкового проміжку"
-#: ../src/ui/tools/text-tool.cpp:1208
+#: ../src/ui/tools/text-tool.cpp:1179
msgid "Contract letter spacing"
msgstr "Зменшена відстань між літерами"
-#: ../src/ui/tools/text-tool.cpp:1226
+#: ../src/ui/tools/text-tool.cpp:1196
msgid "Expand line spacing"
msgstr "Збільшена відстань між рядками"
-#: ../src/ui/tools/text-tool.cpp:1233
+#: ../src/ui/tools/text-tool.cpp:1202
msgid "Expand letter spacing"
msgstr "Збільшення міжрядкового проміжку"
-#: ../src/ui/tools/text-tool.cpp:1363
+#: ../src/ui/tools/text-tool.cpp:1332
msgid "Paste text"
msgstr "Вставити текст"
-#: ../src/ui/tools/text-tool.cpp:1617
+#: ../src/ui/tools/text-tool.cpp:1583
#, c-format
msgid ""
"Type or edit flowed text (%d character%s); <b>Enter</b> to start new "
@@ -23769,7 +23447,7 @@ msgstr[2] ""
"Введіть або змініть текст за контуром (%d символів%s); <b>Enter</b> починає "
"новий абзац."
-#: ../src/ui/tools/text-tool.cpp:1619
+#: ../src/ui/tools/text-tool.cpp:1585
#, c-format
msgid "Type or edit text (%d character%s); <b>Enter</b> to start new line."
msgid_plural ""
@@ -23783,38 +23461,38 @@ msgstr[2] ""
"Введіть або змініть текст (%d символів%s); <b>Enter</b> — початок нового "
"рядка."
-#: ../src/ui/tools/text-tool.cpp:1729
+#: ../src/ui/tools/text-tool.cpp:1695
msgid "Type text"
msgstr "Друк тексту"
-#: ../src/ui/tools/tool-base.cpp:697
+#: ../src/ui/tools/tool-base.cpp:703
msgid "<b>Space+mouse move</b> to pan canvas"
msgstr "<b>Пробіл+пересування миші</b> для переміщення полотна"
-#: ../src/ui/tools/tweak-tool.cpp:181
+#: ../src/ui/tools/tweak-tool.cpp:174
#, c-format
msgid "%s. Drag to <b>move</b>."
msgstr "%s. Перетягніть, щоб <b>пересунути</b>."
-#: ../src/ui/tools/tweak-tool.cpp:185
+#: ../src/ui/tools/tweak-tool.cpp:178
#, c-format
msgid "%s. Drag or click to <b>move in</b>; with Shift to <b>move out</b>."
msgstr ""
"%s. Перетягніть або клацніть, щоб <b>всунути</b>; з Shift — <b>висунути</b>."
-#: ../src/ui/tools/tweak-tool.cpp:193
+#: ../src/ui/tools/tweak-tool.cpp:186
#, c-format
msgid "%s. Drag or click to <b>move randomly</b>."
msgstr "%s. Перетягніть або клацніть для <b>випадкового пересування</b>."
-#: ../src/ui/tools/tweak-tool.cpp:197
+#: ../src/ui/tools/tweak-tool.cpp:190
#, c-format
msgid "%s. Drag or click to <b>scale down</b>; with Shift to <b>scale up</b>."
msgstr ""
"%s. Перетягніть або клацніть для <b>зменшення</b>; з Shift для "
"<b>збільшення</b>."
-#: ../src/ui/tools/tweak-tool.cpp:205
+#: ../src/ui/tools/tweak-tool.cpp:198
#, c-format
msgid ""
"%s. Drag or click to <b>rotate clockwise</b>; with Shift, "
@@ -23823,48 +23501,48 @@ msgstr ""
"%s. Перетягніть або клацніть для <b>обертання за годинниковою стрілкою</b>; "
"з Shift — <b>проти годинникової стрілки</b>."
-#: ../src/ui/tools/tweak-tool.cpp:213
+#: ../src/ui/tools/tweak-tool.cpp:206
#, c-format
msgid "%s. Drag or click to <b>duplicate</b>; with Shift, <b>delete</b>."
msgstr ""
"%s. Перетягніть або клацніть для <b>дублювання</b>; з Shift — <b>вилучення</"
"b>."
-#: ../src/ui/tools/tweak-tool.cpp:221
+#: ../src/ui/tools/tweak-tool.cpp:214
#, c-format
msgid "%s. Drag to <b>push paths</b>."
msgstr "%s. Перетягніть для <b>виштовхування контурів</b>."
-#: ../src/ui/tools/tweak-tool.cpp:225
+#: ../src/ui/tools/tweak-tool.cpp:218
#, c-format
msgid "%s. Drag or click to <b>inset paths</b>; with Shift to <b>outset</b>."
msgstr ""
"%s. Перетягніть або клацніть для <b>втягування контурів</b>; з Shift для "
"<b>витягування</b>."
-#: ../src/ui/tools/tweak-tool.cpp:233
+#: ../src/ui/tools/tweak-tool.cpp:226
#, c-format
msgid "%s. Drag or click to <b>attract paths</b>; with Shift to <b>repel</b>."
msgstr ""
"%s. Перетягніть або клацніть для <b>притягування контурів</b>; з Shift для "
"<b>відштовхування</b>."
-#: ../src/ui/tools/tweak-tool.cpp:241
+#: ../src/ui/tools/tweak-tool.cpp:234
#, c-format
msgid "%s. Drag or click to <b>roughen paths</b>."
msgstr "%s. Перетягніть або клацніть для <b>грубішання контурів</b>."
-#: ../src/ui/tools/tweak-tool.cpp:245
+#: ../src/ui/tools/tweak-tool.cpp:238
#, c-format
msgid "%s. Drag or click to <b>paint objects</b> with color."
msgstr "%s. Перетягніть або клацніть для <b>малювання об'єктів</b> кольором."
-#: ../src/ui/tools/tweak-tool.cpp:249
+#: ../src/ui/tools/tweak-tool.cpp:242
#, c-format
msgid "%s. Drag or click to <b>randomize colors</b>."
msgstr "%s. Перетягніть або клацніть для <b>рандомізації кольорів</b>."
-#: ../src/ui/tools/tweak-tool.cpp:253
+#: ../src/ui/tools/tweak-tool.cpp:246
#, c-format
msgid ""
"%s. Drag or click to <b>increase blur</b>; with Shift to <b>decrease</b>."
@@ -23872,185 +23550,62 @@ msgstr ""
"%s. Перетягніть або клацніть для <b>збільшення розмивання</b>; з Shift — для "
"<b>зменшення</b>."
-#: ../src/ui/tools/tweak-tool.cpp:1200
+#: ../src/ui/tools/tweak-tool.cpp:1193
msgid "<b>Nothing selected!</b> Select objects to tweak."
msgstr "<b>Нічого не вибрано!</b> Оберіть об'єкт(и) для корекції."
-#: ../src/ui/tools/tweak-tool.cpp:1234
+#: ../src/ui/tools/tweak-tool.cpp:1227
msgid "Move tweak"
msgstr "Корекція пересуванням"
-#: ../src/ui/tools/tweak-tool.cpp:1238
+#: ../src/ui/tools/tweak-tool.cpp:1231
msgid "Move in/out tweak"
msgstr "Корекція притягуванням/відштовхуванням"
-#: ../src/ui/tools/tweak-tool.cpp:1242
+#: ../src/ui/tools/tweak-tool.cpp:1235
msgid "Move jitter tweak"
msgstr "Корекція випадковим пересуванням"
-#: ../src/ui/tools/tweak-tool.cpp:1246
+#: ../src/ui/tools/tweak-tool.cpp:1239
msgid "Scale tweak"
msgstr "Корекція масштабуванням"
-#: ../src/ui/tools/tweak-tool.cpp:1250
+#: ../src/ui/tools/tweak-tool.cpp:1243
msgid "Rotate tweak"
msgstr "Корекція обертанням"
-#: ../src/ui/tools/tweak-tool.cpp:1254
+#: ../src/ui/tools/tweak-tool.cpp:1247
msgid "Duplicate/delete tweak"
msgstr "Корекція дублювання/вилучення"
-#: ../src/ui/tools/tweak-tool.cpp:1258
+#: ../src/ui/tools/tweak-tool.cpp:1251
msgid "Push path tweak"
msgstr "Корекція штовханням контурів"
-#: ../src/ui/tools/tweak-tool.cpp:1262
+#: ../src/ui/tools/tweak-tool.cpp:1255
msgid "Shrink/grow path tweak"
msgstr "Корекція втягуванням/витягуванням контурів"
-#: ../src/ui/tools/tweak-tool.cpp:1266
+#: ../src/ui/tools/tweak-tool.cpp:1259
msgid "Attract/repel path tweak"
msgstr "Корекція притяганням/відштовхуванням контурів"
-#: ../src/ui/tools/tweak-tool.cpp:1270
+#: ../src/ui/tools/tweak-tool.cpp:1263
msgid "Roughen path tweak"
msgstr "Корекція грубішанням контурів"
-#: ../src/ui/tools/tweak-tool.cpp:1274
+#: ../src/ui/tools/tweak-tool.cpp:1267
msgid "Color paint tweak"
msgstr "Корекція заливанням кольором"
-#: ../src/ui/tools/tweak-tool.cpp:1278
+#: ../src/ui/tools/tweak-tool.cpp:1271
msgid "Color jitter tweak"
msgstr "Корекція перебором кольорів"
-#: ../src/ui/tools/tweak-tool.cpp:1282
+#: ../src/ui/tools/tweak-tool.cpp:1275
msgid "Blur tweak"
msgstr "Корекція розмиванням"
-#: ../src/ui/tool/transform-handle-set.cpp:195
-msgctxt "Transform handle tip"
-msgid "<b>Shift+Ctrl</b>: scale uniformly about the rotation center"
-msgstr "<b>Shift+Ctrl</b>: рівномірне масштабування відносно центра обертання"
-
-#: ../src/ui/tool/transform-handle-set.cpp:197
-msgctxt "Transform handle tip"
-msgid "<b>Ctrl:</b> scale uniformly"
-msgstr "<b>Ctrl:</b> рівномірне масштабування"
-
-#: ../src/ui/tool/transform-handle-set.cpp:202
-msgctxt "Transform handle tip"
-msgid ""
-"<b>Shift+Alt</b>: scale using an integer ratio about the rotation center"
-msgstr "<b>Shift+Alt</b>: кратне масштабування відносно центра обертання"
-
-#: ../src/ui/tool/transform-handle-set.cpp:204
-msgctxt "Transform handle tip"
-msgid "<b>Shift</b>: scale from the rotation center"
-msgstr "<b>Shift</b>: масштабування від центра обертання"
-
-#: ../src/ui/tool/transform-handle-set.cpp:207
-msgctxt "Transform handle tip"
-msgid "<b>Alt</b>: scale using an integer ratio"
-msgstr "<b>Alt</b>: масштабування, кратне до початкових розмірів"
-
-#: ../src/ui/tool/transform-handle-set.cpp:209
-msgctxt "Transform handle tip"
-msgid "<b>Scale handle</b>: drag to scale the selection"
-msgstr ""
-"<b>Елемент керування зміною масштабу</b>: перетягніть, щоб змінити масштаб "
-"позначеного"
-
-#: ../src/ui/tool/transform-handle-set.cpp:214
-#, c-format
-msgctxt "Transform handle tip"
-msgid "Scale by %.2f%% x %.2f%%"
-msgstr "Масштабувати до %.2f%% ⨯ %.2f%%"
-
-#: ../src/ui/tool/transform-handle-set.cpp:438
-#, c-format
-msgctxt "Transform handle tip"
-msgid ""
-"<b>Shift+Ctrl</b>: rotate around the opposite corner and snap angle to %f° "
-"increments"
-msgstr ""
-"<b>Shift+Ctrl</b>: обертати навколо протилежного кута, змінювати кут кроками "
-"у %f°"
-
-#: ../src/ui/tool/transform-handle-set.cpp:441
-msgctxt "Transform handle tip"
-msgid "<b>Shift</b>: rotate around the opposite corner"
-msgstr "<b>Shift</b>: обертати навколо протилежного кута"
-
-#: ../src/ui/tool/transform-handle-set.cpp:445
-#, c-format
-msgctxt "Transform handle tip"
-msgid "<b>Ctrl</b>: snap angle to %f° increments"
-msgstr "<b>Ctrl</b>: змінювати кут кроками у %f°"
-
-#: ../src/ui/tool/transform-handle-set.cpp:447
-msgctxt "Transform handle tip"
-msgid ""
-"<b>Rotation handle</b>: drag to rotate the selection around the rotation "
-"center"
-msgstr ""
-"<b>Елемент керування обертанням</b>: перетягніть, щоб обернути позначений "
-"фрагмент навколо центра обертання"
-
-#. event
-#: ../src/ui/tool/transform-handle-set.cpp:452
-#, c-format
-msgctxt "Transform handle tip"
-msgid "Rotate by %.2f°"
-msgstr "Обертання на %.2f°"
-
-#: ../src/ui/tool/transform-handle-set.cpp:578
-#, c-format
-msgctxt "Transform handle tip"
-msgid ""
-"<b>Shift+Ctrl</b>: skew about the rotation center with snapping to %f° "
-"increments"
-msgstr ""
-"<b>Shift+Ctrl</b>: перекошування навколо центра обертання кроками у %f°"
-
-#: ../src/ui/tool/transform-handle-set.cpp:581
-msgctxt "Transform handle tip"
-msgid "<b>Shift</b>: skew about the rotation center"
-msgstr "<b>Shift</b>: переконування відносно центра обертання"
-
-#: ../src/ui/tool/transform-handle-set.cpp:585
-#, c-format
-msgctxt "Transform handle tip"
-msgid "<b>Ctrl</b>: snap skew angle to %f° increments"
-msgstr "<b>Ctrl</b>: перекошувати кроками у %f°"
-
-#: ../src/ui/tool/transform-handle-set.cpp:588
-msgctxt "Transform handle tip"
-msgid ""
-"<b>Skew handle</b>: drag to skew (shear) selection about the opposite handle"
-msgstr ""
-"<b>Елемент керування перекошуванням</b>: перетягніть, щоб перекосити "
-"(зсунути) позначений фрагмент відносно протилежного елемента керування"
-
-#: ../src/ui/tool/transform-handle-set.cpp:594
-#, c-format
-msgctxt "Transform handle tip"
-msgid "Skew horizontally by %.2f°"
-msgstr "Горизонтальне перекошування на %.2f°"
-
-#: ../src/ui/tool/transform-handle-set.cpp:597
-#, c-format
-msgctxt "Transform handle tip"
-msgid "Skew vertically by %.2f°"
-msgstr "Вертикальне перекошування на %.2f°"
-
-#: ../src/ui/tool/transform-handle-set.cpp:656
-msgctxt "Transform handle tip"
-msgid "<b>Rotation center</b>: drag to change the origin of transforms"
-msgstr ""
-"<b>Центр обертання</b>: перетягніть, щоб змінити розташування центра "
-"перетворень"
-
#: ../src/ui/widget/filter-effect-chooser.cpp:27
msgid "Blur (%)"
msgstr "Розмиття (у %)"
@@ -24340,7 +23895,7 @@ msgstr "Н/Д"
#: ../src/ui/widget/selected-style.cpp:180
#: ../src/ui/widget/selected-style.cpp:1088
#: ../src/ui/widget/selected-style.cpp:1089
-#: ../src/widgets/gradient-toolbar.cpp:178
+#: ../src/widgets/gradient-toolbar.cpp:162
msgid "Nothing selected"
msgstr "Нічого не позначено"
@@ -24593,11 +24148,11 @@ msgstr "0 (прозорий)"
msgid "100% (opaque)"
msgstr "100% (непрозорий)"
-#: ../src/ui/widget/selected-style.cpp:1357
+#: ../src/ui/widget/selected-style.cpp:1362
msgid "Adjust alpha"
msgstr "Скоригувати канал прозорості"
-#: ../src/ui/widget/selected-style.cpp:1359
+#: ../src/ui/widget/selected-style.cpp:1364
#, c-format
msgid ""
"Adjusting <b>alpha</b>: was %.3g, now <b>%.3g</b> (diff %.3g); with <b>Ctrl</"
@@ -24608,11 +24163,11 @@ msgstr ""
"%.3g); скористайтеся <b>Ctrl</b> для зміни освітленості;<b>Shift</b> — для "
"зміни насиченості, без модифікаторів — виправлення відтінку"
-#: ../src/ui/widget/selected-style.cpp:1363
+#: ../src/ui/widget/selected-style.cpp:1368
msgid "Adjust saturation"
msgstr "Корекція насиченості"
-#: ../src/ui/widget/selected-style.cpp:1365
+#: ../src/ui/widget/selected-style.cpp:1370
#, c-format
msgid ""
"Adjusting <b>saturation</b>: was %.3g, now <b>%.3g</b> (diff %.3g); with "
@@ -24623,11 +24178,11 @@ msgstr ""
"скористайтеся <b>Ctrl</b> для корекції освітленості, <b>Alt</b> — для зміни "
"прозорості, без модифікаторів – корекція відтінку"
-#: ../src/ui/widget/selected-style.cpp:1369
+#: ../src/ui/widget/selected-style.cpp:1374
msgid "Adjust lightness"
msgstr "Корекція освітленості"
-#: ../src/ui/widget/selected-style.cpp:1371
+#: ../src/ui/widget/selected-style.cpp:1376
#, c-format
msgid ""
"Adjusting <b>lightness</b>: was %.3g, now <b>%.3g</b> (diff %.3g); with "
@@ -24638,11 +24193,11 @@ msgstr ""
"скористайтеся <b>Shift</b> для зміни насиченості, <b>Alt</b> — для зміни "
"прозорості, без модифікаторів — виправлення відтінку"
-#: ../src/ui/widget/selected-style.cpp:1375
+#: ../src/ui/widget/selected-style.cpp:1380
msgid "Adjust hue"
msgstr "Корекція відтінку"
-#: ../src/ui/widget/selected-style.cpp:1377
+#: ../src/ui/widget/selected-style.cpp:1382
#, c-format
msgid ""
"Adjusting <b>hue</b>: was %.3g, now <b>%.3g</b> (diff %.3g); with <b>Shift</"
@@ -24653,12 +24208,12 @@ msgstr ""
"скористайтеся <b>Shift</b> для зміни насиченості, <b>Alt</b> — для зміни "
"прозорості, а <b>Ctrl</b> для зміни освітленості"
-#: ../src/ui/widget/selected-style.cpp:1495
-#: ../src/ui/widget/selected-style.cpp:1509
+#: ../src/ui/widget/selected-style.cpp:1500
+#: ../src/ui/widget/selected-style.cpp:1514
msgid "Adjust stroke width"
msgstr "Скоригувати товщину штриха"
-#: ../src/ui/widget/selected-style.cpp:1496
+#: ../src/ui/widget/selected-style.cpp:1501
#, c-format
msgid "Adjusting <b>stroke width</b>: was %.3g, now <b>%.3g</b> (diff %.3g)"
msgstr ""
@@ -24715,7 +24270,7 @@ msgstr "Об'єднати точки сходу"
msgid "3D box: Move vanishing point"
msgstr "Просторовий об'єкт: Пересування точки сходу"
-#: ../src/vanishing-point.cpp:326
+#: ../src/vanishing-point.cpp:327
#, c-format
msgid "<b>Finite</b> vanishing point shared by <b>%d</b> box"
msgid_plural ""
@@ -24727,7 +24282,7 @@ msgstr[2] "<b>Скінченна</b> точка сходу, спільна дл
#. This won't make sense any more when infinite VPs are not shown on the canvas,
#. but currently we update the status message anyway
-#: ../src/vanishing-point.cpp:333
+#: ../src/vanishing-point.cpp:334
#, c-format
msgid "<b>Infinite</b> vanishing point shared by <b>%d</b> box"
msgid_plural ""
@@ -24737,7 +24292,7 @@ msgstr[0] "<b>Нескінченна</b> точка сходу для <b>%d</b>
msgstr[1] "<b>Нескінченна</b> точка сходу, спільна для <b>%d</b> об'єктів"
msgstr[2] "<b>Нескінченна</b> точка сходу, спільна для <b>%d</b> об'єктів"
-#: ../src/vanishing-point.cpp:341
+#: ../src/vanishing-point.cpp:342
#, c-format
msgid ""
"shared by <b>%d</b> box; drag with <b>Shift</b> to separate selected box(es)"
@@ -24762,7 +24317,7 @@ msgstr "Файл"
msgid "Context"
msgstr "Контекст"
-#: ../src/verbs.cpp:251 ../src/verbs.cpp:2226
+#: ../src/verbs.cpp:251 ../src/verbs.cpp:2219
#: ../share/extensions/jessyInk_view.inx.h:1
#: ../share/extensions/polyhedron_3d.inx.h:26
msgid "View"
@@ -24881,123 +24436,123 @@ msgstr "Віддзеркалити вертикально"
#. TRANSLATORS: If you have translated the tutorial-basic.en.svgz file to your language,
#. then translate this string as "tutorial-basic.LANG.svgz" (where LANG is your language
#. code); otherwise leave as "tutorial-basic.svg".
-#: ../src/verbs.cpp:2108
+#: ../src/verbs.cpp:2101
msgid "tutorial-basic.svg"
msgstr "tutorial-basic.svg"
#. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:2112
+#: ../src/verbs.cpp:2105
msgid "tutorial-shapes.svg"
msgstr "tutorial-shapes.svg"
#. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:2116
+#: ../src/verbs.cpp:2109
msgid "tutorial-advanced.svg"
msgstr "tutorial-advanced.svg"
#. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:2120
+#: ../src/verbs.cpp:2113
msgid "tutorial-tracing.svg"
msgstr "tutorial-tracing.svg"
-#: ../src/verbs.cpp:2123
+#: ../src/verbs.cpp:2116
msgid "tutorial-tracing-pixelart.svg"
msgstr "tutorial-tracing-pixelart.svg"
#. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:2127
+#: ../src/verbs.cpp:2120
msgid "tutorial-calligraphy.svg"
msgstr "tutorial-calligraphy.svg"
#. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:2131
+#: ../src/verbs.cpp:2124
msgid "tutorial-interpolate.svg"
msgstr "tutorial-interpolate.svg"
#. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:2135
+#: ../src/verbs.cpp:2128
msgid "tutorial-elements.svg"
msgstr "tutorial-elements.svg"
#. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:2139
+#: ../src/verbs.cpp:2132
msgid "tutorial-tips.svg"
msgstr "tutorial-tips.svg"
-#: ../src/verbs.cpp:2325 ../src/verbs.cpp:2917
+#: ../src/verbs.cpp:2318 ../src/verbs.cpp:2910
msgid "Unlock all objects in the current layer"
msgstr "Розблокувати усі об'єкти у поточному шарі"
-#: ../src/verbs.cpp:2329 ../src/verbs.cpp:2919
+#: ../src/verbs.cpp:2322 ../src/verbs.cpp:2912
msgid "Unlock all objects in all layers"
msgstr "Розблокувати усі об'єкти в усіх шарах"
-#: ../src/verbs.cpp:2333 ../src/verbs.cpp:2921
+#: ../src/verbs.cpp:2326 ../src/verbs.cpp:2914
msgid "Unhide all objects in the current layer"
msgstr "Розблокувати усі об'єкти у поточному шарі"
-#: ../src/verbs.cpp:2337 ../src/verbs.cpp:2923
+#: ../src/verbs.cpp:2330 ../src/verbs.cpp:2916
msgid "Unhide all objects in all layers"
msgstr "Показати усі об'єкти в усіх шарах"
-#: ../src/verbs.cpp:2352
+#: ../src/verbs.cpp:2345
msgid "Does nothing"
msgstr "Немає дій"
-#: ../src/verbs.cpp:2355
+#: ../src/verbs.cpp:2348
msgid "Create new document from the default template"
msgstr "Створити новий документ зі стандартного шаблону"
-#: ../src/verbs.cpp:2357
+#: ../src/verbs.cpp:2350
msgid "_Open..."
msgstr "_Відкрити…"
-#: ../src/verbs.cpp:2358
+#: ../src/verbs.cpp:2351
msgid "Open an existing document"
msgstr "Відкрити існуючий документ"
-#: ../src/verbs.cpp:2359
+#: ../src/verbs.cpp:2352
msgid "Re_vert"
msgstr "Від_новити"
-#: ../src/verbs.cpp:2360
+#: ../src/verbs.cpp:2353
msgid "Revert to the last saved version of document (changes will be lost)"
msgstr "Відновити останню збережену версію документа (зміни будуть втрачені)"
-#: ../src/verbs.cpp:2361
+#: ../src/verbs.cpp:2354
msgid "Save document"
msgstr "Зберегти документ"
-#: ../src/verbs.cpp:2363
+#: ../src/verbs.cpp:2356
msgid "Save _As..."
msgstr "Зберегти _як…"
-#: ../src/verbs.cpp:2364
+#: ../src/verbs.cpp:2357
msgid "Save document under a new name"
msgstr "Зберегти документ під іншою назвою"
-#: ../src/verbs.cpp:2365
+#: ../src/verbs.cpp:2358
msgid "Save a Cop_y..."
msgstr "Зберегти _копію…"
-#: ../src/verbs.cpp:2366
+#: ../src/verbs.cpp:2359
msgid "Save a copy of the document under a new name"
msgstr "Зберегти копію документа під іншою назвою"
-#: ../src/verbs.cpp:2367
+#: ../src/verbs.cpp:2360
msgid "_Print..."
msgstr "Над_рукувати…"
-#: ../src/verbs.cpp:2367
+#: ../src/verbs.cpp:2360
msgid "Print document"
msgstr "Надрукувати документ"
#. TRANSLATORS: "Vacuum Defs" means "Clean up defs" (so as to remove unused definitions)
-#: ../src/verbs.cpp:2370
+#: ../src/verbs.cpp:2363
msgid "Clean _up document"
msgstr "О_чистити документ"
-#: ../src/verbs.cpp:2370
+#: ../src/verbs.cpp:2363
msgid ""
"Remove unused definitions (such as gradients or clipping paths) from the &lt;"
"defs&gt; of the document"
@@ -25005,152 +24560,152 @@ msgstr ""
"Прибрати непотрібні визначення (наприклад, градієнти чи вирізання) з &lt;"
"defs&gt; документа"
-#: ../src/verbs.cpp:2372
+#: ../src/verbs.cpp:2365
msgid "_Import..."
msgstr "_Імпортувати…"
-#: ../src/verbs.cpp:2373
+#: ../src/verbs.cpp:2366
msgid "Import a bitmap or SVG image into this document"
msgstr "Імпортувати зображення (растрове чи SVG) до документа"
-#: ../src/verbs.cpp:2374
+#: ../src/verbs.cpp:2367
msgid "_Export Bitmap..."
msgstr "_Експортувати растр…"
-#: ../src/verbs.cpp:2375
+#: ../src/verbs.cpp:2368
msgid "Export this document or a selection as a bitmap image"
msgstr "Експортувати документ чи позначену частину у растрове зображення"
-#: ../src/verbs.cpp:2376
+#: ../src/verbs.cpp:2369
msgid "Import Clip Art..."
msgstr "_Імпортувати шаблон…"
-#: ../src/verbs.cpp:2377
+#: ../src/verbs.cpp:2370
msgid "Import clipart from Open Clip Art Library"
msgstr "Імпортувати шаблон з бібліотеки Open Clip Art"
#. new FileVerb(SP_VERB_FILE_EXPORT_TO_OCAL, "FileExportToOCAL", N_("Export To Open Clip Art Library"), N_("Export this document to Open Clip Art Library"), INKSCAPE_ICON_DOCUMENT_EXPORT_OCAL),
-#: ../src/verbs.cpp:2379
+#: ../src/verbs.cpp:2372
msgid "N_ext Window"
msgstr "_Наступне вікно"
-#: ../src/verbs.cpp:2380
+#: ../src/verbs.cpp:2373
msgid "Switch to the next document window"
msgstr "Перейти до наступного вікна документа"
-#: ../src/verbs.cpp:2381
+#: ../src/verbs.cpp:2374
msgid "P_revious Window"
msgstr "_Попереднє вікно"
-#: ../src/verbs.cpp:2382
+#: ../src/verbs.cpp:2375
msgid "Switch to the previous document window"
msgstr "Перейти до попереднього вікна документа"
-#: ../src/verbs.cpp:2383
+#: ../src/verbs.cpp:2376
msgid "_Close"
msgstr "_Закрити"
-#: ../src/verbs.cpp:2384
+#: ../src/verbs.cpp:2377
msgid "Close this document window"
msgstr "Закрити це вікно документа"
-#: ../src/verbs.cpp:2385
+#: ../src/verbs.cpp:2378
msgid "_Quit"
msgstr "Ви_йти"
-#: ../src/verbs.cpp:2385
+#: ../src/verbs.cpp:2378
msgid "Quit Inkscape"
msgstr "Вийти з Inkscape"
-#: ../src/verbs.cpp:2386
+#: ../src/verbs.cpp:2379
msgid "_Templates..."
msgstr "_Шаблони…"
-#: ../src/verbs.cpp:2387
+#: ../src/verbs.cpp:2380
msgid "Create new project from template"
msgstr "Створити новий проект на основі шаблону"
-#: ../src/verbs.cpp:2390
+#: ../src/verbs.cpp:2383
msgid "Undo last action"
msgstr "Скасувати останню операцію"
-#: ../src/verbs.cpp:2393
+#: ../src/verbs.cpp:2386
msgid "Do again the last undone action"
msgstr "Повторити останню скасовану дію"
-#: ../src/verbs.cpp:2394
+#: ../src/verbs.cpp:2387
msgid "Cu_t"
msgstr "_Вирізати"
-#: ../src/verbs.cpp:2395
+#: ../src/verbs.cpp:2388
msgid "Cut selection to clipboard"
msgstr "Вирізати позначені об'єкти у буфер обміну"
-#: ../src/verbs.cpp:2396
+#: ../src/verbs.cpp:2389
msgid "_Copy"
msgstr "_Копіювати"
-#: ../src/verbs.cpp:2397
+#: ../src/verbs.cpp:2390
msgid "Copy selection to clipboard"
msgstr "Скопіювати позначені об'єкти у буфер обміну"
-#: ../src/verbs.cpp:2398
+#: ../src/verbs.cpp:2391
msgid "_Paste"
msgstr "Вст_авити"
-#: ../src/verbs.cpp:2399
+#: ../src/verbs.cpp:2392
msgid "Paste objects from clipboard to mouse point, or paste text"
msgstr "Вставити об'єкти з буферу обміну або текст у позицію курсора миші"
-#: ../src/verbs.cpp:2400
+#: ../src/verbs.cpp:2393
msgid "Paste _Style"
msgstr "Вставити _стиль"
-#: ../src/verbs.cpp:2401
+#: ../src/verbs.cpp:2394
msgid "Apply the style of the copied object to selection"
msgstr "Застосувати стиль скопійованого об'єкта до позначених об'єктів"
-#: ../src/verbs.cpp:2403
+#: ../src/verbs.cpp:2396
msgid "Scale selection to match the size of the copied object"
msgstr ""
"Зміна масштабу позначених об'єктів з метою задовольнити розміру копійованого "
"об'єкта"
-#: ../src/verbs.cpp:2404
+#: ../src/verbs.cpp:2397
msgid "Paste _Width"
msgstr "Вставити _ширину"
-#: ../src/verbs.cpp:2405
+#: ../src/verbs.cpp:2398
msgid "Scale selection horizontally to match the width of the copied object"
msgstr ""
"Змінити масштаб позначених об'єктів за горизонтальним розміром з метою "
"відповідності ширині копійованого об'єкта"
-#: ../src/verbs.cpp:2406
+#: ../src/verbs.cpp:2399
msgid "Paste _Height"
msgstr "Вставити _висоту"
-#: ../src/verbs.cpp:2407
+#: ../src/verbs.cpp:2400
msgid "Scale selection vertically to match the height of the copied object"
msgstr ""
"Змінити масштаб позначених об'єктів за вертикальним розміром з метою "
"відповідності висоті копійованого об'єкта"
-#: ../src/verbs.cpp:2408
+#: ../src/verbs.cpp:2401
msgid "Paste Size Separately"
msgstr "Вставити розмір окремо"
-#: ../src/verbs.cpp:2409
+#: ../src/verbs.cpp:2402
msgid "Scale each selected object to match the size of the copied object"
msgstr ""
"Змінити кожного позначеного об'єкта з метою відповідності розміру "
"копійованого об'єкта"
-#: ../src/verbs.cpp:2410
+#: ../src/verbs.cpp:2403
msgid "Paste Width Separately"
msgstr "Вставити ширину окремо"
-#: ../src/verbs.cpp:2411
+#: ../src/verbs.cpp:2404
msgid ""
"Scale each selected object horizontally to match the width of the copied "
"object"
@@ -25158,11 +24713,11 @@ msgstr ""
"Змінити масштаб кожного позначеного об'єкта за горизонтальним розміром з "
"метою відповідності ширині копійованого об'єкта"
-#: ../src/verbs.cpp:2412
+#: ../src/verbs.cpp:2405
msgid "Paste Height Separately"
msgstr "Вставити висоту окремо"
-#: ../src/verbs.cpp:2413
+#: ../src/verbs.cpp:2406
msgid ""
"Scale each selected object vertically to match the height of the copied "
"object"
@@ -25170,67 +24725,67 @@ msgstr ""
"Змінити масштаб кожного позначеного об'єкта за вертикальним розміром з метою "
"відповідності висоті копійованого об'єкта"
-#: ../src/verbs.cpp:2414
+#: ../src/verbs.cpp:2407
msgid "Paste _In Place"
msgstr "Вставити на _місце"
-#: ../src/verbs.cpp:2415
+#: ../src/verbs.cpp:2408
msgid "Paste objects from clipboard to the original location"
msgstr "Вставити об'єкти з буфера у місце, де вони були раніше"
-#: ../src/verbs.cpp:2416
+#: ../src/verbs.cpp:2409
msgid "Paste Path _Effect"
msgstr "Вставити _ефект контуру"
-#: ../src/verbs.cpp:2417
+#: ../src/verbs.cpp:2410
msgid "Apply the path effect of the copied object to selection"
msgstr "Застосувати ефект контуру скопійованого об'єкта до позначених об'єктів"
-#: ../src/verbs.cpp:2418
+#: ../src/verbs.cpp:2411
msgid "Remove Path _Effect"
msgstr "Вилучити _ефект контуру"
-#: ../src/verbs.cpp:2419
+#: ../src/verbs.cpp:2412
msgid "Remove any path effects from selected objects"
msgstr "Вилучити всі ефекти контурів з позначених об'єктів"
-#: ../src/verbs.cpp:2420
+#: ../src/verbs.cpp:2413
msgid "_Remove Filters"
msgstr "В_илучити фільтри"
-#: ../src/verbs.cpp:2421
+#: ../src/verbs.cpp:2414
msgid "Remove any filters from selected objects"
msgstr "Вилучити всі наслідки застосування фільтрів з позначених об'єктів"
-#: ../src/verbs.cpp:2422
+#: ../src/verbs.cpp:2415
msgid "_Delete"
msgstr "В_илучити"
-#: ../src/verbs.cpp:2423
+#: ../src/verbs.cpp:2416
msgid "Delete selection"
msgstr "Вилучити позначені об'єкти"
-#: ../src/verbs.cpp:2424
+#: ../src/verbs.cpp:2417
msgid "Duplic_ate"
msgstr "_Дублювати"
-#: ../src/verbs.cpp:2425
+#: ../src/verbs.cpp:2418
msgid "Duplicate selected objects"
msgstr "Дублювати позначені об'єкти"
-#: ../src/verbs.cpp:2426
+#: ../src/verbs.cpp:2419
msgid "Create Clo_ne"
msgstr "Створити к_лон"
-#: ../src/verbs.cpp:2427
+#: ../src/verbs.cpp:2420
msgid "Create a clone (a copy linked to the original) of selected object"
msgstr "Створити клон (копію, пов'язану з оригіналом) позначеного об'єкта"
-#: ../src/verbs.cpp:2428
+#: ../src/verbs.cpp:2421
msgid "Unlin_k Clone"
msgstr "В_ід'єднати клон"
-#: ../src/verbs.cpp:2429
+#: ../src/verbs.cpp:2422
msgid ""
"Cut the selected clones' links to the originals, turning them into "
"standalone objects"
@@ -25238,29 +24793,29 @@ msgstr ""
"Вирізати вибрані посилання клонів на оригінали з перетворенням їх на окремі "
"об'єкти"
-#: ../src/verbs.cpp:2430
+#: ../src/verbs.cpp:2423
msgid "Relink to Copied"
msgstr "Перез'єднати з копійованим"
-#: ../src/verbs.cpp:2431
+#: ../src/verbs.cpp:2424
msgid "Relink the selected clones to the object currently on the clipboard"
msgstr ""
"Перез'єднати вибрані клони з об'єктом, який зараз перебуває у буфері обміну "
"даними"
-#: ../src/verbs.cpp:2432
+#: ../src/verbs.cpp:2425
msgid "Select _Original"
msgstr "Позначити о_ригінал"
-#: ../src/verbs.cpp:2433
+#: ../src/verbs.cpp:2426
msgid "Select the object to which the selected clone is linked"
msgstr "Позначити об'єкт, з яким пов'язаний вибраний клон"
-#: ../src/verbs.cpp:2434
+#: ../src/verbs.cpp:2427
msgid "Clone original path (LPE)"
msgstr "Клонувати початковий контур (геометрично)"
-#: ../src/verbs.cpp:2435
+#: ../src/verbs.cpp:2428
msgid ""
"Creates a new path, applies the Clone original LPE, and refers it to the "
"selected path"
@@ -25268,19 +24823,19 @@ msgstr ""
"Створює новий контур, застосовує геометричне перетворення клонування "
"початкового контуру і пов'язує його з вибраним контуром"
-#: ../src/verbs.cpp:2436
+#: ../src/verbs.cpp:2429
msgid "Objects to _Marker"
msgstr "Об'єкти у _маркер"
-#: ../src/verbs.cpp:2437
+#: ../src/verbs.cpp:2430
msgid "Convert selection to a line marker"
msgstr "Перетворити вибране на маркер лінії"
-#: ../src/verbs.cpp:2438
+#: ../src/verbs.cpp:2431
msgid "Objects to Gu_ides"
msgstr "Об'єкти у на_прямні"
-#: ../src/verbs.cpp:2439
+#: ../src/verbs.cpp:2432
msgid ""
"Convert selected objects to a collection of guidelines aligned with their "
"edges"
@@ -25288,92 +24843,92 @@ msgstr ""
"Перетворити вибрані об'єкти на декілька напрямних, вирівняних за краями "
"об'єктів"
-#: ../src/verbs.cpp:2440
+#: ../src/verbs.cpp:2433
msgid "Objects to Patter_n"
msgstr "О_б'єкти у візерунок"
-#: ../src/verbs.cpp:2441
+#: ../src/verbs.cpp:2434
msgid "Convert selection to a rectangle with tiled pattern fill"
msgstr "Перетворити позначені об'єкти у прямокутник, заповнений візерунком"
-#: ../src/verbs.cpp:2442
+#: ../src/verbs.cpp:2435
msgid "Pattern to _Objects"
msgstr "_Візерунок у об'єкти"
-#: ../src/verbs.cpp:2443
+#: ../src/verbs.cpp:2436
msgid "Extract objects from a tiled pattern fill"
msgstr "Витягнути об'єкти з текстурного заповнення"
-#: ../src/verbs.cpp:2444
+#: ../src/verbs.cpp:2437
msgid "Group to Symbol"
msgstr "Групу на символ"
-#: ../src/verbs.cpp:2445
+#: ../src/verbs.cpp:2438
msgid "Convert group to a symbol"
msgstr "Перетворити групу на символ"
-#: ../src/verbs.cpp:2446
+#: ../src/verbs.cpp:2439
msgid "Symbol to Group"
msgstr "Символ у групу"
-#: ../src/verbs.cpp:2447
+#: ../src/verbs.cpp:2440
msgid "Extract group from a symbol"
msgstr "Видобути групу з символу"
-#: ../src/verbs.cpp:2448
+#: ../src/verbs.cpp:2441
msgid "Clea_r All"
msgstr "О_чистити все"
-#: ../src/verbs.cpp:2449
+#: ../src/verbs.cpp:2442
msgid "Delete all objects from document"
msgstr "Вилучити усі об'єкти з документа"
-#: ../src/verbs.cpp:2450
+#: ../src/verbs.cpp:2443
msgid "Select Al_l"
msgstr "Поз_начити все"
-#: ../src/verbs.cpp:2451
+#: ../src/verbs.cpp:2444
msgid "Select all objects or all nodes"
msgstr "Позначити всі об'єкти чи всі вузли"
-#: ../src/verbs.cpp:2452
+#: ../src/verbs.cpp:2445
msgid "Select All in All La_yers"
msgstr "Позначити все в усіх _шарах"
-#: ../src/verbs.cpp:2453
+#: ../src/verbs.cpp:2446
msgid "Select all objects in all visible and unlocked layers"
msgstr "Позначити усі об'єкти в усіх видимих та розблокованих шарах"
-#: ../src/verbs.cpp:2454
+#: ../src/verbs.cpp:2447
msgid "Fill _and Stroke"
msgstr "Заповнення _та штрих"
-#: ../src/verbs.cpp:2455
+#: ../src/verbs.cpp:2448
msgid ""
"Select all objects with the same fill and stroke as the selected objects"
msgstr "Позначити всі об'єкти з тим самим заповненням та штрихом"
-#: ../src/verbs.cpp:2456
+#: ../src/verbs.cpp:2449
msgid "_Fill Color"
msgstr "За_повнити кольором"
-#: ../src/verbs.cpp:2457
+#: ../src/verbs.cpp:2450
msgid "Select all objects with the same fill as the selected objects"
msgstr "Позначити всі об'єкти з тим самим заповненням"
-#: ../src/verbs.cpp:2458
+#: ../src/verbs.cpp:2451
msgid "_Stroke Color"
msgstr "Колір _штриха"
-#: ../src/verbs.cpp:2459
+#: ../src/verbs.cpp:2452
msgid "Select all objects with the same stroke as the selected objects"
msgstr "Позначити всі об'єкти з тим самим штрихом"
-#: ../src/verbs.cpp:2460
+#: ../src/verbs.cpp:2453
msgid "Stroke St_yle"
msgstr "С_тиль штриха"
-#: ../src/verbs.cpp:2461
+#: ../src/verbs.cpp:2454
msgid ""
"Select all objects with the same stroke style (width, dash, markers) as the "
"selected objects"
@@ -25381,11 +24936,11 @@ msgstr ""
"Позначити всі об'єкти з тим самим типом штриха (товщиною, рисками, "
"позначками)"
-#: ../src/verbs.cpp:2462
+#: ../src/verbs.cpp:2455
msgid "_Object Type"
msgstr "Тип _об'єкта"
-#: ../src/verbs.cpp:2463
+#: ../src/verbs.cpp:2456
msgid ""
"Select all objects with the same object type (rect, arc, text, path, bitmap "
"etc) as the selected objects"
@@ -25393,152 +24948,156 @@ msgstr ""
"Позначити всі об'єкти з тим самим типом об'єкта (прямокутник, дуга, текст, "
"контур, растрове зображення тощо), що і позначені об'єкти"
-#: ../src/verbs.cpp:2464
+#: ../src/verbs.cpp:2457
msgid "In_vert Selection"
msgstr "_Інвертувати позначення"
-#: ../src/verbs.cpp:2465
+#: ../src/verbs.cpp:2458
msgid "Invert selection (unselect what is selected and select everything else)"
msgstr ""
"Інвертувати позначення (зняти позначення з позначеного та позначити решту)"
-#: ../src/verbs.cpp:2466
+#: ../src/verbs.cpp:2459
msgid "Invert in All Layers"
msgstr "Інвертувати в усіх шарах"
-#: ../src/verbs.cpp:2467
+#: ../src/verbs.cpp:2460
msgid "Invert selection in all visible and unlocked layers"
msgstr "Інвертувати позначення в усіх видимих та незаблокованих шарах"
-#: ../src/verbs.cpp:2468
+#: ../src/verbs.cpp:2461
msgid "Select Next"
msgstr "Обрати наступний"
-#: ../src/verbs.cpp:2469
+#: ../src/verbs.cpp:2462
msgid "Select next object or node"
msgstr "Обрати наступний об'єкт або вузол"
-#: ../src/verbs.cpp:2470
+#: ../src/verbs.cpp:2463
msgid "Select Previous"
msgstr "Обрати попереднє"
-#: ../src/verbs.cpp:2471
+#: ../src/verbs.cpp:2464
msgid "Select previous object or node"
msgstr "Обрати попередній об'єкт чи вузол"
-#: ../src/verbs.cpp:2472
+#: ../src/verbs.cpp:2465
msgid "D_eselect"
msgstr "Зн_яти позначення"
-#: ../src/verbs.cpp:2473
+#: ../src/verbs.cpp:2466
msgid "Deselect any selected objects or nodes"
msgstr "Зняти позначення з усіх об'єктів чи вузлів"
-#: ../src/verbs.cpp:2475 ../src/verbs.cpp:2477
-msgid "Create four guides aligned with the page borders"
-msgstr "Створити чотири напрямні за краями сторінки"
+#: ../src/verbs.cpp:2468
+msgid "Delete all the guides in the document"
+msgstr "Вилучити усі напрямні у документі"
-#: ../src/verbs.cpp:2476
+#: ../src/verbs.cpp:2469
msgid "Create _Guides Around the Page"
msgstr "Створити _напрямні навколо сторінки"
-#: ../src/verbs.cpp:2478
+#: ../src/verbs.cpp:2470
+msgid "Create four guides aligned with the page borders"
+msgstr "Створити чотири напрямні за краями сторінки"
+
+#: ../src/verbs.cpp:2471
msgid "Next path effect parameter"
msgstr "Наступний параметр ефекту контуру"
-#: ../src/verbs.cpp:2479
+#: ../src/verbs.cpp:2472
msgid "Show next editable path effect parameter"
msgstr "Показати наступний придатний до редагування параметр ефекту контуру"
#. Selection
-#: ../src/verbs.cpp:2482
+#: ../src/verbs.cpp:2475
msgid "Raise to _Top"
msgstr "Підняти на п_ередній план"
-#: ../src/verbs.cpp:2483
+#: ../src/verbs.cpp:2476
msgid "Raise selection to top"
msgstr "Підняти позначені об'єкти на передній план"
-#: ../src/verbs.cpp:2484
+#: ../src/verbs.cpp:2477
msgid "Lower to _Bottom"
msgstr "Опустити на з_адній план"
-#: ../src/verbs.cpp:2485
+#: ../src/verbs.cpp:2478
msgid "Lower selection to bottom"
msgstr "Опустити позначені об'єкти на задній план"
-#: ../src/verbs.cpp:2486
+#: ../src/verbs.cpp:2479
msgid "_Raise"
msgstr "_Підняти"
-#: ../src/verbs.cpp:2487
+#: ../src/verbs.cpp:2480
msgid "Raise selection one step"
msgstr "Підняти позначені об'єкти на один рівень"
-#: ../src/verbs.cpp:2488
+#: ../src/verbs.cpp:2481
msgid "_Lower"
msgstr "_Опустити"
-#: ../src/verbs.cpp:2489
+#: ../src/verbs.cpp:2482
msgid "Lower selection one step"
msgstr "Опустити позначені об'єкти на один рівень"
-#: ../src/verbs.cpp:2491
+#: ../src/verbs.cpp:2484
msgid "Group selected objects"
msgstr "Згрупувати позначені об'єкти"
-#: ../src/verbs.cpp:2493
+#: ../src/verbs.cpp:2486
msgid "Ungroup selected groups"
msgstr "Розгрупувати позначені групи"
-#: ../src/verbs.cpp:2495
+#: ../src/verbs.cpp:2488
msgid "_Put on Path"
msgstr "_Розмістити по контуру"
-#: ../src/verbs.cpp:2497
+#: ../src/verbs.cpp:2490
msgid "_Remove from Path"
msgstr "Відокрем_ити від контуру"
-#: ../src/verbs.cpp:2499
+#: ../src/verbs.cpp:2492
msgid "Remove Manual _Kerns"
msgstr "Вилучити ручний _міжлітерний інтервал"
#. TRANSLATORS: "glyph": An image used in the visual representation of characters;
#. roughly speaking, how a character looks. A font is a set of glyphs.
-#: ../src/verbs.cpp:2502
+#: ../src/verbs.cpp:2495
msgid "Remove all manual kerns and glyph rotations from a text object"
msgstr ""
"Вилучити з текстового об'єкта усі додані вручну повороти кернів та гліфів"
-#: ../src/verbs.cpp:2504
+#: ../src/verbs.cpp:2497
msgid "_Union"
msgstr "С_ума"
-#: ../src/verbs.cpp:2505
+#: ../src/verbs.cpp:2498
msgid "Create union of selected paths"
msgstr "Створення об'єднання позначених контурів"
-#: ../src/verbs.cpp:2506
+#: ../src/verbs.cpp:2499
msgid "_Intersection"
msgstr "_Перетин"
-#: ../src/verbs.cpp:2507
+#: ../src/verbs.cpp:2500
msgid "Create intersection of selected paths"
msgstr "Створення перетину позначених контурів"
-#: ../src/verbs.cpp:2508
+#: ../src/verbs.cpp:2501
msgid "_Difference"
msgstr "Р_ізниця"
-#: ../src/verbs.cpp:2509
+#: ../src/verbs.cpp:2502
msgid "Create difference of selected paths (bottom minus top)"
msgstr "Створення різниці позначених контурів (низ мінус верх)"
-#: ../src/verbs.cpp:2510
+#: ../src/verbs.cpp:2503
msgid "E_xclusion"
msgstr "Виключне _АБО"
-#: ../src/verbs.cpp:2511
+#: ../src/verbs.cpp:2504
msgid ""
"Create exclusive OR of selected paths (those parts that belong to only one "
"path)"
@@ -25546,21 +25105,21 @@ msgstr ""
"Створити контур шляхом виключного АБО з позначених контурів (ті частини, що "
"належать тільки одному з контурів)"
-#: ../src/verbs.cpp:2512
+#: ../src/verbs.cpp:2505
msgid "Di_vision"
msgstr "_Ділення"
-#: ../src/verbs.cpp:2513
+#: ../src/verbs.cpp:2506
msgid "Cut the bottom path into pieces"
msgstr "Розрізати нижній контур верхнім на частини"
#. TRANSLATORS: "to cut a path" is not the same as "to break a path apart" - see the
#. Advanced tutorial for more info
-#: ../src/verbs.cpp:2516
+#: ../src/verbs.cpp:2509
msgid "Cut _Path"
msgstr "Розрізати _контур"
-#: ../src/verbs.cpp:2517
+#: ../src/verbs.cpp:2510
msgid "Cut the bottom path's stroke into pieces, removing fill"
msgstr ""
"Розрізати штрих нижнього контуру верхнім на частини, з вилученням заповнення"
@@ -25568,357 +25127,357 @@ msgstr ""
#. TRANSLATORS: "outset": expand a shape by offsetting the object's path,
#. i.e. by displacing it perpendicular to the path in each point.
#. See also the Advanced Tutorial for explanation.
-#: ../src/verbs.cpp:2521
+#: ../src/verbs.cpp:2514
msgid "Outs_et"
msgstr "Ро_зтягнути"
-#: ../src/verbs.cpp:2522
+#: ../src/verbs.cpp:2515
msgid "Outset selected paths"
msgstr "Розтягнути позначені контури"
-#: ../src/verbs.cpp:2524
+#: ../src/verbs.cpp:2517
msgid "O_utset Path by 1 px"
msgstr "Р_озтягнути на 1 точку"
-#: ../src/verbs.cpp:2525
+#: ../src/verbs.cpp:2518
msgid "Outset selected paths by 1 px"
msgstr "Розтягнути позначені контури на 1 точку"
-#: ../src/verbs.cpp:2527
+#: ../src/verbs.cpp:2520
msgid "O_utset Path by 10 px"
msgstr "Р_озтягнути на 10 точок"
-#: ../src/verbs.cpp:2528
+#: ../src/verbs.cpp:2521
msgid "Outset selected paths by 10 px"
msgstr "Розтягнути позначені контури на 10 точок"
#. TRANSLATORS: "inset": contract a shape by offsetting the object's path,
#. i.e. by displacing it perpendicular to the path in each point.
#. See also the Advanced Tutorial for explanation.
-#: ../src/verbs.cpp:2532
+#: ../src/verbs.cpp:2525
msgid "I_nset"
msgstr "В_тягнути"
-#: ../src/verbs.cpp:2533
+#: ../src/verbs.cpp:2526
msgid "Inset selected paths"
msgstr "Втягнути позначені контури"
-#: ../src/verbs.cpp:2535
+#: ../src/verbs.cpp:2528
msgid "I_nset Path by 1 px"
msgstr "Вт_ягнути контур на 1 точку"
-#: ../src/verbs.cpp:2536
+#: ../src/verbs.cpp:2529
msgid "Inset selected paths by 1 px"
msgstr "Втягнути позначені контури на 1 точку"
-#: ../src/verbs.cpp:2538
+#: ../src/verbs.cpp:2531
msgid "I_nset Path by 10 px"
msgstr "Вт_ягнути контур на 10 точок"
-#: ../src/verbs.cpp:2539
+#: ../src/verbs.cpp:2532
msgid "Inset selected paths by 10 px"
msgstr "Втягнути позначені контури на 10 точок"
-#: ../src/verbs.cpp:2541
+#: ../src/verbs.cpp:2534
msgid "D_ynamic Offset"
msgstr "Д_инамічний відступ"
-#: ../src/verbs.cpp:2541
+#: ../src/verbs.cpp:2534
msgid "Create a dynamic offset object"
msgstr ""
"Створити об'єкт, втягування/розтягування якого можна змінювати динамічно"
-#: ../src/verbs.cpp:2543
+#: ../src/verbs.cpp:2536
msgid "_Linked Offset"
msgstr "Зв'_язане втягування"
-#: ../src/verbs.cpp:2544
+#: ../src/verbs.cpp:2537
msgid "Create a dynamic offset object linked to the original path"
msgstr ""
"Створити втягування/розтягування, динамічно пов'язане з початковим контуром"
-#: ../src/verbs.cpp:2546
+#: ../src/verbs.cpp:2539
msgid "_Stroke to Path"
msgstr "_Штрих у контур"
-#: ../src/verbs.cpp:2547
+#: ../src/verbs.cpp:2540
msgid "Convert selected object's stroke to paths"
msgstr "Перетворити штрих позначеного об'єкта на контури"
-#: ../src/verbs.cpp:2548
+#: ../src/verbs.cpp:2541
msgid "Si_mplify"
msgstr "_Спростити"
-#: ../src/verbs.cpp:2549
+#: ../src/verbs.cpp:2542
msgid "Simplify selected paths (remove extra nodes)"
msgstr "Спростити позначені контури вилученням зайвих вузлів"
-#: ../src/verbs.cpp:2550
+#: ../src/verbs.cpp:2543
msgid "_Reverse"
msgstr "Роз_вернути"
-#: ../src/verbs.cpp:2551
+#: ../src/verbs.cpp:2544
msgid "Reverse the direction of selected paths (useful for flipping markers)"
msgstr ""
"Змінити напрямок позначених контурів на протилежний (корисно для "
"віддзеркалення маркерів)"
-#: ../src/verbs.cpp:2554
+#: ../src/verbs.cpp:2547
msgid "Create one or more paths from a bitmap by tracing it"
msgstr ""
"Створення одного або більше контурів з растрового файла шляхом трасування"
-#: ../src/verbs.cpp:2555
+#: ../src/verbs.cpp:2548
msgid "Trace Pixel Art..."
msgstr "Трасування растрової графіки…"
-#: ../src/verbs.cpp:2556
+#: ../src/verbs.cpp:2549
msgid "Create paths using Kopf-Lischinski algorithm to vectorize pixel art"
msgstr ""
"Створити контури за алгоритмом Копфа-Ліщинського для векторизації растрової "
"графіки"
-#: ../src/verbs.cpp:2557
+#: ../src/verbs.cpp:2550
msgid "Make a _Bitmap Copy"
msgstr "З_робити растрову копію"
-#: ../src/verbs.cpp:2558
+#: ../src/verbs.cpp:2551
msgid "Export selection to a bitmap and insert it into document"
msgstr "Експортувати позначені об'єкти у растр та вставити його у документ"
-#: ../src/verbs.cpp:2559
+#: ../src/verbs.cpp:2552
msgid "_Combine"
msgstr "Об'_єднати"
-#: ../src/verbs.cpp:2560
+#: ../src/verbs.cpp:2553
msgid "Combine several paths into one"
msgstr "Об'єднати декілька контурів у один"
#. TRANSLATORS: "to cut a path" is not the same as "to break a path apart" - see the
#. Advanced tutorial for more info
-#: ../src/verbs.cpp:2563
+#: ../src/verbs.cpp:2556
msgid "Break _Apart"
msgstr "_Розділити"
-#: ../src/verbs.cpp:2564
+#: ../src/verbs.cpp:2557
msgid "Break selected paths into subpaths"
msgstr "Розділити позначені контури на частини"
-#: ../src/verbs.cpp:2565
-msgid "Ro_ws and Columns..."
-msgstr "Р_ядки і стовпчики…"
+#: ../src/verbs.cpp:2558
+msgid "_Arrange..."
+msgstr "_Компонувати…"
-#: ../src/verbs.cpp:2566
-msgid "Arrange selected objects in a table"
-msgstr "Компонувати позначені об'єкти у формі таблиці"
+#: ../src/verbs.cpp:2559
+msgid "Arrange selected objects in a table or circle"
+msgstr "Компонувати позначені об'єкти у формі таблиці або за колом"
#. Layer
-#: ../src/verbs.cpp:2568
+#: ../src/verbs.cpp:2561
msgid "_Add Layer..."
msgstr "_Додати шар…"
-#: ../src/verbs.cpp:2569
+#: ../src/verbs.cpp:2562
msgid "Create a new layer"
msgstr "Створити новий шар"
-#: ../src/verbs.cpp:2570
+#: ../src/verbs.cpp:2563
msgid "Re_name Layer..."
msgstr "Пере_йменувати шар…"
-#: ../src/verbs.cpp:2571
+#: ../src/verbs.cpp:2564
msgid "Rename the current layer"
msgstr "Перейменувати поточний шар"
-#: ../src/verbs.cpp:2572
+#: ../src/verbs.cpp:2565
msgid "Switch to Layer Abov_e"
msgstr "Перейти на шар _вище"
-#: ../src/verbs.cpp:2573
+#: ../src/verbs.cpp:2566
msgid "Switch to the layer above the current"
msgstr "Перейти на шар, що знаходиться вище від поточного"
-#: ../src/verbs.cpp:2574
+#: ../src/verbs.cpp:2567
msgid "Switch to Layer Belo_w"
msgstr "Перейти на шар _нижче"
-#: ../src/verbs.cpp:2575
+#: ../src/verbs.cpp:2568
msgid "Switch to the layer below the current"
msgstr "Перейти на шар, що знаходиться нижче від поточного"
-#: ../src/verbs.cpp:2576
+#: ../src/verbs.cpp:2569
msgid "Move Selection to Layer Abo_ve"
msgstr "Перемістити позначені об'єкти на шар ви_ще"
-#: ../src/verbs.cpp:2577
+#: ../src/verbs.cpp:2570
msgid "Move selection to the layer above the current"
msgstr "Перемістити на шар, що знаходиться над поточним"
-#: ../src/verbs.cpp:2578
+#: ../src/verbs.cpp:2571
msgid "Move Selection to Layer Bel_ow"
msgstr "Перемістити на шар ни_жче"
-#: ../src/verbs.cpp:2579
+#: ../src/verbs.cpp:2572
msgid "Move selection to the layer below the current"
msgstr "Перемістити на шар, що знаходиться під поточним"
-#: ../src/verbs.cpp:2580
+#: ../src/verbs.cpp:2573
msgid "Move Selection to Layer..."
msgstr "Пересунути позначене до шару…"
-#: ../src/verbs.cpp:2582
+#: ../src/verbs.cpp:2575
msgid "Layer to _Top"
msgstr "Підняти шар до_гори"
-#: ../src/verbs.cpp:2583
+#: ../src/verbs.cpp:2576
msgid "Raise the current layer to the top"
msgstr "Підняти поточний шар догори"
-#: ../src/verbs.cpp:2584
+#: ../src/verbs.cpp:2577
msgid "Layer to _Bottom"
msgstr "Опустити шар в _основу"
-#: ../src/verbs.cpp:2585
+#: ../src/verbs.cpp:2578
msgid "Lower the current layer to the bottom"
msgstr "Опустити поточний шар на найнижчий рівень"
-#: ../src/verbs.cpp:2586
+#: ../src/verbs.cpp:2579
msgid "_Raise Layer"
msgstr "_Підняти шар"
-#: ../src/verbs.cpp:2587
+#: ../src/verbs.cpp:2580
msgid "Raise the current layer"
msgstr "Підняти поточний шар"
-#: ../src/verbs.cpp:2588
+#: ../src/verbs.cpp:2581
msgid "_Lower Layer"
msgstr "_Опустити шар"
-#: ../src/verbs.cpp:2589
+#: ../src/verbs.cpp:2582
msgid "Lower the current layer"
msgstr "Опустити поточний шар"
-#: ../src/verbs.cpp:2590
+#: ../src/verbs.cpp:2583
msgid "D_uplicate Current Layer"
msgstr "Д_ублювати поточний шар"
-#: ../src/verbs.cpp:2591
+#: ../src/verbs.cpp:2584
msgid "Duplicate an existing layer"
msgstr "Дублювати поточний шар"
-#: ../src/verbs.cpp:2592
+#: ../src/verbs.cpp:2585
msgid "_Delete Current Layer"
msgstr "В_илучити поточний шар"
-#: ../src/verbs.cpp:2593
+#: ../src/verbs.cpp:2586
msgid "Delete the current layer"
msgstr "Вилучити поточний шар"
-#: ../src/verbs.cpp:2594
+#: ../src/verbs.cpp:2587
msgid "_Show/hide other layers"
msgstr "_Показати або сховати інші шари"
-#: ../src/verbs.cpp:2595
+#: ../src/verbs.cpp:2588
msgid "Solo the current layer"
msgstr "Виокремити поточний шар"
-#: ../src/verbs.cpp:2596
+#: ../src/verbs.cpp:2589
msgid "_Show all layers"
msgstr "По_казати всі шари"
-#: ../src/verbs.cpp:2597
+#: ../src/verbs.cpp:2590
msgid "Show all the layers"
msgstr "Показати всі шари"
-#: ../src/verbs.cpp:2598
+#: ../src/verbs.cpp:2591
msgid "_Hide all layers"
msgstr "При_ховати всі шари"
-#: ../src/verbs.cpp:2599
+#: ../src/verbs.cpp:2592
msgid "Hide all the layers"
msgstr "Приховати всі шари"
-#: ../src/verbs.cpp:2600
+#: ../src/verbs.cpp:2593
msgid "_Lock all layers"
msgstr "За_блокувати всі шари"
-#: ../src/verbs.cpp:2601
+#: ../src/verbs.cpp:2594
msgid "Lock all the layers"
msgstr "Заблокувати всі шари"
-#: ../src/verbs.cpp:2602
+#: ../src/verbs.cpp:2595
msgid "Lock/Unlock _other layers"
msgstr "Заблокувати чи розблокувати ін_ші шари"
-#: ../src/verbs.cpp:2603
+#: ../src/verbs.cpp:2596
msgid "Lock all the other layers"
msgstr "Заблокувати всі інші шари"
-#: ../src/verbs.cpp:2604
+#: ../src/verbs.cpp:2597
msgid "_Unlock all layers"
msgstr "_Розблокувати всі шари"
-#: ../src/verbs.cpp:2605
+#: ../src/verbs.cpp:2598
msgid "Unlock all the layers"
msgstr "Розблокувати всі шари"
-#: ../src/verbs.cpp:2606
+#: ../src/verbs.cpp:2599
msgid "_Lock/Unlock Current Layer"
msgstr "За_блокувати чи розблокувати поточний шар"
-#: ../src/verbs.cpp:2607
+#: ../src/verbs.cpp:2600
msgid "Toggle lock on current layer"
msgstr "Заблокувати або розблокувати поточний шар"
-#: ../src/verbs.cpp:2608
+#: ../src/verbs.cpp:2601
msgid "_Show/hide Current Layer"
msgstr "_Показати або сховати поточний шар"
-#: ../src/verbs.cpp:2609
+#: ../src/verbs.cpp:2602
msgid "Toggle visibility of current layer"
msgstr "Увімкнути/Вимкнути видимість поточного шару"
#. Object
-#: ../src/verbs.cpp:2612
-msgid "Rotate _90&#176; CW"
+#: ../src/verbs.cpp:2605
+msgid "Rotate _90° CW"
msgstr "Обернути на _90° за годинниковою стрілкою"
#. This is shared between tooltips and statusbar, so they
#. must use UTF-8, not HTML entities for special characters.
-#: ../src/verbs.cpp:2615
+#: ../src/verbs.cpp:2608
msgid "Rotate selection 90° clockwise"
msgstr "Обернути позначені об'єкти на 90° за годинниковою стрілкою"
-#: ../src/verbs.cpp:2616
-msgid "Rotate 9_0&#176; CCW"
+#: ../src/verbs.cpp:2609
+msgid "Rotate 9_0° CCW"
msgstr "Обернути на 9_0° проти годинникової стрілки"
#. This is shared between tooltips and statusbar, so they
#. must use UTF-8, not HTML entities for special characters.
-#: ../src/verbs.cpp:2619
+#: ../src/verbs.cpp:2612
msgid "Rotate selection 90° counter-clockwise"
msgstr "Обернути позначені об'єкти на 90° проти годинникової стрілки"
-#: ../src/verbs.cpp:2620
+#: ../src/verbs.cpp:2613
msgid "Remove _Transformations"
msgstr "Прибрати _трансформацію"
-#: ../src/verbs.cpp:2621
+#: ../src/verbs.cpp:2614
msgid "Remove transformations from object"
msgstr "Прибрати трансформації з об'єкта"
-#: ../src/verbs.cpp:2622
+#: ../src/verbs.cpp:2615
msgid "_Object to Path"
msgstr "_Об'єкт у контур"
-#: ../src/verbs.cpp:2623
+#: ../src/verbs.cpp:2616
msgid "Convert selected object to path"
msgstr "Перетворити позначений об'єкт на контур"
-#: ../src/verbs.cpp:2624
+#: ../src/verbs.cpp:2617
msgid "_Flow into Frame"
msgstr "_Огорнути в рамку"
-#: ../src/verbs.cpp:2625
+#: ../src/verbs.cpp:2618
msgid ""
"Put text into a frame (path or shape), creating a flowed text linked to the "
"frame object"
@@ -25926,742 +25485,742 @@ msgstr ""
"Вкласти текст у рамку (контур чи форму), створивши контурний текст "
"прив'язаний до об'єкта рамки"
-#: ../src/verbs.cpp:2626
+#: ../src/verbs.cpp:2619
msgid "_Unflow"
msgstr "_Вийняти з рамки"
-#: ../src/verbs.cpp:2627
+#: ../src/verbs.cpp:2620
msgid "Remove text from frame (creates a single-line text object)"
msgstr "Вийняти тест з рамки, створивши звичайний тестовий об'єкт в один рядок"
-#: ../src/verbs.cpp:2628
+#: ../src/verbs.cpp:2621
msgid "_Convert to Text"
msgstr "_Перетворити у текст"
-#: ../src/verbs.cpp:2629
+#: ../src/verbs.cpp:2622
msgid "Convert flowed text to regular text object (preserves appearance)"
msgstr "Перетворити контурний текст у звичайний текст (із збереженням вигляду)"
-#: ../src/verbs.cpp:2631
+#: ../src/verbs.cpp:2624
msgid "Flip _Horizontal"
msgstr "Віддзеркалити гор_изонтально"
-#: ../src/verbs.cpp:2631
+#: ../src/verbs.cpp:2624
msgid "Flip selected objects horizontally"
msgstr "Віддзеркалити позначені об'єкти горизонтально"
-#: ../src/verbs.cpp:2634
+#: ../src/verbs.cpp:2627
msgid "Flip _Vertical"
msgstr "Віддзеркалити _вертикально"
-#: ../src/verbs.cpp:2634
+#: ../src/verbs.cpp:2627
msgid "Flip selected objects vertically"
msgstr "Віддзеркалити позначені об'єкти вертикально"
-#: ../src/verbs.cpp:2637
+#: ../src/verbs.cpp:2630
msgid "Apply mask to selection (using the topmost object as mask)"
msgstr ""
"Застосувати маску до позначених об'єктів (використовуючи найвищий об'єкт як "
"маску)"
-#: ../src/verbs.cpp:2639
+#: ../src/verbs.cpp:2632
msgid "Edit mask"
msgstr "Змінити маску"
-#: ../src/verbs.cpp:2640 ../src/verbs.cpp:2646
+#: ../src/verbs.cpp:2633 ../src/verbs.cpp:2639
msgid "_Release"
msgstr "_Скинути"
-#: ../src/verbs.cpp:2641
+#: ../src/verbs.cpp:2634
msgid "Remove mask from selection"
msgstr "Вилучити маску з позначеного"
-#: ../src/verbs.cpp:2643
+#: ../src/verbs.cpp:2636
msgid ""
"Apply clipping path to selection (using the topmost object as clipping path)"
msgstr ""
"Застосувати контур-обгортку до позначених об'єктів (використовуючи найвищий "
"об'єкт як контур-обгортку)"
-#: ../src/verbs.cpp:2645
+#: ../src/verbs.cpp:2638
msgid "Edit clipping path"
msgstr "Змінити контур вирізання"
-#: ../src/verbs.cpp:2647
+#: ../src/verbs.cpp:2640
msgid "Remove clipping path from selection"
msgstr "Вилучити контур-обгортку з позначених об'єктів'"
#. Tools
-#: ../src/verbs.cpp:2650
+#: ../src/verbs.cpp:2643
msgctxt "ContextVerb"
msgid "Select"
msgstr "Позначення"
-#: ../src/verbs.cpp:2651
+#: ../src/verbs.cpp:2644
msgid "Select and transform objects"
msgstr "Позначення та трансформація об'єктів"
-#: ../src/verbs.cpp:2652
+#: ../src/verbs.cpp:2645
msgctxt "ContextVerb"
msgid "Node Edit"
msgstr "Редактор вузлів"
-#: ../src/verbs.cpp:2653
+#: ../src/verbs.cpp:2646
msgid "Edit paths by nodes"
msgstr "Редагування контурів за вузлами"
-#: ../src/verbs.cpp:2654
+#: ../src/verbs.cpp:2647
msgctxt "ContextVerb"
msgid "Tweak"
msgstr "Корекція"
-#: ../src/verbs.cpp:2655
+#: ../src/verbs.cpp:2648
msgid "Tweak objects by sculpting or painting"
msgstr "Коригувати об'єкти за допомогою профілювання або розфарбовування"
-#: ../src/verbs.cpp:2656
+#: ../src/verbs.cpp:2649
msgctxt "ContextVerb"
msgid "Spray"
msgstr "Розкидання"
-#: ../src/verbs.cpp:2657
+#: ../src/verbs.cpp:2650
msgid "Spray objects by sculpting or painting"
msgstr "Розкидати об'єкти за допомогою профілювання або розфарбовування"
-#: ../src/verbs.cpp:2658
+#: ../src/verbs.cpp:2651
msgctxt "ContextVerb"
msgid "Rectangle"
msgstr "Прямокутник"
-#: ../src/verbs.cpp:2659
+#: ../src/verbs.cpp:2652
msgid "Create rectangles and squares"
msgstr "Створення прямокутників та квадратів"
-#: ../src/verbs.cpp:2660
+#: ../src/verbs.cpp:2653
msgctxt "ContextVerb"
msgid "3D Box"
msgstr "Просторовий об'єкт"
-#: ../src/verbs.cpp:2661
+#: ../src/verbs.cpp:2654
msgid "Create 3D boxes"
msgstr "Створити тривимірні об'єкти"
-#: ../src/verbs.cpp:2662
+#: ../src/verbs.cpp:2655
msgctxt "ContextVerb"
msgid "Ellipse"
msgstr "Еліпс"
-#: ../src/verbs.cpp:2663
+#: ../src/verbs.cpp:2656
msgid "Create circles, ellipses, and arcs"
msgstr "Створення кіл, еліпсів та дуг"
-#: ../src/verbs.cpp:2664
+#: ../src/verbs.cpp:2657
msgctxt "ContextVerb"
msgid "Star"
msgstr "Зірка"
-#: ../src/verbs.cpp:2665
+#: ../src/verbs.cpp:2658
msgid "Create stars and polygons"
msgstr "Створення зірок та багатокутників"
-#: ../src/verbs.cpp:2666
+#: ../src/verbs.cpp:2659
msgctxt "ContextVerb"
msgid "Spiral"
msgstr "Спіраль"
-#: ../src/verbs.cpp:2667
+#: ../src/verbs.cpp:2660
msgid "Create spirals"
msgstr "Створення спіралей"
-#: ../src/verbs.cpp:2668
+#: ../src/verbs.cpp:2661
msgctxt "ContextVerb"
msgid "Pencil"
msgstr "Олівець"
-#: ../src/verbs.cpp:2669
+#: ../src/verbs.cpp:2662
msgid "Draw freehand lines"
msgstr "Малювання довільних контурів"
-#: ../src/verbs.cpp:2670
+#: ../src/verbs.cpp:2663
msgctxt "ContextVerb"
msgid "Pen"
msgstr "Перо"
-#: ../src/verbs.cpp:2671
+#: ../src/verbs.cpp:2664
msgid "Draw Bezier curves and straight lines"
msgstr "Малювання кривих Безьє чи прямих ліній"
-#: ../src/verbs.cpp:2672
+#: ../src/verbs.cpp:2665
msgctxt "ContextVerb"
msgid "Calligraphy"
msgstr "Каліграфія"
-#: ../src/verbs.cpp:2673
+#: ../src/verbs.cpp:2666
msgid "Draw calligraphic or brush strokes"
msgstr "Малювати каліграфічним пером або пензлем"
-#: ../src/verbs.cpp:2675
+#: ../src/verbs.cpp:2668
msgid "Create and edit text objects"
msgstr "Створення та зміна текстових об'єктів"
-#: ../src/verbs.cpp:2676
+#: ../src/verbs.cpp:2669
msgctxt "ContextVerb"
msgid "Gradient"
msgstr "Градієнт"
-#: ../src/verbs.cpp:2677
+#: ../src/verbs.cpp:2670
msgid "Create and edit gradients"
msgstr "Створення та зміна градієнтів"
-#: ../src/verbs.cpp:2678
+#: ../src/verbs.cpp:2671
msgctxt "ContextVerb"
msgid "Mesh"
msgstr "Сітка"
-#: ../src/verbs.cpp:2679
+#: ../src/verbs.cpp:2672
msgid "Create and edit meshes"
msgstr "Створення та зміна сіток"
-#: ../src/verbs.cpp:2680
+#: ../src/verbs.cpp:2673
msgctxt "ContextVerb"
msgid "Zoom"
msgstr "Масштаб"
-#: ../src/verbs.cpp:2681
+#: ../src/verbs.cpp:2674
msgid "Zoom in or out"
msgstr "Змінити масштаб"
-#: ../src/verbs.cpp:2683
+#: ../src/verbs.cpp:2676
msgid "Measurement tool"
msgstr "Інструмент вимірювання"
-#: ../src/verbs.cpp:2684
+#: ../src/verbs.cpp:2677
msgctxt "ContextVerb"
msgid "Dropper"
msgstr "Піпетка"
-#: ../src/verbs.cpp:2685 ../src/widgets/sp-color-notebook.cpp:411
+#: ../src/verbs.cpp:2678 ../src/widgets/sp-color-notebook.cpp:411
msgid "Pick colors from image"
msgstr "Взяти кольори з зображення"
-#: ../src/verbs.cpp:2686
+#: ../src/verbs.cpp:2679
msgctxt "ContextVerb"
msgid "Connector"
msgstr "Лінія з'єднання"
-#: ../src/verbs.cpp:2687
+#: ../src/verbs.cpp:2680
msgid "Create diagram connectors"
msgstr "Створити лінії з'єднання на діаграмі"
-#: ../src/verbs.cpp:2688
+#: ../src/verbs.cpp:2681
msgctxt "ContextVerb"
msgid "Paint Bucket"
msgstr "Відро з фарбою"
-#: ../src/verbs.cpp:2689
+#: ../src/verbs.cpp:2682
msgid "Fill bounded areas"
msgstr "Заповнити замкнені області"
-#: ../src/verbs.cpp:2690
+#: ../src/verbs.cpp:2683
msgctxt "ContextVerb"
msgid "LPE Edit"
msgstr "Редагування геометричних побудов"
-#: ../src/verbs.cpp:2691
+#: ../src/verbs.cpp:2684
msgid "Edit Path Effect parameters"
msgstr "Змінити параметри ефекту контуру"
-#: ../src/verbs.cpp:2692
+#: ../src/verbs.cpp:2685
msgctxt "ContextVerb"
msgid "Eraser"
msgstr "Гумка"
-#: ../src/verbs.cpp:2693
+#: ../src/verbs.cpp:2686
msgid "Erase existing paths"
msgstr "Витерти існуючі контури"
-#: ../src/verbs.cpp:2694
+#: ../src/verbs.cpp:2687
msgctxt "ContextVerb"
msgid "LPE Tool"
msgstr "Інструмент геометричної побудови"
-#: ../src/verbs.cpp:2695
+#: ../src/verbs.cpp:2688
msgid "Do geometric constructions"
msgstr "Виконати геометричну побудову"
#. Tool prefs
-#: ../src/verbs.cpp:2697
+#: ../src/verbs.cpp:2690
msgid "Selector Preferences"
msgstr "Параметри селектора"
-#: ../src/verbs.cpp:2698
+#: ../src/verbs.cpp:2691
msgid "Open Preferences for the Selector tool"
msgstr "Відкрити вікно параметрів Inkscape для інструмента позначення"
-#: ../src/verbs.cpp:2699
+#: ../src/verbs.cpp:2692
msgid "Node Tool Preferences"
msgstr "Параметри редактора вузлів"
-#: ../src/verbs.cpp:2700
+#: ../src/verbs.cpp:2693
msgid "Open Preferences for the Node tool"
msgstr "Відкрити вікно параметрів Inkscape для інструмента «Редактор вузлів»"
-#: ../src/verbs.cpp:2701
+#: ../src/verbs.cpp:2694
msgid "Tweak Tool Preferences"
msgstr "Параметри інструмента «Корекція»"
-#: ../src/verbs.cpp:2702
+#: ../src/verbs.cpp:2695
msgid "Open Preferences for the Tweak tool"
msgstr "Відкрити вікно параметрів Inkscape для інструмента «Корекція»"
-#: ../src/verbs.cpp:2703
+#: ../src/verbs.cpp:2696
msgid "Spray Tool Preferences"
msgstr "Параметри інструмента «Розкидання»"
-#: ../src/verbs.cpp:2704
+#: ../src/verbs.cpp:2697
msgid "Open Preferences for the Spray tool"
msgstr "Відкрити вікно параметрів для інструмента «Розкидання»"
-#: ../src/verbs.cpp:2705
+#: ../src/verbs.cpp:2698
msgid "Rectangle Preferences"
msgstr "Параметри прямокутника"
-#: ../src/verbs.cpp:2706
+#: ../src/verbs.cpp:2699
msgid "Open Preferences for the Rectangle tool"
msgstr "Відкрити вікно параметрів Inkscape для інструмента «Прямокутник»"
-#: ../src/verbs.cpp:2707
+#: ../src/verbs.cpp:2700
msgid "3D Box Preferences"
msgstr "Параметри просторового об'єкта"
-#: ../src/verbs.cpp:2708
+#: ../src/verbs.cpp:2701
msgid "Open Preferences for the 3D Box tool"
msgstr ""
"Відкрити вікно параметрів Inkscape для інструмента «Просторовий об'єкт»"
-#: ../src/verbs.cpp:2709
+#: ../src/verbs.cpp:2702
msgid "Ellipse Preferences"
msgstr "Параметри еліпса"
-#: ../src/verbs.cpp:2710
+#: ../src/verbs.cpp:2703
msgid "Open Preferences for the Ellipse tool"
msgstr "Відкрити вікно параметрів Inkscape для інструмента «Еліпс»"
-#: ../src/verbs.cpp:2711
+#: ../src/verbs.cpp:2704
msgid "Star Preferences"
msgstr "Властивості зірки"
-#: ../src/verbs.cpp:2712
+#: ../src/verbs.cpp:2705
msgid "Open Preferences for the Star tool"
msgstr "Відкрити вікно параметрів Inkscape для інструмента «Зірка»"
-#: ../src/verbs.cpp:2713
+#: ../src/verbs.cpp:2706
msgid "Spiral Preferences"
msgstr "Властивості спіралі"
-#: ../src/verbs.cpp:2714
+#: ../src/verbs.cpp:2707
msgid "Open Preferences for the Spiral tool"
msgstr "Відкрити вікно параметрів Inkscape для інструмента «Спіраль»"
-#: ../src/verbs.cpp:2715
+#: ../src/verbs.cpp:2708
msgid "Pencil Preferences"
msgstr "Параметри олівця"
-#: ../src/verbs.cpp:2716
+#: ../src/verbs.cpp:2709
msgid "Open Preferences for the Pencil tool"
msgstr "Відкрити вікно параметрів Inkscape для інструмента «Олівець»"
-#: ../src/verbs.cpp:2717
+#: ../src/verbs.cpp:2710
msgid "Pen Preferences"
msgstr "Параметри пера"
-#: ../src/verbs.cpp:2718
+#: ../src/verbs.cpp:2711
msgid "Open Preferences for the Pen tool"
msgstr "Відкрити вікно параметрів Inkscape для інструмента «Перо»"
-#: ../src/verbs.cpp:2719
+#: ../src/verbs.cpp:2712
msgid "Calligraphic Preferences"
msgstr "Параметри каліграфічного пера"
-#: ../src/verbs.cpp:2720
+#: ../src/verbs.cpp:2713
msgid "Open Preferences for the Calligraphy tool"
msgstr "Відкрити вікно параметрів Inkscape для інструмента «Каліграфічне перо»"
-#: ../src/verbs.cpp:2721
+#: ../src/verbs.cpp:2714
msgid "Text Preferences"
msgstr "Параметри тексту"
-#: ../src/verbs.cpp:2722
+#: ../src/verbs.cpp:2715
msgid "Open Preferences for the Text tool"
msgstr "Відкрити вікно параметрів Inkscape для інструмента «Текст»"
-#: ../src/verbs.cpp:2723
+#: ../src/verbs.cpp:2716
msgid "Gradient Preferences"
msgstr "Параметри градієнта"
-#: ../src/verbs.cpp:2724
+#: ../src/verbs.cpp:2717
msgid "Open Preferences for the Gradient tool"
msgstr "Відкрити вікно параметрів Inkscape для інструмента «Градієнт»"
-#: ../src/verbs.cpp:2725
+#: ../src/verbs.cpp:2718
msgid "Mesh Preferences"
msgstr "Параметри сітки"
-#: ../src/verbs.cpp:2726
+#: ../src/verbs.cpp:2719
msgid "Open Preferences for the Mesh tool"
msgstr "Відкрити вікно параметрів для інструмента «Сітка»"
-#: ../src/verbs.cpp:2727
+#: ../src/verbs.cpp:2720
msgid "Zoom Preferences"
msgstr "Параметри масштабу"
-#: ../src/verbs.cpp:2728
+#: ../src/verbs.cpp:2721
msgid "Open Preferences for the Zoom tool"
msgstr "Відкрити вікно параметрів Inkscape для інструмента «Масштаб»"
-#: ../src/verbs.cpp:2729
+#: ../src/verbs.cpp:2722
msgid "Measure Preferences"
msgstr "Властивості вимірювання"
-#: ../src/verbs.cpp:2730
+#: ../src/verbs.cpp:2723
msgid "Open Preferences for the Measure tool"
msgstr "Відкрити вікно параметрів для інструмента «Вимірювання»"
-#: ../src/verbs.cpp:2731
+#: ../src/verbs.cpp:2724
msgid "Dropper Preferences"
msgstr "Параметри піпетки"
-#: ../src/verbs.cpp:2732
+#: ../src/verbs.cpp:2725
msgid "Open Preferences for the Dropper tool"
msgstr "Відкрити вікно параметрів Inkscape для інструмента «Піпетка»"
-#: ../src/verbs.cpp:2733
+#: ../src/verbs.cpp:2726
msgid "Connector Preferences"
msgstr "Параметри лінії з'єднання"
-#: ../src/verbs.cpp:2734
+#: ../src/verbs.cpp:2727
msgid "Open Preferences for the Connector tool"
msgstr "Відкрити вікно параметрів Inkscape для інструмента «Лінії з'єднання»"
-#: ../src/verbs.cpp:2735
+#: ../src/verbs.cpp:2728
msgid "Paint Bucket Preferences"
msgstr "Параметри відра з фарбою"
-#: ../src/verbs.cpp:2736
+#: ../src/verbs.cpp:2729
msgid "Open Preferences for the Paint Bucket tool"
msgstr "Відкрити параметри для інструмента «Відро з фарбою»"
-#: ../src/verbs.cpp:2737
+#: ../src/verbs.cpp:2730
msgid "Eraser Preferences"
msgstr "Властивості гумки"
-#: ../src/verbs.cpp:2738
+#: ../src/verbs.cpp:2731
msgid "Open Preferences for the Eraser tool"
msgstr "Відкрити вікно параметрів для інструмента «Гумка»"
-#: ../src/verbs.cpp:2739
+#: ../src/verbs.cpp:2732
msgid "LPE Tool Preferences"
msgstr "Параметри інструмента «Геометричні побудови»"
-#: ../src/verbs.cpp:2740
+#: ../src/verbs.cpp:2733
msgid "Open Preferences for the LPETool tool"
msgstr "Відкрити вікно параметрів для інструмента «Геометричні побудови»"
#. Zoom/View
-#: ../src/verbs.cpp:2742
+#: ../src/verbs.cpp:2735
msgid "Zoom In"
msgstr "Збільшити"
-#: ../src/verbs.cpp:2742
+#: ../src/verbs.cpp:2735
msgid "Zoom in"
msgstr "Збільшити"
-#: ../src/verbs.cpp:2743
+#: ../src/verbs.cpp:2736
msgid "Zoom Out"
msgstr "Зменшити"
-#: ../src/verbs.cpp:2743
+#: ../src/verbs.cpp:2736
msgid "Zoom out"
msgstr "Зменшити"
-#: ../src/verbs.cpp:2744
+#: ../src/verbs.cpp:2737
msgid "_Rulers"
msgstr "_Лінійки"
-#: ../src/verbs.cpp:2744
+#: ../src/verbs.cpp:2737
msgid "Show or hide the canvas rulers"
msgstr "Показати або сховати лінійки полотна"
-#: ../src/verbs.cpp:2745
+#: ../src/verbs.cpp:2738
msgid "Scroll_bars"
msgstr "_Смуги гортання"
-#: ../src/verbs.cpp:2745
+#: ../src/verbs.cpp:2738
msgid "Show or hide the canvas scrollbars"
msgstr "Показати/Сховати смуги гортання полотна"
-#: ../src/verbs.cpp:2746
-msgid "_Grid"
-msgstr "С_ітка"
+#: ../src/verbs.cpp:2739
+msgid "Page _Grid"
+msgstr "С_ітка сторінки"
-#: ../src/verbs.cpp:2746
-msgid "Show or hide the grid"
-msgstr "Показати або сховати сітку"
+#: ../src/verbs.cpp:2739
+msgid "Show or hide the page grid"
+msgstr "Показати або сховати сітку сторінки"
-#: ../src/verbs.cpp:2747
+#: ../src/verbs.cpp:2740
msgid "G_uides"
msgstr "Нап_рямні"
-#: ../src/verbs.cpp:2747
+#: ../src/verbs.cpp:2740
msgid "Show or hide guides (drag from a ruler to create a guide)"
msgstr ""
"Показати чи сховати напрямні (потягніть від лінійки для створення напрямної)"
-#: ../src/verbs.cpp:2748
+#: ../src/verbs.cpp:2741
msgid "Enable snapping"
msgstr "Дозволити прилипання"
-#: ../src/verbs.cpp:2749
+#: ../src/verbs.cpp:2742
msgid "_Commands Bar"
msgstr "Панель ко_манд"
-#: ../src/verbs.cpp:2749
+#: ../src/verbs.cpp:2742
msgid "Show or hide the Commands bar (under the menu)"
msgstr "Показати/сховати панель команд (під меню)"
-#: ../src/verbs.cpp:2750
+#: ../src/verbs.cpp:2743
msgid "Sn_ap Controls Bar"
msgstr "Панель керування при_липанням"
-#: ../src/verbs.cpp:2750
+#: ../src/verbs.cpp:2743
msgid "Show or hide the snapping controls"
msgstr "Показати або сховати інструменти керування прилипанням"
-#: ../src/verbs.cpp:2751
+#: ../src/verbs.cpp:2744
msgid "T_ool Controls Bar"
msgstr "Па_нель параметрів інструментів"
-#: ../src/verbs.cpp:2751
+#: ../src/verbs.cpp:2744
msgid "Show or hide the Tool Controls bar"
msgstr "Показати або сховати панель з параметрами інструментів"
-#: ../src/verbs.cpp:2752
+#: ../src/verbs.cpp:2745
msgid "_Toolbox"
msgstr "Панель _інструментів"
-#: ../src/verbs.cpp:2752
+#: ../src/verbs.cpp:2745
msgid "Show or hide the main toolbox (on the left)"
msgstr "Показати або сховати головну панель інструментів (зліва)"
-#: ../src/verbs.cpp:2753
+#: ../src/verbs.cpp:2746
msgid "_Palette"
msgstr "_Палітру"
-#: ../src/verbs.cpp:2753
+#: ../src/verbs.cpp:2746
msgid "Show or hide the color palette"
msgstr "Показати або сховати панель з палітрою кольорів"
-#: ../src/verbs.cpp:2754
+#: ../src/verbs.cpp:2747
msgid "_Statusbar"
msgstr "_Рядок стану"
-#: ../src/verbs.cpp:2754
+#: ../src/verbs.cpp:2747
msgid "Show or hide the statusbar (at the bottom of the window)"
msgstr "Показати або сховати рядок стану (внизу вікна)"
-#: ../src/verbs.cpp:2755
+#: ../src/verbs.cpp:2748
msgid "Nex_t Zoom"
msgstr "Н_аступний масштаб"
-#: ../src/verbs.cpp:2755
+#: ../src/verbs.cpp:2748
msgid "Next zoom (from the history of zooms)"
msgstr "Наступний масштаб (з історії зміни масштабу)"
-#: ../src/verbs.cpp:2757
+#: ../src/verbs.cpp:2750
msgid "Pre_vious Zoom"
msgstr "П_опередній масштаб"
-#: ../src/verbs.cpp:2757
+#: ../src/verbs.cpp:2750
msgid "Previous zoom (from the history of zooms)"
msgstr "Попередній масштаб (з історії зміни масштабу)"
-#: ../src/verbs.cpp:2759
+#: ../src/verbs.cpp:2752
msgid "Zoom 1:_1"
msgstr "Масштаб 1:_1"
-#: ../src/verbs.cpp:2759
+#: ../src/verbs.cpp:2752
msgid "Zoom to 1:1"
msgstr "Масштаб 1:1"
-#: ../src/verbs.cpp:2761
+#: ../src/verbs.cpp:2754
msgid "Zoom 1:_2"
msgstr "Масштаб 1:_2"
-#: ../src/verbs.cpp:2761
+#: ../src/verbs.cpp:2754
msgid "Zoom to 1:2"
msgstr "Масштаб 1:2"
-#: ../src/verbs.cpp:2763
+#: ../src/verbs.cpp:2756
msgid "_Zoom 2:1"
msgstr "Мас_штаб 2:1"
-#: ../src/verbs.cpp:2763
+#: ../src/verbs.cpp:2756
msgid "Zoom to 2:1"
msgstr "Масштаб 2:1"
-#: ../src/verbs.cpp:2766
+#: ../src/verbs.cpp:2759
msgid "_Fullscreen"
msgstr "На весь _екран"
-#: ../src/verbs.cpp:2766 ../src/verbs.cpp:2768
+#: ../src/verbs.cpp:2759 ../src/verbs.cpp:2761
msgid "Stretch this document window to full screen"
msgstr "Розтягнути вікно документа на весь екран"
-#: ../src/verbs.cpp:2768
+#: ../src/verbs.cpp:2761
msgid "Fullscreen & Focus Mode"
msgstr "Повноекранний режим та режим фокусування"
-#: ../src/verbs.cpp:2771
+#: ../src/verbs.cpp:2764
msgid "Toggle _Focus Mode"
msgstr "Перемкнути режим _фокусування"
-#: ../src/verbs.cpp:2771
+#: ../src/verbs.cpp:2764
msgid "Remove excess toolbars to focus on drawing"
msgstr "Вилучити зайві панелі інструментів для фокусування на малюванні"
-#: ../src/verbs.cpp:2773
+#: ../src/verbs.cpp:2766
msgid "Duplic_ate Window"
msgstr "_Дублювати вікно"
-#: ../src/verbs.cpp:2773
+#: ../src/verbs.cpp:2766
msgid "Open a new window with the same document"
msgstr "Відкрити нове вікно з цим самим документом"
-#: ../src/verbs.cpp:2775
+#: ../src/verbs.cpp:2768
msgid "_New View Preview"
msgstr "_Створити попередній перегляд"
-#: ../src/verbs.cpp:2776
+#: ../src/verbs.cpp:2769
msgid "New View Preview"
msgstr "Створити нове вікно попереднього перегляду"
#. "view_new_preview"
-#: ../src/verbs.cpp:2778 ../src/verbs.cpp:2786
+#: ../src/verbs.cpp:2771 ../src/verbs.cpp:2779
msgid "_Normal"
msgstr "_Звичайний"
-#: ../src/verbs.cpp:2779
+#: ../src/verbs.cpp:2772
msgid "Switch to normal display mode"
msgstr "Перемикання на звичайний режим відображення"
-#: ../src/verbs.cpp:2780
+#: ../src/verbs.cpp:2773
msgid "No _Filters"
msgstr "Без _фільтрів"
-#: ../src/verbs.cpp:2781
+#: ../src/verbs.cpp:2774
msgid "Switch to normal display without filters"
msgstr "Перемикання на звичайний режим без фільтрів"
-#: ../src/verbs.cpp:2782
+#: ../src/verbs.cpp:2775
msgid "_Outline"
msgstr "_Обрис"
-#: ../src/verbs.cpp:2783
+#: ../src/verbs.cpp:2776
msgid "Switch to outline (wireframe) display mode"
msgstr "Перемкнутися на каркасний режим відображення"
#. new ZoomVerb(SP_VERB_VIEW_COLOR_MODE_PRINT_COLORS_PREVIEW, "ViewColorModePrintColorsPreview", N_("_Print Colors Preview"),
#. N_("Switch to print colors preview mode"), NULL),
-#: ../src/verbs.cpp:2784 ../src/verbs.cpp:2792
+#: ../src/verbs.cpp:2777 ../src/verbs.cpp:2785
msgid "_Toggle"
msgstr "_Перемкнутися"
-#: ../src/verbs.cpp:2785
+#: ../src/verbs.cpp:2778
msgid "Toggle between normal and outline display modes"
msgstr "Перемикач між нормальним та каркасним режимами відображення"
-#: ../src/verbs.cpp:2787
+#: ../src/verbs.cpp:2780
msgid "Switch to normal color display mode"
msgstr "Перемикання на звичайний режим показу кольорів"
-#: ../src/verbs.cpp:2788
+#: ../src/verbs.cpp:2781
msgid "_Grayscale"
msgstr "Сі_рі півтони"
-#: ../src/verbs.cpp:2789
+#: ../src/verbs.cpp:2782
msgid "Switch to grayscale display mode"
msgstr "Перемикання на режим показу тонів сірого"
-#: ../src/verbs.cpp:2793
+#: ../src/verbs.cpp:2786
msgid "Toggle between normal and grayscale color display modes"
msgstr ""
"Перемикач між нормальним режимом показу та режимом показу у відтінках сірого"
-#: ../src/verbs.cpp:2795
+#: ../src/verbs.cpp:2788
msgid "Color-managed view"
msgstr "Перегляд керування кольором"
-#: ../src/verbs.cpp:2796
+#: ../src/verbs.cpp:2789
msgid "Toggle color-managed display for this document window"
msgstr ""
"Перемикач узгодження відображення кольорів дисплеєм для цього вікна документа"
-#: ../src/verbs.cpp:2798
+#: ../src/verbs.cpp:2791
msgid "Ico_n Preview..."
msgstr "Переглянути як п_іктограму…"
-#: ../src/verbs.cpp:2799
+#: ../src/verbs.cpp:2792
msgid "Open a window to preview objects at different icon resolutions"
msgstr "Переглянути позначений елемент у формі піктограми різних розмірів"
-#: ../src/verbs.cpp:2801
+#: ../src/verbs.cpp:2794
msgid "Zoom to fit page in window"
msgstr "Змінити масштаб, щоб розмістити сторінку цілком"
-#: ../src/verbs.cpp:2802
+#: ../src/verbs.cpp:2795
msgid "Page _Width"
msgstr "Ш_ирина сторінки"
-#: ../src/verbs.cpp:2803
+#: ../src/verbs.cpp:2796
msgid "Zoom to fit page width in window"
msgstr "Змінити масштаб, щоб розмістити сторінку по ширині"
-#: ../src/verbs.cpp:2805
+#: ../src/verbs.cpp:2798
msgid "Zoom to fit drawing in window"
msgstr "Змінити масштаб, щоб розмістити малюнок цілком"
-#: ../src/verbs.cpp:2807
+#: ../src/verbs.cpp:2800
msgid "Zoom to fit selection in window"
msgstr "Змінити масштаб, щоб розмістити позначену область"
#. Dialogs
-#: ../src/verbs.cpp:2810
+#: ../src/verbs.cpp:2803
msgid "P_references..."
msgstr "На_лаштування…"
-#: ../src/verbs.cpp:2811
+#: ../src/verbs.cpp:2804
msgid "Edit global Inkscape preferences"
msgstr "Редагування загальних параметрів Inkscape"
-#: ../src/verbs.cpp:2812
+#: ../src/verbs.cpp:2805
msgid "_Document Properties..."
msgstr "Параметри д_окумента…"
-#: ../src/verbs.cpp:2813
+#: ../src/verbs.cpp:2806
msgid "Edit properties of this document (to be saved with the document)"
msgstr ""
"Редагування властивостей поточного документа (вони будуть збережені разом з "
"ним)"
-#: ../src/verbs.cpp:2814
+#: ../src/verbs.cpp:2807
msgid "Document _Metadata..."
msgstr "_Метадані документа"
-#: ../src/verbs.cpp:2815
+#: ../src/verbs.cpp:2808
msgid "Edit document metadata (to be saved with the document)"
msgstr "Редагування метаданих документа (вони будуть збережені разом з ним)"
-#: ../src/verbs.cpp:2817
+#: ../src/verbs.cpp:2810
msgid ""
"Edit objects' colors, gradients, arrowheads, and other fill and stroke "
"properties..."
@@ -26670,118 +26229,118 @@ msgstr ""
"заповнення та штриха…"
#. FIXME: Probably better to either use something from the icon naming spec or ship our own "select-font" icon
-#: ../src/verbs.cpp:2819
+#: ../src/verbs.cpp:2812
msgid "Gl_yphs..."
msgstr "Г_ліфи…"
-#: ../src/verbs.cpp:2820
+#: ../src/verbs.cpp:2813
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:2823
+#: ../src/verbs.cpp:2816
msgid "S_watches..."
msgstr "Зразки _кольорів…"
-#: ../src/verbs.cpp:2824
+#: ../src/verbs.cpp:2817
msgid "Select colors from a swatches palette"
msgstr "Виберіть колір з палітри зразків"
-#: ../src/verbs.cpp:2825
+#: ../src/verbs.cpp:2818
msgid "S_ymbols..."
msgstr "С_имволи…"
-#: ../src/verbs.cpp:2826
+#: ../src/verbs.cpp:2819
msgid "Select symbol from a symbols palette"
msgstr "Виберіть символ з палітри символів"
-#: ../src/verbs.cpp:2827
+#: ../src/verbs.cpp:2820
msgid "Transfor_m..."
msgstr "_Трансформувати…"
-#: ../src/verbs.cpp:2828
+#: ../src/verbs.cpp:2821
msgid "Precisely control objects' transformations"
msgstr "Контролювати точність перетворень об'єктів"
-#: ../src/verbs.cpp:2829
+#: ../src/verbs.cpp:2822
msgid "_Align and Distribute..."
msgstr "Вирів_няти та розподілити…"
-#: ../src/verbs.cpp:2830
+#: ../src/verbs.cpp:2823
msgid "Align and distribute objects"
msgstr "Вирівняти та розподілити об'єкти"
-#: ../src/verbs.cpp:2831
+#: ../src/verbs.cpp:2824
msgid "_Spray options..."
msgstr "Параметри _розкидання…"
-#: ../src/verbs.cpp:2832
+#: ../src/verbs.cpp:2825
msgid "Some options for the spray"
msgstr "Параметри розкидання"
-#: ../src/verbs.cpp:2833
+#: ../src/verbs.cpp:2826
msgid "Undo _History..."
msgstr "Істо_рія змін…"
-#: ../src/verbs.cpp:2834
+#: ../src/verbs.cpp:2827
msgid "Undo History"
msgstr "Історія для скасування змін"
-#: ../src/verbs.cpp:2836
+#: ../src/verbs.cpp:2829
msgid "View and select font family, font size and other text properties"
msgstr ""
"Перегляд та вибір назви шрифту, його розміру та інших властивостей тексту"
-#: ../src/verbs.cpp:2837
+#: ../src/verbs.cpp:2830
msgid "_XML Editor..."
msgstr "Редактор _XML…"
-#: ../src/verbs.cpp:2838
+#: ../src/verbs.cpp:2831
msgid "View and edit the XML tree of the document"
msgstr "Перегляд та редагування дерева XML поточного документа"
-#: ../src/verbs.cpp:2839
+#: ../src/verbs.cpp:2832
msgid "_Find/Replace..."
msgstr "Знайти і з_амінити…"
-#: ../src/verbs.cpp:2840
+#: ../src/verbs.cpp:2833
msgid "Find objects in document"
msgstr "Знайти об'єкти у документі"
-#: ../src/verbs.cpp:2841
+#: ../src/verbs.cpp:2834
msgid "Find and _Replace Text..."
msgstr "Знайти і з_амінити текст…"
-#: ../src/verbs.cpp:2842
+#: ../src/verbs.cpp:2835
msgid "Find and replace text in document"
msgstr "Знайти і замінити текст у документі"
-#: ../src/verbs.cpp:2844
+#: ../src/verbs.cpp:2837
msgid "Check spelling of text in document"
msgstr "Перевірити правопис тексту у документі"
-#: ../src/verbs.cpp:2845
+#: ../src/verbs.cpp:2838
msgid "_Messages..."
msgstr "По_відомлення…"
-#: ../src/verbs.cpp:2846
+#: ../src/verbs.cpp:2839
msgid "View debug messages"
msgstr "Переглянути діагностичні повідомлення"
-#: ../src/verbs.cpp:2847
+#: ../src/verbs.cpp:2840
msgid "Show/Hide D_ialogs"
msgstr "Показати/сховати діало_ги"
-#: ../src/verbs.cpp:2848
+#: ../src/verbs.cpp:2841
msgid "Show or hide all open dialogs"
msgstr "Показати чи сховати всі активні діалогові вікна"
-#: ../src/verbs.cpp:2849
+#: ../src/verbs.cpp:2842
msgid "Create Tiled Clones..."
msgstr "Створити мозаїку з клонів…"
-#: ../src/verbs.cpp:2850
+#: ../src/verbs.cpp:2843
msgid ""
"Create multiple clones of selected object, arranging them into a pattern or "
"scattering"
@@ -26789,221 +26348,221 @@ msgstr ""
"Створити множину клонів позначеного об'єкта, з розташуванням їх у формі "
"візерунку або покриття"
-#: ../src/verbs.cpp:2851
+#: ../src/verbs.cpp:2844
msgid "_Object attributes..."
msgstr "_Атрибути об'єкта…"
-#: ../src/verbs.cpp:2852
+#: ../src/verbs.cpp:2845
msgid "Edit the object attributes..."
msgstr "Змінити атрибути об'єкта…"
-#: ../src/verbs.cpp:2854
+#: ../src/verbs.cpp:2847
msgid "Edit the ID, locked and visible status, and other object properties"
msgstr ""
"Редагування ідентифікатора, стану заблокованості та видимості та інших "
"властивостей об'єкта"
-#: ../src/verbs.cpp:2855
+#: ../src/verbs.cpp:2848
msgid "_Input Devices..."
msgstr "_Пристрої введення…"
-#: ../src/verbs.cpp:2856
+#: ../src/verbs.cpp:2849
msgid "Configure extended input devices, such as a graphics tablet"
msgstr "Налаштовування розширених пристроїв введення"
-#: ../src/verbs.cpp:2857
+#: ../src/verbs.cpp:2850
msgid "_Extensions..."
msgstr "_Про додатки…"
-#: ../src/verbs.cpp:2858
+#: ../src/verbs.cpp:2851
msgid "Query information about extensions"
msgstr "Зібрати інформацію про додатки"
-#: ../src/verbs.cpp:2859
+#: ../src/verbs.cpp:2852
msgid "Layer_s..."
msgstr "_Шари…"
-#: ../src/verbs.cpp:2860
+#: ../src/verbs.cpp:2853
msgid "View Layers"
msgstr "Переглянути шари"
-#: ../src/verbs.cpp:2861
+#: ../src/verbs.cpp:2854
msgid "Path E_ffects ..."
msgstr "Е_фекти контурів…"
-#: ../src/verbs.cpp:2862
+#: ../src/verbs.cpp:2855
msgid "Manage, edit, and apply path effects"
msgstr "Керування, редагування і застосування ефектів контурів"
-#: ../src/verbs.cpp:2863
+#: ../src/verbs.cpp:2856
msgid "Filter _Editor..."
msgstr "Р_едактор фільтрів…"
-#: ../src/verbs.cpp:2864
+#: ../src/verbs.cpp:2857
msgid "Manage, edit, and apply SVG filters"
msgstr "Керування, редагування і застосування фільтрів SVG"
-#: ../src/verbs.cpp:2865
+#: ../src/verbs.cpp:2858
msgid "SVG Font Editor..."
msgstr "Редактор шрифтів SVG…"
-#: ../src/verbs.cpp:2866
+#: ../src/verbs.cpp:2859
msgid "Edit SVG fonts"
msgstr "Редагувати шрифти SVG"
-#: ../src/verbs.cpp:2867
+#: ../src/verbs.cpp:2860
msgid "Print Colors..."
msgstr "Друкувати кольори…"
-#: ../src/verbs.cpp:2868
+#: ../src/verbs.cpp:2861
msgid ""
"Select which color separations to render in Print Colors Preview rendermode"
msgstr ""
"Вкажіть ділянки кольорів, які слід обробляти у режимі обробки попереднього "
"перегляду кольорів друку."
-#: ../src/verbs.cpp:2869
+#: ../src/verbs.cpp:2862
msgid "_Export PNG Image..."
msgstr "_Експортувати як зображення PNG…"
-#: ../src/verbs.cpp:2870
+#: ../src/verbs.cpp:2863
msgid "Export this document or a selection as a PNG image"
msgstr "Експортувати документ чи позначену частину як зображення PNG"
#. Help
-#: ../src/verbs.cpp:2872
+#: ../src/verbs.cpp:2865
msgid "About E_xtensions"
msgstr "Про _додатки"
-#: ../src/verbs.cpp:2873
+#: ../src/verbs.cpp:2866
msgid "Information on Inkscape extensions"
msgstr "Інформація про додатки Inkscape"
-#: ../src/verbs.cpp:2874
+#: ../src/verbs.cpp:2867
msgid "About _Memory"
msgstr "Про п_ам'ять"
-#: ../src/verbs.cpp:2875
+#: ../src/verbs.cpp:2868
msgid "Memory usage information"
msgstr "Інформація про використання пам'яті"
-#: ../src/verbs.cpp:2876
+#: ../src/verbs.cpp:2869
msgid "_About Inkscape"
msgstr "_Про програму Inkscape"
-#: ../src/verbs.cpp:2877
+#: ../src/verbs.cpp:2870
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:2882
+#: ../src/verbs.cpp:2875
msgid "Inkscape: _Basic"
msgstr "Inkscape: _Початковий рівень"
-#: ../src/verbs.cpp:2883
+#: ../src/verbs.cpp:2876
msgid "Getting started with Inkscape"
msgstr "Починаємо роботу з Inkscape"
#. "tutorial_basic"
-#: ../src/verbs.cpp:2884
+#: ../src/verbs.cpp:2877
msgid "Inkscape: _Shapes"
msgstr "Inkscape: _Фігури"
-#: ../src/verbs.cpp:2885
+#: ../src/verbs.cpp:2878
msgid "Using shape tools to create and edit shapes"
msgstr "Використання інструментів малювання та редагування фігур"
-#: ../src/verbs.cpp:2886
+#: ../src/verbs.cpp:2879
msgid "Inkscape: _Advanced"
msgstr "Inkscape: _Другий рівень"
-#: ../src/verbs.cpp:2887
+#: ../src/verbs.cpp:2880
msgid "Advanced Inkscape topics"
msgstr "Додаткові теми з Inkscape"
#. "tutorial_advanced"
#. TRANSLATORS: "to trace" means "to convert a bitmap to vector graphics" (to vectorize)
-#: ../src/verbs.cpp:2889
+#: ../src/verbs.cpp:2882
msgid "Inkscape: T_racing"
msgstr "Inkscape: _Векторизація"
-#: ../src/verbs.cpp:2890
+#: ../src/verbs.cpp:2883
msgid "Using bitmap tracing"
msgstr "Використання векторизації растру"
#. "tutorial_tracing"
-#: ../src/verbs.cpp:2891
+#: ../src/verbs.cpp:2884
msgid "Inkscape: Tracing Pixel Art"
msgstr "Inkscape: Трасування растрової графіки"
-#: ../src/verbs.cpp:2892
+#: ../src/verbs.cpp:2885
msgid "Using Trace Pixel Art dialog"
msgstr "Користування діалоговим вікном трасування растрової графіки"
-#: ../src/verbs.cpp:2893
+#: ../src/verbs.cpp:2886
msgid "Inkscape: _Calligraphy"
msgstr "Inkscape: _Каліграфія"
-#: ../src/verbs.cpp:2894
+#: ../src/verbs.cpp:2887
msgid "Using the Calligraphy pen tool"
msgstr "Використання каліграфічного пера"
-#: ../src/verbs.cpp:2895
+#: ../src/verbs.cpp:2888
msgid "Inkscape: _Interpolate"
msgstr "Inkscape: _Інтерполяція"
-#: ../src/verbs.cpp:2896
+#: ../src/verbs.cpp:2889
msgid "Using the interpolate extension"
msgstr "Використання додатка інтерполяції"
#. "tutorial_interpolate"
-#: ../src/verbs.cpp:2897
+#: ../src/verbs.cpp:2890
msgid "_Elements of Design"
msgstr "_Елементи дизайну"
-#: ../src/verbs.cpp:2898
+#: ../src/verbs.cpp:2891
msgid "Principles of design in the tutorial form"
msgstr "Підручник з принципів дизайну"
#. "tutorial_design"
-#: ../src/verbs.cpp:2899
+#: ../src/verbs.cpp:2892
msgid "_Tips and Tricks"
msgstr "_Поради та прийоми"
-#: ../src/verbs.cpp:2900
+#: ../src/verbs.cpp:2893
msgid "Miscellaneous tips and tricks"
msgstr "Різноманітні поради та прийоми"
#. "tutorial_tips"
#. Effect -- renamed Extension
-#: ../src/verbs.cpp:2903
+#: ../src/verbs.cpp:2896
msgid "Previous Exte_nsion"
msgstr "Попередній _додаток"
-#: ../src/verbs.cpp:2904
+#: ../src/verbs.cpp:2897
msgid "Repeat the last extension with the same settings"
msgstr ""
"Повторити ефекти використання попереднього додатка з тими самими параметрами"
-#: ../src/verbs.cpp:2905
+#: ../src/verbs.cpp:2898
msgid "_Previous Extension Settings..."
msgstr "П_араметри попереднього додатка…"
-#: ../src/verbs.cpp:2906
+#: ../src/verbs.cpp:2899
msgid "Repeat the last extension with new settings"
msgstr "Повторити останній ефект з новими параметрами"
-#: ../src/verbs.cpp:2910
+#: ../src/verbs.cpp:2903
msgid "Fit the page to the current selection"
msgstr "Підігнати полотно до поточного позначеної області"
-#: ../src/verbs.cpp:2912
+#: ../src/verbs.cpp:2905
msgid "Fit the page to the drawing"
msgstr "Підганяє полотно під вже намальоване"
-#: ../src/verbs.cpp:2914
+#: ../src/verbs.cpp:2907
msgid ""
"Fit the page to the current selection or the drawing if there is no selection"
msgstr ""
@@ -27011,275 +26570,283 @@ msgstr ""
"креслення, якщо нічого не позначено"
#. LockAndHide
-#: ../src/verbs.cpp:2916
+#: ../src/verbs.cpp:2909
msgid "Unlock All"
msgstr "Розблокувати все"
-#: ../src/verbs.cpp:2918
+#: ../src/verbs.cpp:2911
msgid "Unlock All in All Layers"
msgstr "Розблокувати все в усіх шарах"
-#: ../src/verbs.cpp:2920
+#: ../src/verbs.cpp:2913
msgid "Unhide All"
msgstr "Показати все"
-#: ../src/verbs.cpp:2922
+#: ../src/verbs.cpp:2915
msgid "Unhide All in All Layers"
msgstr "Показати все в усіх шарах"
-#: ../src/verbs.cpp:2926
+#: ../src/verbs.cpp:2919
msgid "Link an ICC color profile"
msgstr "Посилання на профіль кольорів ICC"
-#: ../src/verbs.cpp:2927
+#: ../src/verbs.cpp:2920
msgid "Remove Color Profile"
msgstr "Вилучити профіль кольорів"
-#: ../src/verbs.cpp:2928
+#: ../src/verbs.cpp:2921
msgid "Remove a linked ICC color profile"
msgstr "Вилучити пов'язаний профіль кольорів ICC"
-#: ../src/verbs.cpp:2931
+#: ../src/verbs.cpp:2924
msgid "Add External Script"
msgstr "Додати зовнішній скрипт"
-#: ../src/verbs.cpp:2931
+#: ../src/verbs.cpp:2924
msgid "Add an external script"
msgstr "Додати зовнішній скрипт"
-#: ../src/verbs.cpp:2933
+#: ../src/verbs.cpp:2926
msgid "Add Embedded Script"
msgstr "Додати вбудований скрипт"
-#: ../src/verbs.cpp:2933
+#: ../src/verbs.cpp:2926
msgid "Add an embedded script"
msgstr "Додати вбудований скрипт"
-#: ../src/verbs.cpp:2935
+#: ../src/verbs.cpp:2928
msgid "Edit Embedded Script"
msgstr "Редагувати вбудований скрипт"
-#: ../src/verbs.cpp:2935
+#: ../src/verbs.cpp:2928
msgid "Edit an embedded script"
msgstr "Редагувати вбудований скрипт"
-#: ../src/verbs.cpp:2937
+#: ../src/verbs.cpp:2930
msgid "Remove External Script"
msgstr "Вилучити зовнішній скрипт"
-#: ../src/verbs.cpp:2937
+#: ../src/verbs.cpp:2930
msgid "Remove an external script"
msgstr "Вилучити зовнішній скрипт"
-#: ../src/verbs.cpp:2939
+#: ../src/verbs.cpp:2932
msgid "Remove Embedded Script"
msgstr "Вилучити вбудований скрипт"
-#: ../src/verbs.cpp:2939
+#: ../src/verbs.cpp:2932
msgid "Remove an embedded script"
msgstr "Вилучити вбудований скрипт"
-#: ../src/verbs.cpp:2961 ../src/verbs.cpp:2962
+#: ../src/verbs.cpp:2954 ../src/verbs.cpp:2955
msgid "Center on horizontal and vertical axis"
msgstr "Центрувати на горизонтальній і вертикальній осі"
-#: ../src/widgets/arc-toolbar.cpp:141
+#: ../src/widgets/arc-toolbar.cpp:131
msgid "Arc: Change start/end"
msgstr "Дуга: змінити початок/кінець"
-#: ../src/widgets/arc-toolbar.cpp:207
+#: ../src/widgets/arc-toolbar.cpp:197
msgid "Arc: Change open/closed"
msgstr "Дуга: змінити відкритість/замкненість"
-#: ../src/widgets/arc-toolbar.cpp:298 ../src/widgets/arc-toolbar.cpp:327
-#: ../src/widgets/rect-toolbar.cpp:265 ../src/widgets/rect-toolbar.cpp:303
-#: ../src/widgets/spiral-toolbar.cpp:225 ../src/widgets/spiral-toolbar.cpp:249
-#: ../src/widgets/star-toolbar.cpp:391 ../src/widgets/star-toolbar.cpp:452
+#: ../src/widgets/arc-toolbar.cpp:288 ../src/widgets/arc-toolbar.cpp:317
+#: ../src/widgets/rect-toolbar.cpp:258 ../src/widgets/rect-toolbar.cpp:296
+#: ../src/widgets/spiral-toolbar.cpp:214 ../src/widgets/spiral-toolbar.cpp:238
+#: ../src/widgets/star-toolbar.cpp:383 ../src/widgets/star-toolbar.cpp:444
msgid "<b>New:</b>"
msgstr "<b>Новий:</b>"
#. FIXME: implement averaging of all parameters for multiple selected
#. gtk_label_set_markup(GTK_LABEL(l), _("<b>Average:</b>"));
-#: ../src/widgets/arc-toolbar.cpp:301 ../src/widgets/arc-toolbar.cpp:312
-#: ../src/widgets/rect-toolbar.cpp:273 ../src/widgets/rect-toolbar.cpp:291
-#: ../src/widgets/spiral-toolbar.cpp:227 ../src/widgets/spiral-toolbar.cpp:238
-#: ../src/widgets/star-toolbar.cpp:393
+#: ../src/widgets/arc-toolbar.cpp:291 ../src/widgets/arc-toolbar.cpp:302
+#: ../src/widgets/rect-toolbar.cpp:266 ../src/widgets/rect-toolbar.cpp:284
+#: ../src/widgets/spiral-toolbar.cpp:216 ../src/widgets/spiral-toolbar.cpp:227
+#: ../src/widgets/star-toolbar.cpp:385
msgid "<b>Change:</b>"
msgstr "<b>Змінити:</b>"
-#: ../src/widgets/arc-toolbar.cpp:337
+#: ../src/widgets/arc-toolbar.cpp:326
+msgid "Start:"
+msgstr "Початок:"
+
+#: ../src/widgets/arc-toolbar.cpp:327
msgid "The angle (in degrees) from the horizontal to the arc's start point"
msgstr "Кут (у градусах) від горизонталі до початкової точки дуги"
-#: ../src/widgets/arc-toolbar.cpp:350
+#: ../src/widgets/arc-toolbar.cpp:339
+msgid "End:"
+msgstr "Кінець:"
+
+#: ../src/widgets/arc-toolbar.cpp:340
msgid "The angle (in degrees) from the horizontal to the arc's end point"
msgstr "Кут (у градусах) від горизонталі до кінцевої точки дуги"
-#: ../src/widgets/arc-toolbar.cpp:366
+#: ../src/widgets/arc-toolbar.cpp:356
msgid "Closed arc"
msgstr "Закрита дуга"
-#: ../src/widgets/arc-toolbar.cpp:367
+#: ../src/widgets/arc-toolbar.cpp:357
msgid "Switch to segment (closed shape with two radii)"
msgstr "Перетворити на сегмент (замкнутої фігури з двома радіусами-сторонами)"
-#: ../src/widgets/arc-toolbar.cpp:373
+#: ../src/widgets/arc-toolbar.cpp:363
msgid "Open Arc"
msgstr "Відкрита дуга"
-#: ../src/widgets/arc-toolbar.cpp:374
+#: ../src/widgets/arc-toolbar.cpp:364
msgid "Switch to arc (unclosed shape)"
msgstr "Перейти до дуги (незакриту фігуру)"
-#: ../src/widgets/arc-toolbar.cpp:397
+#: ../src/widgets/arc-toolbar.cpp:387
msgid "Make whole"
msgstr "Зробити цілим"
-#: ../src/widgets/arc-toolbar.cpp:398
+#: ../src/widgets/arc-toolbar.cpp:388
msgid "Make the shape a whole ellipse, not arc or segment"
msgstr "Робить фігуру цілим еліпсом, а не дугою чи сегментом"
#. TODO: use the correct axis here, too
-#: ../src/widgets/box3d-toolbar.cpp:248
+#: ../src/widgets/box3d-toolbar.cpp:232
msgid "3D Box: Change perspective (angle of infinite axis)"
msgstr ""
"Просторовий об'єкт: Зміна перспективи (кута сходження на нескінченності)"
-#: ../src/widgets/box3d-toolbar.cpp:315
+#: ../src/widgets/box3d-toolbar.cpp:299
msgid "Angle in X direction"
msgstr "Кут у напрямку осі X"
#. Translators: PL is short for 'perspective line'
-#: ../src/widgets/box3d-toolbar.cpp:317
+#: ../src/widgets/box3d-toolbar.cpp:301
msgid "Angle of PLs in X direction"
msgstr "Кут між ЛП у напрямку осі X"
#. Translators: VP is short for 'vanishing point'
-#: ../src/widgets/box3d-toolbar.cpp:339
+#: ../src/widgets/box3d-toolbar.cpp:323
msgid "State of VP in X direction"
msgstr "Стан ТС у напрямку осі X"
-#: ../src/widgets/box3d-toolbar.cpp:340
+#: ../src/widgets/box3d-toolbar.cpp:324
msgid "Toggle VP in X direction between 'finite' and 'infinite' (=parallel)"
msgstr ""
"Перемикач ТС у напрямку осі X між значеннями 'скінченна' і "
"'нескінченна' (=паралельність)"
-#: ../src/widgets/box3d-toolbar.cpp:355
+#: ../src/widgets/box3d-toolbar.cpp:339
msgid "Angle in Y direction"
msgstr "Кут у напрямку осі Y"
-#: ../src/widgets/box3d-toolbar.cpp:355
+#: ../src/widgets/box3d-toolbar.cpp:339
msgid "Angle Y:"
msgstr "Кут Y:"
#. Translators: PL is short for 'perspective line'
-#: ../src/widgets/box3d-toolbar.cpp:357
+#: ../src/widgets/box3d-toolbar.cpp:341
msgid "Angle of PLs in Y direction"
msgstr "Перемикач між ЛП у напрямку осі Y"
#. Translators: VP is short for 'vanishing point'
-#: ../src/widgets/box3d-toolbar.cpp:378
+#: ../src/widgets/box3d-toolbar.cpp:362
msgid "State of VP in Y direction"
msgstr "Стан ТС у напрямку осі Y"
-#: ../src/widgets/box3d-toolbar.cpp:379
+#: ../src/widgets/box3d-toolbar.cpp:363
msgid "Toggle VP in Y direction between 'finite' and 'infinite' (=parallel)"
msgstr ""
"Перемикач ТС у напрямку осі Y між значеннями 'скінченна' і "
"'нескінченна' (=паралельність)"
-#: ../src/widgets/box3d-toolbar.cpp:394
+#: ../src/widgets/box3d-toolbar.cpp:378
msgid "Angle in Z direction"
msgstr "Кут у напрямку осі Z"
#. Translators: PL is short for 'perspective line'
-#: ../src/widgets/box3d-toolbar.cpp:396
+#: ../src/widgets/box3d-toolbar.cpp:380
msgid "Angle of PLs in Z direction"
msgstr "Кут між ЛП у напрямку осі Z"
#. Translators: VP is short for 'vanishing point'
-#: ../src/widgets/box3d-toolbar.cpp:417
+#: ../src/widgets/box3d-toolbar.cpp:401
msgid "State of VP in Z direction"
msgstr "Стан ТС у напрямку осі Z"
-#: ../src/widgets/box3d-toolbar.cpp:418
+#: ../src/widgets/box3d-toolbar.cpp:402
msgid "Toggle VP in Z direction between 'finite' and 'infinite' (=parallel)"
msgstr ""
"Перемикач ТС у напрямку осі Z між значеннями 'скінченна' і "
"'нескінченна' (=паралельність)"
#. gint preset_index = ege_select_one_action_get_active( sel );
-#: ../src/widgets/calligraphy-toolbar.cpp:235
-#: ../src/widgets/calligraphy-toolbar.cpp:279
-#: ../src/widgets/calligraphy-toolbar.cpp:284
+#: ../src/widgets/calligraphy-toolbar.cpp:218
+#: ../src/widgets/calligraphy-toolbar.cpp:262
+#: ../src/widgets/calligraphy-toolbar.cpp:267
msgid "No preset"
msgstr "Без шаблону"
#. Width
-#: ../src/widgets/calligraphy-toolbar.cpp:444
-#: ../src/widgets/eraser-toolbar.cpp:142
+#: ../src/widgets/calligraphy-toolbar.cpp:427
+#: ../src/widgets/eraser-toolbar.cpp:125
msgid "(hairline)"
msgstr "(мотузка)"
#. Mean
#. Rotation
#. Scale
-#: ../src/widgets/calligraphy-toolbar.cpp:444
-#: ../src/widgets/calligraphy-toolbar.cpp:477
-#: ../src/widgets/eraser-toolbar.cpp:142 ../src/widgets/pencil-toolbar.cpp:298
-#: ../src/widgets/spray-toolbar.cpp:125 ../src/widgets/spray-toolbar.cpp:141
-#: ../src/widgets/spray-toolbar.cpp:157 ../src/widgets/spray-toolbar.cpp:217
-#: ../src/widgets/spray-toolbar.cpp:247 ../src/widgets/spray-toolbar.cpp:265
-#: ../src/widgets/tweak-toolbar.cpp:139 ../src/widgets/tweak-toolbar.cpp:156
-#: ../src/widgets/tweak-toolbar.cpp:364
+#: ../src/widgets/calligraphy-toolbar.cpp:427
+#: ../src/widgets/calligraphy-toolbar.cpp:460
+#: ../src/widgets/eraser-toolbar.cpp:125 ../src/widgets/pencil-toolbar.cpp:269
+#: ../src/widgets/spray-toolbar.cpp:113 ../src/widgets/spray-toolbar.cpp:129
+#: ../src/widgets/spray-toolbar.cpp:145 ../src/widgets/spray-toolbar.cpp:205
+#: ../src/widgets/spray-toolbar.cpp:235 ../src/widgets/spray-toolbar.cpp:253
+#: ../src/widgets/tweak-toolbar.cpp:125 ../src/widgets/tweak-toolbar.cpp:142
+#: ../src/widgets/tweak-toolbar.cpp:350
msgid "(default)"
msgstr "(типова)"
-#: ../src/widgets/calligraphy-toolbar.cpp:444
-#: ../src/widgets/eraser-toolbar.cpp:142
+#: ../src/widgets/calligraphy-toolbar.cpp:427
+#: ../src/widgets/eraser-toolbar.cpp:125
msgid "(broad stroke)"
msgstr "(широкий штрих)"
-#: ../src/widgets/calligraphy-toolbar.cpp:447
-#: ../src/widgets/eraser-toolbar.cpp:145
+#: ../src/widgets/calligraphy-toolbar.cpp:430
+#: ../src/widgets/eraser-toolbar.cpp:128
msgid "Pen Width"
msgstr "Ширина пера"
-#: ../src/widgets/calligraphy-toolbar.cpp:448
+#: ../src/widgets/calligraphy-toolbar.cpp:431
msgid "The width of the calligraphic pen (relative to the visible canvas area)"
msgstr "Ширина каліграфічного пера (відносно видимої області полотна)"
#. Thinning
-#: ../src/widgets/calligraphy-toolbar.cpp:461
+#: ../src/widgets/calligraphy-toolbar.cpp:444
msgid "(speed blows up stroke)"
msgstr "(швидкість збільшення штриху)"
-#: ../src/widgets/calligraphy-toolbar.cpp:461
+#: ../src/widgets/calligraphy-toolbar.cpp:444
msgid "(slight widening)"
msgstr "(невелике розширення)"
-#: ../src/widgets/calligraphy-toolbar.cpp:461
+#: ../src/widgets/calligraphy-toolbar.cpp:444
msgid "(constant width)"
msgstr "(постійна ширина)"
-#: ../src/widgets/calligraphy-toolbar.cpp:461
+#: ../src/widgets/calligraphy-toolbar.cpp:444
msgid "(slight thinning, default)"
msgstr "(невелике зменшення товщини, типово)"
-#: ../src/widgets/calligraphy-toolbar.cpp:461
+#: ../src/widgets/calligraphy-toolbar.cpp:444
msgid "(speed deflates stroke)"
msgstr "(швидкість зменшення штриху)"
-#: ../src/widgets/calligraphy-toolbar.cpp:464
+#: ../src/widgets/calligraphy-toolbar.cpp:447
msgid "Stroke Thinning"
msgstr "Звуження штриха"
-#: ../src/widgets/calligraphy-toolbar.cpp:464
+#: ../src/widgets/calligraphy-toolbar.cpp:447
msgid "Thinning:"
msgstr "Звуження:"
-#: ../src/widgets/calligraphy-toolbar.cpp:465
+#: ../src/widgets/calligraphy-toolbar.cpp:448
msgid ""
"How much velocity thins the stroke (> 0 makes fast strokes thinner, < 0 "
"makes them broader, 0 makes width independent of velocity)"
@@ -27288,23 +26855,28 @@ msgstr ""
"штрихи ширше, 0 — ширина штриха не залежить від швидкості)"
#. Angle
-#: ../src/widgets/calligraphy-toolbar.cpp:477
+#: ../src/widgets/calligraphy-toolbar.cpp:460
msgid "(left edge up)"
msgstr "(піднімати лівий край)"
-#: ../src/widgets/calligraphy-toolbar.cpp:477
+#: ../src/widgets/calligraphy-toolbar.cpp:460
msgid "(horizontal)"
msgstr "(горизонтально)"
-#: ../src/widgets/calligraphy-toolbar.cpp:477
+#: ../src/widgets/calligraphy-toolbar.cpp:460
msgid "(right edge up)"
msgstr "(піднімати правий край)"
-#: ../src/widgets/calligraphy-toolbar.cpp:480
+#: ../src/widgets/calligraphy-toolbar.cpp:463
msgid "Pen Angle"
msgstr "Кут пера"
-#: ../src/widgets/calligraphy-toolbar.cpp:481
+#: ../src/widgets/calligraphy-toolbar.cpp:463
+#: ../share/extensions/motion.inx.h:3 ../share/extensions/restack.inx.h:10
+msgid "Angle:"
+msgstr "Кут:"
+
+#: ../src/widgets/calligraphy-toolbar.cpp:464
msgid ""
"The angle of the pen's nib (in degrees; 0 = horizontal; has no effect if "
"fixation = 0)"
@@ -27313,27 +26885,27 @@ msgstr ""
"ефекту)"
#. Fixation
-#: ../src/widgets/calligraphy-toolbar.cpp:495
+#: ../src/widgets/calligraphy-toolbar.cpp:478
msgid "(perpendicular to stroke, \"brush\")"
msgstr "(перпендикулярно штриху, «щітка»)"
-#: ../src/widgets/calligraphy-toolbar.cpp:495
+#: ../src/widgets/calligraphy-toolbar.cpp:478
msgid "(almost fixed, default)"
msgstr "(майже постійна, типово)"
-#: ../src/widgets/calligraphy-toolbar.cpp:495
+#: ../src/widgets/calligraphy-toolbar.cpp:478
msgid "(fixed by Angle, \"pen\")"
msgstr "(з постійним кутом, «перо»)"
-#: ../src/widgets/calligraphy-toolbar.cpp:498
+#: ../src/widgets/calligraphy-toolbar.cpp:481
msgid "Fixation"
msgstr "Фіксація"
-#: ../src/widgets/calligraphy-toolbar.cpp:498
+#: ../src/widgets/calligraphy-toolbar.cpp:481
msgid "Fixation:"
msgstr "Фіксація:"
-#: ../src/widgets/calligraphy-toolbar.cpp:499
+#: ../src/widgets/calligraphy-toolbar.cpp:482
msgid ""
"Angle behavior (0 = nib always perpendicular to stroke direction, 100 = "
"fixed angle)"
@@ -27342,31 +26914,31 @@ msgstr ""
"= фіксований кут)"
#. Cap Rounding
-#: ../src/widgets/calligraphy-toolbar.cpp:511
+#: ../src/widgets/calligraphy-toolbar.cpp:494
msgid "(blunt caps, default)"
msgstr "(тупі кінці, типово)"
-#: ../src/widgets/calligraphy-toolbar.cpp:511
+#: ../src/widgets/calligraphy-toolbar.cpp:494
msgid "(slightly bulging)"
msgstr "(невелика випуклість)"
-#: ../src/widgets/calligraphy-toolbar.cpp:511
+#: ../src/widgets/calligraphy-toolbar.cpp:494
msgid "(approximately round)"
msgstr "(приблизно коло)"
-#: ../src/widgets/calligraphy-toolbar.cpp:511
+#: ../src/widgets/calligraphy-toolbar.cpp:494
msgid "(long protruding caps)"
msgstr "(довгі виступаючі кінці)"
-#: ../src/widgets/calligraphy-toolbar.cpp:515
+#: ../src/widgets/calligraphy-toolbar.cpp:498
msgid "Cap rounding"
msgstr "Заокруглення вершини"
-#: ../src/widgets/calligraphy-toolbar.cpp:515
+#: ../src/widgets/calligraphy-toolbar.cpp:498
msgid "Caps:"
msgstr "Кінці:"
-#: ../src/widgets/calligraphy-toolbar.cpp:516
+#: ../src/widgets/calligraphy-toolbar.cpp:499
msgid ""
"Increase to make caps at the ends of strokes protrude more (0 = no caps, 1 = "
"round caps)"
@@ -27375,94 +26947,94 @@ msgstr ""
"кінець)"
#. Tremor
-#: ../src/widgets/calligraphy-toolbar.cpp:528
+#: ../src/widgets/calligraphy-toolbar.cpp:511
msgid "(smooth line)"
msgstr "(гладка лінія)"
-#: ../src/widgets/calligraphy-toolbar.cpp:528
+#: ../src/widgets/calligraphy-toolbar.cpp:511
msgid "(slight tremor)"
msgstr "(невелика дрижання)"
-#: ../src/widgets/calligraphy-toolbar.cpp:528
+#: ../src/widgets/calligraphy-toolbar.cpp:511
msgid "(noticeable tremor)"
msgstr "(помітне дрижання)"
-#: ../src/widgets/calligraphy-toolbar.cpp:528
+#: ../src/widgets/calligraphy-toolbar.cpp:511
msgid "(maximum tremor)"
msgstr "(максимальне дрижання)"
-#: ../src/widgets/calligraphy-toolbar.cpp:531
+#: ../src/widgets/calligraphy-toolbar.cpp:514
msgid "Stroke Tremor"
msgstr "Дрижання штриха"
-#: ../src/widgets/calligraphy-toolbar.cpp:531
+#: ../src/widgets/calligraphy-toolbar.cpp:514
msgid "Tremor:"
msgstr "Дрижання:"
-#: ../src/widgets/calligraphy-toolbar.cpp:532
+#: ../src/widgets/calligraphy-toolbar.cpp:515
msgid "Increase to make strokes rugged and trembling"
msgstr "Збільшіть, щоб штрихи стали грубими та звивистими"
#. Wiggle
-#: ../src/widgets/calligraphy-toolbar.cpp:546
+#: ../src/widgets/calligraphy-toolbar.cpp:529
msgid "(no wiggle)"
msgstr "(без погойдування)"
-#: ../src/widgets/calligraphy-toolbar.cpp:546
+#: ../src/widgets/calligraphy-toolbar.cpp:529
msgid "(slight deviation)"
msgstr "(невеликий відхилення)"
-#: ../src/widgets/calligraphy-toolbar.cpp:546
+#: ../src/widgets/calligraphy-toolbar.cpp:529
msgid "(wild waves and curls)"
msgstr "(великі хвилі та завитки)"
-#: ../src/widgets/calligraphy-toolbar.cpp:549
+#: ../src/widgets/calligraphy-toolbar.cpp:532
msgid "Pen Wiggle"
msgstr "Погойдування пера"
-#: ../src/widgets/calligraphy-toolbar.cpp:549
+#: ../src/widgets/calligraphy-toolbar.cpp:532
msgid "Wiggle:"
msgstr "Погойдування:"
-#: ../src/widgets/calligraphy-toolbar.cpp:550
+#: ../src/widgets/calligraphy-toolbar.cpp:533
msgid "Increase to make the pen waver and wiggle"
msgstr "Збільшення параметру збільшує хвилеподібність ліній"
#. Mass
-#: ../src/widgets/calligraphy-toolbar.cpp:563
+#: ../src/widgets/calligraphy-toolbar.cpp:546
msgid "(no inertia)"
msgstr "(без інерції)"
-#: ../src/widgets/calligraphy-toolbar.cpp:563
+#: ../src/widgets/calligraphy-toolbar.cpp:546
msgid "(slight smoothing, default)"
msgstr "(невелике згладжування, типово)"
-#: ../src/widgets/calligraphy-toolbar.cpp:563
+#: ../src/widgets/calligraphy-toolbar.cpp:546
msgid "(noticeable lagging)"
msgstr "(помітне запізнення)"
-#: ../src/widgets/calligraphy-toolbar.cpp:563
+#: ../src/widgets/calligraphy-toolbar.cpp:546
msgid "(maximum inertia)"
msgstr "(максимальна інерція)"
-#: ../src/widgets/calligraphy-toolbar.cpp:566
+#: ../src/widgets/calligraphy-toolbar.cpp:549
msgid "Pen Mass"
msgstr "Маса пера"
-#: ../src/widgets/calligraphy-toolbar.cpp:566
+#: ../src/widgets/calligraphy-toolbar.cpp:549
msgid "Mass:"
msgstr "Маса:"
-#: ../src/widgets/calligraphy-toolbar.cpp:567
+#: ../src/widgets/calligraphy-toolbar.cpp:550
msgid "Increase to make the pen drag behind, as if slowed by inertia"
msgstr ""
"Збільшення веде до відставання пензля так, неначе його сповільнює інерція"
-#: ../src/widgets/calligraphy-toolbar.cpp:582
+#: ../src/widgets/calligraphy-toolbar.cpp:565
msgid "Trace Background"
msgstr "Слід на тлі"
-#: ../src/widgets/calligraphy-toolbar.cpp:583
+#: ../src/widgets/calligraphy-toolbar.cpp:566
msgid ""
"Trace the lightness of the background by the width of the pen (white - "
"minimum width, black - maximum width)"
@@ -27470,112 +27042,112 @@ msgstr ""
"Залишати слід освітлення на тлі залежно від ширини пера (білий — мінімальна "
"ширина, чорний — максимальна ширина)"
-#: ../src/widgets/calligraphy-toolbar.cpp:596
+#: ../src/widgets/calligraphy-toolbar.cpp:579
msgid "Use the pressure of the input device to alter the width of the pen"
msgstr "Використовувати силу натиску пристроєм введення для зміни ширини лінії"
-#: ../src/widgets/calligraphy-toolbar.cpp:608
+#: ../src/widgets/calligraphy-toolbar.cpp:591
msgid "Tilt"
msgstr "Нахил"
-#: ../src/widgets/calligraphy-toolbar.cpp:609
+#: ../src/widgets/calligraphy-toolbar.cpp:592
msgid "Use the tilt of the input device to alter the angle of the pen's nib"
msgstr "Використовувати нахил пристрою введення для зміни кута"
-#: ../src/widgets/calligraphy-toolbar.cpp:624
+#: ../src/widgets/calligraphy-toolbar.cpp:607
msgid "Choose a preset"
msgstr "Обрати набір"
-#: ../src/widgets/calligraphy-toolbar.cpp:639
+#: ../src/widgets/calligraphy-toolbar.cpp:622
msgid "Add/Edit Profile"
msgstr "Додати/Змінити профіль"
-#: ../src/widgets/calligraphy-toolbar.cpp:640
+#: ../src/widgets/calligraphy-toolbar.cpp:623
msgid "Add or edit calligraphic profile"
msgstr "Додати або змінити профіль каліграфії"
-#: ../src/widgets/connector-toolbar.cpp:132
+#: ../src/widgets/connector-toolbar.cpp:120
msgid "Set connector type: orthogonal"
msgstr "Встановити тип з'єднання: під прямим кутом"
-#: ../src/widgets/connector-toolbar.cpp:132
+#: ../src/widgets/connector-toolbar.cpp:120
msgid "Set connector type: polyline"
msgstr "Встановити тип з'єднання: ламана"
-#: ../src/widgets/connector-toolbar.cpp:181
+#: ../src/widgets/connector-toolbar.cpp:169
msgid "Change connector curvature"
msgstr "Змінити кривину з'єднання"
-#: ../src/widgets/connector-toolbar.cpp:232
+#: ../src/widgets/connector-toolbar.cpp:220
msgid "Change connector spacing"
msgstr "Зміна відстаней для лінії з'єднання"
-#: ../src/widgets/connector-toolbar.cpp:325
+#: ../src/widgets/connector-toolbar.cpp:313
msgid "Avoid"
msgstr "Уникати"
-#: ../src/widgets/connector-toolbar.cpp:335
+#: ../src/widgets/connector-toolbar.cpp:323
msgid "Ignore"
msgstr "Ігнорувати"
-#: ../src/widgets/connector-toolbar.cpp:346
+#: ../src/widgets/connector-toolbar.cpp:334
msgid "Orthogonal"
msgstr "Під прямим кутом"
-#: ../src/widgets/connector-toolbar.cpp:347
+#: ../src/widgets/connector-toolbar.cpp:335
msgid "Make connector orthogonal or polyline"
msgstr "Зробити з'єднання з'єднанням під прямим кутом або з'єднанням у ламаній"
-#: ../src/widgets/connector-toolbar.cpp:361
+#: ../src/widgets/connector-toolbar.cpp:349
msgid "Connector Curvature"
msgstr "Кривина з'єднання"
-#: ../src/widgets/connector-toolbar.cpp:361
+#: ../src/widgets/connector-toolbar.cpp:349
msgid "Curvature:"
msgstr "Кривина:"
-#: ../src/widgets/connector-toolbar.cpp:362
+#: ../src/widgets/connector-toolbar.cpp:350
msgid "The amount of connectors curvature"
msgstr "Кривина з'єднань"
-#: ../src/widgets/connector-toolbar.cpp:372
+#: ../src/widgets/connector-toolbar.cpp:360
msgid "Connector Spacing"
msgstr "Відстань для з'єднання"
-#: ../src/widgets/connector-toolbar.cpp:372
+#: ../src/widgets/connector-toolbar.cpp:360
msgid "Spacing:"
msgstr "Інтервал:"
-#: ../src/widgets/connector-toolbar.cpp:373
+#: ../src/widgets/connector-toolbar.cpp:361
msgid "The amount of space left around objects by auto-routing connectors"
msgstr "Простір, що залишається навколо об'єктів під час автоз'єднання"
-#: ../src/widgets/connector-toolbar.cpp:384
+#: ../src/widgets/connector-toolbar.cpp:372
msgid "Graph"
msgstr "Графік"
-#: ../src/widgets/connector-toolbar.cpp:394
+#: ../src/widgets/connector-toolbar.cpp:382
msgid "Connector Length"
msgstr "Довжина з'єднання"
-#: ../src/widgets/connector-toolbar.cpp:394
+#: ../src/widgets/connector-toolbar.cpp:382
msgid "Length:"
msgstr "Довжина:"
-#: ../src/widgets/connector-toolbar.cpp:395
+#: ../src/widgets/connector-toolbar.cpp:383
msgid "Ideal length for connectors when layout is applied"
msgstr ""
"Зразкова довжина ліній з'єднання після застосування зовнішнього вигляду"
-#: ../src/widgets/connector-toolbar.cpp:407
+#: ../src/widgets/connector-toolbar.cpp:395
msgid "Downwards"
msgstr "Вниз"
-#: ../src/widgets/connector-toolbar.cpp:408
+#: ../src/widgets/connector-toolbar.cpp:396
msgid "Make connectors with end-markers (arrows) point downwards"
msgstr "Змусити кінцеві стрілки ліній з'єднання вказувати вниз"
-#: ../src/widgets/connector-toolbar.cpp:424
+#: ../src/widgets/connector-toolbar.cpp:412
msgid "Do not allow overlapping shapes"
msgstr "Не дозволяти перекриття форм"
@@ -27591,16 +27163,16 @@ msgstr "Зміщення пунктиру"
msgid "Zoom drawing if window size changes"
msgstr "Змінювати масштаб при зміні розмірів вікна"
-#: ../src/widgets/desktop-widget.cpp:670
+#: ../src/widgets/desktop-widget.cpp:665
msgid "Cursor coordinates"
msgstr "Координати курсора"
-#: ../src/widgets/desktop-widget.cpp:696
+#: ../src/widgets/desktop-widget.cpp:691
msgid "Z:"
msgstr "Z:"
#. display the initial welcome message in the statusbar
-#: ../src/widgets/desktop-widget.cpp:739
+#: ../src/widgets/desktop-widget.cpp:734
msgid ""
"<b>Welcome to Inkscape!</b> Use shape or freehand tools to create objects; "
"use selector (arrow) to move or transform them."
@@ -27609,69 +27181,69 @@ msgstr ""
"малювання для створення об'єктів; для їх переміщення чи трансформації "
"використовуйте селектор (стрілку)."
-#: ../src/widgets/desktop-widget.cpp:833
+#: ../src/widgets/desktop-widget.cpp:828
msgid "grayscale"
msgstr "сірі півтони"
-#: ../src/widgets/desktop-widget.cpp:834
+#: ../src/widgets/desktop-widget.cpp:829
msgid ", grayscale"
msgstr ", сірі півтони"
-#: ../src/widgets/desktop-widget.cpp:835
+#: ../src/widgets/desktop-widget.cpp:830
msgid "print colors preview"
msgstr "друк попереднього перегляду кольорів"
-#: ../src/widgets/desktop-widget.cpp:836
+#: ../src/widgets/desktop-widget.cpp:831
msgid ", print colors preview"
msgstr ", друк попереднього перегляду кольорів"
-#: ../src/widgets/desktop-widget.cpp:837
+#: ../src/widgets/desktop-widget.cpp:832
msgid "outline"
msgstr "обрис"
-#: ../src/widgets/desktop-widget.cpp:838
+#: ../src/widgets/desktop-widget.cpp:833
msgid "no filters"
msgstr "без фільтрування"
-#: ../src/widgets/desktop-widget.cpp:865
+#: ../src/widgets/desktop-widget.cpp:860
#, c-format
msgid "%s%s: %d (%s%s) - Inkscape"
msgstr "%s%s: %d (%s%s) – Inkscape"
-#: ../src/widgets/desktop-widget.cpp:867 ../src/widgets/desktop-widget.cpp:871
+#: ../src/widgets/desktop-widget.cpp:862 ../src/widgets/desktop-widget.cpp:866
#, c-format
msgid "%s%s: %d (%s) - Inkscape"
msgstr "%s%s: %d (%s) — Inkscape"
-#: ../src/widgets/desktop-widget.cpp:873
+#: ../src/widgets/desktop-widget.cpp:868
#, c-format
msgid "%s%s: %d - Inkscape"
msgstr "%s%s: %d — Inkscape"
-#: ../src/widgets/desktop-widget.cpp:879
+#: ../src/widgets/desktop-widget.cpp:874
#, c-format
msgid "%s%s (%s%s) - Inkscape"
msgstr "%s%s (%s%s) — Inkscape"
-#: ../src/widgets/desktop-widget.cpp:881 ../src/widgets/desktop-widget.cpp:885
+#: ../src/widgets/desktop-widget.cpp:876 ../src/widgets/desktop-widget.cpp:880
#, c-format
msgid "%s%s (%s) - Inkscape"
msgstr "%s%s (%s) — Inkscape"
-#: ../src/widgets/desktop-widget.cpp:887
+#: ../src/widgets/desktop-widget.cpp:882
#, c-format
msgid "%s%s - Inkscape"
msgstr "%s%s — Inkscape"
-#: ../src/widgets/desktop-widget.cpp:1056
+#: ../src/widgets/desktop-widget.cpp:1051
msgid "Color-managed display is <b>enabled</b> in this window"
msgstr "Показ з керуванням кольорами у цьому вікні <b>увімкнено</b>"
-#: ../src/widgets/desktop-widget.cpp:1058
+#: ../src/widgets/desktop-widget.cpp:1053
msgid "Color-managed display is <b>disabled</b> in this window"
msgstr "Показ з керуванням кольорами у цьому вікні <b>вимкнено</b>"
-#: ../src/widgets/desktop-widget.cpp:1113
+#: ../src/widgets/desktop-widget.cpp:1108
#, c-format
msgid ""
"<span weight=\"bold\" size=\"larger\">Save changes to document \"%s\" before "
@@ -27684,12 +27256,12 @@ msgstr ""
"\n"
"Якщо ви закриєте документ без збереження, усі зміни будуть втрачені."
-#: ../src/widgets/desktop-widget.cpp:1123
-#: ../src/widgets/desktop-widget.cpp:1182
+#: ../src/widgets/desktop-widget.cpp:1118
+#: ../src/widgets/desktop-widget.cpp:1177
msgid "Close _without saving"
msgstr "_Не зберігати"
-#: ../src/widgets/desktop-widget.cpp:1172
+#: ../src/widgets/desktop-widget.cpp:1167
#, c-format
msgid ""
"<span weight=\"bold\" size=\"larger\">The file \"%s\" was saved with a "
@@ -27702,19 +27274,19 @@ msgstr ""
"\n"
"Зберегти документ у форматі SVG Inkscape?"
-#: ../src/widgets/desktop-widget.cpp:1184
+#: ../src/widgets/desktop-widget.cpp:1179
msgid "_Save as Inkscape SVG"
msgstr "_Зберегти як SVG Inkscape"
-#: ../src/widgets/desktop-widget.cpp:1394
+#: ../src/widgets/desktop-widget.cpp:1389
msgid "Note:"
msgstr "Примітка:"
-#: ../src/widgets/dropper-toolbar.cpp:114
+#: ../src/widgets/dropper-toolbar.cpp:90
msgid "Pick opacity"
msgstr "Непрозорість піпетки"
-#: ../src/widgets/dropper-toolbar.cpp:115
+#: ../src/widgets/dropper-toolbar.cpp:91
msgid ""
"Pick both the color and the alpha (transparency) under cursor; otherwise, "
"pick only the visible color premultiplied by alpha"
@@ -27722,21 +27294,21 @@ msgstr ""
"Підберіть колір та альфу (прозорість) під курсором; інакше підберіть тільки "
"видимий колір попередньо помножений на альфу"
-#: ../src/widgets/dropper-toolbar.cpp:118
+#: ../src/widgets/dropper-toolbar.cpp:94
msgid "Pick"
msgstr "Піпетка"
-#: ../src/widgets/dropper-toolbar.cpp:127
+#: ../src/widgets/dropper-toolbar.cpp:103
msgid "Assign opacity"
msgstr "Призначити непрозорість"
-#: ../src/widgets/dropper-toolbar.cpp:128
+#: ../src/widgets/dropper-toolbar.cpp:104
msgid ""
"If alpha was picked, assign it to selection as fill or stroke transparency"
msgstr ""
"Якщо підібрано альфу, призначити її заповненню чи штриху у позначеній області"
-#: ../src/widgets/dropper-toolbar.cpp:131
+#: ../src/widgets/dropper-toolbar.cpp:107
msgid "Assign"
msgstr "Призначити"
@@ -27744,19 +27316,19 @@ msgstr "Призначити"
msgid "remove"
msgstr "вилучити"
-#: ../src/widgets/eraser-toolbar.cpp:111
+#: ../src/widgets/eraser-toolbar.cpp:94
msgid "Delete objects touched by the eraser"
msgstr "Вилучати об'єкти, яких торкнулася гумка"
-#: ../src/widgets/eraser-toolbar.cpp:117
+#: ../src/widgets/eraser-toolbar.cpp:100
msgid "Cut"
msgstr "Вирізати"
-#: ../src/widgets/eraser-toolbar.cpp:118
+#: ../src/widgets/eraser-toolbar.cpp:101
msgid "Cut out from objects"
msgstr "Вирізати з об'єктів"
-#: ../src/widgets/eraser-toolbar.cpp:146
+#: ../src/widgets/eraser-toolbar.cpp:129
msgid "The width of the eraser pen (relative to the visible canvas area)"
msgstr "Ширина гумки (відносно видимої області полотна)"
@@ -27788,8 +27360,8 @@ msgstr "Встановлення візерунку для заповнення"
msgid "Set pattern on stroke"
msgstr "Додати візерунок до штриха"
-#: ../src/widgets/font-selector.cpp:134 ../src/widgets/text-toolbar.cpp:962
-#: ../src/widgets/text-toolbar.cpp:1275
+#: ../src/widgets/font-selector.cpp:134 ../src/widgets/text-toolbar.cpp:955
+#: ../src/widgets/text-toolbar.cpp:1268
msgid "Font size"
msgstr "Розмір шрифту"
@@ -27825,111 +27397,111 @@ msgstr "Зразок"
msgid "Rename gradient"
msgstr "Перейменувати градієнт"
-#: ../src/widgets/gradient-toolbar.cpp:172
-#: ../src/widgets/gradient-toolbar.cpp:185
-#: ../src/widgets/gradient-toolbar.cpp:777
-#: ../src/widgets/gradient-toolbar.cpp:1112
+#: ../src/widgets/gradient-toolbar.cpp:156
+#: ../src/widgets/gradient-toolbar.cpp:169
+#: ../src/widgets/gradient-toolbar.cpp:761
+#: ../src/widgets/gradient-toolbar.cpp:1096
msgid "No gradient"
msgstr "Без градієнта"
-#: ../src/widgets/gradient-toolbar.cpp:191
+#: ../src/widgets/gradient-toolbar.cpp:175
msgid "Multiple gradients"
msgstr "Декілька градієнтів"
-#: ../src/widgets/gradient-toolbar.cpp:697
+#: ../src/widgets/gradient-toolbar.cpp:681
msgid "Multiple stops"
msgstr "Декілька опорних точок"
-#: ../src/widgets/gradient-toolbar.cpp:795
+#: ../src/widgets/gradient-toolbar.cpp:779
#: ../src/widgets/gradient-vector.cpp:629
msgid "No stops in gradient"
msgstr "У градієнті немає опорних точок"
-#: ../src/widgets/gradient-toolbar.cpp:948
+#: ../src/widgets/gradient-toolbar.cpp:932
msgid "Assign gradient to object"
msgstr "Приписати об'єктові градієнт"
-#: ../src/widgets/gradient-toolbar.cpp:970
+#: ../src/widgets/gradient-toolbar.cpp:954
msgid "Set gradient repeat"
msgstr "Встановити повторюваність градієнта"
-#: ../src/widgets/gradient-toolbar.cpp:1008
+#: ../src/widgets/gradient-toolbar.cpp:992
#: ../src/widgets/gradient-vector.cpp:740
msgid "Change gradient stop offset"
msgstr "Змінити зміщення опорної точки градієнта"
-#: ../src/widgets/gradient-toolbar.cpp:1052
+#: ../src/widgets/gradient-toolbar.cpp:1036
msgid "linear"
msgstr "лінійний"
-#: ../src/widgets/gradient-toolbar.cpp:1052
+#: ../src/widgets/gradient-toolbar.cpp:1036
msgid "Create linear gradient"
msgstr "Створити лінійний градієнт"
-#: ../src/widgets/gradient-toolbar.cpp:1056
+#: ../src/widgets/gradient-toolbar.cpp:1040
msgid "radial"
msgstr "радіальний"
-#: ../src/widgets/gradient-toolbar.cpp:1056
+#: ../src/widgets/gradient-toolbar.cpp:1040
msgid "Create radial (elliptic or circular) gradient"
msgstr "Створити радіальний (еліптичний чи круговий) градієнт"
-#: ../src/widgets/gradient-toolbar.cpp:1059
+#: ../src/widgets/gradient-toolbar.cpp:1043
#: ../src/widgets/mesh-toolbar.cpp:211
msgid "New:"
msgstr "Створити:"
-#: ../src/widgets/gradient-toolbar.cpp:1082
+#: ../src/widgets/gradient-toolbar.cpp:1066
#: ../src/widgets/mesh-toolbar.cpp:234
msgid "fill"
msgstr "заповнення"
-#: ../src/widgets/gradient-toolbar.cpp:1082
+#: ../src/widgets/gradient-toolbar.cpp:1066
#: ../src/widgets/mesh-toolbar.cpp:234
msgid "Create gradient in the fill"
msgstr "Створити градієнт у заповненні"
-#: ../src/widgets/gradient-toolbar.cpp:1086
+#: ../src/widgets/gradient-toolbar.cpp:1070
#: ../src/widgets/mesh-toolbar.cpp:238
msgid "stroke"
msgstr "штрих"
-#: ../src/widgets/gradient-toolbar.cpp:1086
+#: ../src/widgets/gradient-toolbar.cpp:1070
#: ../src/widgets/mesh-toolbar.cpp:238
msgid "Create gradient in the stroke"
msgstr "Створити градієнт у штриху"
-#: ../src/widgets/gradient-toolbar.cpp:1089
+#: ../src/widgets/gradient-toolbar.cpp:1073
#: ../src/widgets/mesh-toolbar.cpp:241
msgid "on:"
msgstr "на:"
-#: ../src/widgets/gradient-toolbar.cpp:1114
+#: ../src/widgets/gradient-toolbar.cpp:1098
msgid "Select"
msgstr "Селектор"
-#: ../src/widgets/gradient-toolbar.cpp:1114
+#: ../src/widgets/gradient-toolbar.cpp:1098
msgid "Choose a gradient"
msgstr "Вибрати градієнт"
-#: ../src/widgets/gradient-toolbar.cpp:1115
+#: ../src/widgets/gradient-toolbar.cpp:1099
msgid "Select:"
msgstr "Позначення:"
-#: ../src/widgets/gradient-toolbar.cpp:1133
+#: ../src/widgets/gradient-toolbar.cpp:1117
msgid "Reflected"
msgstr "Відбитий"
-#: ../src/widgets/gradient-toolbar.cpp:1136
+#: ../src/widgets/gradient-toolbar.cpp:1120
msgid "Direct"
msgstr "Прямий"
-#: ../src/widgets/gradient-toolbar.cpp:1138
+#: ../src/widgets/gradient-toolbar.cpp:1122
msgid "Repeat"
msgstr "Повторити"
#. TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/pservers.html#LinearGradientSpreadMethodAttribute
-#: ../src/widgets/gradient-toolbar.cpp:1140
+#: ../src/widgets/gradient-toolbar.cpp:1124
msgid ""
"Whether to fill with flat color beyond the ends of the gradient vector "
"(spreadMethod=\"pad\"), or repeat the gradient in the same direction "
@@ -27940,61 +27512,61 @@ msgstr ""
"\"pad\"), чи повторювати початковий градієнт (spreadMethod=\"repeat\"), "
"повторювати відбитий градієнт (spreadMethod=\"reflect\")"
-#: ../src/widgets/gradient-toolbar.cpp:1145
+#: ../src/widgets/gradient-toolbar.cpp:1129
msgid "Repeat:"
msgstr "Повтор:"
-#: ../src/widgets/gradient-toolbar.cpp:1159
+#: ../src/widgets/gradient-toolbar.cpp:1143
msgid "No stops"
msgstr "Без опорних точок"
-#: ../src/widgets/gradient-toolbar.cpp:1161
+#: ../src/widgets/gradient-toolbar.cpp:1145
msgid "Stops"
msgstr "Опорні точки"
-#: ../src/widgets/gradient-toolbar.cpp:1161
+#: ../src/widgets/gradient-toolbar.cpp:1145
msgid "Select a stop for the current gradient"
msgstr "Позначте опорну точку поточного градієнта"
-#: ../src/widgets/gradient-toolbar.cpp:1162
+#: ../src/widgets/gradient-toolbar.cpp:1146
msgid "Stops:"
msgstr "Опорні точки:"
#. Label
-#: ../src/widgets/gradient-toolbar.cpp:1174
+#: ../src/widgets/gradient-toolbar.cpp:1158
#: ../src/widgets/gradient-vector.cpp:926
msgctxt "Gradient"
msgid "Offset:"
msgstr "Зсув:"
-#: ../src/widgets/gradient-toolbar.cpp:1174
+#: ../src/widgets/gradient-toolbar.cpp:1158
msgid "Offset of selected stop"
msgstr "Відступ позначеної опорної точки"
-#: ../src/widgets/gradient-toolbar.cpp:1192
-#: ../src/widgets/gradient-toolbar.cpp:1193
+#: ../src/widgets/gradient-toolbar.cpp:1176
+#: ../src/widgets/gradient-toolbar.cpp:1177
msgid "Insert new stop"
msgstr "Вставити нову опорну точку"
-#: ../src/widgets/gradient-toolbar.cpp:1206
-#: ../src/widgets/gradient-toolbar.cpp:1207
+#: ../src/widgets/gradient-toolbar.cpp:1190
+#: ../src/widgets/gradient-toolbar.cpp:1191
#: ../src/widgets/gradient-vector.cpp:908
msgid "Delete stop"
msgstr "Вилучити опорну точку"
-#: ../src/widgets/gradient-toolbar.cpp:1220
+#: ../src/widgets/gradient-toolbar.cpp:1204
msgid "Reverse"
msgstr "Обернути"
-#: ../src/widgets/gradient-toolbar.cpp:1221
+#: ../src/widgets/gradient-toolbar.cpp:1205
msgid "Reverse the direction of the gradient"
msgstr "Обернути напрямок градієнта"
-#: ../src/widgets/gradient-toolbar.cpp:1235
+#: ../src/widgets/gradient-toolbar.cpp:1219
msgid "Link gradients"
msgstr "Зв'язати градієнти"
-#: ../src/widgets/gradient-toolbar.cpp:1236
+#: ../src/widgets/gradient-toolbar.cpp:1220
msgid "Link gradients to change all related gradients"
msgstr "Зв'язати градієнти, щоб вони змінювалися у всіх пов'язаних градієнтів"
@@ -28038,28 +27610,44 @@ msgstr "Редактор градієнтів"
msgid "Change gradient stop color"
msgstr "Змінити колір опорної точки градієнта"
-#: ../src/widgets/lpe-toolbar.cpp:319
+#: ../src/widgets/lpe-toolbar.cpp:233
+msgid "Closed"
+msgstr "Заблокований"
+
+#: ../src/widgets/lpe-toolbar.cpp:235
+msgid "Open start"
+msgstr "Відкритий початок"
+
+#: ../src/widgets/lpe-toolbar.cpp:237
+msgid "Open end"
+msgstr "Відкритий кінець"
+
+#: ../src/widgets/lpe-toolbar.cpp:239
+msgid "Open both"
+msgstr "Відкриті обидва кінці"
+
+#: ../src/widgets/lpe-toolbar.cpp:298
msgid "All inactive"
msgstr "Всі незадіяні"
-#: ../src/widgets/lpe-toolbar.cpp:320
+#: ../src/widgets/lpe-toolbar.cpp:299
msgid "No geometric tool is active"
msgstr "Жоден з геометричних інструментів не задіяно"
-#: ../src/widgets/lpe-toolbar.cpp:353
+#: ../src/widgets/lpe-toolbar.cpp:332
msgid "Show limiting bounding box"
msgstr "Показати контур-обгортку"
-#: ../src/widgets/lpe-toolbar.cpp:354
+#: ../src/widgets/lpe-toolbar.cpp:333
msgid "Show bounding box (used to cut infinite lines)"
msgstr ""
"Показувати рамку-обгортку (використовується для вирізання нескінченних ліній)"
-#: ../src/widgets/lpe-toolbar.cpp:365
+#: ../src/widgets/lpe-toolbar.cpp:344
msgid "Get limiting bounding box from selection"
msgstr "Отримати контур-обгортку з позначених об'єктів"
-#: ../src/widgets/lpe-toolbar.cpp:366
+#: ../src/widgets/lpe-toolbar.cpp:345
msgid ""
"Set limiting bounding box (used to cut infinite lines) to the bounding box "
"of current selection"
@@ -28067,49 +27655,49 @@ msgstr ""
"Вказати обмежувальну рамку-обгортку (використовується для обрізання "
"нескінченних ліній) до рамки-обгортки поточної вибраної області"
-#: ../src/widgets/lpe-toolbar.cpp:378
+#: ../src/widgets/lpe-toolbar.cpp:357
msgid "Choose a line segment type"
msgstr "Обрати тип сегмента лінії"
-#: ../src/widgets/lpe-toolbar.cpp:394
+#: ../src/widgets/lpe-toolbar.cpp:373
msgid "Display measuring info"
msgstr "Показати відомості щодо виміру"
-#: ../src/widgets/lpe-toolbar.cpp:395
+#: ../src/widgets/lpe-toolbar.cpp:374
msgid "Display measuring info for selected items"
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:544
+#: ../src/widgets/lpe-toolbar.cpp:384 ../src/widgets/node-toolbar.cpp:613
+#: ../src/widgets/paintbucket-toolbar.cpp:166
+#: ../src/widgets/rect-toolbar.cpp:375 ../src/widgets/select-toolbar.cpp:536
msgid "Units"
msgstr "Одиниці"
-#: ../src/widgets/lpe-toolbar.cpp:415
+#: ../src/widgets/lpe-toolbar.cpp:394
msgid "Open LPE dialog"
msgstr "Відкрити діалогове вікно геометричних побудов"
-#: ../src/widgets/lpe-toolbar.cpp:416
+#: ../src/widgets/lpe-toolbar.cpp:395
msgid "Open LPE dialog (to adapt parameters numerically)"
msgstr ""
"Відкрити діалогове вікно геометричних побудов (для числового налаштування "
"параметрів)"
-#: ../src/widgets/measure-toolbar.cpp:103 ../src/widgets/text-toolbar.cpp:1278
+#: ../src/widgets/measure-toolbar.cpp:86 ../src/widgets/text-toolbar.cpp:1271
msgid "Font Size"
msgstr "Розмір шрифту"
-#: ../src/widgets/measure-toolbar.cpp:103
+#: ../src/widgets/measure-toolbar.cpp:86
msgid "Font Size:"
msgstr "Розмір шрифту:"
-#: ../src/widgets/measure-toolbar.cpp:104
+#: ../src/widgets/measure-toolbar.cpp:87
msgid "The font size to be used in the measurement labels"
msgstr "Розмір шрифту, який буде використано для міток вимірювання"
-#: ../src/widgets/measure-toolbar.cpp:116
-#: ../src/widgets/measure-toolbar.cpp:124
+#: ../src/widgets/measure-toolbar.cpp:99
+#: ../src/widgets/measure-toolbar.cpp:107
msgid "The units to be used for the measurements"
msgstr "Одиниці, які буде використано для вимірювання"
@@ -28171,7 +27759,7 @@ msgstr "Редагування штриха"
msgid "Edit stroke mesh"
msgstr "Редагування сітки штриха"
-#: ../src/widgets/mesh-toolbar.cpp:317 ../src/widgets/node-toolbar.cpp:534
+#: ../src/widgets/mesh-toolbar.cpp:317 ../src/widgets/node-toolbar.cpp:521
msgid "Show Handles"
msgstr "Показувати елементи керування"
@@ -28179,263 +27767,206 @@ msgstr "Показувати елементи керування"
msgid "Show side and tensor handles"
msgstr "Показати бічний елемент та елемент керування тензором"
-#: ../src/widgets/node-toolbar.cpp:354
+#: ../src/widgets/node-toolbar.cpp:341
msgid "Insert node"
msgstr "Вставити вузол"
-#: ../src/widgets/node-toolbar.cpp:355
+#: ../src/widgets/node-toolbar.cpp:342
msgid "Insert new nodes into selected segments"
msgstr "Вставити нові вузли у позначені сегменти"
-#: ../src/widgets/node-toolbar.cpp:358
+#: ../src/widgets/node-toolbar.cpp:345
msgid "Insert"
msgstr "Вставити"
-#: ../src/widgets/node-toolbar.cpp:369
+#: ../src/widgets/node-toolbar.cpp:356
msgid "Insert node at min X"
msgstr "Вставити вузол у точці мінімуму за X"
-#: ../src/widgets/node-toolbar.cpp:370
+#: ../src/widgets/node-toolbar.cpp:357
msgid "Insert new nodes at min X into selected segments"
msgstr ""
"Вставити нові вузли у позначені сегменти у точках з мінімальними "
"координатами за X"
-#: ../src/widgets/node-toolbar.cpp:373
+#: ../src/widgets/node-toolbar.cpp:360
msgid "Insert min X"
msgstr "Вставити у мін. X"
-#: ../src/widgets/node-toolbar.cpp:379
+#: ../src/widgets/node-toolbar.cpp:366
msgid "Insert node at max X"
msgstr "Вставити вузол у точці максимуму за X"
-#: ../src/widgets/node-toolbar.cpp:380
+#: ../src/widgets/node-toolbar.cpp:367
msgid "Insert new nodes at max X into selected segments"
msgstr ""
"Вставити нові вузли у позначені сегменти у точках з максимальними "
"координатами за X"
-#: ../src/widgets/node-toolbar.cpp:383
+#: ../src/widgets/node-toolbar.cpp:370
msgid "Insert max X"
msgstr "Вставити у макс. X"
-#: ../src/widgets/node-toolbar.cpp:389
+#: ../src/widgets/node-toolbar.cpp:376
msgid "Insert node at min Y"
msgstr "Вставити вузол у точці мінімуму за Y"
-#: ../src/widgets/node-toolbar.cpp:390
+#: ../src/widgets/node-toolbar.cpp:377
msgid "Insert new nodes at min Y into selected segments"
msgstr ""
"Вставити нові вузли у позначені сегменти у точках з мінімальними "
"координатами за Y"
-#: ../src/widgets/node-toolbar.cpp:393
+#: ../src/widgets/node-toolbar.cpp:380
msgid "Insert min Y"
msgstr "Вставити у мін. Y"
-#: ../src/widgets/node-toolbar.cpp:399
+#: ../src/widgets/node-toolbar.cpp:386
msgid "Insert node at max Y"
msgstr "Вставити вузол у точці максимуму за Y"
-#: ../src/widgets/node-toolbar.cpp:400
+#: ../src/widgets/node-toolbar.cpp:387
msgid "Insert new nodes at max Y into selected segments"
msgstr ""
"Вставити нові вузли у позначені сегменти у точках з максимальними "
"координатами за Y"
-#: ../src/widgets/node-toolbar.cpp:403
+#: ../src/widgets/node-toolbar.cpp:390
msgid "Insert max Y"
msgstr "Вставити у макс. Y"
-#: ../src/widgets/node-toolbar.cpp:411
+#: ../src/widgets/node-toolbar.cpp:398
msgid "Delete selected nodes"
msgstr "Вилучити позначені вузли"
-#: ../src/widgets/node-toolbar.cpp:422
+#: ../src/widgets/node-toolbar.cpp:409
msgid "Join selected nodes"
msgstr "З'єднати позначені вузли"
-#: ../src/widgets/node-toolbar.cpp:425
+#: ../src/widgets/node-toolbar.cpp:412
msgid "Join"
msgstr "З'єднати"
-#: ../src/widgets/node-toolbar.cpp:433
+#: ../src/widgets/node-toolbar.cpp:420
msgid "Break path at selected nodes"
msgstr "Розірвати контур у позначеному вузлі"
-#: ../src/widgets/node-toolbar.cpp:443
+#: ../src/widgets/node-toolbar.cpp:430
msgid "Join with segment"
msgstr "З'єднати сегментом"
-#: ../src/widgets/node-toolbar.cpp:444
+#: ../src/widgets/node-toolbar.cpp:431
msgid "Join selected endnodes with a new segment"
msgstr "З'єднати позначені вузли новим сегментом"
-#: ../src/widgets/node-toolbar.cpp:453
+#: ../src/widgets/node-toolbar.cpp:440
msgid "Delete segment"
msgstr "Вилучити сегмент"
-#: ../src/widgets/node-toolbar.cpp:454
+#: ../src/widgets/node-toolbar.cpp:441
msgid "Delete segment between two non-endpoint nodes"
msgstr "Вилучити сегмент між двома не кінцевими вузлами"
-#: ../src/widgets/node-toolbar.cpp:463
+#: ../src/widgets/node-toolbar.cpp:450
msgid "Node Cusp"
msgstr "Гострі вузли"
-#: ../src/widgets/node-toolbar.cpp:464
+#: ../src/widgets/node-toolbar.cpp:451
msgid "Make selected nodes corner"
msgstr "Зробити позначені вузли гострими"
-#: ../src/widgets/node-toolbar.cpp:473
+#: ../src/widgets/node-toolbar.cpp:460
msgid "Node Smooth"
msgstr "Згладити вузли"
-#: ../src/widgets/node-toolbar.cpp:474
+#: ../src/widgets/node-toolbar.cpp:461
msgid "Make selected nodes smooth"
msgstr "Зробити позначені вузли гладкими"
-#: ../src/widgets/node-toolbar.cpp:483
+#: ../src/widgets/node-toolbar.cpp:470
msgid "Node Symmetric"
msgstr "Симетричні вузли"
-#: ../src/widgets/node-toolbar.cpp:484
+#: ../src/widgets/node-toolbar.cpp:471
msgid "Make selected nodes symmetric"
msgstr "Зробити позначені вузли симетричними"
-#: ../src/widgets/node-toolbar.cpp:493
+#: ../src/widgets/node-toolbar.cpp:480
msgid "Node Auto"
msgstr "Автовузол"
-#: ../src/widgets/node-toolbar.cpp:494
+#: ../src/widgets/node-toolbar.cpp:481
msgid "Make selected nodes auto-smooth"
msgstr "Автоматичне згладжування вибраних вузлів"
-#: ../src/widgets/node-toolbar.cpp:503
+#: ../src/widgets/node-toolbar.cpp:490
msgid "Node Line"
msgstr "Лінії вузла"
-#: ../src/widgets/node-toolbar.cpp:504
+#: ../src/widgets/node-toolbar.cpp:491
msgid "Make selected segments lines"
msgstr "Зробити позначені сегменти прямими"
-#: ../src/widgets/node-toolbar.cpp:513
+#: ../src/widgets/node-toolbar.cpp:500
msgid "Node Curve"
msgstr "Криві вузла"
-#: ../src/widgets/node-toolbar.cpp:514
+#: ../src/widgets/node-toolbar.cpp:501
msgid "Make selected segments curves"
msgstr "Зробити позначені сегменти кривими"
-#: ../src/widgets/node-toolbar.cpp:523
+#: ../src/widgets/node-toolbar.cpp:510
msgid "Show Transform Handles"
msgstr "Показати елементи керування перетворенням"
-#: ../src/widgets/node-toolbar.cpp:524
+#: ../src/widgets/node-toolbar.cpp:511
msgid "Show transformation handles for selected nodes"
msgstr "Показувати елементи керування перетворенням для позначених вузлів"
-#: ../src/widgets/node-toolbar.cpp:535
+#: ../src/widgets/node-toolbar.cpp:522
msgid "Show Bezier handles of selected nodes"
msgstr "Показувати елементи керування кривою Безьє для позначених вузлів"
-#: ../src/widgets/node-toolbar.cpp:545
+#: ../src/widgets/node-toolbar.cpp:532
msgid "Show Outline"
msgstr "Показати обрис"
-#: ../src/widgets/node-toolbar.cpp:546
+#: ../src/widgets/node-toolbar.cpp:533
msgid "Show path outline (without path effects)"
msgstr "Показувати обрис контуру (без ефектів контуру)"
-#: ../src/widgets/node-toolbar.cpp:568
+#: ../src/widgets/node-toolbar.cpp:555
msgid "Edit clipping paths"
msgstr "Зміна контурів обрізання"
-#: ../src/widgets/node-toolbar.cpp:569
+#: ../src/widgets/node-toolbar.cpp:556
msgid "Show clipping path(s) of selected object(s)"
msgstr "Показувати контури обрізання позначених об'єктів"
-#: ../src/widgets/node-toolbar.cpp:579
+#: ../src/widgets/node-toolbar.cpp:566
msgid "Edit masks"
msgstr "Зміна масок"
-#: ../src/widgets/node-toolbar.cpp:580
+#: ../src/widgets/node-toolbar.cpp:567
msgid "Show mask(s) of selected object(s)"
msgstr "Показувати маски позначених об'єктів"
-#: ../src/widgets/node-toolbar.cpp:594
+#: ../src/widgets/node-toolbar.cpp:581
msgid "X coordinate:"
msgstr "X координата:"
-#: ../src/widgets/node-toolbar.cpp:594
+#: ../src/widgets/node-toolbar.cpp:581
msgid "X coordinate of selected node(s)"
msgstr "X-координата вибраних вузлів"
-#: ../src/widgets/node-toolbar.cpp:612
+#: ../src/widgets/node-toolbar.cpp:599
msgid "Y coordinate:"
msgstr "Y координата:"
-#: ../src/widgets/node-toolbar.cpp:612
+#: ../src/widgets/node-toolbar.cpp:599
msgid "Y coordinate of selected node(s)"
msgstr "Y-координата вибраних вузлів"
-#: ../src/widgets/paintbucket-toolbar.cpp:154
-msgid "Fill by"
-msgstr "Залити"
-
-#: ../src/widgets/paintbucket-toolbar.cpp:155
-msgid "Fill by:"
-msgstr "Чим залити:"
-
-#: ../src/widgets/paintbucket-toolbar.cpp:167
-msgid "Fill Threshold"
-msgstr "Поріг залиття"
-
-#: ../src/widgets/paintbucket-toolbar.cpp:168
-msgid ""
-"The maximum allowed difference between the clicked pixel and the neighboring "
-"pixels to be counted in the fill"
-msgstr ""
-"Максимальна допустима різниця між точкою, на якій клацнули та сусідніми "
-"точками які обчислені у заповненні"
-
-#: ../src/widgets/paintbucket-toolbar.cpp:195
-msgid "Grow/shrink by"
-msgstr "Збільшити/зменшити на"
-
-#: ../src/widgets/paintbucket-toolbar.cpp:195
-msgid "Grow/shrink by:"
-msgstr "Збільшити/зменшити на:"
-
-#: ../src/widgets/paintbucket-toolbar.cpp:196
-msgid ""
-"The amount to grow (positive) or shrink (negative) the created fill path"
-msgstr ""
-"Величина збільшення (додатне число) або зменшення (від'ємне) створеного "
-"контуру заповнення"
-
-#: ../src/widgets/paintbucket-toolbar.cpp:221
-msgid "Close gaps"
-msgstr "Закрити проміжки"
-
-#: ../src/widgets/paintbucket-toolbar.cpp:222
-msgid "Close gaps:"
-msgstr "Закриті проміжки:"
-
-#: ../src/widgets/paintbucket-toolbar.cpp:233
-#: ../src/widgets/pencil-toolbar.cpp:322 ../src/widgets/spiral-toolbar.cpp:300
-#: ../src/widgets/star-toolbar.cpp:572
-msgid "Defaults"
-msgstr "Типово"
-
-#: ../src/widgets/paintbucket-toolbar.cpp:234
-msgid ""
-"Reset paint bucket parameters to defaults (use Inkscape Preferences > Tools "
-"to change defaults)"
-msgstr ""
-"Скинути параметри відра з фарбою на типові (типові параметри змінюються у "
-"вікні Параметри Inkscape->Інструменти)"
-
#: ../src/widgets/paint-selector.cpp:234
msgid "No paint"
msgstr "Немає заповнення"
@@ -28523,79 +28054,136 @@ msgstr "<b>Заповнення візерунком</b>"
msgid "<b>Swatch fill</b>"
msgstr "<b>Заливання за зразком</b>"
-#: ../src/widgets/pencil-toolbar.cpp:125
+#: ../src/widgets/paintbucket-toolbar.cpp:133
+msgid "Fill by"
+msgstr "Залити"
+
+#: ../src/widgets/paintbucket-toolbar.cpp:134
+msgid "Fill by:"
+msgstr "Чим залити:"
+
+#: ../src/widgets/paintbucket-toolbar.cpp:146
+msgid "Fill Threshold"
+msgstr "Поріг залиття"
+
+#: ../src/widgets/paintbucket-toolbar.cpp:147
+msgid ""
+"The maximum allowed difference between the clicked pixel and the neighboring "
+"pixels to be counted in the fill"
+msgstr ""
+"Максимальна допустима різниця між точкою, на якій клацнули та сусідніми "
+"точками які обчислені у заповненні"
+
+#: ../src/widgets/paintbucket-toolbar.cpp:174
+msgid "Grow/shrink by"
+msgstr "Збільшити/зменшити на"
+
+#: ../src/widgets/paintbucket-toolbar.cpp:174
+msgid "Grow/shrink by:"
+msgstr "Збільшити/зменшити на:"
+
+#: ../src/widgets/paintbucket-toolbar.cpp:175
+msgid ""
+"The amount to grow (positive) or shrink (negative) the created fill path"
+msgstr ""
+"Величина збільшення (додатне число) або зменшення (від'ємне) створеного "
+"контуру заповнення"
+
+#: ../src/widgets/paintbucket-toolbar.cpp:200
+msgid "Close gaps"
+msgstr "Закрити проміжки"
+
+#: ../src/widgets/paintbucket-toolbar.cpp:201
+msgid "Close gaps:"
+msgstr "Закриті проміжки:"
+
+#: ../src/widgets/paintbucket-toolbar.cpp:212
+#: ../src/widgets/pencil-toolbar.cpp:293 ../src/widgets/spiral-toolbar.cpp:289
+#: ../src/widgets/star-toolbar.cpp:564
+msgid "Defaults"
+msgstr "Типово"
+
+#: ../src/widgets/paintbucket-toolbar.cpp:213
+msgid ""
+"Reset paint bucket parameters to defaults (use Inkscape Preferences > Tools "
+"to change defaults)"
+msgstr ""
+"Скинути параметри відра з фарбою на типові (типові параметри змінюються у "
+"вікні Параметри Inkscape->Інструменти)"
+
+#: ../src/widgets/pencil-toolbar.cpp:96
msgid "Bezier"
msgstr "Крива Безьє"
-#: ../src/widgets/pencil-toolbar.cpp:126
+#: ../src/widgets/pencil-toolbar.cpp:97
msgid "Create regular Bezier path"
msgstr "Створення регулярного контуру Безьє"
-#: ../src/widgets/pencil-toolbar.cpp:133
+#: ../src/widgets/pencil-toolbar.cpp:104
msgid "Create Spiro path"
msgstr "Створення контуру Спіро"
-#: ../src/widgets/pencil-toolbar.cpp:140
+#: ../src/widgets/pencil-toolbar.cpp:111
msgid "Zigzag"
msgstr "Зиґзаґ"
-#: ../src/widgets/pencil-toolbar.cpp:141
+#: ../src/widgets/pencil-toolbar.cpp:112
msgid "Create a sequence of straight line segments"
msgstr "Створити послідовність прямих сегментів лінії"
-#: ../src/widgets/pencil-toolbar.cpp:147
+#: ../src/widgets/pencil-toolbar.cpp:118
msgid "Paraxial"
msgstr "Приосьовий режим"
-#: ../src/widgets/pencil-toolbar.cpp:148
+#: ../src/widgets/pencil-toolbar.cpp:119
msgid "Create a sequence of paraxial line segments"
msgstr "Створити послідовність парааксіальних сегментів лінії"
-#: ../src/widgets/pencil-toolbar.cpp:156
+#: ../src/widgets/pencil-toolbar.cpp:127
msgid "Mode of new lines drawn by this tool"
msgstr "Режим малювання нових ліній за допомогою цього інструмента"
-#: ../src/widgets/pencil-toolbar.cpp:185
+#: ../src/widgets/pencil-toolbar.cpp:156
msgid "Triangle in"
msgstr "Послаблення"
-#: ../src/widgets/pencil-toolbar.cpp:186
+#: ../src/widgets/pencil-toolbar.cpp:157
msgid "Triangle out"
msgstr "Посилення"
-#: ../src/widgets/pencil-toolbar.cpp:188
+#: ../src/widgets/pencil-toolbar.cpp:159
msgid "From clipboard"
msgstr "З буфера обміну даними"
-#: ../src/widgets/pencil-toolbar.cpp:213 ../src/widgets/pencil-toolbar.cpp:214
+#: ../src/widgets/pencil-toolbar.cpp:184 ../src/widgets/pencil-toolbar.cpp:185
msgid "Shape:"
msgstr "Форма:"
-#: ../src/widgets/pencil-toolbar.cpp:213
+#: ../src/widgets/pencil-toolbar.cpp:184
msgid "Shape of new paths drawn by this tool"
msgstr "Форма нових контурів, створений за допомогою цього інструмента"
-#: ../src/widgets/pencil-toolbar.cpp:298
+#: ../src/widgets/pencil-toolbar.cpp:269
msgid "(many nodes, rough)"
msgstr "(багато вузлів, груба)"
-#: ../src/widgets/pencil-toolbar.cpp:298
+#: ../src/widgets/pencil-toolbar.cpp:269
msgid "(few nodes, smooth)"
msgstr "(мало вузлів, гладка)"
-#: ../src/widgets/pencil-toolbar.cpp:301
+#: ../src/widgets/pencil-toolbar.cpp:272
msgid "Smoothing:"
msgstr "Згладжування:"
-#: ../src/widgets/pencil-toolbar.cpp:301
+#: ../src/widgets/pencil-toolbar.cpp:272
msgid "Smoothing: "
msgstr "Згладжування: "
-#: ../src/widgets/pencil-toolbar.cpp:302
+#: ../src/widgets/pencil-toolbar.cpp:273
msgid "How much smoothing (simplifying) is applied to the line"
msgstr "Міра згладжування (спрощення), яку буде застосовано до лінії"
-#: ../src/widgets/pencil-toolbar.cpp:323
+#: ../src/widgets/pencil-toolbar.cpp:294
msgid ""
"Reset pencil parameters to defaults (use Inkscape Preferences > Tools to "
"change defaults)"
@@ -28603,59 +28191,59 @@ msgstr ""
"Відновити типові параметри пера (типові параметри можна змінити у вікні "
"Параметри Inkscape->Інструменти)"
-#: ../src/widgets/rect-toolbar.cpp:129
+#: ../src/widgets/rect-toolbar.cpp:122
msgid "Change rectangle"
msgstr "Змінити прямокутник"
-#: ../src/widgets/rect-toolbar.cpp:321
+#: ../src/widgets/rect-toolbar.cpp:314
msgid "W:"
msgstr "Ш:"
-#: ../src/widgets/rect-toolbar.cpp:321
+#: ../src/widgets/rect-toolbar.cpp:314
msgid "Width of rectangle"
msgstr "Ширина прямокутника"
-#: ../src/widgets/rect-toolbar.cpp:338
+#: ../src/widgets/rect-toolbar.cpp:331
msgid "H:"
msgstr "Г:"
-#: ../src/widgets/rect-toolbar.cpp:338
+#: ../src/widgets/rect-toolbar.cpp:331
msgid "Height of rectangle"
msgstr "Висота прямокутника"
-#: ../src/widgets/rect-toolbar.cpp:352 ../src/widgets/rect-toolbar.cpp:367
+#: ../src/widgets/rect-toolbar.cpp:345 ../src/widgets/rect-toolbar.cpp:360
msgid "not rounded"
msgstr "не округлений"
-#: ../src/widgets/rect-toolbar.cpp:355
+#: ../src/widgets/rect-toolbar.cpp:348
msgid "Horizontal radius"
msgstr "Горизонтальний радіус"
-#: ../src/widgets/rect-toolbar.cpp:355
+#: ../src/widgets/rect-toolbar.cpp:348
msgid "Rx:"
msgstr "Гор. радіус:"
-#: ../src/widgets/rect-toolbar.cpp:355
+#: ../src/widgets/rect-toolbar.cpp:348
msgid "Horizontal radius of rounded corners"
msgstr "Горизонтальний радіус округлених кутів"
-#: ../src/widgets/rect-toolbar.cpp:370
+#: ../src/widgets/rect-toolbar.cpp:363
msgid "Vertical radius"
msgstr "Вертикальний радіус"
-#: ../src/widgets/rect-toolbar.cpp:370
+#: ../src/widgets/rect-toolbar.cpp:363
msgid "Ry:"
msgstr "Верт. радіус:"
-#: ../src/widgets/rect-toolbar.cpp:370
+#: ../src/widgets/rect-toolbar.cpp:363
msgid "Vertical radius of rounded corners"
msgstr "Вертикальний радіус округлених кутів"
-#: ../src/widgets/rect-toolbar.cpp:389
+#: ../src/widgets/rect-toolbar.cpp:382
msgid "Not rounded"
msgstr "Не округлений"
-#: ../src/widgets/rect-toolbar.cpp:390
+#: ../src/widgets/rect-toolbar.cpp:383
msgid "Make corners sharp"
msgstr "Прибрати округлення кутів"
@@ -28695,23 +28283,23 @@ msgstr "Макс. розмір"
msgid "Maximum size of the ruler"
msgstr "Максимальний розмір лінійки"
-#: ../src/widgets/select-toolbar.cpp:268
+#: ../src/widgets/select-toolbar.cpp:260
msgid "Transform by toolbar"
msgstr "Трансформувати візерунки"
-#: ../src/widgets/select-toolbar.cpp:347
+#: ../src/widgets/select-toolbar.cpp:339
msgid "Now <b>stroke width</b> is <b>scaled</b> when objects are scaled."
msgstr ""
"Тепер <b>товщина штриха</b> <b>масштабується</b> під час зміни масштабу "
"об'єктів."
-#: ../src/widgets/select-toolbar.cpp:349
+#: ../src/widgets/select-toolbar.cpp:341
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:360
+#: ../src/widgets/select-toolbar.cpp:352
msgid ""
"Now <b>rounded rectangle corners</b> are <b>scaled</b> when rectangles are "
"scaled."
@@ -28719,7 +28307,7 @@ msgstr ""
"Тепер <b>закруглені кути прямокутника</b> <b>змінюватимуть масштаб</b> під "
"час зміни масштабу прямокутника."
-#: ../src/widgets/select-toolbar.cpp:362
+#: ../src/widgets/select-toolbar.cpp:354
msgid ""
"Now <b>rounded rectangle corners</b> are <b>not scaled</b> when rectangles "
"are scaled."
@@ -28727,7 +28315,7 @@ msgstr ""
"Тепер <b>закруглені кути прямокутника</b> <b>не змінюватимуть масштаб</b> "
"під час зміни масштабу прямокутника."
-#: ../src/widgets/select-toolbar.cpp:373
+#: ../src/widgets/select-toolbar.cpp:365
msgid ""
"Now <b>gradients</b> are <b>transformed</b> along with their objects when "
"those are transformed (moved, scaled, rotated, or skewed)."
@@ -28736,7 +28324,7 @@ msgstr ""
"коли вони перетворюватимуться (переміщуватимуться, змінюватимуть масштаб, "
"повертатимуться або нахилятимуться)."
-#: ../src/widgets/select-toolbar.cpp:375
+#: ../src/widgets/select-toolbar.cpp:367
msgid ""
"Now <b>gradients</b> remain <b>fixed</b> when objects are transformed "
"(moved, scaled, rotated, or skewed)."
@@ -28744,7 +28332,7 @@ msgstr ""
"Тепер <b>закруглені кути прямокутника</b> <b>не змінюватимуться</b> під час "
"зміни масштабу прямокутника."
-#: ../src/widgets/select-toolbar.cpp:386
+#: ../src/widgets/select-toolbar.cpp:378
msgid ""
"Now <b>patterns</b> are <b>transformed</b> along with their objects when "
"those are transformed (moved, scaled, rotated, or skewed)."
@@ -28753,7 +28341,7 @@ msgstr ""
"коли вони перетворюватимуться (переміщуватимуться, змінюватимуть масштаб, "
"повертатимуться або нахилятимуться)."
-#: ../src/widgets/select-toolbar.cpp:388
+#: ../src/widgets/select-toolbar.cpp:380
msgid ""
"Now <b>patterns</b> remain <b>fixed</b> when objects are transformed (moved, "
"scaled, rotated, or skewed)."
@@ -28763,79 +28351,79 @@ msgstr ""
"повертатимуться або нахилятимуться)."
#. four spinbuttons
-#: ../src/widgets/select-toolbar.cpp:506
+#: ../src/widgets/select-toolbar.cpp:498
msgctxt "Select toolbar"
msgid "X position"
msgstr "Розташування за X"
-#: ../src/widgets/select-toolbar.cpp:506
+#: ../src/widgets/select-toolbar.cpp:498
msgctxt "Select toolbar"
msgid "X:"
msgstr "X:"
-#: ../src/widgets/select-toolbar.cpp:508
+#: ../src/widgets/select-toolbar.cpp:500
msgid "Horizontal coordinate of selection"
msgstr "Горизонтальна координата позначення"
-#: ../src/widgets/select-toolbar.cpp:512
+#: ../src/widgets/select-toolbar.cpp:504
msgctxt "Select toolbar"
msgid "Y position"
msgstr "Розташування за Y"
-#: ../src/widgets/select-toolbar.cpp:512
+#: ../src/widgets/select-toolbar.cpp:504
msgctxt "Select toolbar"
msgid "Y:"
msgstr "Y:"
-#: ../src/widgets/select-toolbar.cpp:514
+#: ../src/widgets/select-toolbar.cpp:506
msgid "Vertical coordinate of selection"
msgstr "Вертикальна координата позначення"
-#: ../src/widgets/select-toolbar.cpp:518
+#: ../src/widgets/select-toolbar.cpp:510
msgctxt "Select toolbar"
msgid "Width"
msgstr "Ширина"
-#: ../src/widgets/select-toolbar.cpp:518
+#: ../src/widgets/select-toolbar.cpp:510
msgctxt "Select toolbar"
msgid "W:"
msgstr "Ш:"
-#: ../src/widgets/select-toolbar.cpp:520
+#: ../src/widgets/select-toolbar.cpp:512
msgid "Width of selection"
msgstr "Ширина позначення"
-#: ../src/widgets/select-toolbar.cpp:527
+#: ../src/widgets/select-toolbar.cpp:519
msgid "Lock width and height"
msgstr "Заблокувати ширину і висоту"
-#: ../src/widgets/select-toolbar.cpp:528
+#: ../src/widgets/select-toolbar.cpp:520
msgid "When locked, change both width and height by the same proportion"
msgstr "Коли заблоковано, пропорційно змінювати ширину та висоту"
-#: ../src/widgets/select-toolbar.cpp:537
+#: ../src/widgets/select-toolbar.cpp:529
msgctxt "Select toolbar"
msgid "Height"
msgstr "Висота"
-#: ../src/widgets/select-toolbar.cpp:537
+#: ../src/widgets/select-toolbar.cpp:529
msgctxt "Select toolbar"
msgid "H:"
msgstr "В:"
-#: ../src/widgets/select-toolbar.cpp:539
+#: ../src/widgets/select-toolbar.cpp:531
msgid "Height of selection"
msgstr "Висота позначення"
-#: ../src/widgets/select-toolbar.cpp:589
+#: ../src/widgets/select-toolbar.cpp:581
msgid "Scale rounded corners"
msgstr "Змінити розмір округлених кутів"
-#: ../src/widgets/select-toolbar.cpp:600
+#: ../src/widgets/select-toolbar.cpp:592
msgid "Move gradients"
msgstr "Перемістити градієнти"
-#: ../src/widgets/select-toolbar.cpp:611
+#: ../src/widgets/select-toolbar.cpp:603
msgid "Move patterns"
msgstr "Перемістити текстури"
@@ -28979,91 +28567,99 @@ msgstr "CMYK"
msgid "Unnamed"
msgstr "Без назви"
-#: ../src/widgets/spiral-toolbar.cpp:111
+#: ../src/widgets/sp-xmlview-attr-list.cpp:64
+msgid "Value"
+msgstr "Значення"
+
+#: ../src/widgets/sp-xmlview-content.cpp:179
+msgid "Type text in a text node"
+msgstr "Надрукувати текст у текстовому вузлі"
+
+#: ../src/widgets/spiral-toolbar.cpp:100
msgid "Change spiral"
msgstr "Змінити спіраль"
-#: ../src/widgets/spiral-toolbar.cpp:257
+#: ../src/widgets/spiral-toolbar.cpp:246
msgid "just a curve"
msgstr "просто крива"
-#: ../src/widgets/spiral-toolbar.cpp:257
+#: ../src/widgets/spiral-toolbar.cpp:246
msgid "one full revolution"
msgstr "один повний оберт"
-#: ../src/widgets/spiral-toolbar.cpp:260
+#: ../src/widgets/spiral-toolbar.cpp:249
msgid "Number of turns"
msgstr "Кількість витків"
-#: ../src/widgets/spiral-toolbar.cpp:260
+#: ../src/widgets/spiral-toolbar.cpp:249
msgid "Turns:"
msgstr "Витків:"
-#: ../src/widgets/spiral-toolbar.cpp:260
+#: ../src/widgets/spiral-toolbar.cpp:249
msgid "Number of revolutions"
msgstr "Кількість витків"
-#: ../src/widgets/spiral-toolbar.cpp:271
+#: ../src/widgets/spiral-toolbar.cpp:260
msgid "circle"
msgstr "коло"
-#: ../src/widgets/spiral-toolbar.cpp:271
+#: ../src/widgets/spiral-toolbar.cpp:260
msgid "edge is much denser"
msgstr "біля краю набагато частіше"
-#: ../src/widgets/spiral-toolbar.cpp:271
+#: ../src/widgets/spiral-toolbar.cpp:260
msgid "edge is denser"
msgstr "біля краю частіше"
-#: ../src/widgets/spiral-toolbar.cpp:271
+#: ../src/widgets/spiral-toolbar.cpp:260
msgid "even"
msgstr "рівна спіраль"
-#: ../src/widgets/spiral-toolbar.cpp:271
+#: ../src/widgets/spiral-toolbar.cpp:260
msgid "center is denser"
msgstr "біля центру частіше"
-#: ../src/widgets/spiral-toolbar.cpp:271
+#: ../src/widgets/spiral-toolbar.cpp:260
msgid "center is much denser"
msgstr "біля центру набагато частіше"
-#: ../src/widgets/spiral-toolbar.cpp:274
+#: ../src/widgets/spiral-toolbar.cpp:263
msgid "Divergence"
msgstr "Розходження"
-#: ../src/widgets/spiral-toolbar.cpp:274
+#: ../src/widgets/spiral-toolbar.cpp:263
msgid "Divergence:"
msgstr "Розходження:"
-#: ../src/widgets/spiral-toolbar.cpp:274
+#: ../src/widgets/spiral-toolbar.cpp:263
msgid "How much denser/sparser are outer revolutions; 1 = uniform"
msgstr "Ступінь збільшення/зменшення відстані між витками; 1 = рівномірно"
-#: ../src/widgets/spiral-toolbar.cpp:285
+#: ../src/widgets/spiral-toolbar.cpp:274
msgid "starts from center"
msgstr "почати від центру"
-#: ../src/widgets/spiral-toolbar.cpp:285
+#: ../src/widgets/spiral-toolbar.cpp:274
msgid "starts mid-way"
msgstr "почати на півдорозі"
-#: ../src/widgets/spiral-toolbar.cpp:285
+#: ../src/widgets/spiral-toolbar.cpp:274
msgid "starts near edge"
msgstr "почати поряд з краєм"
-#: ../src/widgets/spiral-toolbar.cpp:288
+#: ../src/widgets/spiral-toolbar.cpp:277
msgid "Inner radius"
msgstr "Внутрішній радіус"
-#: ../src/widgets/spiral-toolbar.cpp:288
+#: ../src/widgets/spiral-toolbar.cpp:277
msgid "Inner radius:"
msgstr "Внутрішній радіус:"
-#: ../src/widgets/spiral-toolbar.cpp:288
+#: ../src/widgets/spiral-toolbar.cpp:277
msgid "Radius of the innermost revolution (relative to the spiral size)"
msgstr "Радіус першого внутрішнього витка (відносно розміру спіралі)"
-#: ../src/widgets/spiral-toolbar.cpp:301 ../src/widgets/star-toolbar.cpp:573
+#: ../src/widgets/spiral-toolbar.cpp:290 ../src/widgets/star-toolbar.cpp:565
msgid ""
"Reset shape parameters to defaults (use Inkscape Preferences > Tools to "
"change defaults)"
@@ -29072,116 +28668,116 @@ msgstr ""
"Параметри Inkscape->Інструменти)"
#. Width
-#: ../src/widgets/spray-toolbar.cpp:125
+#: ../src/widgets/spray-toolbar.cpp:113
msgid "(narrow spray)"
msgstr "(вузьке розкидання)"
-#: ../src/widgets/spray-toolbar.cpp:125
+#: ../src/widgets/spray-toolbar.cpp:113
msgid "(broad spray)"
msgstr "(широке розкидання)"
-#: ../src/widgets/spray-toolbar.cpp:128
+#: ../src/widgets/spray-toolbar.cpp:116
msgid "The width of the spray area (relative to the visible canvas area)"
msgstr "Ширина області розкидання (відносно видимої області полотна)"
-#: ../src/widgets/spray-toolbar.cpp:141
+#: ../src/widgets/spray-toolbar.cpp:129
msgid "(maximum mean)"
msgstr "(максимальне середнє)"
-#: ../src/widgets/spray-toolbar.cpp:144
+#: ../src/widgets/spray-toolbar.cpp:132
msgid "Focus"
msgstr "Фокусування"
-#: ../src/widgets/spray-toolbar.cpp:144
+#: ../src/widgets/spray-toolbar.cpp:132
msgid "Focus:"
msgstr "Фокусування:"
-#: ../src/widgets/spray-toolbar.cpp:144
+#: ../src/widgets/spray-toolbar.cpp:132
msgid "0 to spray a spot; increase to enlarge the ring radius"
msgstr ""
"0 призведе до малювання п'ятна. Збільшення значення збільшить радіус кільця."
#. Standard_deviation
-#: ../src/widgets/spray-toolbar.cpp:157
+#: ../src/widgets/spray-toolbar.cpp:145
msgid "(minimum scatter)"
msgstr "(мінімальне розсіювання)"
-#: ../src/widgets/spray-toolbar.cpp:157
+#: ../src/widgets/spray-toolbar.cpp:145
msgid "(maximum scatter)"
msgstr "(максимальне розсіювання)"
-#: ../src/widgets/spray-toolbar.cpp:160
+#: ../src/widgets/spray-toolbar.cpp:148
msgctxt "Spray tool"
msgid "Scatter"
msgstr "Розсіювання"
-#: ../src/widgets/spray-toolbar.cpp:160
+#: ../src/widgets/spray-toolbar.cpp:148
msgctxt "Spray tool"
msgid "Scatter:"
msgstr "Розсіювання:"
-#: ../src/widgets/spray-toolbar.cpp:160
+#: ../src/widgets/spray-toolbar.cpp:148
msgid "Increase to scatter sprayed objects"
msgstr "Збільшити розсіювання розкиданих об'єктів"
-#: ../src/widgets/spray-toolbar.cpp:179
+#: ../src/widgets/spray-toolbar.cpp:167
msgid "Spray copies of the initial selection"
msgstr "Розкидати копії початкової позначеної області"
-#: ../src/widgets/spray-toolbar.cpp:186
+#: ../src/widgets/spray-toolbar.cpp:174
msgid "Spray clones of the initial selection"
msgstr "Розкидати клони початкової позначеної області"
-#: ../src/widgets/spray-toolbar.cpp:192
+#: ../src/widgets/spray-toolbar.cpp:180
msgid "Spray single path"
msgstr "Розкидати окремий контур"
-#: ../src/widgets/spray-toolbar.cpp:193
+#: ../src/widgets/spray-toolbar.cpp:181
msgid "Spray objects in a single path"
msgstr "Розкидати об'єкти за окремим контуром"
-#: ../src/widgets/spray-toolbar.cpp:197 ../src/widgets/tweak-toolbar.cpp:267
+#: ../src/widgets/spray-toolbar.cpp:185 ../src/widgets/tweak-toolbar.cpp:253
msgid "Mode"
msgstr "Режим"
#. Population
-#: ../src/widgets/spray-toolbar.cpp:217
+#: ../src/widgets/spray-toolbar.cpp:205
msgid "(low population)"
msgstr "(низька щільність)"
-#: ../src/widgets/spray-toolbar.cpp:217
+#: ../src/widgets/spray-toolbar.cpp:205
msgid "(high population)"
msgstr "(висока щільність)"
-#: ../src/widgets/spray-toolbar.cpp:220
+#: ../src/widgets/spray-toolbar.cpp:208
msgid "Amount"
msgstr "Величина"
-#: ../src/widgets/spray-toolbar.cpp:221
+#: ../src/widgets/spray-toolbar.cpp:209
msgid "Adjusts the number of items sprayed per click"
msgstr ""
"За допомогою цього параметра можна вказати кількість об'єктів, які буде "
"розкидано за одне клацання"
-#: ../src/widgets/spray-toolbar.cpp:237
+#: ../src/widgets/spray-toolbar.cpp:225
msgid ""
"Use the pressure of the input device to alter the amount of sprayed objects"
msgstr ""
"Використовувати силу натиску пристрою введення для зміни кількості об'єктів"
-#: ../src/widgets/spray-toolbar.cpp:247
+#: ../src/widgets/spray-toolbar.cpp:235
msgid "(high rotation variation)"
msgstr "(значне відхилення обертання)"
-#: ../src/widgets/spray-toolbar.cpp:250
+#: ../src/widgets/spray-toolbar.cpp:238
msgid "Rotation"
msgstr "Обертання"
-#: ../src/widgets/spray-toolbar.cpp:250
+#: ../src/widgets/spray-toolbar.cpp:238
msgid "Rotation:"
msgstr "Обертання:"
-#: ../src/widgets/spray-toolbar.cpp:252
+#: ../src/widgets/spray-toolbar.cpp:240
#, no-c-format
msgid ""
"Variation of the rotation of the sprayed objects; 0% for the same rotation "
@@ -29190,21 +28786,21 @@ msgstr ""
"Припустиме відхилення у куті повороту розкиданих об'єктів. Значення 0% "
"призведе до рівності цього кута куту повороту початкового об'єкта."
-#: ../src/widgets/spray-toolbar.cpp:265
+#: ../src/widgets/spray-toolbar.cpp:253
msgid "(high scale variation)"
msgstr "(значне відхилення масштабу)"
-#: ../src/widgets/spray-toolbar.cpp:268
+#: ../src/widgets/spray-toolbar.cpp:256
msgctxt "Spray tool"
msgid "Scale"
msgstr "Масштабувати"
-#: ../src/widgets/spray-toolbar.cpp:268
+#: ../src/widgets/spray-toolbar.cpp:256
msgctxt "Spray tool"
msgid "Scale:"
msgstr "Масштаб:"
-#: ../src/widgets/spray-toolbar.cpp:270
+#: ../src/widgets/spray-toolbar.cpp:258
#, no-c-format
msgid ""
"Variation in the scale of the sprayed objects; 0% for the same scale than "
@@ -29213,189 +28809,181 @@ msgstr ""
"Припустиме відхилення у масштабі розкиданих об'єктів. Значення 0% призведе "
"до рівності цього масштабу масштабу початкового об'єкта."
-#: ../src/widgets/sp-xmlview-attr-list.cpp:64
-msgid "Value"
-msgstr "Значення"
-
-#: ../src/widgets/sp-xmlview-content.cpp:179
-msgid "Type text in a text node"
-msgstr "Надрукувати текст у текстовому вузлі"
-
-#: ../src/widgets/star-toolbar.cpp:110
+#: ../src/widgets/star-toolbar.cpp:102
msgid "Star: Change number of corners"
msgstr "Зірка: Зміна кількості кутів"
-#: ../src/widgets/star-toolbar.cpp:163
+#: ../src/widgets/star-toolbar.cpp:155
msgid "Star: Change spoke ratio"
msgstr "Зірка: Зміна відношення радіусів"
-#: ../src/widgets/star-toolbar.cpp:208
+#: ../src/widgets/star-toolbar.cpp:200
msgid "Make polygon"
msgstr "Перетворення на багатокутник"
-#: ../src/widgets/star-toolbar.cpp:208
+#: ../src/widgets/star-toolbar.cpp:200
msgid "Make star"
msgstr "Створення зірки"
-#: ../src/widgets/star-toolbar.cpp:247
+#: ../src/widgets/star-toolbar.cpp:239
msgid "Star: Change rounding"
msgstr "Зірка: Зміна заокруглення"
-#: ../src/widgets/star-toolbar.cpp:287
+#: ../src/widgets/star-toolbar.cpp:279
msgid "Star: Change randomization"
msgstr "Зірка: Зміна випадковості викривлення"
-#: ../src/widgets/star-toolbar.cpp:471
+#: ../src/widgets/star-toolbar.cpp:463
msgid "Regular polygon (with one handle) instead of a star"
msgstr "Правильний багатокутник, а не зірка"
-#: ../src/widgets/star-toolbar.cpp:478
+#: ../src/widgets/star-toolbar.cpp:470
msgid "Star instead of a regular polygon (with one handle)"
msgstr "Зірка замість звичайного багатокутника (з одним вусом)"
-#: ../src/widgets/star-toolbar.cpp:499
+#: ../src/widgets/star-toolbar.cpp:491
msgid "triangle/tri-star"
msgstr "трикутник/зірка з 3 променями"
-#: ../src/widgets/star-toolbar.cpp:499
+#: ../src/widgets/star-toolbar.cpp:491
msgid "square/quad-star"
msgstr "квадрат/зірка з 4 променями"
-#: ../src/widgets/star-toolbar.cpp:499
+#: ../src/widgets/star-toolbar.cpp:491
msgid "pentagon/five-pointed star"
msgstr "п'ятикутник/зірка з 5 променями"
-#: ../src/widgets/star-toolbar.cpp:499
+#: ../src/widgets/star-toolbar.cpp:491
msgid "hexagon/six-pointed star"
msgstr "шестикутник/зірка з 6 променями"
-#: ../src/widgets/star-toolbar.cpp:502
+#: ../src/widgets/star-toolbar.cpp:494
msgid "Corners"
msgstr "Кути"
-#: ../src/widgets/star-toolbar.cpp:502
+#: ../src/widgets/star-toolbar.cpp:494
msgid "Corners:"
msgstr "Кути:"
-#: ../src/widgets/star-toolbar.cpp:502
+#: ../src/widgets/star-toolbar.cpp:494
msgid "Number of corners of a polygon or star"
msgstr "Кількість кутів багатокутника чи зірки"
-#: ../src/widgets/star-toolbar.cpp:515
+#: ../src/widgets/star-toolbar.cpp:507
msgid "thin-ray star"
msgstr "зірка з тонкими променями"
-#: ../src/widgets/star-toolbar.cpp:515
+#: ../src/widgets/star-toolbar.cpp:507
msgid "pentagram"
msgstr "пентаграма"
-#: ../src/widgets/star-toolbar.cpp:515
+#: ../src/widgets/star-toolbar.cpp:507
msgid "hexagram"
msgstr "гексаграма"
-#: ../src/widgets/star-toolbar.cpp:515
+#: ../src/widgets/star-toolbar.cpp:507
msgid "heptagram"
msgstr "гептаграма"
-#: ../src/widgets/star-toolbar.cpp:515
+#: ../src/widgets/star-toolbar.cpp:507
msgid "octagram"
msgstr "октаграма"
-#: ../src/widgets/star-toolbar.cpp:515
+#: ../src/widgets/star-toolbar.cpp:507
msgid "regular polygon"
msgstr "звичайний багатокутник"
-#: ../src/widgets/star-toolbar.cpp:518
+#: ../src/widgets/star-toolbar.cpp:510
msgid "Spoke ratio"
msgstr "Відношення радіусів"
-#: ../src/widgets/star-toolbar.cpp:518
+#: ../src/widgets/star-toolbar.cpp:510
msgid "Spoke ratio:"
msgstr "Відношення радіусів:"
#. TRANSLATORS: Tip radius of a star is the distance from the center to the farthest handle.
#. Base radius is the same for the closest handle.
-#: ../src/widgets/star-toolbar.cpp:521
+#: ../src/widgets/star-toolbar.cpp:513
msgid "Base radius to tip radius ratio"
msgstr "Відношення радіусів основи та вершини променя"
-#: ../src/widgets/star-toolbar.cpp:539
+#: ../src/widgets/star-toolbar.cpp:531
msgid "stretched"
msgstr "розтягнений"
-#: ../src/widgets/star-toolbar.cpp:539
+#: ../src/widgets/star-toolbar.cpp:531
msgid "twisted"
msgstr "перекручений"
-#: ../src/widgets/star-toolbar.cpp:539
+#: ../src/widgets/star-toolbar.cpp:531
msgid "slightly pinched"
msgstr "трохи затиснутий"
-#: ../src/widgets/star-toolbar.cpp:539
+#: ../src/widgets/star-toolbar.cpp:531
msgid "NOT rounded"
msgstr "НЕ округлений"
-#: ../src/widgets/star-toolbar.cpp:539
+#: ../src/widgets/star-toolbar.cpp:531
msgid "slightly rounded"
msgstr "трохи округлений"
-#: ../src/widgets/star-toolbar.cpp:539
+#: ../src/widgets/star-toolbar.cpp:531
msgid "visibly rounded"
msgstr "помітно округлений"
-#: ../src/widgets/star-toolbar.cpp:539
+#: ../src/widgets/star-toolbar.cpp:531
msgid "well rounded"
msgstr "значно округлений"
-#: ../src/widgets/star-toolbar.cpp:539
+#: ../src/widgets/star-toolbar.cpp:531
msgid "amply rounded"
msgstr "дуже округлений"
-#: ../src/widgets/star-toolbar.cpp:539 ../src/widgets/star-toolbar.cpp:554
+#: ../src/widgets/star-toolbar.cpp:531 ../src/widgets/star-toolbar.cpp:546
msgid "blown up"
msgstr "надутий"
-#: ../src/widgets/star-toolbar.cpp:542
+#: ../src/widgets/star-toolbar.cpp:534
msgid "Rounded:"
msgstr "Округленість:"
-#: ../src/widgets/star-toolbar.cpp:542
+#: ../src/widgets/star-toolbar.cpp:534
msgid "How much rounded are the corners (0 for sharp)"
msgstr "Наскільки згладжені кути (0 — гострі)"
-#: ../src/widgets/star-toolbar.cpp:554
+#: ../src/widgets/star-toolbar.cpp:546
msgid "NOT randomized"
msgstr "БЕЗ випадковості"
-#: ../src/widgets/star-toolbar.cpp:554
+#: ../src/widgets/star-toolbar.cpp:546
msgid "slightly irregular"
msgstr "трохи неправильно"
-#: ../src/widgets/star-toolbar.cpp:554
+#: ../src/widgets/star-toolbar.cpp:546
msgid "visibly randomized"
msgstr "помітно випадково"
-#: ../src/widgets/star-toolbar.cpp:554
+#: ../src/widgets/star-toolbar.cpp:546
msgid "strongly randomized"
msgstr "дуже випадково"
-#: ../src/widgets/star-toolbar.cpp:557
+#: ../src/widgets/star-toolbar.cpp:549
msgid "Randomized"
msgstr "Випадково"
-#: ../src/widgets/star-toolbar.cpp:557
+#: ../src/widgets/star-toolbar.cpp:549
msgid "Randomized:"
msgstr "Викривлено:"
-#: ../src/widgets/star-toolbar.cpp:557
+#: ../src/widgets/star-toolbar.cpp:549
msgid "Scatter randomly the corners and angles"
msgstr "Випадковим чином перемістити кути та повернути радіуси"
-#: ../src/widgets/stroke-style.cpp:191
+#: ../src/widgets/stroke-style.cpp:192
msgid "Stroke width"
msgstr "Товщина штриха"
-#: ../src/widgets/stroke-style.cpp:193
+#: ../src/widgets/stroke-style.cpp:194
msgctxt "Stroke width"
msgid "_Width:"
msgstr "_Ширина:"
@@ -29403,70 +28991,70 @@ msgstr "_Ширина:"
#. TRANSLATORS: Miter join: joining lines with a sharp (pointed) corner.
#. For an example, draw a triangle with a large stroke width and modify the
#. "Join" option (in the Fill and Stroke dialog).
-#: ../src/widgets/stroke-style.cpp:238
+#: ../src/widgets/stroke-style.cpp:239
msgid "Miter join"
msgstr "Гостре"
#. TRANSLATORS: Round join: joining lines with a rounded corner.
#. For an example, draw a triangle with a large stroke width and modify the
#. "Join" option (in the Fill and Stroke dialog).
-#: ../src/widgets/stroke-style.cpp:246
+#: ../src/widgets/stroke-style.cpp:247
msgid "Round join"
msgstr "Округлене"
#. TRANSLATORS: Bevel join: joining lines with a blunted (flattened) corner.
#. For an example, draw a triangle with a large stroke width and modify the
#. "Join" option (in the Fill and Stroke dialog).
-#: ../src/widgets/stroke-style.cpp:254
+#: ../src/widgets/stroke-style.cpp:255
msgid "Bevel join"
msgstr "Фасочне"
-#: ../src/widgets/stroke-style.cpp:279
+#: ../src/widgets/stroke-style.cpp:280
msgid "Miter _limit:"
msgstr "Ме_жа вістря:"
#. Cap type
#. TRANSLATORS: cap type specifies the shape for the ends of lines
#. spw_label(t, _("_Cap:"), 0, i);
-#: ../src/widgets/stroke-style.cpp:295
+#: ../src/widgets/stroke-style.cpp:296
msgid "Cap:"
msgstr "Закінчення:"
#. TRANSLATORS: Butt cap: the line shape does not extend beyond the end point
#. of the line; the ends of the line are square
-#: ../src/widgets/stroke-style.cpp:306
+#: ../src/widgets/stroke-style.cpp:307
msgid "Butt cap"
msgstr "Плоскі"
#. TRANSLATORS: Round cap: the line shape extends beyond the end point of the
#. line; the ends of the line are rounded
-#: ../src/widgets/stroke-style.cpp:313
+#: ../src/widgets/stroke-style.cpp:314
msgid "Round cap"
msgstr "Округлені"
#. TRANSLATORS: Square cap: the line shape extends beyond the end point of the
#. line; the ends of the line are square
-#: ../src/widgets/stroke-style.cpp:320
+#: ../src/widgets/stroke-style.cpp:321
msgid "Square cap"
msgstr "Квадратні"
#. Dash
-#: ../src/widgets/stroke-style.cpp:325
+#: ../src/widgets/stroke-style.cpp:326
msgid "Dashes:"
msgstr "Пунктир:"
#. Drop down marker selectors
#. TRANSLATORS: Path markers are an SVG feature that allows you to attach arbitrary shapes
#. (arrowheads, bullets, faces, whatever) to the start, end, or middle nodes of a path.
-#: ../src/widgets/stroke-style.cpp:351
+#: ../src/widgets/stroke-style.cpp:352
msgid "Markers:"
msgstr "Маркери:"
-#: ../src/widgets/stroke-style.cpp:357
+#: ../src/widgets/stroke-style.cpp:358
msgid "Start Markers are drawn on the first node of a path or shape"
msgstr "Початкові маркери малюються на першому вузлі контуру або форми"
-#: ../src/widgets/stroke-style.cpp:366
+#: ../src/widgets/stroke-style.cpp:367
msgid ""
"Mid Markers are drawn on every node of a path or shape except the first and "
"last nodes"
@@ -29474,19 +29062,19 @@ msgstr ""
"Серединні маркери малюються на кожному вузлі контуру або форми окрім першого "
"і останнього вузлів"
-#: ../src/widgets/stroke-style.cpp:375
+#: ../src/widgets/stroke-style.cpp:376
msgid "End Markers are drawn on the last node of a path or shape"
msgstr "Кінцеві маркери малюються на останньому вузлі контуру або форми"
-#: ../src/widgets/stroke-style.cpp:493
+#: ../src/widgets/stroke-style.cpp:494
msgid "Set markers"
msgstr "Встановити маркери"
-#: ../src/widgets/stroke-style.cpp:1022 ../src/widgets/stroke-style.cpp:1107
+#: ../src/widgets/stroke-style.cpp:1024 ../src/widgets/stroke-style.cpp:1109
msgid "Set stroke style"
msgstr "Встановлення стилю штриха"
-#: ../src/widgets/stroke-style.cpp:1195
+#: ../src/widgets/stroke-style.cpp:1197
msgid "Set marker color"
msgstr "Встановити колір маркера"
@@ -29494,238 +29082,238 @@ msgstr "Встановити колір маркера"
msgid "Change swatch color"
msgstr "Змінити колір зразка"
-#: ../src/widgets/text-toolbar.cpp:174
+#: ../src/widgets/text-toolbar.cpp:168
msgid "Text: Change font family"
msgstr "Текст: Зміна сімейства шрифту"
-#: ../src/widgets/text-toolbar.cpp:238
+#: ../src/widgets/text-toolbar.cpp:232
msgid "Text: Change font size"
msgstr "Текст: Зміна розміру шрифту"
-#: ../src/widgets/text-toolbar.cpp:276
+#: ../src/widgets/text-toolbar.cpp:270
msgid "Text: Change font style"
msgstr "Текст: Зміна нарису шрифту"
-#: ../src/widgets/text-toolbar.cpp:354
+#: ../src/widgets/text-toolbar.cpp:348
msgid "Text: Change superscript or subscript"
msgstr "Текст: змінити на верхній або нижній індекс"
-#: ../src/widgets/text-toolbar.cpp:499
+#: ../src/widgets/text-toolbar.cpp:493
msgid "Text: Change alignment"
msgstr "Текст: Зміна вирівнювання"
-#: ../src/widgets/text-toolbar.cpp:542
+#: ../src/widgets/text-toolbar.cpp:536
msgid "Text: Change line-height"
msgstr "Текст: Зміна висоти рядків"
-#: ../src/widgets/text-toolbar.cpp:591
+#: ../src/widgets/text-toolbar.cpp:585
msgid "Text: Change word-spacing"
msgstr "Текст: Зміна інтервалів між словами"
-#: ../src/widgets/text-toolbar.cpp:632
+#: ../src/widgets/text-toolbar.cpp:626
msgid "Text: Change letter-spacing"
msgstr "Текст: Зміна інтервалів між літерами"
-#: ../src/widgets/text-toolbar.cpp:672
+#: ../src/widgets/text-toolbar.cpp:666
msgid "Text: Change dx (kern)"
msgstr "Текст: Зміна приросту за x (керна)"
-#: ../src/widgets/text-toolbar.cpp:706
+#: ../src/widgets/text-toolbar.cpp:700
msgid "Text: Change dy"
msgstr "Текст: Зміна приросту за y"
-#: ../src/widgets/text-toolbar.cpp:741
+#: ../src/widgets/text-toolbar.cpp:735
msgid "Text: Change rotate"
msgstr "Текст: Зміна кута обертання"
-#: ../src/widgets/text-toolbar.cpp:789
+#: ../src/widgets/text-toolbar.cpp:783
msgid "Text: Change orientation"
msgstr "Текст: Зміна орієнтації"
-#: ../src/widgets/text-toolbar.cpp:1226
+#: ../src/widgets/text-toolbar.cpp:1219
msgid "Font Family"
msgstr "Гарнітура шрифту"
-#: ../src/widgets/text-toolbar.cpp:1227
+#: ../src/widgets/text-toolbar.cpp:1220
msgid "Select Font Family (Alt-X to access)"
msgstr "Виберіть гарнітуру шрифту (Alt-X для доступу)"
#. Focus widget
#. Enable entry completion
-#: ../src/widgets/text-toolbar.cpp:1237
+#: ../src/widgets/text-toolbar.cpp:1230
msgid "Select all text with this font-family"
msgstr "Позначити всі фрагменти тексту з цією гарнітурою шрифту"
-#: ../src/widgets/text-toolbar.cpp:1241
+#: ../src/widgets/text-toolbar.cpp:1234
msgid "Font not found on system"
msgstr "Шрифту у системі не виявлено"
-#: ../src/widgets/text-toolbar.cpp:1300
+#: ../src/widgets/text-toolbar.cpp:1293
msgid "Font Style"
msgstr "Стиль шрифту"
-#: ../src/widgets/text-toolbar.cpp:1301
+#: ../src/widgets/text-toolbar.cpp:1294
msgid "Font style"
msgstr "Стиль шрифту"
#. Name
-#: ../src/widgets/text-toolbar.cpp:1318
+#: ../src/widgets/text-toolbar.cpp:1311
msgid "Toggle Superscript"
msgstr "Увімкнути/Вимкнути режим верхнього індексу"
#. Label
-#: ../src/widgets/text-toolbar.cpp:1319
+#: ../src/widgets/text-toolbar.cpp:1312
msgid "Toggle superscript"
msgstr "Увімкнути/Вимкнути режим верхнього індексу"
#. Name
-#: ../src/widgets/text-toolbar.cpp:1331
+#: ../src/widgets/text-toolbar.cpp:1324
msgid "Toggle Subscript"
msgstr "Увімкнути/Вимкнути режим нижнього індексу"
#. Label
-#: ../src/widgets/text-toolbar.cpp:1332
+#: ../src/widgets/text-toolbar.cpp:1325
msgid "Toggle subscript"
msgstr "Увімкнути/Вимкнути режим нижнього індексу"
-#: ../src/widgets/text-toolbar.cpp:1373
+#: ../src/widgets/text-toolbar.cpp:1366
msgid "Justify"
msgstr "Вирівняти з заповненням"
#. Name
-#: ../src/widgets/text-toolbar.cpp:1380
+#: ../src/widgets/text-toolbar.cpp:1373
msgid "Alignment"
msgstr "Вирівнювання"
#. Label
-#: ../src/widgets/text-toolbar.cpp:1381
+#: ../src/widgets/text-toolbar.cpp:1374
msgid "Text alignment"
msgstr "Вирівнювання тексту"
-#: ../src/widgets/text-toolbar.cpp:1408
+#: ../src/widgets/text-toolbar.cpp:1401
msgid "Horizontal"
msgstr "Горизонтально"
-#: ../src/widgets/text-toolbar.cpp:1415
+#: ../src/widgets/text-toolbar.cpp:1408
msgid "Vertical"
msgstr "Вертикально"
#. Label
-#: ../src/widgets/text-toolbar.cpp:1422
+#: ../src/widgets/text-toolbar.cpp:1415
msgid "Text orientation"
msgstr "Орієнтація тексту"
#. Drop down menu
-#: ../src/widgets/text-toolbar.cpp:1445
+#: ../src/widgets/text-toolbar.cpp:1438
msgid "Smaller spacing"
msgstr "Менший інтервал"
-#: ../src/widgets/text-toolbar.cpp:1445 ../src/widgets/text-toolbar.cpp:1476
-#: ../src/widgets/text-toolbar.cpp:1507
+#: ../src/widgets/text-toolbar.cpp:1438 ../src/widgets/text-toolbar.cpp:1469
+#: ../src/widgets/text-toolbar.cpp:1500
msgctxt "Text tool"
msgid "Normal"
msgstr "Звичайний"
-#: ../src/widgets/text-toolbar.cpp:1445
+#: ../src/widgets/text-toolbar.cpp:1438
msgid "Larger spacing"
msgstr "Більший інтервал"
#. name
-#: ../src/widgets/text-toolbar.cpp:1450
+#: ../src/widgets/text-toolbar.cpp:1443
msgid "Line Height"
msgstr "Висота рядка"
#. label
-#: ../src/widgets/text-toolbar.cpp:1451
+#: ../src/widgets/text-toolbar.cpp:1444
msgid "Line:"
msgstr "Рядок:"
#. short label
-#: ../src/widgets/text-toolbar.cpp:1452
+#: ../src/widgets/text-toolbar.cpp:1445
msgid "Spacing between lines (times font size)"
msgstr "Інтервал між рядками (у одиницях розміру шрифту)"
#. Drop down menu
-#: ../src/widgets/text-toolbar.cpp:1476 ../src/widgets/text-toolbar.cpp:1507
+#: ../src/widgets/text-toolbar.cpp:1469 ../src/widgets/text-toolbar.cpp:1500
msgid "Negative spacing"
msgstr "Від'ємний інтервал"
-#: ../src/widgets/text-toolbar.cpp:1476 ../src/widgets/text-toolbar.cpp:1507
+#: ../src/widgets/text-toolbar.cpp:1469 ../src/widgets/text-toolbar.cpp:1500
msgid "Positive spacing"
msgstr "Додатний інтервал"
#. name
-#: ../src/widgets/text-toolbar.cpp:1481
+#: ../src/widgets/text-toolbar.cpp:1474
msgid "Word spacing"
msgstr "Інтервал між словами"
#. label
-#: ../src/widgets/text-toolbar.cpp:1482
+#: ../src/widgets/text-toolbar.cpp:1475
msgid "Word:"
msgstr "Слово:"
#. short label
-#: ../src/widgets/text-toolbar.cpp:1483
+#: ../src/widgets/text-toolbar.cpp:1476
msgid "Spacing between words (px)"
msgstr "Інтервал між словами (у пікселях)"
#. name
-#: ../src/widgets/text-toolbar.cpp:1512
+#: ../src/widgets/text-toolbar.cpp:1505
msgid "Letter spacing"
msgstr "Інтервал між літерами"
#. label
-#: ../src/widgets/text-toolbar.cpp:1513
+#: ../src/widgets/text-toolbar.cpp:1506
msgid "Letter:"
msgstr "Літера:"
#. short label
-#: ../src/widgets/text-toolbar.cpp:1514
+#: ../src/widgets/text-toolbar.cpp:1507
msgid "Spacing between letters (px)"
msgstr "Інтервал між літерами (у пікселях)"
#. name
-#: ../src/widgets/text-toolbar.cpp:1543
+#: ../src/widgets/text-toolbar.cpp:1536
msgid "Kerning"
msgstr "Кернінґ"
#. label
-#: ../src/widgets/text-toolbar.cpp:1544
+#: ../src/widgets/text-toolbar.cpp:1537
msgid "Kern:"
msgstr "Керн:"
#. short label
-#: ../src/widgets/text-toolbar.cpp:1545
+#: ../src/widgets/text-toolbar.cpp:1538
msgid "Horizontal kerning (px)"
msgstr "Горизонтальний кернінґ (у пікселях)"
#. name
-#: ../src/widgets/text-toolbar.cpp:1574
+#: ../src/widgets/text-toolbar.cpp:1567
msgid "Vertical Shift"
msgstr "Вертикальний зсув"
#. label
-#: ../src/widgets/text-toolbar.cpp:1575
+#: ../src/widgets/text-toolbar.cpp:1568
msgid "Vert:"
msgstr "Верт.:"
#. short label
-#: ../src/widgets/text-toolbar.cpp:1576
+#: ../src/widgets/text-toolbar.cpp:1569
msgid "Vertical shift (px)"
msgstr "Вертикальний зсув (у пікселях)"
#. name
-#: ../src/widgets/text-toolbar.cpp:1605
+#: ../src/widgets/text-toolbar.cpp:1598
msgid "Letter rotation"
msgstr "Обертання літер"
#. label
-#: ../src/widgets/text-toolbar.cpp:1606
+#: ../src/widgets/text-toolbar.cpp:1599
msgid "Rot:"
msgstr "Обер.:"
#. short label
-#: ../src/widgets/text-toolbar.cpp:1607
+#: ../src/widgets/text-toolbar.cpp:1600
msgid "Character rotation (degrees)"
msgstr "Обертання символів (у градусах)"
@@ -29904,201 +29492,201 @@ msgid "Snap guides"
msgstr "Прилипання до напрямних"
#. Width
-#: ../src/widgets/tweak-toolbar.cpp:139
+#: ../src/widgets/tweak-toolbar.cpp:125
msgid "(pinch tweak)"
msgstr "(легка корекція)"
-#: ../src/widgets/tweak-toolbar.cpp:139
+#: ../src/widgets/tweak-toolbar.cpp:125
msgid "(broad tweak)"
msgstr "(широка корекція)"
-#: ../src/widgets/tweak-toolbar.cpp:142
+#: ../src/widgets/tweak-toolbar.cpp:128
msgid "The width of the tweak area (relative to the visible canvas area)"
msgstr "Ширина області корекції (відносно видимої області полотна)"
#. Force
-#: ../src/widgets/tweak-toolbar.cpp:156
+#: ../src/widgets/tweak-toolbar.cpp:142
msgid "(minimum force)"
msgstr "(максимальна сила)"
-#: ../src/widgets/tweak-toolbar.cpp:156
+#: ../src/widgets/tweak-toolbar.cpp:142
msgid "(maximum force)"
msgstr "(максимальна сила)"
-#: ../src/widgets/tweak-toolbar.cpp:159
+#: ../src/widgets/tweak-toolbar.cpp:145
msgid "Force"
msgstr "Сила"
-#: ../src/widgets/tweak-toolbar.cpp:159
+#: ../src/widgets/tweak-toolbar.cpp:145
msgid "Force:"
msgstr "Сила:"
-#: ../src/widgets/tweak-toolbar.cpp:159
+#: ../src/widgets/tweak-toolbar.cpp:145
msgid "The force of the tweak action"
msgstr "Сила дії інструмента корекції"
-#: ../src/widgets/tweak-toolbar.cpp:177
+#: ../src/widgets/tweak-toolbar.cpp:163
msgid "Move mode"
msgstr "Режим пересування"
-#: ../src/widgets/tweak-toolbar.cpp:178
+#: ../src/widgets/tweak-toolbar.cpp:164
msgid "Move objects in any direction"
msgstr "Пересунути об'єкти у довільному напрямку"
-#: ../src/widgets/tweak-toolbar.cpp:184
+#: ../src/widgets/tweak-toolbar.cpp:170
msgid "Move in/out mode"
msgstr "Режим пересування всередину/назовні"
-#: ../src/widgets/tweak-toolbar.cpp:185
+#: ../src/widgets/tweak-toolbar.cpp:171
msgid "Move objects towards cursor; with Shift from cursor"
msgstr "Пересунути об'єкти у напрямку вказівника; з Shift — від вказівника"
-#: ../src/widgets/tweak-toolbar.cpp:191
+#: ../src/widgets/tweak-toolbar.cpp:177
msgid "Move jitter mode"
msgstr "Режим дисперсії пересування"
-#: ../src/widgets/tweak-toolbar.cpp:192
+#: ../src/widgets/tweak-toolbar.cpp:178
msgid "Move objects in random directions"
msgstr "Пересунути об'єкти у випадкових напрямках"
-#: ../src/widgets/tweak-toolbar.cpp:198
+#: ../src/widgets/tweak-toolbar.cpp:184
msgid "Scale mode"
msgstr "Режим масштабування"
-#: ../src/widgets/tweak-toolbar.cpp:199
+#: ../src/widgets/tweak-toolbar.cpp:185
msgid "Shrink objects, with Shift enlarge"
msgstr "Стиснути об'єкти, з Shift — збільшити"
-#: ../src/widgets/tweak-toolbar.cpp:205
+#: ../src/widgets/tweak-toolbar.cpp:191
msgid "Rotate mode"
msgstr "Режим обертання"
-#: ../src/widgets/tweak-toolbar.cpp:206
+#: ../src/widgets/tweak-toolbar.cpp:192
msgid "Rotate objects, with Shift counterclockwise"
msgstr "Обертання об'єктів, з Shift — проти годинникової стрілки"
-#: ../src/widgets/tweak-toolbar.cpp:212
+#: ../src/widgets/tweak-toolbar.cpp:198
msgid "Duplicate/delete mode"
msgstr "Режим дублювання/вилучення"
-#: ../src/widgets/tweak-toolbar.cpp:213
+#: ../src/widgets/tweak-toolbar.cpp:199
msgid "Duplicate objects, with Shift delete"
msgstr "Дублювати об'єкти, з Shift — вилучити"
-#: ../src/widgets/tweak-toolbar.cpp:219
+#: ../src/widgets/tweak-toolbar.cpp:205
msgid "Push mode"
msgstr "Режим штовхання"
-#: ../src/widgets/tweak-toolbar.cpp:220
+#: ../src/widgets/tweak-toolbar.cpp:206
msgid "Push parts of paths in any direction"
msgstr "Виштовхування частин контурів у довільному напрямку"
-#: ../src/widgets/tweak-toolbar.cpp:226
+#: ../src/widgets/tweak-toolbar.cpp:212
msgid "Shrink/grow mode"
msgstr "Режим втягування/розтягування"
-#: ../src/widgets/tweak-toolbar.cpp:227
+#: ../src/widgets/tweak-toolbar.cpp:213
msgid "Shrink (inset) parts of paths; with Shift grow (outset)"
msgstr "Втягування частин контурів; з Shift розтягування"
-#: ../src/widgets/tweak-toolbar.cpp:233
+#: ../src/widgets/tweak-toolbar.cpp:219
msgid "Attract/repel mode"
msgstr "Режим притягання/відштовхування"
-#: ../src/widgets/tweak-toolbar.cpp:234
+#: ../src/widgets/tweak-toolbar.cpp:220
msgid "Attract parts of paths towards cursor; with Shift from cursor"
msgstr "Притягнути частини контуру до курсора, з Shift — від курсора"
-#: ../src/widgets/tweak-toolbar.cpp:240
+#: ../src/widgets/tweak-toolbar.cpp:226
msgid "Roughen mode"
msgstr "Режим грубішання"
-#: ../src/widgets/tweak-toolbar.cpp:241
+#: ../src/widgets/tweak-toolbar.cpp:227
msgid "Roughen parts of paths"
msgstr "Грубішання частин контурів"
-#: ../src/widgets/tweak-toolbar.cpp:247
+#: ../src/widgets/tweak-toolbar.cpp:233
msgid "Color paint mode"
msgstr "Режим малювання кольором"
-#: ../src/widgets/tweak-toolbar.cpp:248
+#: ../src/widgets/tweak-toolbar.cpp:234
msgid "Paint the tool's color upon selected objects"
msgstr "Малювати кольором інструмента на вибраних об'єктах"
-#: ../src/widgets/tweak-toolbar.cpp:254
+#: ../src/widgets/tweak-toolbar.cpp:240
msgid "Color jitter mode"
msgstr "Режим перебирання кольорів"
-#: ../src/widgets/tweak-toolbar.cpp:255
+#: ../src/widgets/tweak-toolbar.cpp:241
msgid "Jitter the colors of selected objects"
msgstr "Перебір кольорів вибраних об'єктів"
-#: ../src/widgets/tweak-toolbar.cpp:261
+#: ../src/widgets/tweak-toolbar.cpp:247
msgid "Blur mode"
msgstr "Режим розмивання"
-#: ../src/widgets/tweak-toolbar.cpp:262
+#: ../src/widgets/tweak-toolbar.cpp:248
msgid "Blur selected objects more; with Shift, blur less"
msgstr "Розмити вибрані об'єкти; з Shift — менше розмивання"
-#: ../src/widgets/tweak-toolbar.cpp:289
+#: ../src/widgets/tweak-toolbar.cpp:275
msgid "Channels:"
msgstr "Канали:"
-#: ../src/widgets/tweak-toolbar.cpp:301
+#: ../src/widgets/tweak-toolbar.cpp:287
msgid "In color mode, act on objects' hue"
msgstr "У кольоровому режимі працює як відтінок об'єкта"
#. TRANSLATORS: "H" here stands for hue
-#: ../src/widgets/tweak-toolbar.cpp:305
+#: ../src/widgets/tweak-toolbar.cpp:291
msgid "H"
msgstr "В"
-#: ../src/widgets/tweak-toolbar.cpp:317
+#: ../src/widgets/tweak-toolbar.cpp:303
msgid "In color mode, act on objects' saturation"
msgstr "У кольоровому режимі працює як насиченість об'єкта"
#. TRANSLATORS: "S" here stands for Saturation
-#: ../src/widgets/tweak-toolbar.cpp:321
+#: ../src/widgets/tweak-toolbar.cpp:307
msgid "S"
msgstr "Н"
-#: ../src/widgets/tweak-toolbar.cpp:333
+#: ../src/widgets/tweak-toolbar.cpp:319
msgid "In color mode, act on objects' lightness"
msgstr "У кольоровому режимі працює як освітленість об'єкта"
#. TRANSLATORS: "L" here stands for Lightness
-#: ../src/widgets/tweak-toolbar.cpp:337
+#: ../src/widgets/tweak-toolbar.cpp:323
msgid "L"
msgstr "О"
-#: ../src/widgets/tweak-toolbar.cpp:349
+#: ../src/widgets/tweak-toolbar.cpp:335
msgid "In color mode, act on objects' opacity"
msgstr "У кольоровому режимі працює як прозорість об'єкта"
#. TRANSLATORS: "O" here stands for Opacity
-#: ../src/widgets/tweak-toolbar.cpp:353
+#: ../src/widgets/tweak-toolbar.cpp:339
msgid "O"
msgstr "П"
#. Fidelity
-#: ../src/widgets/tweak-toolbar.cpp:364
+#: ../src/widgets/tweak-toolbar.cpp:350
msgid "(rough, simplified)"
msgstr "(грубо, спрощено)"
-#: ../src/widgets/tweak-toolbar.cpp:364
+#: ../src/widgets/tweak-toolbar.cpp:350
msgid "(fine, but many nodes)"
msgstr "(точно, але багато вузлів)"
-#: ../src/widgets/tweak-toolbar.cpp:367
+#: ../src/widgets/tweak-toolbar.cpp:353
msgid "Fidelity"
msgstr "Точність"
-#: ../src/widgets/tweak-toolbar.cpp:367
+#: ../src/widgets/tweak-toolbar.cpp:353
msgid "Fidelity:"
msgstr "Точність:"
-#: ../src/widgets/tweak-toolbar.cpp:368
+#: ../src/widgets/tweak-toolbar.cpp:354
msgid ""
"Low fidelity simplifies paths; high fidelity preserves path features but may "
"generate a lot of new nodes"
@@ -30107,7 +29695,7 @@ msgstr ""
"зберігає особливості контуру, але може призвести до створення великої "
"кількості вузлів"
-#: ../src/widgets/tweak-toolbar.cpp:387
+#: ../src/widgets/tweak-toolbar.cpp:373
msgid "Use the pressure of the input device to alter the force of tweak action"
msgstr ""
"Використовувати силу натиску пристрою введення для зміни сили дії корекції"
@@ -30120,45 +29708,45 @@ msgstr ""
"Позначений об'єкт не є контуром.\n"
"Спробуйте скористатися пунктом меню Контур -> Об'єкт у контур."
-#: ../share/extensions/dimension.py:108
+#: ../share/extensions/dimension.py:109
msgid "Please select an object."
msgstr "Будь ласка, позначте об'єкт."
-#: ../share/extensions/dimension.py:133
+#: ../share/extensions/dimension.py:134
msgid "Unable to process this object. Try changing it into a path first."
msgstr ""
"Неможливо обробити цей об'єкт. Спробуйте спочатку перетворити його на контур."
#. report to the Inkscape console using errormsg
-#: ../share/extensions/draw_from_triangle.py:178
+#: ../share/extensions/draw_from_triangle.py:180
msgid "Side Length 'a' (px): "
msgstr "Довжина кроку «a» (у пк): "
-#: ../share/extensions/draw_from_triangle.py:179
+#: ../share/extensions/draw_from_triangle.py:181
msgid "Side Length 'b' (px): "
msgstr "Довжина кроку «b» (у пк): "
-#: ../share/extensions/draw_from_triangle.py:180
+#: ../share/extensions/draw_from_triangle.py:182
msgid "Side Length 'c' (px): "
msgstr "Довжина кроку «c» (у пк): "
-#: ../share/extensions/draw_from_triangle.py:181
+#: ../share/extensions/draw_from_triangle.py:183
msgid "Angle 'A' (radians): "
msgstr "Кут «A» (у радіанах): "
-#: ../share/extensions/draw_from_triangle.py:182
+#: ../share/extensions/draw_from_triangle.py:184
msgid "Angle 'B' (radians): "
msgstr "Кут «B» (у радіанах): "
-#: ../share/extensions/draw_from_triangle.py:183
+#: ../share/extensions/draw_from_triangle.py:185
msgid "Angle 'C' (radians): "
msgstr "Кут «C» (у радіанах): "
-#: ../share/extensions/draw_from_triangle.py:184
+#: ../share/extensions/draw_from_triangle.py:186
msgid "Semiperimeter (px): "
msgstr "Напівпериметр (у пк): "
-#: ../share/extensions/draw_from_triangle.py:185
+#: ../share/extensions/draw_from_triangle.py:187
msgid "Area (px^2): "
msgstr "Площа (у пк²): "
@@ -30549,20 +30137,20 @@ msgstr "Для роботи цього додатка потрібен хоча
msgid "The sliced bitmaps have been saved as:"
msgstr "Зрізані растрові зображення було збережено як:"
-#: ../share/extensions/hpgl_decoder.py:44
+#: ../share/extensions/hpgl_decoder.py:43
msgid "Movements"
msgstr "Рухи"
-#: ../share/extensions/hpgl_decoder.py:45
+#: ../share/extensions/hpgl_decoder.py:44
msgid "Pen #"
msgstr "Номер різця"
#. issue error if no hpgl data found
-#: ../share/extensions/hpgl_input.py:59
+#: ../share/extensions/hpgl_input.py:58
msgid "No HPGL data found."
msgstr "Не знайдено даних HPGL."
-#: ../share/extensions/hpgl_input.py:67
+#: ../share/extensions/hpgl_input.py:66
msgid ""
"The HPGL data contained unknown (unsupported) commands, there is a "
"possibility that the drawing is missing some content."
@@ -30571,7 +30159,7 @@ msgstr ""
"кресленні не буде деяких елементів."
#. issue error if no paths found
-#: ../share/extensions/hpgl_output.py:63
+#: ../share/extensions/hpgl_output.py:58
msgid ""
"No paths where found. Please convert all objects you want to save into paths."
msgstr ""
@@ -30826,6 +30414,21 @@ msgstr "Не знайдено атрибуту стилю для ідентиф
msgid "unable to locate marker: %s"
msgstr "Не вдалося знайти маркер: %s"
+#: ../share/extensions/measure.py:50
+msgid ""
+"Failed to import the numpy modules. These modules are required by this "
+"extension. Please install them and try again. On a Debian-like system this "
+"can be done with the command, sudo apt-get install python-numpy."
+msgstr ""
+"Не вдалося імпортувати модулі numpy. Ці модулі потрібні для роботи цього "
+"додатка. Будь ласка, встановіть модулі і повторіть спробу. У системах, "
+"заснованих на Debian, цю операцію можна виконати командою sudo apt-get "
+"install python-numpy."
+
+#: ../share/extensions/measure.py:112
+msgid "Area is zero, cannot calculate Center of Mass"
+msgstr "Площа дорівнює нулю. Визначення центра мас позбавлене сенсу."
+
#: ../share/extensions/pathalongpath.py:208
#: ../share/extensions/pathscatter.py:228
#: ../share/extensions/perspective.py:53
@@ -30866,8 +30469,8 @@ msgstr ""
"системах, заснованих на Debian, цю операцію можна виконати командою sudo apt-"
"get install python-numpy."
-#: ../share/extensions/perspective.py:60
-#: ../share/extensions/summersnight.py:51
+#: ../share/extensions/perspective.py:61
+#: ../share/extensions/summersnight.py:52
#, python-format
msgid ""
"The first selected object is of type '%s'.\n"
@@ -30876,16 +30479,16 @@ msgstr ""
"Перший вибраний об'єкт належить до типу «%s».\n"
"Спробуйте скористатися пунктом меню Контур -> Об'єкт у контур."
-#: ../share/extensions/perspective.py:67
-#: ../share/extensions/summersnight.py:59
+#: ../share/extensions/perspective.py:68
+#: ../share/extensions/summersnight.py:60
msgid ""
"This extension requires that the second selected path be four nodes long."
msgstr ""
"Для роботи цього додатка потрібно, щоб другий вибраний контур складався "
"принаймні з чотирьох вузлів."
-#: ../share/extensions/perspective.py:93
-#: ../share/extensions/summersnight.py:92
+#: ../share/extensions/perspective.py:94
+#: ../share/extensions/summersnight.py:93
msgid ""
"The second selected object is a group, not a path.\n"
"Try using the procedure Object->Ungroup."
@@ -30893,8 +30496,8 @@ msgstr ""
"Другий з вибраних об'єктів є групою, а не контуром.\n"
"Спробуйте скористатися пунктом меню Контур -> Розділити."
-#: ../share/extensions/perspective.py:95
-#: ../share/extensions/summersnight.py:94
+#: ../share/extensions/perspective.py:96
+#: ../share/extensions/summersnight.py:95
msgid ""
"The second selected object is not a path.\n"
"Try using the procedure Path->Object to Path."
@@ -30902,8 +30505,8 @@ msgstr ""
"Другий з вибраних об'єктів не є контуром.\n"
"Спробуйте скористатися пунктом меню Контур -> Об'єкт у контур."
-#: ../share/extensions/perspective.py:98
-#: ../share/extensions/summersnight.py:97
+#: ../share/extensions/perspective.py:99
+#: ../share/extensions/summersnight.py:98
msgid ""
"The first selected object is not a path.\n"
"Try using the procedure Path->Object to Path."
@@ -30912,14 +30515,14 @@ msgstr ""
"Спробуйте скористатися пунктом меню Контур -> Об'єкт у контур."
#. issue error if no paths found
-#: ../share/extensions/plotter.py:71
+#: ../share/extensions/plotter.py:66
msgid ""
"No paths where found. Please convert all objects you want to plot into paths."
msgstr ""
"Контурів не знайдено. Будь ласка, перетворіть усі потрібні вам об’єкти для "
"вирізання на контури."
-#: ../share/extensions/plotter.py:132
+#: ../share/extensions/plotter.py:143
msgid ""
"pySerial is not installed.\n"
"\n"
@@ -30937,7 +30540,7 @@ msgstr ""
"\\[Program files]\\inkscape\\python\\Lib\\\n"
"3. Перезапустіть Inkscape."
-#: ../share/extensions/plotter.py:152
+#: ../share/extensions/plotter.py:163
msgid ""
"Could not open port. Please check that your plotter is running, connected "
"and the settings are correct."
@@ -30975,7 +30578,7 @@ msgstr ""
"Спробуйте позначити пункт «Визначення граней» на вкладці моделі файла.\n"
#. we cannot generate a list of faces from the edges without a lot of computation
-#: ../share/extensions/polyhedron_3d.py:519
+#: ../share/extensions/polyhedron_3d.py:522
msgid ""
"Face Data Not Found. Ensure file contains face data, and check the file is "
"imported as \"Face-Specified\" under the \"Model File\" tab.\n"
@@ -30983,7 +30586,7 @@ msgstr ""
"Не знайдено даних про грані. Переконайтеся, що файл містить дані про грані і "
"що файл було імпортовано як «вказані грані» на вкладці «файл моделі».\n"
-#: ../share/extensions/polyhedron_3d.py:521
+#: ../share/extensions/polyhedron_3d.py:524
msgid "Internal Error. No view type selected\n"
msgstr "Внутрішня помилка. Не вибрано типу перегляду\n"
@@ -31005,12 +30608,12 @@ msgid "Invalid bit value, this is a bug!"
msgstr "Некоректне бітове значення, це вада!"
#. abort if converting blank text
-#: ../share/extensions/render_barcode_datamatrix.py:677
+#: ../share/extensions/render_barcode_datamatrix.py:678
msgid "Please enter an input string"
msgstr "Будь ласка, введіть вхідний рядок"
#. abort if converting blank text
-#: ../share/extensions/render_barcode_qrcode.py:1053
+#: ../share/extensions/render_barcode_qrcode.py:1054
msgid "Please enter an input text"
msgstr "Будь ласка, введіть вхідний текст"
@@ -31280,10 +30883,66 @@ msgid "Open presentation exchange files saved in Corel DRAW (UC)"
msgstr ""
"Відкрити файли обміну презентаціями, збережені за допомогою Corel DRAW (UC)"
+#: ../share/extensions/color_HSL_adjust.inx.h:1
+msgid "HSL Adjust"
+msgstr "Виправлення HSL"
+
+#: ../share/extensions/color_HSL_adjust.inx.h:3
+msgid "Hue (°)"
+msgstr "Відтінок (у °)"
+
+#: ../share/extensions/color_HSL_adjust.inx.h:4
+msgid "Random hue"
+msgstr "Випадковий відтінок"
+
+#: ../share/extensions/color_HSL_adjust.inx.h:6
+#, no-c-format
+msgid "Saturation (%)"
+msgstr "Насиченість (у %)"
+
+#: ../share/extensions/color_HSL_adjust.inx.h:7
+msgid "Random saturation"
+msgstr "Випадкова насиченість"
+
+#: ../share/extensions/color_HSL_adjust.inx.h:9
+#, no-c-format
+msgid "Lightness (%)"
+msgstr "Освітленість (у %)"
+
+#: ../share/extensions/color_HSL_adjust.inx.h:10
+msgid "Random lightness"
+msgstr "Випадкова освітленість"
+
+#: ../share/extensions/color_HSL_adjust.inx.h:13
+#, no-c-format
+msgid ""
+"Adjusts hue, saturation and lightness in the HSL representation of the "
+"selected objects's color.\n"
+"Options:\n"
+" * Hue: rotate by degrees (wraps around).\n"
+" * Saturation: add/subtract % (min=-100, max=100).\n"
+" * Lightness: add/subtract % (min=-100, max=100).\n"
+" * Random Hue/Saturation/Lightness: randomize the parameter's value.\n"
+" "
+msgstr ""
+"Виправляє відтінок, насиченість та освітленість у HSL-відтворенні кольору "
+"позначених об’єктів.\n"
+"Параметри:\n"
+" * Відтінок: обертання у градусах (циклічне).\n"
+" * Насиченість: доданий або віднятий відсоток (мін=-100, макс=100).\n"
+" * Освітленість: доданий або віднятий відсоток (мін=-100, макс=100).\n"
+" * Випадкове значення відтінку/насиченості/освітленості: вибрати "
+"випадкові значення параметрів.\n"
+" "
+
#: ../share/extensions/color_blackandwhite.inx.h:1
msgid "Black and White"
msgstr "Чорно-біле"
+#: ../share/extensions/color_blackandwhite.inx.h:2
+msgid "Threshold Color (1-255):"
+msgstr "Пороговий колір (1-255):"
+
#: ../share/extensions/color_brighter.inx.h:1
msgid "Brighter"
msgstr "Яскравіше"
@@ -31343,58 +31002,6 @@ msgstr "Знебарвлення"
msgid "Grayscale"
msgstr "Сірі півтони"
-#: ../share/extensions/color_HSL_adjust.inx.h:1
-msgid "HSL Adjust"
-msgstr "Виправлення HSL"
-
-#: ../share/extensions/color_HSL_adjust.inx.h:3
-msgid "Hue (°)"
-msgstr "Відтінок (у °)"
-
-#: ../share/extensions/color_HSL_adjust.inx.h:4
-msgid "Random hue"
-msgstr "Випадковий відтінок"
-
-#: ../share/extensions/color_HSL_adjust.inx.h:6
-#, no-c-format
-msgid "Saturation (%)"
-msgstr "Насиченість (у %)"
-
-#: ../share/extensions/color_HSL_adjust.inx.h:7
-msgid "Random saturation"
-msgstr "Випадкова насиченість"
-
-#: ../share/extensions/color_HSL_adjust.inx.h:9
-#, no-c-format
-msgid "Lightness (%)"
-msgstr "Освітленість (у %)"
-
-#: ../share/extensions/color_HSL_adjust.inx.h:10
-msgid "Random lightness"
-msgstr "Випадкова освітленість"
-
-#: ../share/extensions/color_HSL_adjust.inx.h:13
-#, no-c-format
-msgid ""
-"Adjusts hue, saturation and lightness in the HSL representation of the "
-"selected objects's color.\n"
-"Options:\n"
-" * Hue: rotate by degrees (wraps around).\n"
-" * Saturation: add/subtract % (min=-100, max=100).\n"
-" * Lightness: add/subtract % (min=-100, max=100).\n"
-" * Random Hue/Saturation/Lightness: randomize the parameter's value.\n"
-" "
-msgstr ""
-"Виправляє відтінок, насиченість та освітленість у HSL-відтворенні кольору "
-"позначених об’єктів.\n"
-"Параметри:\n"
-" * Відтінок: обертання у градусах (циклічне).\n"
-" * Насиченість: доданий або віднятий відсоток (мін=-100, макс=100).\n"
-" * Освітленість: доданий або віднятий відсоток (мін=-100, макс=100).\n"
-" * Випадкове значення відтінку/насиченості/освітленості: вибрати "
-"випадкові значення параметрів.\n"
-" "
-
#: ../share/extensions/color_lesshue.inx.h:1
msgid "Less Hue"
msgstr "Зменшити відтінок"
@@ -31542,7 +31149,7 @@ msgid "Visual"
msgstr "візуальна"
#: ../share/extensions/dimension.inx.h:7 ../share/extensions/dots.inx.h:13
-#: ../share/extensions/handles.inx.h:2 ../share/extensions/measure.inx.h:24
+#: ../share/extensions/handles.inx.h:2 ../share/extensions/measure.inx.h:25
msgid "Visualize Path"
msgstr "Показ контуру"
@@ -33631,7 +33238,7 @@ msgstr ""
"(Типове значення: не позначено)"
#: ../share/extensions/hpgl_input.inx.h:9
-#: ../share/extensions/hpgl_output.inx.h:43
+#: ../share/extensions/hpgl_output.inx.h:34
msgid "HP Graphics Language file (*.hpgl)"
msgstr "Файли графічної мови HP (*.hpgl)"
@@ -33655,8 +33262,8 @@ msgstr ""
#: ../share/extensions/hpgl_output.inx.h:3
#: ../share/extensions/plotter.inx.h:19
-msgid "Plotter Settings"
-msgstr "Параметри вирізання"
+msgid "Plotter Settings "
+msgstr "Параметри вирізання "
#: ../share/extensions/hpgl_output.inx.h:8
#: ../share/extensions/plotter.inx.h:24
@@ -33749,71 +33356,45 @@ msgstr ""
#: ../share/extensions/hpgl_output.inx.h:22
#: ../share/extensions/plotter.inx.h:38
-msgid "Overcut &#x26; Tool Offset"
-msgstr "Надріз та відступ інструмента"
+msgid "Plot Features "
+msgstr "Особливості вирізання "
#: ../share/extensions/hpgl_output.inx.h:23
#: ../share/extensions/plotter.inx.h:39
-msgid "Use overcut"
-msgstr "Використовувати надріз"
+msgid "Overcut (mm)"
+msgstr "Надріз (у мм)"
#: ../share/extensions/hpgl_output.inx.h:24
#: ../share/extensions/plotter.inx.h:40
msgid ""
-"Check this to use overcut, if not checked the 'Overcut' parameter is unused. "
-"(Default: Checked)"
+"The distance in mm that will be cut over the starting point of the path to "
+"prevent open paths, set to 0.0 to omit command. (Default: 1.00)"
msgstr ""
-"Позначте цей пункт, щоб програма використовувала надрізання. Якщо не "
-"позначено, параметр «Надріз» буде проігноровано. (Типове значення: позначено)"
+"Відстань у мм, яку буде додатково прорізано за початкову точку контуру для "
+"запобігання утворенню незамкнених контурів. Вкажіть значення 0.0, щоб "
+"пропустити команду. (Типове значення: 1.00)"
#: ../share/extensions/hpgl_output.inx.h:25
#: ../share/extensions/plotter.inx.h:41
-msgid "Overcut (mm)"
-msgstr "Надріз (у мм)"
+msgid "Tool offset (mm)"
+msgstr "Відступ інструмента (у мм)"
#: ../share/extensions/hpgl_output.inx.h:26
#: ../share/extensions/plotter.inx.h:42
msgid ""
-"The distance in mm that will be cut over the starting point of the path to "
-"prevent open paths. (Default: 1.00)"
+"The offset from the tool tip to the tool axis in mm, set to 0.0 to omit "
+"command. (Default: 0.25)"
msgstr ""
-"Відстань у мм, яку буде додатково прорізано за початкову точку контуру для "
-"запобігання утворенню незамкнених контурів. (Типове значення: 1.00)"
+"Відступ від краю інструмента до вісі інструмента у мм. Вкажіть значення 0.0, "
+"щоб пропустити команду. (Типове значення: 0.25)"
#: ../share/extensions/hpgl_output.inx.h:27
#: ../share/extensions/plotter.inx.h:43
-msgid "Use tool offset correction"
-msgstr "Використовувати виправлення відступу інструмента"
-
-#: ../share/extensions/hpgl_output.inx.h:28
-#: ../share/extensions/plotter.inx.h:44
-msgid ""
-"Check this to use the tool offset correction, if not checked the 'Tool "
-"offset' and 'Precut' parameters are unused. (Default: Checked)"
-msgstr ""
-"Визначає, чи слід виправляти відступ інструмента. Якщо не позначено, "
-"параметри «Відступ інструмента» і «Підрізання» не використовуватимуться. "
-"(Типове значення: позначено)"
-
-#: ../share/extensions/hpgl_output.inx.h:29
-#: ../share/extensions/plotter.inx.h:45
-msgid "Tool offset (mm)"
-msgstr "Відступ інструмента (у мм)"
-
-#: ../share/extensions/hpgl_output.inx.h:30
-#: ../share/extensions/plotter.inx.h:46
-msgid "The offset from the tool tip to the tool axis in mm. (Default: 0.25)"
-msgstr ""
-"Відступ від краю інструмента до вісі інструмента у мм. (Типове значення: "
-"0.25)"
-
-#: ../share/extensions/hpgl_output.inx.h:31
-#: ../share/extensions/plotter.inx.h:47
msgid "Use precut"
msgstr "Використовувати підрізання"
-#: ../share/extensions/hpgl_output.inx.h:32
-#: ../share/extensions/plotter.inx.h:48
+#: ../share/extensions/hpgl_output.inx.h:28
+#: ../share/extensions/plotter.inx.h:44
msgid ""
"Check this to cut a small line before the real drawing starts to correctly "
"align the tool orientation. (Default: Checked)"
@@ -33822,13 +33403,13 @@ msgstr ""
"виконати основну процедуру вирізання. Така лінія потрібна для вирівнювання "
"орієнтації інструмента для першого вирізання. (Типове значення: позначено)"
-#: ../share/extensions/hpgl_output.inx.h:34
-#: ../share/extensions/plotter.inx.h:50
+#: ../share/extensions/hpgl_output.inx.h:29
+#: ../share/extensions/plotter.inx.h:45
msgid "Curve flatness"
msgstr "Пласкість кривої"
-#: ../share/extensions/hpgl_output.inx.h:35
-#: ../share/extensions/plotter.inx.h:51
+#: ../share/extensions/hpgl_output.inx.h:30
+#: ../share/extensions/plotter.inx.h:46
msgid ""
"Curves are divided into lines, this number controls how fine the curves will "
"be reproduced, the smaller the finer. (Default: '1.2')"
@@ -33836,37 +33417,13 @@ msgstr ""
"Криві буде розділено на прямі відрізки. Це значення керує точністю такого "
"поділу. Чим меншим воно буде, тим точнішим буде поділ. (Типове значення: 1.2)"
-#: ../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: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:38
-#: ../share/extensions/plotter.inx.h:54
-msgid "Y offset (mm)"
-msgstr "Відступ за Y (у мм)"
-
-#: ../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
+#: ../share/extensions/hpgl_output.inx.h:31
+#: ../share/extensions/plotter.inx.h:47
msgid "Auto align"
msgstr "Автовирівнювання"
-#: ../share/extensions/hpgl_output.inx.h:41
-#: ../share/extensions/plotter.inx.h:57
+#: ../share/extensions/hpgl_output.inx.h:32
+#: ../share/extensions/plotter.inx.h:48
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 "
@@ -33877,8 +33434,8 @@ msgstr ""
"буде позначено, слід переконатися, що усіх частини креслення перебувають у "
"межах документа! (Типовий стан: позначено)"
-#: ../share/extensions/hpgl_output.inx.h:42
-#: ../share/extensions/plotter.inx.h:60
+#: ../share/extensions/hpgl_output.inx.h:33
+#: ../share/extensions/plotter.inx.h:51
msgid ""
"All these settings depend on the plotter you use, for more information "
"please consult the manual or homepage for your plotter."
@@ -33887,7 +33444,7 @@ msgstr ""
"Докладнішу інформацію можна отримати з підручника до плотера або домашньої "
"сторінки компанії-виробника."
-#: ../share/extensions/hpgl_output.inx.h:44
+#: ../share/extensions/hpgl_output.inx.h:35
msgid "Export an HP Graphics Language file"
msgstr "Експортувати до файла графічної мови HP"
@@ -33964,6 +33521,26 @@ msgstr "Доповісти про помилку"
msgid "SVG 1.1 Specification"
msgstr "Специфікація SVG 1.1"
+#: ../share/extensions/interp.inx.h:1
+msgid "Interpolate"
+msgstr "Інтерполяція"
+
+#: ../share/extensions/interp.inx.h:3
+msgid "Interpolation steps:"
+msgstr "Кроки інтерполяції:"
+
+#: ../share/extensions/interp.inx.h:4
+msgid "Interpolation method:"
+msgstr "Метод інтерполяції:"
+
+#: ../share/extensions/interp.inx.h:5
+msgid "Duplicate endpaths"
+msgstr "Дублювати кінцеві контури"
+
+#: ../share/extensions/interp.inx.h:6
+msgid "Interpolate style"
+msgstr "Інтерполяція стилю"
+
#: ../share/extensions/interp_att_g.inx.h:1
msgid "Interpolate Attribute in a group"
msgstr "Інтерполяція атрибута у групі"
@@ -34056,26 +33633,6 @@ msgstr ""
"атрибутів буде обчислено для всіх елементів у межах вибраної групи або всіх "
"елементів, якщо їх вибрано декілька."
-#: ../share/extensions/interp.inx.h:1
-msgid "Interpolate"
-msgstr "Інтерполяція"
-
-#: ../share/extensions/interp.inx.h:3
-msgid "Interpolation steps:"
-msgstr "Кроки інтерполяції:"
-
-#: ../share/extensions/interp.inx.h:4
-msgid "Interpolation method:"
-msgstr "Метод інтерполяції:"
-
-#: ../share/extensions/interp.inx.h:5
-msgid "Duplicate endpaths"
-msgstr "Дублювати кінцеві контури"
-
-#: ../share/extensions/interp.inx.h:6
-msgid "Interpolate style"
-msgstr "Інтерполяція стилю"
-
#: ../share/extensions/jessyInk_autoTexts.inx.h:1
msgid "Auto-texts"
msgstr "Автотекст"
@@ -34895,21 +34452,27 @@ msgstr "Площа"
#: ../share/extensions/measure.inx.h:13
msgctxt "measure extension"
+msgid "Center of Mass"
+msgstr "Центр мас"
+
+#: ../share/extensions/measure.inx.h:14
+msgctxt "measure extension"
msgid "Text On Path"
msgstr "Текст за контуром"
-#: ../share/extensions/measure.inx.h:14
+#: ../share/extensions/measure.inx.h:15
msgctxt "measure extension"
msgid "Fixed Angle"
msgstr "Сталий кут"
-#: ../share/extensions/measure.inx.h:17
+#: ../share/extensions/measure.inx.h:18
#, no-c-format
msgid ""
-"This effect measures the length, or area, of the selected paths and adds it "
-"as a text object with the selected units.\n"
-" \n"
-" * Display format can be either Text-On-Path, or stand-alone text at a "
+"This effect measures the length, area, or center-of-mass of the selected "
+"paths. Length and area are added as a text object with the selected units. "
+"Center-of-mass is shown as a cross symbol.\n"
+"\n"
+" * Text display format can be either Text-On-Path, or stand-alone text at a "
"specified angle.\n"
" * The number of significant digits can be controlled by the Precision "
"field.\n"
@@ -34921,9 +34484,10 @@ msgid ""
"Bezier curves. If a circle is used, the area may be too high by as much as "
"0.03%."
msgstr ""
-"За допомогою цього ефекту можна виміряти довжину позначених контурів і "
-"додати до об'єкта обчислений результат як текстовий об'єкт з вказаними "
-"одиницями виміру.\n"
+"За допомогою цього ефекту можна виміряти довжину позначених контурів, площу, "
+"яку вони обмежують, та центр мас цієї площі. Дані щодо довжини та площі буде "
+"додано на малюнок як текстовий об'єкт з вказаними одиницями виміру. Центр "
+"мас буде показано хрестиком.\n"
" \n"
" * Форматом показу може бути або текст вздовж контуру або автономний "
"текстовий об'єкт під вказаним кутом.\n"
@@ -34935,6 +34499,30 @@ msgstr ""
"багатокутників та кривих Безьє. Площу кіл буде обчислено з відносною "
"похибкою 0.03%."
+#: ../share/extensions/merge_styles.inx.h:1
+msgid "Merge Styles into CSS"
+msgstr "Об’єднати стилі до CSS"
+
+#: ../share/extensions/merge_styles.inx.h:2
+msgid ""
+"All selected nodes will be grouped together and their common style "
+"attributes will create a new class, this class will replace the existing "
+"inline style attributes. Please use a name which best describes the kinds of "
+"objects and their common context for best effect."
+msgstr ""
+"Усі позначені вузли буде згруповано, спільні атрибути стилю утворять новий "
+"клас. Цей клас замінить собою наявні вбудовані атрибути стилю. Щоб досягти "
+"кращих результатів, будь ласка, скористайтеся назвою, яка найкращим чином "
+"описує властивості та спільний контекст об’єктів."
+
+#: ../share/extensions/merge_styles.inx.h:3
+msgid "New Class Name:"
+msgstr "Назва нового класу:"
+
+#: ../share/extensions/merge_styles.inx.h:4
+msgid "Stylesheet"
+msgstr "Таблиця стилів"
+
#: ../share/extensions/motion.inx.h:1
msgid "Motion"
msgstr "Рух"
@@ -35219,8 +34807,8 @@ msgstr ""
"контури."
#: ../share/extensions/plotter.inx.h:3
-msgid "Connection"
-msgstr "З’єднання"
+msgid "Connection Settings "
+msgstr "Параметри з’єднання "
#: ../share/extensions/plotter.inx.h:4
msgid "Serial port"
@@ -35298,11 +34886,11 @@ msgstr ""
msgid "Parallel (LPT) connections are not supported."
msgstr "Підтримки паралельних з’єднань (LPT) не передбачено."
-#: ../share/extensions/plotter.inx.h:58
+#: ../share/extensions/plotter.inx.h:49
msgid "Show debug information"
msgstr "Показувати діагностичну інформацію"
-#: ../share/extensions/plotter.inx.h:59
+#: ../share/extensions/plotter.inx.h:50
msgid ""
"Check this to get verbose information about the plot without actually "
"sending something to the plotter (A.k.a. data dump). (Default: Unchecked)"
@@ -35311,10 +34899,6 @@ msgstr ""
"вирізання без надсилання даних на плотер (тобто отримувати дамп даних). "
"(Типове значення: не позначено)"
-#: ../share/extensions/plotter.inx.h:61
-msgid "Plotter"
-msgstr "Плотер"
-
#: ../share/extensions/plt_input.inx.h:1
msgid "AutoCAD Plot Input"
msgstr "Імпорт з креслення AutoCAD"
@@ -35544,6 +35128,10 @@ msgstr "Середній"
msgid "View Previous Glyph"
msgstr "Переглянути попередній гліф"
+#: ../share/extensions/print_win32_vector.inx.h:1
+msgid "Win32 Vector Print"
+msgstr "Векторний друк Win32"
+
#: ../share/extensions/printing_marks.inx.h:1
msgid "Printing Marks"
msgstr "Позначки друку"
@@ -35588,10 +35176,6 @@ msgstr "Полотно"
msgid "Bleed Margin"
msgstr "Випуск під обрізання"
-#: ../share/extensions/print_win32_vector.inx.h:1
-msgid "Win32 Vector Print"
-msgstr "Векторний друк Win32"
-
#: ../share/extensions/ps_input.inx.h:1
msgid "PostScript Input"
msgstr "Імпорт з Postscript"
@@ -35632,25 +35216,6 @@ msgstr ""
msgid "Alphabet Soup"
msgstr "Абетковий суп"
-#: ../share/extensions/render_barcode_datamatrix.inx.h:1
-msgid "Datamatrix"
-msgstr "Datamatrix"
-
-#: ../share/extensions/render_barcode_datamatrix.inx.h:3
-#: ../share/extensions/render_barcode_qrcode.inx.h:4
-msgid "Size, in unit squares:"
-msgstr "Розмір (у одиницях площі):"
-
-#: ../share/extensions/render_barcode_datamatrix.inx.h:4
-msgid "Square Size (px):"
-msgstr "Розмір квадрата (у пк):"
-
-#: ../share/extensions/render_barcode_datamatrix.inx.h:6
-#: ../share/extensions/render_barcode.inx.h:6
-#: ../share/extensions/render_barcode_qrcode.inx.h:19
-msgid "Barcode"
-msgstr "Штрихкод"
-
#: ../share/extensions/render_barcode.inx.h:1
msgid "Classic"
msgstr "Класичний"
@@ -35667,6 +35232,25 @@ msgstr "Дані штрихкоду:"
msgid "Bar Height:"
msgstr "Висота штрихкоду:"
+#: ../share/extensions/render_barcode.inx.h:6
+#: ../share/extensions/render_barcode_datamatrix.inx.h:6
+#: ../share/extensions/render_barcode_qrcode.inx.h:19
+msgid "Barcode"
+msgstr "Штрихкод"
+
+#: ../share/extensions/render_barcode_datamatrix.inx.h:1
+msgid "Datamatrix"
+msgstr "Datamatrix"
+
+#: ../share/extensions/render_barcode_datamatrix.inx.h:3
+#: ../share/extensions/render_barcode_qrcode.inx.h:4
+msgid "Size, in unit squares:"
+msgstr "Розмір (у одиницях площі):"
+
+#: ../share/extensions/render_barcode_datamatrix.inx.h:4
+msgid "Square Size (px):"
+msgstr "Розмір квадрата (у пк):"
+
#: ../share/extensions/render_barcode_qrcode.inx.h:1
msgid "QR Code"
msgstr "QR-код"
@@ -36452,6 +36036,21 @@ msgid "Synfig Animation written using the sif-file exporter extension"
msgstr ""
"Анімація Synfig, записана за допомогою розширення експортування файлів sif"
+#: ../share/extensions/tar_layers.inx.h:1
+msgid "Collection of SVG files One per root layer"
+msgstr "Збірка файлів SVG, по одному на кореневий шар"
+
+#: ../share/extensions/tar_layers.inx.h:2
+msgid "Layers as Separate SVG (*.tar)"
+msgstr "Шари у окремих файлах SVG (*.tar)"
+
+#: ../share/extensions/tar_layers.inx.h:3
+msgid ""
+"Each layer split into it's own svg file and collected as a tape archive (tar "
+"file)"
+msgstr ""
+"Кожен шар у окремому файлі svg, файли зібрано у спільний архів (файл tar)"
+
#: ../share/extensions/text_braille.inx.h:1
msgid "Convert to Braille"
msgstr "Перетворити на шрифт Брайля"
@@ -36512,10 +36111,7 @@ msgstr "Змінити регістр"
msgid "lowercase"
msgstr "нижній регістр"
-#: ../share/extensions/text_merge.inx.h:14
-msgid "Flow text"
-msgstr "Контурний текст"
-
+#. <param name="flowtext" type="boolean" _gui-text="Flow text">false</param>
#: ../share/extensions/text_merge.inx.h:15
msgid "Keep style"
msgstr "Зберегти стиль"
@@ -36755,13 +36351,54 @@ msgstr ""
"списку пробілом і лише пробілом."
#: ../share/extensions/web-set-att.inx.h:29
+#: ../share/extensions/web-transmit-att.inx.h:27
#: ../share/extensions/webslicer_create_group.inx.h:13
#: ../share/extensions/webslicer_create_rect.inx.h:41
#: ../share/extensions/webslicer_export.inx.h:8
-#: ../share/extensions/web-transmit-att.inx.h:27
msgid "Web"
msgstr "Інтернет"
+#: ../share/extensions/web-transmit-att.inx.h:1
+msgid "Transmit Attributes"
+msgstr "Передати атрибути"
+
+#: ../share/extensions/web-transmit-att.inx.h:3
+msgid "Attribute to transmit:"
+msgstr "Атрибут для передавання:"
+
+#: ../share/extensions/web-transmit-att.inx.h:4
+msgid "When to transmit:"
+msgstr "Умова перетворення:"
+
+#: ../share/extensions/web-transmit-att.inx.h:6
+msgid "Source and destination of transmitting:"
+msgstr "Джерело і призначення передавання:"
+
+#: ../share/extensions/web-transmit-att.inx.h:21
+msgid "All selected ones transmit to the last one"
+msgstr "Всі вибрані передають останньому"
+
+#: ../share/extensions/web-transmit-att.inx.h:22
+msgid "The first selected transmits to all others"
+msgstr "Перший вибраний передає всім іншим"
+
+#: ../share/extensions/web-transmit-att.inx.h:25
+msgid ""
+"This effect transmits one or more attributes from the first selected element "
+"to the second when an event occurs."
+msgstr ""
+"За допомогою цього ефекту можна передати один або декілька атрибутів першому "
+"з вибраних елементів, коли вказана подія відбуватиметься з другим з вибраних "
+"елементів."
+
+#: ../share/extensions/web-transmit-att.inx.h:26
+msgid ""
+"If you want to transmit more than one attribute, you should separate this "
+"with a space, and only with a space."
+msgstr ""
+"Якщо ви бажаєте передати декілька атрибутів, вам слід відокремити їх у "
+"списку пробілом і лише пробілом."
+
#: ../share/extensions/webslicer_create_group.inx.h:1
msgid "Set a layout group"
msgstr "Створити групу компонування"
@@ -36971,47 +36608,6 @@ msgstr ""
"Всі розрізані зображення та, за бажання, код буде створено відповідно до "
"налаштувань і збережено до одного каталогу."
-#: ../share/extensions/web-transmit-att.inx.h:1
-msgid "Transmit Attributes"
-msgstr "Передати атрибути"
-
-#: ../share/extensions/web-transmit-att.inx.h:3
-msgid "Attribute to transmit:"
-msgstr "Атрибут для передавання:"
-
-#: ../share/extensions/web-transmit-att.inx.h:4
-msgid "When to transmit:"
-msgstr "Умова перетворення:"
-
-#: ../share/extensions/web-transmit-att.inx.h:6
-msgid "Source and destination of transmitting:"
-msgstr "Джерело і призначення передавання:"
-
-#: ../share/extensions/web-transmit-att.inx.h:21
-msgid "All selected ones transmit to the last one"
-msgstr "Всі вибрані передають останньому"
-
-#: ../share/extensions/web-transmit-att.inx.h:22
-msgid "The first selected transmits to all others"
-msgstr "Перший вибраний передає всім іншим"
-
-#: ../share/extensions/web-transmit-att.inx.h:25
-msgid ""
-"This effect transmits one or more attributes from the first selected element "
-"to the second when an event occurs."
-msgstr ""
-"За допомогою цього ефекту можна передати один або декілька атрибутів першому "
-"з вибраних елементів, коли вказана подія відбуватиметься з другим з вибраних "
-"елементів."
-
-#: ../share/extensions/web-transmit-att.inx.h:26
-msgid ""
-"If you want to transmit more than one attribute, you should separate this "
-"with a space, and only with a space."
-msgstr ""
-"Якщо ви бажаєте передати декілька атрибутів, вам слід відокремити їх у "
-"списку пробілом і лише пробілом."
-
#: ../share/extensions/whirl.inx.h:1
msgid "Whirl"
msgstr "Вихор"
@@ -37058,6 +36654,471 @@ msgstr "Популярний графічний формат для кліпар
msgid "XAML Input"
msgstr "Імпорт з XAML"
+#~ msgid "Set Resolution"
+#~ msgstr "Встановлення роздільності"
+
+#~ msgid "Set filter resolution"
+#~ msgstr "Встановити роздільність фільтрування"
+
+#~ msgid "Fill Area"
+#~ msgstr "Заповнення ділянки"
+
+#~ msgid "Fills object bounding box with color"
+#~ msgstr "Заповнює рамку-обгортку об'єкта кольором"
+
+#~ msgid "Link or embed image:"
+#~ msgstr "Пов'язати або вбудувати зображення:"
+
+#~ msgid "Scale image preference (image-rendering):"
+#~ msgstr "Режим масштабування зображень (обробки зображення):"
+
+#~ msgid "drawing%s"
+#~ msgstr "рисунок%s"
+
+#~ msgid "Length left:"
+#~ msgstr "Довжина ліворуч:"
+
+#~ msgid "Specifies the left end of the bisector"
+#~ msgstr "Визначає довжину лівої частини бісектриси"
+
+#~ msgid "Length right:"
+#~ msgstr "Довжина праворуч:"
+
+#~ msgid "Specifies the right end of the bisector"
+#~ msgstr "Визначає довжину правої частини бісектриси"
+
+#~ msgid "Adjust the \"left\" end of the bisector"
+#~ msgstr "Коригувати розташування «лівого» кінця бісектриси"
+
+#~ msgid "Adjust the \"right\" end of the bisector"
+#~ msgstr "Коригувати розташування «правого» кінця бісектриси"
+
+#~ msgid "Null"
+#~ msgstr "Нульовий"
+
+#~ msgid "Intersect"
+#~ msgstr "Перетин"
+
+#~ msgid "Subtract A-B"
+#~ msgstr "Різниця A-B"
+
+#~ msgid "Identity A"
+#~ msgstr "Тотожний A"
+
+#~ msgid "Subtract B-A"
+#~ msgstr "Різниця B-A"
+
+#~ msgid "Identity B"
+#~ msgstr "Тотожний B"
+
+#~ msgid "2nd path:"
+#~ msgstr "2-ий контур:"
+
+#~ msgid "Path to which the original path will be boolop'ed."
+#~ msgstr "Контур, з яким буде виконано булеву дію з початковим контуром."
+
+#~ msgid "Boolop type:"
+#~ msgstr "Тип булевої дії:"
+
+#~ msgid "Determines which kind of boolop will be performed."
+#~ msgstr "Визначає тип булевої дії, яку буде виконано."
+
+#~ msgid "Starting:"
+#~ msgstr "Початок:"
+
+#~ msgid "Angle of the first copy"
+#~ msgstr "Кут для першої копії"
+
+#~ msgid "Rotation angle:"
+#~ msgstr "Кут обертання:"
+
+#~ msgid "Angle between two successive copies"
+#~ msgstr "Кут між двома послідовними копіями"
+
+#~ msgid "Number of copies:"
+#~ msgstr "Кількість копій:"
+
+#~ msgid "Number of copies of the original path"
+#~ msgstr "Кількість копій початкового контуру"
+
+#~ msgid "Origin"
+#~ msgstr "Центр"
+
+#~ msgid "Origin of the rotation"
+#~ msgstr "Центр обертання"
+
+#~ msgid "Adjust the starting angle"
+#~ msgstr "Корекція початкового кута"
+
+#~ msgid "Adjust the rotation angle"
+#~ msgstr "Корекція кута повороту"
+
+#~ msgid "Elliptic Pen"
+#~ msgstr "Еліптичне перо"
+
+#~ msgid "Thick-Thin strokes (fast)"
+#~ msgstr "Штрих, що витоншується (швидко)"
+
+#~ msgid "Thick-Thin strokes (slow)"
+#~ msgstr "Штрих, що витоншується (повільно)"
+
+#~ msgid "Sharp"
+#~ msgstr "Загострений"
+
+#~ msgid "Method:"
+#~ msgstr "Метод:"
+
+#~ msgid "Choose pen type"
+#~ msgstr "Обрати тип пера"
+
+#~ msgid "Pen width:"
+#~ msgstr "Ширина пера:"
+
+#~ msgid "Maximal stroke width"
+#~ msgstr "Максимальна товщина штриха"
+
+#~ msgid "Pen roundness:"
+#~ msgstr "Округлення пера:"
+
+#~ msgid "Min/Max width ratio"
+#~ msgstr "Відношення мін.-макс. товщини"
+
+#~ msgid "direction of thickest strokes (opposite = thinnest)"
+#~ msgstr "напрямок найтовщих штрихів (протилежне = найтонших)"
+
+#~ msgid "Choose start capping type"
+#~ msgstr "Оберіть тип початкової вершини"
+
+#~ msgid "Choose end capping type"
+#~ msgstr "Оберіть тип кінцевої вершини"
+
+#~ msgid "Grow for:"
+#~ msgstr "Потовщення:"
+
+#~ msgid "Make the stroke thinner near it's start"
+#~ msgstr "Зробити штрих тоншим поблизу початку"
+
+#~ msgid "Fade for:"
+#~ msgstr "Потоншення:"
+
+#~ msgid "Make the stroke thinner near it's end"
+#~ msgstr "Зробити штрих тоншим поряд з його кінцем"
+
+#~ msgid "Round ends"
+#~ msgstr "Округлити кінці"
+
+#~ msgid "Strokes end with a round end"
+#~ msgstr "Штрихи завершуються заокругленим кінцем"
+
+#~ msgid "Capping:"
+#~ msgstr "Вершина:"
+
+#~ msgid "left capping"
+#~ msgstr "ліва вершина"
+
+#~ msgid "Control handle 0:"
+#~ msgstr "Інструмент керування 0:"
+
+#~ msgid "Control handle 0"
+#~ msgstr "Інструмент керування 0"
+
+#~ msgid "Control handle 1:"
+#~ msgstr "Інструмент керування 1:"
+
+#~ msgid "Control handle 1"
+#~ msgstr "Інструмент керування 1"
+
+#~ msgid "Control handle 2:"
+#~ msgstr "Інструмент керування 2:"
+
+#~ msgid "Control handle 2"
+#~ msgstr "Інструмент керування 2"
+
+#~ msgid "Control handle 3:"
+#~ msgstr "Інструмент керування 3:"
+
+#~ msgid "Control handle 3"
+#~ msgstr "Інструмент керування 3"
+
+#~ msgid "Control handle 4:"
+#~ msgstr "Інструмент керування 4:"
+
+#~ msgid "Control handle 4"
+#~ msgstr "Інструмент керування 4"
+
+#~ msgid "Control handle 5:"
+#~ msgstr "Інструмент керування 5:"
+
+#~ msgid "Control handle 5"
+#~ msgstr "Інструмент керування 5"
+
+#~ msgid "Control handle 6:"
+#~ msgstr "Інструмент керування 6:"
+
+#~ msgid "Control handle 6"
+#~ msgstr "Інструмент керування 5"
+
+#~ msgid "Control handle 7:"
+#~ msgstr "Інструмент керування 7:"
+
+#~ msgid "Control handle 7"
+#~ msgstr "Інструмент керування 7"
+
+#~ msgid "Control handle 8:"
+#~ msgstr "Інструмент керування 8:"
+
+#~ msgid "Control handle 8"
+#~ msgstr "Інструмент керування 8"
+
+#~ msgid "Control handle 9:"
+#~ msgstr "Інструмент керування 9:"
+
+#~ msgid "Control handle 9"
+#~ msgstr "Інструмент керування 9"
+
+#~ msgid "Control handle 10:"
+#~ msgstr "Інструмент керування 10:"
+
+#~ msgid "Control handle 10"
+#~ msgstr "Інструмент керування 10"
+
+#~ msgid "Control handle 11:"
+#~ msgstr "Інструмент керування 11:"
+
+#~ msgid "Control handle 11"
+#~ msgstr "Інструмент керування 11"
+
+#~ msgid "Control handle 12:"
+#~ msgstr "Інструмент керування 12:"
+
+#~ msgid "Control handle 12"
+#~ msgstr "Інструмент керування 12"
+
+#~ msgid "Control handle 13:"
+#~ msgstr "Інструмент керування 13:"
+
+#~ msgid "Control handle 13"
+#~ msgstr "Інструмент керування 13"
+
+#~ msgid "Control handle 14:"
+#~ msgstr "Інструмент керування 14:"
+
+#~ msgid "Control handle 14"
+#~ msgstr "Інструмент керування 14"
+
+#~ msgid "Control handle 15:"
+#~ msgstr "Інструмент керування 15:"
+
+#~ msgid "Control handle 15"
+#~ msgstr "Інструмент керування 15"
+
+#~ msgid "End type:"
+#~ msgstr "Тип кінця^"
+
+#~ msgid "Determines on which side the line or line segment is infinite."
+#~ msgstr "Визначає, який з кінців лінії або її сегмента буде нескінченним."
+
+#~ msgid "Discard original path?"
+#~ msgstr "Відкинути початковий контур?"
+
+#~ msgid "Check this to only keep the mirrored part of the path"
+#~ msgstr ""
+#~ "Позначте цей пункт, щоб програма зберегла лише віддзеркалену частину "
+#~ "контуру"
+
+#~ msgid "Reflection line:"
+#~ msgstr "Лінія відбиття:"
+
+#~ msgid "Line which serves as 'mirror' for the reflection"
+#~ msgstr "Лінія, яка слугуватиме «дзеркалом» відбиття"
+
+#~ msgid "Handle to control the distance of the offset from the curve"
+#~ msgstr "Інструмент керування, який визначатиме відстань відступу від кривої"
+
+#~ msgid "Adjust the offset"
+#~ msgstr "Скоригувати відступ"
+
+#~ msgid "Specifies the left end of the parallel"
+#~ msgstr "Визначає лівий кінець паралельної"
+
+#~ msgid "Specifies the right end of the parallel"
+#~ msgstr "Визначає правий кінець паралельної"
+
+#~ msgid "Adjust the \"left\" end of the parallel"
+#~ msgstr "Скоригувати «лівий» кінець паралельної"
+
+#~ msgid "Adjust the \"right\" end of the parallel"
+#~ msgstr "Скоригувати «правий» кінець паралельної"
+
+#~ msgid "Scaling factor"
+#~ msgstr "Коефіцієнт масштабування"
+
+#~ msgid "Display unit"
+#~ msgstr "Одиниця показу"
+
+#~ msgid "Print unit after path length"
+#~ msgstr "Показувати одиницю поряд з довжиною контуру"
+
+#~ msgid "Scale x"
+#~ msgstr "Масштаб за x"
+
+#~ msgid "Scale factor in x direction"
+#~ msgstr "Коефіцієнт масштабування у напрямку вісі x"
+
+#~ msgid "Scale y"
+#~ msgstr "Масштаб за y"
+
+#~ msgid "Scale factor in y direction"
+#~ msgstr "Коефіцієнт масштабування у напрямку вісі y"
+
+#~ msgid "Offset x"
+#~ msgstr "Зміщення за x"
+
+#~ msgid "Offset in x direction"
+#~ msgstr "Зміщення у напрямку вісі x"
+
+#~ msgid "Offset y"
+#~ msgstr "Зміщення за y"
+
+#~ msgid "Offset in y direction"
+#~ msgstr "Зміщення у напрямку вісі y"
+
+#~ msgid "Uses XY plane?"
+#~ msgstr "Використовує площину XY?"
+
+#~ msgid ""
+#~ "If true, put the path on the left side of an imaginary box, otherwise on "
+#~ "the right side"
+#~ msgstr ""
+#~ "Якщо буде позначено, розташувати контур на лівому боці уявного "
+#~ "прямокутника, інакше його буде розташовано на правому боці"
+
+#~ msgid "Adjust the origin"
+#~ msgstr "Корекція центру"
+
+#~ msgid "Iterations:"
+#~ msgstr "Ітерацій:"
+
+#~ msgid "recursivity"
+#~ msgstr "повторюваність"
+
+#~ msgid "Float parameter"
+#~ msgstr "Дійсний параметр"
+
+#~ msgid "just a real number like 1.4!"
+#~ msgstr "просто дійсне число, наприклад 1.4!"
+
+#~ msgid "Additional angle between tangent and curve"
+#~ msgstr "Додатковий кут між дотичною і кривою"
+
+#~ msgid "Location along curve:"
+#~ msgstr "Місце на кривій:"
+
+#~ msgid ""
+#~ "Location of the point of attachment along the curve (between 0.0 and "
+#~ "number-of-segments)"
+#~ msgstr ""
+#~ "Розташування точки дотику вздовж кривої (значення між 0.0 і кількістю "
+#~ "сегментів)"
+
+#~ msgid "Specifies the left end of the tangent"
+#~ msgstr "Визначає лівий кінець дотичної"
+
+#~ msgid "Specifies the right end of the tangent"
+#~ msgstr "Визначає правий кінець дотичної"
+
+#~ msgid "Adjust the point of attachment of the tangent"
+#~ msgstr "Скоригувати точку дотику дотичної"
+
+#~ msgid "Adjust the \"left\" end of the tangent"
+#~ msgstr "Скоригувати «лівий» кінець дотичної"
+
+#~ msgid "Adjust the \"right\" end of the tangent"
+#~ msgstr "Скоригувати «правий» кінець дотичної"
+
+#~ msgid "Stack step:"
+#~ msgstr "Крок стосу:"
+
+#~ msgid "Point param:"
+#~ msgstr "Параметр точки:"
+
+#~ msgid "Path param:"
+#~ msgstr "Параметр контуру:"
+
+#~ msgid "Label:"
+#~ msgstr "Мітка:"
+
+#~ msgid "Text label attached to the path"
+#~ msgstr "Текстова мітка, з’єднана з цим контуром"
+
+#~ msgid "No <b>groups</b> converted to symbols."
+#~ msgstr "На символи не перетвореною жодної <b>групи</b>."
+
+#~ msgid "<b>Color</b>"
+#~ msgstr "<b>Колір</b>"
+
+#~ msgid "<b>Border</b>"
+#~ msgstr "<b>Рамка</b>"
+
+#~ msgid "Align:"
+#~ msgstr "Вирівнювання:"
+
+#~ msgid "Ro_ws and Columns..."
+#~ msgstr "Р_ядки і стовпчики…"
+
+#~ msgid "_Grid"
+#~ msgstr "С_ітка"
+
+#~ msgid "Overcut &#x26; Tool Offset"
+#~ msgstr "Надріз та відступ інструмента"
+
+#~ msgid "Use overcut"
+#~ msgstr "Використовувати надріз"
+
+#~ msgid ""
+#~ "Check this to use overcut, if not checked the 'Overcut' parameter is "
+#~ "unused. (Default: Checked)"
+#~ msgstr ""
+#~ "Позначте цей пункт, щоб програма використовувала надрізання. Якщо не "
+#~ "позначено, параметр «Надріз» буде проігноровано. (Типове значення: "
+#~ "позначено)"
+
+#~ msgid "Use tool offset correction"
+#~ msgstr "Використовувати виправлення відступу інструмента"
+
+#~ msgid ""
+#~ "Check this to use the tool offset correction, if not checked the 'Tool "
+#~ "offset' and 'Precut' parameters are unused. (Default: Checked)"
+#~ msgstr ""
+#~ "Визначає, чи слід виправляти відступ інструмента. Якщо не позначено, "
+#~ "параметри «Відступ інструмента» і «Підрізання» не використовуватимуться. "
+#~ "(Типове значення: позначено)"
+
+#~ msgid "X offset (mm)"
+#~ msgstr "Відступ за X (у мм)"
+
+#~ msgid "Shifts your drawing on the X axis in mm. (Default: '0.00')"
+#~ msgstr ""
+#~ "Відступ вашого креслення від початкової точки за віссю X у мм. (Типове "
+#~ "значення: 0.00)"
+
+#~ msgid "Y offset (mm)"
+#~ msgstr "Відступ за Y (у мм)"
+
+#~ msgid "Shifts your drawing on the Y axis in mm. (Default: '0.00')"
+#~ msgstr ""
+#~ "Відступ вашого креслення від початкової точки за віссю Y у мм. (Типове "
+#~ "значення: 0.00)"
+
+#~ msgid "Connection"
+#~ msgstr "З’єднання"
+
+#~ msgid "Plotter"
+#~ msgstr "Плотер"
+
+#~ msgid "Flow text"
+#~ msgstr "Контурний текст"
+
#~ msgctxt "Symbol"
#~ msgid "Intormation"
#~ msgstr "Інформація"
diff --git a/share/extensions/dxf_input.py b/share/extensions/dxf_input.py
index 235b9ae8f..7ca176c92 100755
--- a/share/extensions/dxf_input.py
+++ b/share/extensions/dxf_input.py
@@ -322,7 +322,7 @@ def generate_ellipse(xc, yc, xm, ym, w, a1, a2):
def generate_gcodetools_point(xc, yc):
path= 'm %s,%s 2.9375,-6.34375 0.8125,1.90625 6.84375,-6.84375 0,0 0.6875,0.6875 -6.84375,6.84375 1.90625,0.8125 z' % (xc,yc)
- attribs = {'d': path, inkex.addNS('dxfpoint','inkscape'):'1', 'style': 'stroke:#ff0000;fill:#ff0000'}
+ attribs = {'d': path, inkex.addNS('dxfpoint','inkscape'):'1', 'style': 'stroke:none;fill:#ff0000'}
inkex.etree.SubElement(layer, 'path', attribs)
def get_line():
diff --git a/share/extensions/hpgl_decoder.py b/share/extensions/hpgl_decoder.py
index 06cf566a3..e909790b7 100644
--- a/share/extensions/hpgl_decoder.py
+++ b/share/extensions/hpgl_decoder.py
@@ -37,20 +37,21 @@ class hpglDecoder:
'''
self.hpglString = hpglString
self.options = options
- self.scaleX = options.resolutionX / 90.0 # dots/inch to dots/pixels
- self.scaleY = options.resolutionY / 90.0 # dots/inch to dots/pixels
+ self.scaleX = options.resolutionX / 25.4 # dots/inch to dots/mm
+ self.scaleY = options.resolutionY / 25.4 # dots/inch to dots/mm
self.warning = ''
self.textMovements = _("Movements")
self.textPenNumber = _("Pen #")
def getSvg(self):
# prepare document
- self.doc = inkex.etree.parse(StringIO('<svg xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" width="%s" height="%s"></svg>' %
- (self.options.docWidth, self.options.docHeight)))
+ self.doc = inkex.etree.parse(StringIO('<svg xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="%smm" height="%smm" viewBox="0 0 %s %s"></svg>' %
+ (self.options.docWidth, self.options.docHeight, self.options.docWidth, self.options.docHeight)))
+ inkex.etree.SubElement(self.doc.getroot(), inkex.addNS('namedview', 'sodipodi'), {inkex.addNS('document-units', 'inkscape'): 'mm'})
actualLayer = 0
self.layers = {}
if self.options.showMovements:
- self.layers[0] = inkex.etree.SubElement(self.doc.getroot(), 'g', {inkex.addNS('groupmode', 'inkscape'): 'layer', inkex.addNS('label', 'inkscape'): self.textMovements})
+ self.layers[0] = inkex.etree.SubElement(self.doc.getroot(), 'g', {inkex.addNS('groupmode', 'inkscape'): 'layer', inkex.addNS('label', 'inkscape'): self.textMovements, 'id': self.textMovements})
# parse paths
hpglData = self.hpglString.split(';')
if len(hpglData) < 3:
@@ -101,7 +102,7 @@ class hpglDecoder:
self.layers[layerNumber]
except KeyError:
self.layers[layerNumber] = inkex.etree.SubElement(self.doc.getroot(), 'g',
- {inkex.addNS('groupmode', 'inkscape'): 'layer', inkex.addNS('label', 'inkscape'): self.textPenNumber + layerNumber})
+ {inkex.addNS('groupmode', 'inkscape'): 'layer', inkex.addNS('label', 'inkscape'): self.textPenNumber + layerNumber, 'id': self.textPenNumber + layerNumber})
def addPathToLayer(self, path, layerNumber):
lineColor = '000000'
diff --git a/share/extensions/hpgl_input.py b/share/extensions/hpgl_input.py
index d85a5edd6..a85c32b34 100644
--- a/share/extensions/hpgl_input.py
+++ b/share/extensions/hpgl_input.py
@@ -36,8 +36,8 @@ parser.add_option('--showMovements', action='store', type='inkbool', dest='showM
(options, args) = parser.parse_args(inkex.sys.argv[1:])
# needed to initialize the document
-options.docWidth = 210.0 * 3.5433070866 # 210mm to pixels (DIN A4)
-options.docHeight = 297.0 * 3.5433070866 # 297mm to pixels (DIN A4)
+options.docWidth = 210.0 # 210mm (DIN A4)
+options.docHeight = 297.0 # 297mm (DIN A4)
# read file
fobj = open(args[0], 'r')
diff --git a/src/2geom/CMakeLists.txt b/src/2geom/CMakeLists.txt
index 3d516dc18..eeaecaa39 100644
--- a/src/2geom/CMakeLists.txt
+++ b/src/2geom/CMakeLists.txt
@@ -94,6 +94,7 @@ set(2geom_SRC
nearest-point.h
ord.h
path-intersection.h
+ path-sink.h
path.h
pathvector.h
piecewise.h
@@ -115,7 +116,6 @@ set(2geom_SRC
solver.h
svg-elliptical-arc.h
svg-path-parser.h
- svg-path.h
sweep.h
toposweep.h
transforms.h
diff --git a/src/2geom/ellipse.cpp b/src/2geom/ellipse.cpp
index bea99e5dd..2686844b2 100644
--- a/src/2geom/ellipse.cpp
+++ b/src/2geom/ellipse.cpp
@@ -36,6 +36,7 @@
#include <2geom/numeric/fitting-tool.h>
#include <2geom/numeric/fitting-model.h>
+using std::swap;
namespace Geom
{
@@ -102,7 +103,7 @@ void Ellipse::set(double A, double B, double C, double D, double E, double F)
// the solution is not unique so we choose always the ellipse
// with a rotation angle between 0 and PI/2
- if ( swap_axes ) std::swap(rx, ry);
+ if ( swap_axes ) swap(rx, ry);
if ( are_near(rot, M_PI/2)
|| are_near(rot, -M_PI/2)
|| are_near(rx, ry) )
@@ -233,7 +234,7 @@ Ellipse Ellipse::transformed(Affine const& m) const
Point new_center = center() * m;
Affine M = m.withoutTranslation();
Affine AM = A * M;
- if ( are_near(AM.det(), 0) )
+ if ( are_near(std::sqrt(fabs(AM.det())), 0) )
{
double angle;
if (AM[0] != 0)
@@ -262,7 +263,7 @@ Ellipse Ellipse::transformed(Affine const& m) const
Affine invm = M.inverse();
Q = invm * Q ;
- std::swap( invm[1], invm[2] );
+ swap( invm[1], invm[2] );
Q *= invm;
Ellipse e(Q[0], 2*Q[1], Q[3], 0, 0, -1);
e.m_centre = new_center;
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 8408d6270..d40aad802 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -259,6 +259,7 @@ set(inkscape_SRC
snapped-point.cpp
snapper.cpp
style.cpp
+ style-internal.cpp
svg-view-widget.cpp
svg-view.cpp
text-chemistry.cpp
@@ -433,6 +434,7 @@ set(inkscape_SRC
undo-stack-observer.h
unicoderange.h
uri-references.h
+ uri-test.h
uri.h
vanishing-point.h
verbs-test.h
diff --git a/src/Makefile_insert b/src/Makefile_insert
index 8872b045d..6d0d6b08c 100644
--- a/src/Makefile_insert
+++ b/src/Makefile_insert
@@ -210,7 +210,8 @@ ink_common_sources += \
streq.h \
strneq.h \
style.cpp style.h \
- style-enums.h style-internal.h \
+ style-enums.h \
+ style-internal.cpp style-internal.h \
svg-profile.h \
svg-view.cpp svg-view.h \
svg-view-widget.cpp svg-view-widget.h \
diff --git a/src/color.h b/src/color.h
index 746ecebbf..604dff0e3 100644
--- a/src/color.h
+++ b/src/color.h
@@ -46,6 +46,7 @@ struct SPColor {
SPColor& operator= (SPColor const& other);
bool operator == ( SPColor const& other ) const;
+ bool operator != ( SPColor const& other ) const { return !(*this == other); };
bool isClose( SPColor const& other, float epsilon ) const;
void set( float r, float g, float b );
diff --git a/src/desktop-style.cpp b/src/desktop-style.cpp
index bab9635a9..37f537cc5 100644
--- a/src/desktop-style.cpp
+++ b/src/desktop-style.cpp
@@ -722,10 +722,10 @@ objects_query_strokewidth (GSList *objects, SPStyle *style_res)
}
if ( style->stroke.isNone() && !(
- style->marker[SP_MARKER_LOC].set || // stroke width affects markers, so if there's no stroke but only markers then we should
- style->marker[SP_MARKER_LOC_START].set || // still calculate the stroke width
- style->marker[SP_MARKER_LOC_MID].set ||
- style->marker[SP_MARKER_LOC_END].set))
+ style->marker.set || // stroke width affects markers, so if there's no
+ style->marker_start.set || // stroke but only markers then we should
+ style->marker_mid.set || // still calculate the stroke width
+ style->marker_end.set))
{
continue;
}
@@ -1227,11 +1227,11 @@ objects_query_fontfamily (GSList *objects, SPStyle *style_res)
bool different = false;
int texts = 0;
- if (style_res->text->font_family.value) {
- g_free(style_res->text->font_family.value);
- style_res->text->font_family.value = NULL;
+ if (style_res->font_family.value) {
+ g_free(style_res->font_family.value);
+ style_res->font_family.value = NULL;
}
- style_res->text->font_family.set = FALSE;
+ style_res->font_family.set = FALSE;
for (GSList const *i = objects; i != NULL; i = i->next) {
SPObject *obj = SP_OBJECT (i->data);
@@ -1250,21 +1250,21 @@ objects_query_fontfamily (GSList *objects, SPStyle *style_res)
texts ++;
- if (style_res->text->font_family.value && style->text->font_family.value &&
- strcmp (style_res->text->font_family.value, style->text->font_family.value)) {
+ if (style_res->font_family.value && style->font_family.value &&
+ strcmp (style_res->font_family.value, style->font_family.value)) {
different = true; // different fonts
}
- if (style_res->text->font_family.value) {
- g_free(style_res->text->font_family.value);
- style_res->text->font_family.value = NULL;
+ if (style_res->font_family.value) {
+ g_free(style_res->font_family.value);
+ style_res->font_family.value = NULL;
}
- style_res->text->font_family.set = TRUE;
- style_res->text->font_family.value = g_strdup(style->text->font_family.value);
+ style_res->font_family.set = TRUE;
+ style_res->font_family.value = g_strdup(style->font_family.value);
}
- if (texts == 0 || !style_res->text->font_family.set) {
+ if (texts == 0 || !style_res->font_family.set) {
return QUERY_STYLE_NOTHING;
}
@@ -1285,11 +1285,11 @@ objects_query_fontspecification (GSList *objects, SPStyle *style_res)
bool different = false;
int texts = 0;
- if (style_res->text->font_specification.value) {
- g_free(style_res->text->font_specification.value);
- style_res->text->font_specification.value = NULL;
+ if (style_res->font_specification.value) {
+ g_free(style_res->font_specification.value);
+ style_res->font_specification.value = NULL;
}
- style_res->text->font_specification.set = FALSE;
+ style_res->font_specification.set = FALSE;
for (GSList const *i = objects; i != NULL; i = i->next) {
SPObject *obj = SP_OBJECT (i->data);
@@ -1308,21 +1308,21 @@ objects_query_fontspecification (GSList *objects, SPStyle *style_res)
texts ++;
- if (style_res->text->font_specification.value && style_res->text->font_specification.set &&
- style->text->font_specification.value && style->text->font_specification.set &&
- strcmp (style_res->text->font_specification.value, style->text->font_specification.value)) {
+ if (style_res->font_specification.value && style_res->font_specification.set &&
+ style->font_specification.value && style->font_specification.set &&
+ strcmp (style_res->font_specification.value, style->font_specification.value)) {
different = true; // different fonts
}
- if (style->text->font_specification.set) {
+ if (style->font_specification.set) {
- if (style_res->text->font_specification.value) {
- g_free(style_res->text->font_specification.value);
- style_res->text->font_specification.value = NULL;
+ if (style_res->font_specification.value) {
+ g_free(style_res->font_specification.value);
+ style_res->font_specification.value = NULL;
}
- style_res->text->font_specification.set = TRUE;
- style_res->text->font_specification.value = g_strdup(style->text->font_specification.value);
+ style_res->font_specification.set = TRUE;
+ style_res->font_specification.value = g_strdup(style->font_specification.value);
}
}
diff --git a/src/desktop-style.h b/src/desktop-style.h
index 47575de75..fc20e97b9 100644
--- a/src/desktop-style.h
+++ b/src/desktop-style.h
@@ -16,10 +16,10 @@
#include <glib.h>
class ColorRGBA;
-class SPCSSAttr;
-class SPDesktop;
-class SPObject;
-struct SPStyle;
+class SPCSSAttr;
+class SPDesktop;
+class SPObject;
+class SPStyle;
namespace Inkscape {
namespace XML {
class Node;
diff --git a/src/desktop.h b/src/desktop.h
index fec6249e9..be2bf891f 100644
--- a/src/desktop.h
+++ b/src/desktop.h
@@ -54,10 +54,10 @@ class ToolBase;
}
}
-class SPItem;
+class SPItem;
class SPNamedView;
-class SPObject;
-struct SPStyle;
+class SPObject;
+class SPStyle;
typedef struct _DocumentInterface DocumentInterface;//struct DocumentInterface;
namespace Gtk
diff --git a/src/display/drawing-group.h b/src/display/drawing-group.h
index 651e9d8af..ab1f9895d 100644
--- a/src/display/drawing-group.h
+++ b/src/display/drawing-group.h
@@ -14,7 +14,7 @@
#include "display/drawing-item.h"
-struct SPStyle;
+class SPStyle;
namespace Inkscape {
diff --git a/src/display/drawing-item.h b/src/display/drawing-item.h
index db803cf60..d89299eeb 100644
--- a/src/display/drawing-item.h
+++ b/src/display/drawing-item.h
@@ -20,7 +20,7 @@
#include <2geom/rect.h>
#include <2geom/affine.h>
-struct SPStyle;
+class SPStyle;
namespace Inkscape {
diff --git a/src/display/drawing-shape.h b/src/display/drawing-shape.h
index 405c789e0..f37de9ce7 100644
--- a/src/display/drawing-shape.h
+++ b/src/display/drawing-shape.h
@@ -15,7 +15,7 @@
#include "display/drawing-item.h"
#include "display/nr-style.h"
-struct SPStyle;
+class SPStyle;
class SPCurve;
namespace Inkscape {
diff --git a/src/display/drawing-text.h b/src/display/drawing-text.h
index b863ca2a4..41039d85d 100644
--- a/src/display/drawing-text.h
+++ b/src/display/drawing-text.h
@@ -15,7 +15,7 @@
#include "display/drawing-group.h"
#include "display/nr-style.h"
-struct SPStyle;
+class SPStyle;
class font_instance;
namespace Inkscape {
diff --git a/src/display/nr-filter-primitive.h b/src/display/nr-filter-primitive.h
index 94bd6abb0..214b2cfc5 100644
--- a/src/display/nr-filter-primitive.h
+++ b/src/display/nr-filter-primitive.h
@@ -16,7 +16,7 @@
#include "display/nr-filter-types.h"
#include "svg/svg-length.h"
-struct SPStyle;
+class SPStyle;
namespace Inkscape {
namespace Filters {
diff --git a/src/display/nr-style.cpp b/src/display/nr-style.cpp
index 125d0c6d6..3d2d36483 100644
--- a/src/display/nr-style.cpp
+++ b/src/display/nr-style.cpp
@@ -201,8 +201,7 @@ void NRStyle::set(SPStyle *style)
if( style->text_decoration_color.set ||
style->text_decoration_color.inherit ||
- style->text_decoration_color.currentcolor ||
- style->text_decoration_color.colorSet){
+ style->text_decoration_color.currentcolor ){
text_decoration_color.set(style->text_decoration_color.value.color);
text_decoration_useColor = true;
}
diff --git a/src/display/nr-style.h b/src/display/nr-style.h
index 717cda899..8b5a0ee3d 100644
--- a/src/display/nr-style.h
+++ b/src/display/nr-style.h
@@ -17,7 +17,7 @@
#include "color.h"
class SPPaintServer;
-struct SPStyle;
+class SPStyle;
namespace Inkscape {
class DrawingContext;
diff --git a/src/extension/CMakeLists.txt b/src/extension/CMakeLists.txt
index 9bc30a592..759c704f0 100644
--- a/src/extension/CMakeLists.txt
+++ b/src/extension/CMakeLists.txt
@@ -130,6 +130,7 @@ set(extension_SRC
internal/latex-pstricks-out.h
internal/latex-pstricks.h
internal/latex-text-renderer.h
+ internal/metafile-inout.h
internal/metafile-print.h
internal/odf.h
internal/pdf-input-cairo.h
diff --git a/src/extension/extension.cpp b/src/extension/extension.cpp
index d63ec7485..588efb521 100644
--- a/src/extension/extension.cpp
+++ b/src/extension/extension.cpp
@@ -262,6 +262,18 @@ Extension::check (void)
const char * inx_failure = _(" This is caused by an improper .inx file for this extension."
" An improper .inx file could have been caused by a faulty installation of Inkscape.");
+
+ // No need to include Windows only extensions
+ // See LP bug #1307554 for details - https://bugs.launchpad.net/inkscape/+bug/1307554
+#ifndef WIN32
+ const char* win_ext[] = {"com.vaxxine.print.win32"};
+ std::vector<std::string> v (win_ext, win_ext + sizeof(win_ext)/sizeof(win_ext[0]));
+ std::string ext_id(id);
+ if (std::find(v.begin(), v.end(), ext_id) != v.end()) {
+ printFailure(Glib::ustring(_("the extension is designed for Windows only.")) + inx_failure);
+ retval = false;
+ }
+#endif
if (id == NULL) {
printFailure(Glib::ustring(_("an ID was not defined for it.")) + inx_failure);
retval = false;
diff --git a/src/extension/implementation/implementation.h b/src/extension/implementation/implementation.h
index 9d679982a..fb323cd78 100644
--- a/src/extension/implementation/implementation.h
+++ b/src/extension/implementation/implementation.h
@@ -29,7 +29,7 @@ namespace Gtk {
}
class SPDocument;
-struct SPStyle;
+class SPStyle;
namespace Inkscape {
diff --git a/src/extension/internal/emf-inout.cpp b/src/extension/internal/emf-inout.cpp
index eae3bfb5a..6455e7555 100644
--- a/src/extension/internal/emf-inout.cpp
+++ b/src/extension/internal/emf-inout.cpp
@@ -33,9 +33,8 @@
#include <stdint.h>
#include <libuemf/symbol_convert.h>
-#include "sp-root.h"
+#include "sp-root.h" // even though it is included indirectly by wmf-inout.h
#include "sp-path.h"
-#include "style.h"
#include "print.h"
#include "extension/system.h"
#include "extension/print.h"
@@ -45,12 +44,8 @@
#include "display/drawing.h"
#include "display/drawing-item.h"
#include "clear-n_.h"
-#include "document.h"
-#include "util/units.h"
-#include "shape-editor.h"
-#include "sp-namedview.h"
-#include "document-undo.h"
-#include "inkscape.h"
+#include "util/units.h" // even though it is included indirectly by wmf-inout.h
+#include "inkscape.h" // even though it is included indirectly by wmf-inout.h
#include "emf-print.h"
#include "emf-inout.h"
@@ -273,54 +268,54 @@ uint32_t Emf::add_hatch(PEMF_CALLBACK_DATA d, uint32_t hatchType, U_COLORREF hat
if(d->hatches.count == d->hatches.size){ enlarge_hatches(d); }
d->hatches.strings[d->hatches.count++]=strdup(hpathname);
- *(d->defs) += "\n";
+ d->defs += "\n";
switch(hatchType){
case U_HS_HORIZONTAL:
- *(d->defs) += " <path id=\"";
- *(d->defs) += hpathname;
- *(d->defs) += "\" d=\"M 0 0 6 0\" style=\"fill:none;stroke:#";
- *(d->defs) += tmpcolor;
- *(d->defs) += "\" />\n";
+ d->defs += " <path id=\"";
+ d->defs += hpathname;
+ d->defs += "\" d=\"M 0 0 6 0\" style=\"fill:none;stroke:#";
+ d->defs += tmpcolor;
+ d->defs += "\" />\n";
break;
case U_HS_VERTICAL:
- *(d->defs) += " <path id=\"";
- *(d->defs) += hpathname;
- *(d->defs) += "\" d=\"M 0 0 0 6\" style=\"fill:none;stroke:#";
- *(d->defs) += tmpcolor;
- *(d->defs) += "\" />\n";
+ d->defs += " <path id=\"";
+ d->defs += hpathname;
+ d->defs += "\" d=\"M 0 0 0 6\" style=\"fill:none;stroke:#";
+ d->defs += tmpcolor;
+ d->defs += "\" />\n";
break;
case U_HS_FDIAGONAL:
- *(d->defs) += " <line id=\"sub";
- *(d->defs) += hpathname;
- *(d->defs) += "\" x1=\"-1\" y1=\"-1\" x2=\"7\" y2=\"7\" stroke=\"#";
- *(d->defs) += tmpcolor;
- *(d->defs) += "\"/>\n";
+ d->defs += " <line id=\"sub";
+ d->defs += hpathname;
+ d->defs += "\" x1=\"-1\" y1=\"-1\" x2=\"7\" y2=\"7\" stroke=\"#";
+ d->defs += tmpcolor;
+ d->defs += "\"/>\n";
break;
case U_HS_BDIAGONAL:
- *(d->defs) += " <line id=\"sub";
- *(d->defs) += hpathname;
- *(d->defs) += "\" x1=\"-1\" y1=\"7\" x2=\"7\" y2=\"-1\" stroke=\"#";
- *(d->defs) += tmpcolor;
- *(d->defs) += "\"/>\n";
+ d->defs += " <line id=\"sub";
+ d->defs += hpathname;
+ d->defs += "\" x1=\"-1\" y1=\"7\" x2=\"7\" y2=\"-1\" stroke=\"#";
+ d->defs += tmpcolor;
+ d->defs += "\"/>\n";
break;
case U_HS_CROSS:
- *(d->defs) += " <path id=\"";
- *(d->defs) += hpathname;
- *(d->defs) += "\" d=\"M 0 0 6 0 M 0 0 0 6\" style=\"fill:none;stroke:#";
- *(d->defs) += tmpcolor;
- *(d->defs) += "\" />\n";
+ d->defs += " <path id=\"";
+ d->defs += hpathname;
+ d->defs += "\" d=\"M 0 0 6 0 M 0 0 0 6\" style=\"fill:none;stroke:#";
+ d->defs += tmpcolor;
+ d->defs += "\" />\n";
break;
case U_HS_DIAGCROSS:
- *(d->defs) += " <line id=\"subfd";
- *(d->defs) += hpathname;
- *(d->defs) += "\" x1=\"-1\" y1=\"-1\" x2=\"7\" y2=\"7\" stroke=\"#";
- *(d->defs) += tmpcolor;
- *(d->defs) += "\"/>\n";
- *(d->defs) += " <line id=\"subbd";
- *(d->defs) += hpathname;
- *(d->defs) += "\" x1=\"-1\" y1=\"7\" x2=\"7\" y2=\"-1\" stroke=\"#";
- *(d->defs) += tmpcolor;
- *(d->defs) += "\"/>\n";
+ d->defs += " <line id=\"subfd";
+ d->defs += hpathname;
+ d->defs += "\" x1=\"-1\" y1=\"-1\" x2=\"7\" y2=\"7\" stroke=\"#";
+ d->defs += tmpcolor;
+ d->defs += "\"/>\n";
+ d->defs += " <line id=\"subbd";
+ d->defs += hpathname;
+ d->defs += "\" x1=\"-1\" y1=\"7\" x2=\"7\" y2=\"-1\" stroke=\"#";
+ d->defs += tmpcolor;
+ d->defs += "\"/>\n";
break;
case U_HS_SOLIDCLR:
case U_HS_DITHEREDCLR:
@@ -329,12 +324,12 @@ uint32_t Emf::add_hatch(PEMF_CALLBACK_DATA d, uint32_t hatchType, U_COLORREF hat
case U_HS_SOLIDBKCLR:
case U_HS_DITHEREDBKCLR:
default:
- *(d->defs) += " <path id=\"";
- *(d->defs) += hpathname;
- *(d->defs) += "\" d=\"M 0 0 6 0 6 6 0 6 z\" style=\"fill:#";
- *(d->defs) += tmpcolor;
- *(d->defs) += ";stroke:none";
- *(d->defs) += "\" />\n";
+ d->defs += " <path id=\"";
+ d->defs += hpathname;
+ d->defs += "\" d=\"M 0 0 6 0 6 6 0 6 z\" style=\"fill:#";
+ d->defs += tmpcolor;
+ d->defs += ";stroke:none";
+ d->defs += "\" />\n";
break;
}
}
@@ -396,12 +391,12 @@ uint32_t Emf::add_hatch(PEMF_CALLBACK_DATA d, uint32_t hatchType, U_COLORREF hat
if(!idx){ // add it if not already present
if(d->hatches.count == d->hatches.size){ enlarge_hatches(d); }
d->hatches.strings[d->hatches.count++]=strdup(hatchname);
- *(d->defs) += "\n";
- *(d->defs) += " <pattern id=\"";
- *(d->defs) += hatchname;
- *(d->defs) += "\" xlink:href=\"#EMFhbasepattern\">\n";
- *(d->defs) += refpath;
- *(d->defs) += " </pattern>\n";
+ d->defs += "\n";
+ d->defs += " <pattern id=\"";
+ d->defs += hatchname;
+ d->defs += "\" xlink:href=\"#EMFhbasepattern\">\n";
+ d->defs += refpath;
+ d->defs += " </pattern>\n";
idx = d->hatches.count;
}
}
@@ -414,12 +409,12 @@ uint32_t Emf::add_hatch(PEMF_CALLBACK_DATA d, uint32_t hatchType, U_COLORREF hat
if(d->hatches.count == d->hatches.size){ enlarge_hatches(d); }
d->hatches.strings[d->hatches.count++]=strdup(hbkname);
- *(d->defs) += "\n";
- *(d->defs) += " <rect id=\"";
- *(d->defs) += hbkname;
- *(d->defs) += "\" x=\"0\" y=\"0\" width=\"6\" height=\"6\" fill=\"#";
- *(d->defs) += bkcolor;
- *(d->defs) += "\" />\n";
+ d->defs += "\n";
+ d->defs += " <rect id=\"";
+ d->defs += hbkname;
+ d->defs += "\" x=\"0\" y=\"0\" width=\"6\" height=\"6\" fill=\"#";
+ d->defs += bkcolor;
+ d->defs += "\" />\n";
}
// this is the pattern, its name will show up in Inkscape's pattern selector
@@ -428,15 +423,15 @@ uint32_t Emf::add_hatch(PEMF_CALLBACK_DATA d, uint32_t hatchType, U_COLORREF hat
if(!idx){ // add it if not already present
if(d->hatches.count == d->hatches.size){ enlarge_hatches(d); }
d->hatches.strings[d->hatches.count++]=strdup(hatchname);
- *(d->defs) += "\n";
- *(d->defs) += " <pattern id=\"";
- *(d->defs) += hatchname;
- *(d->defs) += "\" xlink:href=\"#EMFhbasepattern\">\n";
- *(d->defs) += " <use xlink:href=\"#";
- *(d->defs) += hbkname;
- *(d->defs) += "\" />\n";
- *(d->defs) += refpath;
- *(d->defs) += " </pattern>\n";
+ d->defs += "\n";
+ d->defs += " <pattern id=\"";
+ d->defs += hatchname;
+ d->defs += "\" xlink:href=\"#EMFhbasepattern\">\n";
+ d->defs += " <use xlink:href=\"#";
+ d->defs += hbkname;
+ d->defs += "\" />\n";
+ d->defs += refpath;
+ d->defs += " </pattern>\n";
idx = d->hatches.count;
}
}
@@ -544,35 +539,35 @@ uint32_t Emf::add_image(PEMF_CALLBACK_DATA d, void *pEmr, uint32_t cbBits, uint
sprintf(imagename,"EMFimage%d",idx++);
sprintf(xywh," x=\"0\" y=\"0\" width=\"%d\" height=\"%d\" ",width,height); // reuse this buffer
- *(d->defs) += "\n";
- *(d->defs) += " <image id=\"";
- *(d->defs) += imagename;
- *(d->defs) += "\"\n ";
- *(d->defs) += xywh;
- *(d->defs) += "\n";
- if(dibparams == U_BI_JPEG){ *(d->defs) += " xlink:href=\"data:image/jpeg;base64,"; }
- else { *(d->defs) += " xlink:href=\"data:image/png;base64,"; }
- *(d->defs) += base64String;
- *(d->defs) += "\"\n";
- *(d->defs) += " preserveAspectRatio=\"none\"\n";
- *(d->defs) += " />\n";
-
-
- *(d->defs) += "\n";
- *(d->defs) += " <pattern id=\"";
- *(d->defs) += imagename;
- *(d->defs) += "_ref\"\n ";
- *(d->defs) += xywh;
- *(d->defs) += "\n patternUnits=\"userSpaceOnUse\"";
- *(d->defs) += " >\n";
- *(d->defs) += " <use id=\"";
- *(d->defs) += imagename;
- *(d->defs) += "_ign\" ";
- *(d->defs) += " xlink:href=\"#";
- *(d->defs) += imagename;
- *(d->defs) += "\" />\n";
- *(d->defs) += " ";
- *(d->defs) += " </pattern>\n";
+ d->defs += "\n";
+ d->defs += " <image id=\"";
+ d->defs += imagename;
+ d->defs += "\"\n ";
+ d->defs += xywh;
+ d->defs += "\n";
+ if(dibparams == U_BI_JPEG){ d->defs += " xlink:href=\"data:image/jpeg;base64,"; }
+ else { d->defs += " xlink:href=\"data:image/png;base64,"; }
+ d->defs += base64String;
+ d->defs += "\"\n";
+ d->defs += " preserveAspectRatio=\"none\"\n";
+ d->defs += " />\n";
+
+
+ d->defs += "\n";
+ d->defs += " <pattern id=\"";
+ d->defs += imagename;
+ d->defs += "_ref\"\n ";
+ d->defs += xywh;
+ d->defs += "\n patternUnits=\"userSpaceOnUse\"";
+ d->defs += " >\n";
+ d->defs += " <use id=\"";
+ d->defs += imagename;
+ d->defs += "_ign\" ";
+ d->defs += " xlink:href=\"#";
+ d->defs += imagename;
+ d->defs += "\" />\n";
+ d->defs += " ";
+ d->defs += " </pattern>\n";
}
g_free(base64String);//wait until this point to free because it might be a duplicate image
@@ -596,17 +591,17 @@ uint32_t Emf::add_image(PEMF_CALLBACK_DATA d, void *pEmr, uint32_t cbBits, uint
d->images.strings[d->images.count++]=strdup(base64String);
sprintf(imrotname,"EMFimage%d",idx++);
- *(d->defs) += "\n";
- *(d->defs) += " <pattern\n";
- *(d->defs) += " id=\"";
- *(d->defs) += imrotname;
- *(d->defs) += "_ref\"\n";
- *(d->defs) += " xlink:href=\"#";
- *(d->defs) += imagename;
- *(d->defs) += "_ref\"\n";
- *(d->defs) += " patternTransform=";
- *(d->defs) += current_matrix(d, 0.0, 0.0, 0); //j use offset 0,0
- *(d->defs) += " />\n";
+ d->defs += "\n";
+ d->defs += " <pattern\n";
+ d->defs += " id=\"";
+ d->defs += imrotname;
+ d->defs += "_ref\"\n";
+ d->defs += " xlink:href=\"#";
+ d->defs += imagename;
+ d->defs += "_ref\"\n";
+ d->defs += " patternTransform=";
+ d->defs += current_matrix(d, 0.0, 0.0, 0); //j use offset 0,0
+ d->defs += " />\n";
}
g_free(base64String);
}
@@ -716,7 +711,7 @@ uint32_t Emf::add_gradient(PEMF_CALLBACK_DATA d, uint32_t gradientType, U_TRIVER
stmp << tmpcolor2;
stmp << ";stop-opacity:1\" />\n";
stmp << " </linearGradient>\n";
- *(d->defs) += stmp.str().c_str();
+ d->defs += stmp.str().c_str();
}
return(idx-1);
@@ -811,8 +806,8 @@ Emf::output_style(PEMF_CALLBACK_DATA d, int iType)
// tmp_id << "\n\tid=\"" << (d->id++) << "\"";
-// *(d->outsvg) += tmp_id.str().c_str();
- *(d->outsvg) += "\n\tstyle=\"";
+// d->outsvg += tmp_id.str().c_str();
+ d->outsvg += "\n\tstyle=\"";
if (iType == U_EMR_STROKEPATH || !d->dc[d->level].fill_set) {
tmp_style << "fill:none;";
} else {
@@ -936,7 +931,7 @@ Emf::output_style(PEMF_CALLBACK_DATA d, int iType)
tmp_style << "\n\tclip-path=\"url(#clipEmfPath" << d->id << ")\" ";
clipset = false;
- *(d->outsvg) += tmp_style.str().c_str();
+ d->outsvg += tmp_style.str().c_str();
}
@@ -1104,14 +1099,11 @@ Emf::select_extpen(PEMF_CALLBACK_DATA d, int index)
if (!d->dc[d->level].style.stroke_dasharray.values.empty() && (d->level==0 || (d->level>0 && d->dc[d->level].style.stroke_dasharray.values!=d->dc[d->level-1].style.stroke_dasharray.values)))
d->dc[d->level].style.stroke_dasharray.values.clear();
for (unsigned int i=0; i<pEmr->elp.elpNumEntries; i++) {
- int cur_level = d->level;
- d->level = d->emf_obj[index].level;
// Doing it this way typically results in a pattern that is tiny, better to assume the array
// is the same scale as for dot/dash below, that is, no scaling should be applied
// double dash_length = pix_to_abs_size( d, pEmr->elp.elpStyleEntry[i] );
double dash_length = pEmr->elp.elpStyleEntry[i];
- d->level = cur_level;
- d->dc[d->level].style.stroke_dasharray.values[i] = dash_length;
+ d->dc[d->level].style.stroke_dasharray.values.push_back(dash_length);
}
d->dc[d->level].style.stroke_dasharray.set = 1;
} else {
@@ -1525,8 +1517,8 @@ void Emf::common_image_extraction(PEMF_CALLBACK_DATA d, void *pEmr,
tmp_image << " preserveAspectRatio=\"none\"\n";
tmp_image << "/> \n";
- *(d->outsvg) += tmp_image.str().c_str();
- *(d->path) = "";
+ d->outsvg += tmp_image.str().c_str();
+ d->path = "";
}
/**
@@ -1595,7 +1587,7 @@ int Emf::myEnhMetaFileProc(char *contents, unsigned int length, PEMF_CALLBACK_DA
TR_layout_2_svg(d->tri);
SVGOStringStream ts;
ts << d->tri->out;
- *(d->outsvg) += ts.str().c_str();
+ d->outsvg += ts.str().c_str();
d->tri = trinfo_clear(d->tri);
}
if(d->dc[d->level].dirty){ //Apply the delayed background changes, clear the flag
@@ -1652,7 +1644,7 @@ std::cout << "BEFORE DRAW"
)
){
// std::cout << "PATH DRAW at TOP" << std::endl;
- *(d->outsvg) += " <path "; // this is the ONLY place <path should be used!!! One exception, gradientfill.
+ d->outsvg += " <path "; // this is the ONLY place <path should be used!!! One exception, gradientfill.
if(d->drawtype){ // explicit draw type EMR record
output_style(d, d->drawtype);
}
@@ -1662,11 +1654,11 @@ std::cout << "BEFORE DRAW"
else {
output_style(d, U_EMR_STROKEPATH);
}
- *(d->outsvg) += "\n\t";
- *(d->outsvg) += "\n\td=\""; // this is the ONLY place d=" should be used!!!! One exception, gradientfill.
- *(d->outsvg) += *(d->path);
- *(d->outsvg) += " \" /> \n";
- *(d->path) = "";
+ d->outsvg += "\n\t";
+ d->outsvg += "\n\td=\""; // this is the ONLY place d=" should be used!!!! One exception, gradientfill.
+ d->outsvg += d->path;
+ d->outsvg += " \" /> \n";
+ d->path = "";
// reset the flags
d->mask = 0;
d->drawtype = 0;
@@ -1679,12 +1671,12 @@ std::cout << "BEFORE DRAW"
{
dbg_str << "<!-- U_EMR_HEADER -->\n";
- *(d->outdef) += "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n";
+ d->outdef += "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n";
if (d->pDesc) {
- *(d->outdef) += "<!-- ";
- *(d->outdef) += d->pDesc;
- *(d->outdef) += " -->\n";
+ d->outdef += "<!-- ";
+ d->outdef += d->pDesc;
+ d->outdef += " -->\n";
}
PU_EMRHEADER pEmr = (PU_EMRHEADER) lpEMFR;
@@ -1745,8 +1737,8 @@ std::cout << "BEFORE DRAW"
tmp_outdef <<
" width=\"" << d->MMX << "mm\"\n" <<
" height=\"" << d->MMY << "mm\">\n";
- *(d->outdef) += tmp_outdef.str().c_str();
- *(d->outdef) += "<defs>"; // temporary end of header
+ d->outdef += tmp_outdef.str().c_str();
+ d->outdef += "<defs>"; // temporary end of header
// d->defs holds any defines which are read in.
@@ -2015,7 +2007,7 @@ std::cout << "BEFORE DRAW"
dbg_str << "<!-- U_EMR_EOF -->\n";
tmp_outsvg << "</svg>\n";
- *(d->outsvg) = *(d->outdef) + *(d->defs) + *(d->outsvg);
+ d->outsvg = d->outdef + d->defs + d->outsvg;
OK=0;
break;
}
@@ -2167,8 +2159,8 @@ std::cout << "BEFORE DRAW"
tmp_rectangle << "\n transform=" << current_matrix(d, dx, dy, 1); // calculate appropriate offset
tmp_rectangle << "/>\n</clipPath>";
- *(d->outdef) += tmp_rectangle.str().c_str();
- *(d->path) = "";
+ d->outdef += tmp_rectangle.str().c_str();
+ d->path = "";
break;
}
case U_EMR_SCALEVIEWPORTEXTEX: dbg_str << "<!-- U_EMR_SCALEVIEWPORTEXTEX -->\n"; break;
@@ -2453,12 +2445,12 @@ std::cout << "BEFORE DRAW"
d->mask |= emr_mask;
- *(d->outsvg) += " <ellipse ";
+ d->outsvg += " <ellipse ";
output_style(d, lpEMFR->iType); //
- *(d->outsvg) += "\n\t";
- *(d->outsvg) += tmp_ellipse.str().c_str();
- *(d->outsvg) += "/> \n";
- *(d->path) = "";
+ d->outsvg += "\n\t";
+ d->outsvg += tmp_ellipse.str().c_str();
+ d->outsvg += "/> \n";
+ d->path = "";
break;
}
case U_EMR_RECTANGLE:
@@ -2679,7 +2671,7 @@ std::cout << "BEFORE DRAW"
// The next line should never be needed, should have been handled before main switch
// qualifier added because EMF's encountered where moveto preceded beginpath followed by lineto
if(d->mask & U_DRAW_VISIBLE){
- *(d->path) = "";
+ d->path = "";
}
d->mask |= emr_mask;
break;
@@ -2739,7 +2731,7 @@ std::cout << "BEFORE DRAW"
case U_EMR_ABORTPATH:
{
dbg_str << "<!-- U_EMR_ABORTPATH -->\n";
- *(d->path) = "";
+ d->path = "";
d->drawtype = 0;
break;
}
@@ -3048,7 +3040,7 @@ std::cout << "BEFORE DRAW"
TR_layout_analyze(d->tri);
TR_layout_2_svg(d->tri);
ts << d->tri->out;
- *(d->outsvg) += ts.str().c_str();
+ d->outsvg += ts.str().c_str();
d->tri = trinfo_clear(d->tri);
(void) trinfo_load_textrec(d->tri, &tsp, tsp.ori,TR_EMFBOT); // ignore return status, it must work
}
@@ -3292,7 +3284,7 @@ std::cout << "BEFORE DRAW"
tmp_rectangle << d->gradients.strings[fill_idx];
tmp_rectangle << ");\"\n/>\n";
}
- *(d->outsvg) += tmp_rectangle.str().c_str();
+ d->outsvg += tmp_rectangle.str().c_str();
}
else if(pEmr->ulMode == U_GRADIENT_FILL_TRIANGLE){
SVGOStringStream tmp_triangle;
@@ -3310,9 +3302,9 @@ std::cout << "BEFORE DRAW"
tmp_triangle << tmpcolor;
tmp_triangle << ";\"\n/>\n";
}
- *(d->outsvg) += tmp_triangle.str().c_str();
+ d->outsvg += tmp_triangle.str().c_str();
}
- *(d->path) = "";
+ d->path = "";
// if it is anything else the record is bogus, so ignore it
break;
}
@@ -3325,13 +3317,13 @@ std::cout << "BEFORE DRAW"
break;
} //end of switch
// When testing, uncomment the following to place a comment for each processed EMR record in the SVG
-// *(d->outsvg) += dbg_str.str().c_str();
- *(d->outsvg) += tmp_outsvg.str().c_str();
- *(d->path) += tmp_path.str().c_str();
+// d->outsvg += dbg_str.str().c_str();
+ d->outsvg += tmp_outsvg.str().c_str();
+ d->path += tmp_path.str().c_str();
} //end of while
// When testing, uncomment the following to show the final SVG derived from the EMF
-// std::cout << *(d->outsvg) << std::endl;
+// std::cout << d->outsvg << std::endl;
(void) emr_properties(U_EMR_INVALID); // force the release of the lookup table memory, returned value is irrelevant
return 1;
@@ -3349,61 +3341,20 @@ Emf::open( Inkscape::Extension::Input * /*mod*/, const gchar *uri )
{
EMF_CALLBACK_DATA d;
-// memset(&d, 0, sizeof(d));
- memset(&d, 0, sizeof(EMF_CALLBACK_DATA));
-
- for(int i = 0; i < EMF_MAX_DC+1; i++){ // be sure all values and pointers are empty to start with
- memset(&(d.dc[i]),0,sizeof(EMF_DEVICE_CONTEXT));
- }
-
- d.dc[0].worldTransform.eM11 = 1.0;
- d.dc[0].worldTransform.eM12 = 0.0;
- d.dc[0].worldTransform.eM21 = 0.0;
- d.dc[0].worldTransform.eM22 = 1.0;
- d.dc[0].worldTransform.eDx = 0.0;
- d.dc[0].worldTransform.eDy = 0.0;
- d.dc[0].font_name = strdup("Arial"); // Default font, EMF spec says device can pick whatever it wants
- d.dc[0].textColor = U_RGB(0, 0, 0); // default foreground color (black)
- d.dc[0].bkColor = U_RGB(255, 255, 255); // default background color (white)
- d.dc[0].bkMode = U_TRANSPARENT;
- d.dc[0].dirty = 0;
-
if (uri == NULL) {
return NULL;
}
- d.outsvg = new Glib::ustring("");
- d.path = new Glib::ustring("");
- d.outdef = new Glib::ustring("");
- d.defs = new Glib::ustring("");
- d.mask = 0;
- d.drawtype = 0;
- d.arcdir = U_AD_COUNTERCLOCKWISE;
- d.dwRop2 = U_R2_COPYPEN;
- d.dwRop3 = 0;
- d.E2IdirY = 1.0;
- d.D2PscaleX = 1.0;
- d.D2PscaleY = 1.0;
- d.hatches.size = 0;
- d.hatches.count = 0;
- d.hatches.strings = NULL;
- d.images.size = 0;
- d.images.count = 0;
- d.images.strings = NULL;
- d.gradients.size = 0;
- d.gradients.count = 0;
- d.gradients.strings = NULL;
-
// set up the size default for patterns in defs. This might not be referenced if there are no patterns defined in the drawing.
- *(d.defs) += "\n";
- *(d.defs) += " <pattern id=\"EMFhbasepattern\" \n";
- *(d.defs) += " patternUnits=\"userSpaceOnUse\"\n";
- *(d.defs) += " width=\"6\" \n";
- *(d.defs) += " height=\"6\" \n";
- *(d.defs) += " x=\"0\" \n";
- *(d.defs) += " y=\"0\"> \n";
- *(d.defs) += " </pattern> \n";
+ d.defs += "\n";
+ d.defs += " <pattern id=\"EMFhbasepattern\" \n";
+ d.defs += " patternUnits=\"userSpaceOnUse\"\n";
+ d.defs += " width=\"6\" \n";
+ d.defs += " height=\"6\" \n";
+ d.defs += " x=\"0\" \n";
+ d.defs += " y=\"0\"> \n";
+ d.defs += " </pattern> \n";
size_t length;
@@ -3425,12 +3376,8 @@ Emf::open( Inkscape::Extension::Input * /*mod*/, const gchar *uri )
// std::cout << "SVG Output: " << std::endl << *(d.outsvg) << std::endl;
- SPDocument *doc = SPDocument::createNewDocFromMem(d.outsvg->c_str(), strlen(d.outsvg->c_str()), TRUE);
+ SPDocument *doc = SPDocument::createNewDocFromMem(d.outsvg.c_str(), strlen(d.outsvg.c_str()), TRUE);
- delete d.outsvg;
- delete d.path;
- delete d.outdef;
- delete d.defs;
free_emf_strings(d.hatches);
free_emf_strings(d.images);
free_emf_strings(d.gradients);
@@ -3450,39 +3397,7 @@ Emf::open( Inkscape::Extension::Input * /*mod*/, const gchar *uri )
d.tri = trinfo_release_except_FC(d.tri);
- // Set viewBox if it doesn't exist
- if (doc && !doc->getRoot()->viewBox_set) {
- bool saved = Inkscape::DocumentUndo::getUndoSensitive(doc);
- Inkscape::DocumentUndo::setUndoSensitive(doc, false);
-
- doc->ensureUpToDate();
-
- // Set document unit
- Inkscape::XML::Node *repr = sp_document_namedview(doc, 0)->getRepr();
- Inkscape::SVGOStringStream os;
- Inkscape::Util::Unit const* doc_unit = doc->getWidth().unit;
- os << doc_unit->abbr;
- repr->setAttribute("inkscape:document-units", os.str().c_str());
-
- // Set viewBox
- doc->setViewBox(Geom::Rect::from_xywh(0, 0, doc->getWidth().value(doc_unit), doc->getHeight().value(doc_unit)));
- doc->ensureUpToDate();
-
- // Scale and translate objects
- double scale = Inkscape::Util::Quantity::convert(1, "px", doc_unit);
- ShapeEditor::blockSetItem(true);
- 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);
- }
+ setViewBoxIfMissing(doc);
return doc;
}
diff --git a/src/extension/internal/emf-inout.h b/src/extension/internal/emf-inout.h
index a97cb0a54..f15db5518 100644
--- a/src/extension/internal/emf-inout.h
+++ b/src/extension/internal/emf-inout.h
@@ -27,20 +27,59 @@ namespace Internal {
#define DIRTY_FILL 0x02
#define DIRTY_STROKE 0x04
-typedef struct {
+typedef struct emf_object {
+ emf_object() :
+ type(0),
+ level(0),
+ lpEMFR(NULL)
+ {};
int type;
int level;
char *lpEMFR;
} EMF_OBJECT, *PEMF_OBJECT;
-typedef struct {
+typedef struct emf_strings {
+ emf_strings() :
+ size(0),
+ count(0),
+ strings(NULL)
+ {};
int size; // number of slots allocated in strings
int count; // number of slots used in strings
char **strings; // place to store strings
} EMF_STRINGS, *PEMF_STRINGS;
typedef struct emf_device_context {
- struct SPStyle style;
+ emf_device_context() :
+ // SPStyle: class with constructor
+ font_name(NULL),
+ stroke_set(false), stroke_mode(0), stroke_idx(0), stroke_recidx(0),
+ fill_set(false), fill_mode(0), fill_idx(0), fill_recidx(0),
+ dirty(0),
+ // sizeWnd, sizeView, winorg, vieworg,
+ ScaleInX(0), ScaleInY(0),
+ ScaleOutX(0), ScaleOutY(0),
+ bkMode(U_TRANSPARENT),
+ // bkColor, textColor
+ textAlign(0)
+ // worldTransform, cur
+ {
+ font_name = strdup("Arial"); // Default font, EMF spec says device can pick whatever it wants
+ sizeWnd = sizel_set( 0.0, 0.0 );
+ sizeView = sizel_set( 0.0, 0.0 );
+ winorg = point32_set( 0.0, 0.0 );
+ vieworg = point32_set( 0.0, 0.0 );
+ bkColor = U_RGB(255, 255, 255); // default foreground color (white)
+ textColor = U_RGB(0, 0, 0); // default foreground color (black)
+ worldTransform.eM11 = 1.0;
+ worldTransform.eM12 = 0.0;
+ worldTransform.eM21 = 0.0;
+ worldTransform.eM22 = 1.0;
+ worldTransform.eDx = 0.0;
+ worldTransform.eDy = 0.0;
+ cur = point32_set( 0, 0 );
+ };
+ SPStyle style;
char *font_name;
bool stroke_set;
int stroke_mode; // enumeration from drawmode, not used if fill_set is not True
@@ -67,11 +106,34 @@ typedef struct emf_device_context {
#define EMF_MAX_DC 128
-typedef struct {
- Glib::ustring *outsvg;
- Glib::ustring *path;
- Glib::ustring *outdef;
- Glib::ustring *defs;
+typedef struct emf_callback_data {
+
+ emf_callback_data() :
+ // dc: array, structure w/ constructor
+ level(0),
+ E2IdirY(1.0),
+ D2PscaleX(1.0), D2PscaleY(1.0),
+ MM100InX(0), MM100InY(0),
+ PixelsInX(0), PixelsInY(0),
+ PixelsOutX(0), PixelsOutY(0),
+ ulCornerInX(0), ulCornerInY(0),
+ ulCornerOutX(0), ulCornerOutY(0),
+ mask(0),
+ arcdir(U_AD_COUNTERCLOCKWISE),
+ dwRop2(U_R2_COPYPEN), dwRop3(0),
+ MMX(0),MMY(0),
+ id(0), drawtype(0),
+ pDesc(NULL),
+ // hatches, images, gradients, struct w/ constructor
+ tri(NULL),
+ n_obj(0)
+ // emf_obj;
+ {};
+
+ Glib::ustring outsvg;
+ Glib::ustring path;
+ Glib::ustring outdef;
+ Glib::ustring defs;
EMF_DEVICE_CONTEXT dc[EMF_MAX_DC+1]; // FIXME: This should be dynamic..
int level;
diff --git a/src/extension/internal/emf-print.cpp b/src/extension/internal/emf-print.cpp
index f4f7f08cb..8b80fec1c 100644
--- a/src/extension/internal/emf-print.cpp
+++ b/src/extension/internal/emf-print.cpp
@@ -1869,7 +1869,7 @@ unsigned int PrintEmf::text(Inkscape::Extension::Print * /*mod*/, char const *te
_lookup_ppt_fontfix("Convert To Wingdings", params);
break;
default: //also CVTNON
- _lookup_ppt_fontfix(style->text->font_family.value, params);
+ _lookup_ppt_fontfix(style->font_family.value, params);
break;
}
if (params.f2 != 0 || params.f3 != 0) {
@@ -1897,7 +1897,7 @@ unsigned int PrintEmf::text(Inkscape::Extension::Print * /*mod*/, char const *te
// of the special fonts.
uint16_t *wfacename;
if (!newfont) {
- wfacename = U_Utf8ToUtf16le(style->text->font_family.value, 0, NULL);
+ wfacename = U_Utf8ToUtf16le(style->font_family.value, 0, NULL);
} else {
wfacename = U_Utf8ToUtf16le(FontName(newfont), 0, NULL);
}
diff --git a/src/extension/internal/metafile-inout.cpp b/src/extension/internal/metafile-inout.cpp
index 1d419a6a0..53bb86d24 100644
--- a/src/extension/internal/metafile-inout.cpp
+++ b/src/extension/internal/metafile-inout.cpp
@@ -17,6 +17,7 @@
#include <glib.h>
#include <glibmm/miscutils.h>
+#include "sp-root.h"
#include "display/curve.h"
#include "extension/internal/metafile-inout.h" // picks up PNG
#include "extension/print.h"
@@ -27,6 +28,13 @@
#include "sp-pattern.h"
#include "sp-radial-gradient.h"
#include "style.h"
+#include "document.h"
+#include "util/units.h"
+#include "shape-editor.h"
+#include "sp-namedview.h"
+#include "document-undo.h"
+#include "inkscape.h"
+#include "preferences.h"
namespace Inkscape {
namespace Extension {
@@ -193,6 +201,61 @@ gchar *Metafile::bad_image_png(void){
return(gstring);
}
+/* If the viewBox is missing, set one
+*/
+void Metafile::setViewBoxIfMissing(SPDocument *doc) {
+
+ if (doc && !doc->getRoot()->viewBox_set) {
+ bool saved = Inkscape::DocumentUndo::getUndoSensitive(doc);
+ Inkscape::DocumentUndo::setUndoSensitive(doc, false);
+
+ doc->ensureUpToDate();
+
+ // Set document unit
+ Inkscape::XML::Node *repr = sp_document_namedview(doc, 0)->getRepr();
+ Inkscape::SVGOStringStream os;
+ Inkscape::Util::Unit const* doc_unit = doc->getWidth().unit;
+ os << doc_unit->abbr;
+ repr->setAttribute("inkscape:document-units", os.str().c_str());
+
+ // Set viewBox
+ doc->setViewBox(Geom::Rect::from_xywh(0, 0, doc->getWidth().value(doc_unit), doc->getHeight().value(doc_unit)));
+ doc->ensureUpToDate();
+
+ // Scale and translate objects
+ double scale = Inkscape::Util::Quantity::convert(1, "px", doc_unit);
+ ShapeEditor::blockSetItem(true);
+ 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");
+ }
+
+ // These should not affect input, but they do, so set them to a neutral state
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ bool transform_stroke = prefs->getBool("/options/transform/stroke", true);
+ bool transform_rectcorners = prefs->getBool("/options/transform/rectcorners", true);
+ bool transform_pattern = prefs->getBool("/options/transform/pattern", true);
+ bool transform_gradient = prefs->getBool("/options/transform/gradient", true);
+ prefs->setBool("/options/transform/stroke", true);
+ prefs->setBool("/options/transform/rectcorners", true);
+ prefs->setBool("/options/transform/pattern", true);
+ prefs->setBool("/options/transform/gradient", true);
+
+ doc->getRoot()->scaleChildItemsRec(Geom::Scale(scale), Geom::Point(0, dh));
+ ShapeEditor::blockSetItem(false);
+
+ // restore options
+ prefs->setBool("/options/transform/stroke", transform_stroke);
+ prefs->setBool("/options/transform/rectcorners", transform_rectcorners);
+ prefs->setBool("/options/transform/pattern", transform_pattern);
+ prefs->setBool("/options/transform/gradient", transform_gradient);
+
+ Inkscape::DocumentUndo::setUndoSensitive(doc, saved);
+ }
+}
} // namespace Internal
diff --git a/src/extension/internal/metafile-inout.h b/src/extension/internal/metafile-inout.h
index 968773a3a..2f7001cf2 100644
--- a/src/extension/internal/metafile-inout.h
+++ b/src/extension/internal/metafile-inout.h
@@ -71,6 +71,7 @@ protected:
static void my_png_write_data(png_structp png_ptr, png_bytep data, png_size_t length);
static void toPNG(PMEMPNG accum, int width, int height, const char *px);
static gchar *bad_image_png(void);
+ static void setViewBoxIfMissing(SPDocument *doc);
private:
diff --git a/src/extension/internal/wmf-inout.cpp b/src/extension/internal/wmf-inout.cpp
index ef95dbe45..5d7fc29d0 100644
--- a/src/extension/internal/wmf-inout.cpp
+++ b/src/extension/internal/wmf-inout.cpp
@@ -33,9 +33,8 @@
#include <stdint.h>
#include <libuemf/symbol_convert.h>
-#include "sp-root.h"
+#include "sp-root.h" // even though it is included indirectly by wmf-inout.h
#include "sp-path.h"
-#include "style.h"
#include "print.h"
#include "extension/system.h"
#include "extension/print.h"
@@ -44,13 +43,9 @@
#include "extension/output.h"
#include "display/drawing.h"
#include "display/drawing-item.h"
-#include "util/units.h"
#include "clear-n_.h"
-#include "document.h"
-#include "shape-editor.h"
-#include "sp-namedview.h"
-#include "document-undo.h"
-#include "inkscape.h"
+#include "util/units.h" // even though it is included indirectly by wmf-inout.h
+#include "inkscape.h" // even though it is included indirectly by wmf-inout.h
#include "wmf-inout.h"
@@ -251,54 +246,54 @@ uint32_t Wmf::add_hatch(PWMF_CALLBACK_DATA d, uint32_t hatchType, U_COLORREF hat
if(d->hatches.count == d->hatches.size){ enlarge_hatches(d); }
d->hatches.strings[d->hatches.count++]=strdup(hpathname);
- *(d->defs) += "\n";
+ d->defs += "\n";
switch(hatchType){
case U_HS_HORIZONTAL:
- *(d->defs) += " <path id=\"";
- *(d->defs) += hpathname;
- *(d->defs) += "\" d=\"M 0 0 6 0\" style=\"fill:none;stroke:#";
- *(d->defs) += tmpcolor;
- *(d->defs) += "\" />\n";
+ d->defs += " <path id=\"";
+ d->defs += hpathname;
+ d->defs += "\" d=\"M 0 0 6 0\" style=\"fill:none;stroke:#";
+ d->defs += tmpcolor;
+ d->defs += "\" />\n";
break;
case U_HS_VERTICAL:
- *(d->defs) += " <path id=\"";
- *(d->defs) += hpathname;
- *(d->defs) += "\" d=\"M 0 0 0 6\" style=\"fill:none;stroke:#";
- *(d->defs) += tmpcolor;
- *(d->defs) += "\" />\n";
+ d->defs += " <path id=\"";
+ d->defs += hpathname;
+ d->defs += "\" d=\"M 0 0 0 6\" style=\"fill:none;stroke:#";
+ d->defs += tmpcolor;
+ d->defs += "\" />\n";
break;
case U_HS_FDIAGONAL:
- *(d->defs) += " <line id=\"sub";
- *(d->defs) += hpathname;
- *(d->defs) += "\" x1=\"-1\" y1=\"-1\" x2=\"7\" y2=\"7\" stroke=\"#";
- *(d->defs) += tmpcolor;
- *(d->defs) += "\"/>\n";
+ d->defs += " <line id=\"sub";
+ d->defs += hpathname;
+ d->defs += "\" x1=\"-1\" y1=\"-1\" x2=\"7\" y2=\"7\" stroke=\"#";
+ d->defs += tmpcolor;
+ d->defs += "\"/>\n";
break;
case U_HS_BDIAGONAL:
- *(d->defs) += " <line id=\"sub";
- *(d->defs) += hpathname;
- *(d->defs) += "\" x1=\"-1\" y1=\"7\" x2=\"7\" y2=\"-1\" stroke=\"#";
- *(d->defs) += tmpcolor;
- *(d->defs) += "\"/>\n";
+ d->defs += " <line id=\"sub";
+ d->defs += hpathname;
+ d->defs += "\" x1=\"-1\" y1=\"7\" x2=\"7\" y2=\"-1\" stroke=\"#";
+ d->defs += tmpcolor;
+ d->defs += "\"/>\n";
break;
case U_HS_CROSS:
- *(d->defs) += " <path id=\"";
- *(d->defs) += hpathname;
- *(d->defs) += "\" d=\"M 0 0 6 0 M 0 0 0 6\" style=\"fill:none;stroke:#";
- *(d->defs) += tmpcolor;
- *(d->defs) += "\" />\n";
+ d->defs += " <path id=\"";
+ d->defs += hpathname;
+ d->defs += "\" d=\"M 0 0 6 0 M 0 0 0 6\" style=\"fill:none;stroke:#";
+ d->defs += tmpcolor;
+ d->defs += "\" />\n";
break;
case U_HS_DIAGCROSS:
- *(d->defs) += " <line id=\"subfd";
- *(d->defs) += hpathname;
- *(d->defs) += "\" x1=\"-1\" y1=\"-1\" x2=\"7\" y2=\"7\" stroke=\"#";
- *(d->defs) += tmpcolor;
- *(d->defs) += "\"/>\n";
- *(d->defs) += " <line id=\"subbd";
- *(d->defs) += hpathname;
- *(d->defs) += "\" x1=\"-1\" y1=\"7\" x2=\"7\" y2=\"-1\" stroke=\"#";
- *(d->defs) += tmpcolor;
- *(d->defs) += "\"/>\n";
+ d->defs += " <line id=\"subfd";
+ d->defs += hpathname;
+ d->defs += "\" x1=\"-1\" y1=\"-1\" x2=\"7\" y2=\"7\" stroke=\"#";
+ d->defs += tmpcolor;
+ d->defs += "\"/>\n";
+ d->defs += " <line id=\"subbd";
+ d->defs += hpathname;
+ d->defs += "\" x1=\"-1\" y1=\"7\" x2=\"7\" y2=\"-1\" stroke=\"#";
+ d->defs += tmpcolor;
+ d->defs += "\"/>\n";
break;
case U_HS_SOLIDCLR:
case U_HS_DITHEREDCLR:
@@ -307,12 +302,12 @@ uint32_t Wmf::add_hatch(PWMF_CALLBACK_DATA d, uint32_t hatchType, U_COLORREF hat
case U_HS_SOLIDBKCLR:
case U_HS_DITHEREDBKCLR:
default:
- *(d->defs) += " <path id=\"";
- *(d->defs) += hpathname;
- *(d->defs) += "\" d=\"M 0 0 6 0 6 6 0 6 z\" style=\"fill:#";
- *(d->defs) += tmpcolor;
- *(d->defs) += ";stroke:none";
- *(d->defs) += "\" />\n";
+ d->defs += " <path id=\"";
+ d->defs += hpathname;
+ d->defs += "\" d=\"M 0 0 6 0 6 6 0 6 z\" style=\"fill:#";
+ d->defs += tmpcolor;
+ d->defs += ";stroke:none";
+ d->defs += "\" />\n";
break;
}
}
@@ -374,12 +369,12 @@ uint32_t Wmf::add_hatch(PWMF_CALLBACK_DATA d, uint32_t hatchType, U_COLORREF hat
if(!idx){ // add it if not already present
if(d->hatches.count == d->hatches.size){ enlarge_hatches(d); }
d->hatches.strings[d->hatches.count++]=strdup(hatchname);
- *(d->defs) += "\n";
- *(d->defs) += " <pattern id=\"";
- *(d->defs) += hatchname;
- *(d->defs) += "\" xlink:href=\"#WMFhbasepattern\">\n";
- *(d->defs) += refpath;
- *(d->defs) += " </pattern>\n";
+ d->defs += "\n";
+ d->defs += " <pattern id=\"";
+ d->defs += hatchname;
+ d->defs += "\" xlink:href=\"#WMFhbasepattern\">\n";
+ d->defs += refpath;
+ d->defs += " </pattern>\n";
idx = d->hatches.count;
}
}
@@ -392,12 +387,12 @@ uint32_t Wmf::add_hatch(PWMF_CALLBACK_DATA d, uint32_t hatchType, U_COLORREF hat
if(d->hatches.count == d->hatches.size){ enlarge_hatches(d); }
d->hatches.strings[d->hatches.count++]=strdup(hbkname);
- *(d->defs) += "\n";
- *(d->defs) += " <rect id=\"";
- *(d->defs) += hbkname;
- *(d->defs) += "\" x=\"0\" y=\"0\" width=\"6\" height=\"6\" fill=\"#";
- *(d->defs) += bkcolor;
- *(d->defs) += "\" />\n";
+ d->defs += "\n";
+ d->defs += " <rect id=\"";
+ d->defs += hbkname;
+ d->defs += "\" x=\"0\" y=\"0\" width=\"6\" height=\"6\" fill=\"#";
+ d->defs += bkcolor;
+ d->defs += "\" />\n";
}
// this is the pattern, its name will show up in Inkscape's pattern selector
@@ -406,15 +401,15 @@ uint32_t Wmf::add_hatch(PWMF_CALLBACK_DATA d, uint32_t hatchType, U_COLORREF hat
if(!idx){ // add it if not already present
if(d->hatches.count == d->hatches.size){ enlarge_hatches(d); }
d->hatches.strings[d->hatches.count++]=strdup(hatchname);
- *(d->defs) += "\n";
- *(d->defs) += " <pattern id=\"";
- *(d->defs) += hatchname;
- *(d->defs) += "\" xlink:href=\"#WMFhbasepattern\">\n";
- *(d->defs) += " <use xlink:href=\"#";
- *(d->defs) += hbkname;
- *(d->defs) += "\" />\n";
- *(d->defs) += refpath;
- *(d->defs) += " </pattern>\n";
+ d->defs += "\n";
+ d->defs += " <pattern id=\"";
+ d->defs += hatchname;
+ d->defs += "\" xlink:href=\"#WMFhbasepattern\">\n";
+ d->defs += " <use xlink:href=\"#";
+ d->defs += hbkname;
+ d->defs += "\" />\n";
+ d->defs += refpath;
+ d->defs += " </pattern>\n";
idx = d->hatches.count;
}
}
@@ -503,35 +498,35 @@ uint32_t Wmf::add_dib_image(PWMF_CALLBACK_DATA d, const char *dib, uint32_t iUsa
sprintf(imagename,"WMFimage%d",idx++);
sprintf(xywh," x=\"0\" y=\"0\" width=\"%d\" height=\"%d\" ",width,height); // reuse this buffer
- *(d->defs) += "\n";
- *(d->defs) += " <image id=\"";
- *(d->defs) += imagename;
- *(d->defs) += "\"\n ";
- *(d->defs) += xywh;
- *(d->defs) += "\n";
- if(dibparams == U_BI_JPEG){ *(d->defs) += " xlink:href=\"data:image/jpeg;base64,"; }
- else { *(d->defs) += " xlink:href=\"data:image/png;base64,"; }
- *(d->defs) += base64String;
- *(d->defs) += "\"\n";
- *(d->defs) += " preserveAspectRatio=\"none\"\n";
- *(d->defs) += " />\n";
-
-
- *(d->defs) += "\n";
- *(d->defs) += " <pattern id=\"";
- *(d->defs) += imagename;
- *(d->defs) += "_ref\"\n ";
- *(d->defs) += xywh;
- *(d->defs) += "\n patternUnits=\"userSpaceOnUse\"";
- *(d->defs) += " >\n";
- *(d->defs) += " <use id=\"";
- *(d->defs) += imagename;
- *(d->defs) += "_ign\" ";
- *(d->defs) += " xlink:href=\"#";
- *(d->defs) += imagename;
- *(d->defs) += "\" />\n";
- *(d->defs) += " ";
- *(d->defs) += " </pattern>\n";
+ d->defs += "\n";
+ d->defs += " <image id=\"";
+ d->defs += imagename;
+ d->defs += "\"\n ";
+ d->defs += xywh;
+ d->defs += "\n";
+ if(dibparams == U_BI_JPEG){ d->defs += " xlink:href=\"data:image/jpeg;base64,"; }
+ else { d->defs += " xlink:href=\"data:image/png;base64,"; }
+ d->defs += base64String;
+ d->defs += "\"\n";
+ d->defs += " preserveAspectRatio=\"none\"\n";
+ d->defs += " />\n";
+
+
+ d->defs += "\n";
+ d->defs += " <pattern id=\"";
+ d->defs += imagename;
+ d->defs += "_ref\"\n ";
+ d->defs += xywh;
+ d->defs += "\n patternUnits=\"userSpaceOnUse\"";
+ d->defs += " >\n";
+ d->defs += " <use id=\"";
+ d->defs += imagename;
+ d->defs += "_ign\" ";
+ d->defs += " xlink:href=\"#";
+ d->defs += imagename;
+ d->defs += "\" />\n";
+ d->defs += " ";
+ d->defs += " </pattern>\n";
}
g_free(base64String); //wait until this point to free because it might be a duplicate image
return(idx-1);
@@ -599,33 +594,33 @@ uint32_t Wmf::add_bm16_image(PWMF_CALLBACK_DATA d, U_BITMAP16 Bm16, const char *
sprintf(imagename,"WMFimage%d",idx++);
sprintf(xywh," x=\"0\" y=\"0\" width=\"%d\" height=\"%d\" ",width,height); // reuse this buffer
- *(d->defs) += "\n";
- *(d->defs) += " <image id=\"";
- *(d->defs) += imagename;
- *(d->defs) += "\"\n ";
- *(d->defs) += xywh;
- *(d->defs) += "\n";
- *(d->defs) += " xlink:href=\"data:image/png;base64,";
- *(d->defs) += base64String;
- *(d->defs) += "\"\n";
- *(d->defs) += " preserveAspectRatio=\"none\"\n";
- *(d->defs) += " />\n";
-
-
- *(d->defs) += "\n";
- *(d->defs) += " <pattern id=\"";
- *(d->defs) += imagename;
- *(d->defs) += "_ref\"\n ";
- *(d->defs) += xywh;
- *(d->defs) += "\n patternUnits=\"userSpaceOnUse\"";
- *(d->defs) += " >\n";
- *(d->defs) += " <use id=\"";
- *(d->defs) += imagename;
- *(d->defs) += "_ign\" ";
- *(d->defs) += " xlink:href=\"#";
- *(d->defs) += imagename;
- *(d->defs) += "\" />\n";
- *(d->defs) += " </pattern>\n";
+ d->defs += "\n";
+ d->defs += " <image id=\"";
+ d->defs += imagename;
+ d->defs += "\"\n ";
+ d->defs += xywh;
+ d->defs += "\n";
+ d->defs += " xlink:href=\"data:image/png;base64,";
+ d->defs += base64String;
+ d->defs += "\"\n";
+ d->defs += " preserveAspectRatio=\"none\"\n";
+ d->defs += " />\n";
+
+
+ d->defs += "\n";
+ d->defs += " <pattern id=\"";
+ d->defs += imagename;
+ d->defs += "_ref\"\n ";
+ d->defs += xywh;
+ d->defs += "\n patternUnits=\"userSpaceOnUse\"";
+ d->defs += " >\n";
+ d->defs += " <use id=\"";
+ d->defs += imagename;
+ d->defs += "_ign\" ";
+ d->defs += " xlink:href=\"#";
+ d->defs += imagename;
+ d->defs += "\" />\n";
+ d->defs += " </pattern>\n";
}
g_free(base64String); //wait until this point to free because it might be a duplicate image
return(idx-1);
@@ -714,8 +709,8 @@ Wmf::output_style(PWMF_CALLBACK_DATA d)
// tmp_id << "\n\tid=\"" << (d->id++) << "\"";
-// *(d->outsvg) += tmp_id.str().c_str();
- *(d->outsvg) += "\n\tstyle=\"";
+// d->outsvg += tmp_id.str().c_str();
+ d->outsvg += "\n\tstyle=\"";
if (!d->dc[d->level].fill_set || ( d->mask & U_DRAW_NOFILL)) { // nofill are lines and arcs
tmp_style << "fill:none;";
} else {
@@ -842,7 +837,7 @@ Wmf::output_style(PWMF_CALLBACK_DATA d)
tmp_style << "\n\tclip-path=\"url(#clipWmfPath" << d->id << ")\" ";
clipset = false;
- *(d->outsvg) += tmp_style.str().c_str();
+ d->outsvg += tmp_style.str().c_str();
}
@@ -1326,8 +1321,8 @@ void Wmf::common_dib_to_image(PWMF_CALLBACK_DATA d, const char *dib,
tmp_image << " preserveAspectRatio=\"none\"\n";
tmp_image << "/> \n";
- *(d->outsvg) += tmp_image.str().c_str();
- *(d->path) = "";
+ d->outsvg += tmp_image.str().c_str();
+ d->path = "";
}
/**
@@ -1418,8 +1413,8 @@ void Wmf::common_bm16_to_image(PWMF_CALLBACK_DATA d, U_BITMAP16 Bm16, const char
tmp_image << " preserveAspectRatio=\"none\"\n";
tmp_image << "/> \n";
- *(d->outsvg) += tmp_image.str().c_str();
- *(d->path) = "";
+ d->outsvg += tmp_image.str().c_str();
+ d->path = "";
}
/**
@@ -1579,7 +1574,7 @@ int Wmf::myMetaFileProc(const char *contents, unsigned int length, PWMF_CALLBACK
d->dc[0].style.stroke_width.value = pix_to_abs_size( d, 1 ); // This could not be set until the size of the WMF was known
dbg_str << "<!-- U_WMR_HEADER -->\n";
- *(d->outdef) += "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n";
+ d->outdef += "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n";
SVGOStringStream tmp_outdef;
tmp_outdef << "<svg\n";
@@ -1592,8 +1587,8 @@ int Wmf::myMetaFileProc(const char *contents, unsigned int length, PWMF_CALLBACK
tmp_outdef <<
" width=\"" << Inkscape::Util::Quantity::convert(d->PixelsOutX, "px", "mm") << "mm\"\n" <<
" height=\"" << Inkscape::Util::Quantity::convert(d->PixelsOutY, "px", "mm") << "mm\">\n";
- *(d->outdef) += tmp_outdef.str().c_str();
- *(d->outdef) += "<defs>"; // temporary end of header
+ d->outdef += tmp_outdef.str().c_str();
+ d->outdef += "<defs>"; // temporary end of header
// d->defs holds any defines which are read in.
@@ -1636,7 +1631,7 @@ int Wmf::myMetaFileProc(const char *contents, unsigned int length, PWMF_CALLBACK
TR_layout_2_svg(d->tri);
SVGOStringStream ts;
ts << d->tri->out;
- *(d->outsvg) += ts.str().c_str();
+ d->outsvg += ts.str().c_str();
d->tri = trinfo_clear(d->tri);
}
if(d->dc[d->level].dirty){ //Apply the delayed background changes, clear the flag
@@ -1688,13 +1683,13 @@ std::cout << "BEFORE DRAW"
)
){
// std::cout << "PATH DRAW at TOP <<+++++++++++++++++++++++++++++++++++++" << std::endl;
- *(d->outsvg) += " <path "; // this is the ONLY place <path should be used!!!!
+ d->outsvg += " <path "; // this is the ONLY place <path should be used!!!!
output_style(d);
- *(d->outsvg) += "\n\t";
- *(d->outsvg) += "\n\td=\""; // this is the ONLY place d=" should be used!!!!
- *(d->outsvg) += *(d->path);
- *(d->outsvg) += " \" /> \n";
- *(d->path) = ""; //reset the path
+ d->outsvg += "\n\t";
+ d->outsvg += "\n\td=\""; // this is the ONLY place d=" should be used!!!!
+ d->outsvg += d->path;
+ d->outsvg += " \" /> \n";
+ d->path = ""; //reset the path
// reset the flags
d->mask = 0;
d->drawtype = 0;
@@ -1706,7 +1701,7 @@ std::cout << "BEFORE DRAW"
{
dbg_str << "<!-- U_WMR_EOF -->\n";
- *(d->outsvg) = *(d->outdef) + *(d->defs) + "\n</defs>\n\n" + *(d->outsvg) + "</svg>\n";
+ d->outsvg = d->outdef + d->defs + "\n</defs>\n\n" + d->outsvg + "</svg>\n";
OK=0;
break;
}
@@ -1944,8 +1939,8 @@ std::cout << "BEFORE DRAW"
tmp_rectangle << "\n height=\"" << dh << "\" />";
tmp_rectangle << "\n</clipPath>";
- *(d->outdef) += tmp_rectangle.str().c_str();
- *(d->path) = "";
+ d->outdef += tmp_rectangle.str().c_str();
+ d->path = "";
break;
}
case U_WMR_ARC:
@@ -1992,12 +1987,12 @@ std::cout << "BEFORE DRAW"
d->mask |= wmr_mask;
- *(d->outsvg) += " <ellipse ";
+ d->outsvg += " <ellipse ";
output_style(d);
- *(d->outsvg) += "\n\t";
- *(d->outsvg) += tmp_ellipse.str().c_str();
- *(d->outsvg) += "/> \n";
- *(d->path) = "";
+ d->outsvg += "\n\t";
+ d->outsvg += tmp_ellipse.str().c_str();
+ d->outsvg += "/> \n";
+ d->path = "";
break;
}
case U_WMR_FLOODFILL: dbg_str << "<!-- U_WMR_EXTFLOODFILL -->\n"; break;
@@ -2503,7 +2498,7 @@ std::cout << "BEFORE DRAW"
TR_layout_analyze(d->tri);
TR_layout_2_svg(d->tri);
ts << d->tri->out;
- *(d->outsvg) += ts.str().c_str();
+ d->outsvg += ts.str().c_str();
d->tri = trinfo_clear(d->tri);
(void) trinfo_load_textrec(d->tri, &tsp, tsp.ori,TR_EMFBOT); // ignore return status, it must work
}
@@ -2910,13 +2905,13 @@ std::cout << "BEFORE DRAW"
break;
} //end of switch
// When testing, uncomment the following to place a comment for each processed WMR record in the SVG
-// *(d->outsvg) += dbg_str.str().c_str();
- *(d->path) += tmp_path.str().c_str();
+// d->outsvg += dbg_str.str().c_str();
+ d->path += tmp_path.str().c_str();
if(!nSize){ OK=0; std::cout << "nSize == 0, oops!!!" << std::endl; } // There was some problem with this record, it is not safe to continue
} //end of while
// When testing, uncomment the following to show the final SVG derived from the WMF
-// std::cout << *(d->outsvg) << std::endl;
+// std::cout << d->outsvg << std::endl;
(void) U_wmr_properties(U_WMR_INVALID); // force the release of the lookup table memory, returned value is irrelevant
return 1;
@@ -2935,70 +2930,36 @@ Wmf::open( Inkscape::Extension::Input * /*mod*/, const gchar *uri )
WMF_CALLBACK_DATA d;
- memset(&d, 0, sizeof(WMF_CALLBACK_DATA));
-
- for(int i = 0; i < WMF_MAX_DC+1; i++){ // be sure all values and pointers are empty to start with
- memset(&(d.dc[i]),0,sizeof(WMF_DEVICE_CONTEXT));
- }
- // set default drawing objects, these are active if no object has been selected
- d.dc[0].active_pen = -1; // -1 when the default is used instead of a selected object
- d.dc[0].active_brush = -1;
- d.dc[0].active_font = -1;
- // Default font, WMF spec says device can pick whatever it wants. WMF files that do not specify a font are unlikely to look very good!
- d.dc[0].font_name = strdup("Arial");
+ // Default font, WMF spec says device can pick whatever it wants.
+ // WMF files that do not specify a font are unlikely to look very good!
d.dc[0].style.font_size.computed = 16.0;
d.dc[0].style.font_weight.value = SP_CSS_FONT_WEIGHT_400;
d.dc[0].style.font_style.value = SP_CSS_FONT_STYLE_NORMAL;
d.dc[0].style.text_decoration_line.underline = 0;
d.dc[0].style.text_decoration_line.line_through = 0;
d.dc[0].style.baseline_shift.value = 0;
- d.dc[0].textColor = U_RGB(0, 0, 0); // default foreground color (black)
- d.dc[0].bkColor = U_RGB(255, 255, 255); // default background color (white)
- d.dc[0].bkMode = U_TRANSPARENT;
- d.dc[0].dirty = 0;
+
// Default pen, WMF files that do not specify a pen are unlikely to look very good!
d.dc[0].style.stroke_dasharray.set = 0;
d.dc[0].style.stroke_linecap.computed = 2; // U_PS_ENDCAP_SQUARE;
d.dc[0].style.stroke_linejoin.computed = 0; // U_PS_JOIN_MITER;
- d.dc[0].stroke_set = true;
d.dc[0].style.stroke_width.value = 1.0; // will be reset to something reasonable once WMF draying size is known
d.dc[0].style.stroke.value.color.set( 0, 0, 0 );
- // Default brush = none, WMF files that do not specify a brush are unlikely to look very good!
- d.dc[0].fill_set = false;
if (uri == NULL) {
return NULL;
}
- d.outsvg = new Glib::ustring("");
- d.path = new Glib::ustring("");
- d.outdef = new Glib::ustring("");
- d.defs = new Glib::ustring("");
- d.mask = 0;
- d.drawtype = 0;
- d.arcdir = U_AD_COUNTERCLOCKWISE;
- d.dwRop2 = U_R2_COPYPEN;
- d.dwRop3 = 0;
- d.E2IdirY = 1.0;
- d.D2PscaleX = 1.0;
- d.D2PscaleY = 1.0;
- d.hatches.size = 0;
- d.hatches.count = 0;
- d.hatches.strings = NULL;
- d.images.size = 0;
- d.images.count = 0;
- d.images.strings = NULL;
-
// set up the size default for patterns in defs. This might not be referenced if there are no patterns defined in the drawing.
- *(d.defs) += "\n";
- *(d.defs) += " <pattern id=\"WMFhbasepattern\" \n";
- *(d.defs) += " patternUnits=\"userSpaceOnUse\"\n";
- *(d.defs) += " width=\"6\" \n";
- *(d.defs) += " height=\"6\" \n";
- *(d.defs) += " x=\"0\" \n";
- *(d.defs) += " y=\"0\"> \n";
- *(d.defs) += " </pattern> \n";
+ d.defs += "\n";
+ d.defs += " <pattern id=\"WMFhbasepattern\" \n";
+ d.defs += " patternUnits=\"userSpaceOnUse\"\n";
+ d.defs += " width=\"6\" \n";
+ d.defs += " height=\"6\" \n";
+ d.defs += " x=\"0\" \n";
+ d.defs += " y=\"0\"> \n";
+ d.defs += " </pattern> \n";
size_t length;
@@ -3016,12 +2977,8 @@ Wmf::open( Inkscape::Extension::Input * /*mod*/, const gchar *uri )
// std::cout << "SVG Output: " << std::endl << *(d.outsvg) << std::endl;
- SPDocument *doc = SPDocument::createNewDocFromMem(d.outsvg->c_str(), strlen(d.outsvg->c_str()), TRUE);
+ SPDocument *doc = SPDocument::createNewDocFromMem(d.outsvg.c_str(), strlen(d.outsvg.c_str()), TRUE);
- delete d.outsvg;
- delete d.path;
- delete d.outdef;
- delete d.defs;
free_wmf_strings(d.hatches);
free_wmf_strings(d.images);
@@ -3040,39 +2997,7 @@ Wmf::open( Inkscape::Extension::Input * /*mod*/, const gchar *uri )
d.tri = trinfo_release_except_FC(d.tri);
- // Set viewBox if it doesn't exist
- if (doc && !doc->getRoot()->viewBox_set) {
- bool saved = Inkscape::DocumentUndo::getUndoSensitive(doc);
- Inkscape::DocumentUndo::setUndoSensitive(doc, false);
-
- doc->ensureUpToDate();
-
- // Set document unit
- Inkscape::XML::Node *repr = sp_document_namedview(doc, 0)->getRepr();
- Inkscape::SVGOStringStream os;
- Inkscape::Util::Unit const* doc_unit = doc->getWidth().unit;
- os << doc_unit->abbr;
- repr->setAttribute("inkscape:document-units", os.str().c_str());
-
- // Set viewBox
- doc->setViewBox(Geom::Rect::from_xywh(0, 0, doc->getWidth().value(doc_unit), doc->getHeight().value(doc_unit)));
- doc->ensureUpToDate();
-
- // Scale and translate objects
- double scale = Inkscape::Util::Quantity::convert(1, "px", doc_unit);
- ShapeEditor::blockSetItem(true);
- 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);
- }
+ setViewBoxIfMissing(doc);
return doc;
}
diff --git a/src/extension/internal/wmf-inout.h b/src/extension/internal/wmf-inout.h
index 3d23ca749..6006479c7 100644
--- a/src/extension/internal/wmf-inout.h
+++ b/src/extension/internal/wmf-inout.h
@@ -26,20 +26,54 @@ namespace Internal {
#define DIRTY_FILL 0x02
#define DIRTY_STROKE 0x04 // not used currently
-typedef struct {
+typedef struct wmf_object {
+ wmf_object() :
+ type(0),
+ level(0),
+ record(NULL)
+ {};
int type;
int level;
char *record;
} WMF_OBJECT, *PWMF_OBJECT;
-typedef struct {
+typedef struct wmf_strings {
+ wmf_strings() :
+ size(0),
+ count(0),
+ strings(NULL)
+ {};
int size; // number of slots allocated in strings
int count; // number of slots used in strings
char **strings; // place to store strings
} WMF_STRINGS, *PWMF_STRINGS;
typedef struct wmf_device_context {
- struct SPStyle style;
+ wmf_device_context() :
+ // SPStyle: class with constructor
+ font_name(NULL),
+ stroke_set(false), stroke_mode(0), stroke_idx(0), stroke_recidx(0),
+ fill_set(false), fill_mode(0), fill_idx(0), fill_recidx(0),
+ dirty(0),
+ active_pen(-1), active_brush(-1), active_font(-1), // -1 when the default is used
+ // sizeWnd, sizeView, winorg, vieworg,
+ ScaleInX(0), ScaleInY(0),
+ ScaleOutX(0), ScaleOutY(0),
+ bkMode(U_TRANSPARENT),
+ // bkColor, textColor
+ textAlign(0)
+ // worldTransform, cur
+ {
+ font_name = strdup("Arial"); // Default font, WMF spec says device can pick whatever it wants
+ sizeWnd = point16_set( 0.0, 0.0 );
+ sizeView = point16_set( 0.0, 0.0 );
+ winorg = point16_set( 0.0, 0.0 );
+ vieworg = point16_set( 0.0, 0.0 );
+ bkColor = U_RGB(255, 255, 255); // default foreground color (white)
+ textColor = U_RGB(0, 0, 0); // default foreground color (black)
+ cur = point16_set( 0.0, 0.0 );
+ };
+ SPStyle style;
char *font_name;
bool stroke_set;
int stroke_mode; // enumeration from drawmode, not used if fill_set is not True
@@ -74,11 +108,32 @@ typedef struct wmf_device_context {
// this fixes it, so some confusion between this struct and the one in emf-inout???
//typedef struct wmf_callback_data {
// as does this
-typedef struct {
- Glib::ustring *outsvg;
- Glib::ustring *path;
- Glib::ustring *outdef;
- Glib::ustring *defs;
+typedef struct wmf_callback_data {
+
+ wmf_callback_data() :
+ // dc: array, structure w/ constructor
+ level(0),
+ E2IdirY(1.0),
+ D2PscaleX(1.0), D2PscaleY(1.0),
+ PixelsInX(0), PixelsInY(0),
+ PixelsOutX(0), PixelsOutY(0),
+ ulCornerInX(0), ulCornerInY(0),
+ ulCornerOutX(0), ulCornerOutY(0),
+ mask(0),
+ arcdir(U_AD_COUNTERCLOCKWISE),
+ dwRop2(U_R2_COPYPEN), dwRop3(0),
+ id(0), drawtype(0),
+ // hatches, images, gradients, struct w/ constructor
+ tri(NULL),
+ n_obj(0),
+ low_water(0)
+ //wmf_obj
+ {};
+
+ Glib::ustring outsvg;
+ Glib::ustring path;
+ Glib::ustring outdef;
+ Glib::ustring defs;
WMF_DEVICE_CONTEXT dc[WMF_MAX_DC+1]; // FIXME: This should be dynamic..
int level;
diff --git a/src/extension/internal/wmf-print.cpp b/src/extension/internal/wmf-print.cpp
index 5a552ad83..55ad5da5f 100644
--- a/src/extension/internal/wmf-print.cpp
+++ b/src/extension/internal/wmf-print.cpp
@@ -1387,7 +1387,7 @@ unsigned int PrintWmf::text(Inkscape::Extension::Print * /*mod*/, char const *te
_lookup_ppt_fontfix("Convert To Wingdings", params);
break;
default: //also CVTNON
- _lookup_ppt_fontfix(style->text->font_family.value, params);
+ _lookup_ppt_fontfix(style->font_family.value, params);
break;
}
if (params.f2 != 0 || params.f3 != 0) {
@@ -1416,7 +1416,7 @@ unsigned int PrintWmf::text(Inkscape::Extension::Print * /*mod*/, char const *te
// of the special fonts.
char *facename;
if (!newfont) {
- facename = U_Utf8ToLatin1(style->text->font_family.value, 0, NULL);
+ facename = U_Utf8ToLatin1(style->font_family.value, 0, NULL);
} else {
facename = U_Utf8ToLatin1(FontName(newfont), 0, NULL);
}
diff --git a/src/graphlayout.cpp b/src/graphlayout.cpp
index 7e10ccca1..18159cb41 100644
--- a/src/graphlayout.cpp
+++ b/src/graphlayout.cpp
@@ -195,8 +195,8 @@ void graphlayout(GSList const *const items) {
unsigned v=v_pair->second;
//cout << "Edge: (" << u <<","<<v<<")"<<endl;
es.push_back(make_pair(u,v));
- if(conn->style->marker[SP_MARKER_LOC_END].set) {
- if(directed && strcmp(conn->style->marker[SP_MARKER_LOC_END].value,"none")) {
+ if(conn->style->marker_end.set) {
+ if(directed && strcmp(conn->style->marker_end.value,"none")) {
scy.push_back(new SimpleConstraint(v, u,
(ideal_connector_length * directed_edge_height_modifier)));
}
diff --git a/src/id-clash.cpp b/src/id-clash.cpp
index f59b3b920..66357b75b 100644
--- a/src/id-clash.cpp
+++ b/src/id-clash.cpp
@@ -53,12 +53,12 @@ const char *href_like_attributes[] = {
#define NUM_HREF_LIKE_ATTRIBUTES (sizeof(href_like_attributes) / sizeof(*href_like_attributes))
const SPIPaint SPStyle::* SPIPaint_members[] = {
- &SPStyle::color,
+ //&SPStyle::color,
&SPStyle::fill,
&SPStyle::stroke,
};
const char* SPIPaint_properties[] = {
- "color",
+ //"color",
"fill",
"stroke",
};
@@ -76,7 +76,7 @@ const char* other_url_properties[] = {
#define NUM_OTHER_URL_PROPERTIES (sizeof(other_url_properties) / sizeof(*other_url_properties))
const char* clipboard_properties[] = {
- "color",
+ //"color",
"fill",
"filter",
"stroke",
@@ -161,7 +161,7 @@ find_references(SPObject *elem, refmap_type *refmap)
/* check for url(#...) references in markers */
const gchar *markers[4] = { "", "marker-start", "marker-mid", "marker-end" };
for (unsigned i = SP_MARKER_LOC_START; i < SP_MARKER_LOC_QTY; i++) {
- const gchar *value = style->marker[i].value;
+ const gchar *value = style->marker_ptrs[i]->value;
if (value) {
gchar *uri = extract_uri(value);
if (uri && uri[0] == '#') {
diff --git a/src/libcroco/cr-sel-eng.c b/src/libcroco/cr-sel-eng.c
index 0eba2b403..4f501ee05 100644
--- a/src/libcroco/cr-sel-eng.c
+++ b/src/libcroco/cr-sel-eng.c
@@ -136,8 +136,9 @@ lang_pseudo_class_handler (CRSelEng *const a_this,
node_iface = PRIVATE(a_this)->node_iface;
- if (strqcmp (a_sel->content.pseudo->name->stryng->str,
- "lang", 4)
+ /* "xml:lang" needed for SVG */
+ if ( (strqcmp (a_sel->content.pseudo->name->stryng->str, "lang", 4 ) &&
+ (strqcmp (a_sel->content.pseudo->name->stryng->str, "xml:lang", 8 ) ) )
|| !a_sel->content.pseudo->type == FUNCTION_PSEUDO) {
cr_utils_trace_info ("This handler is for :lang only");
return FALSE;
@@ -149,6 +150,7 @@ lang_pseudo_class_handler (CRSelEng *const a_this,
return FALSE;
for (; node; node = get_next_parent_element_node (node_iface, node)) {
char *val = node_iface->getProp (node, "lang");
+ if (!val) val = node_iface->getProp (node, "xml:lang");
if (val) {
if (!strcasecmp(val, a_sel->content.pseudo->extra->stryng->str)) {
result = TRUE;
diff --git a/src/libdepixelize/CMakeLists.txt b/src/libdepixelize/CMakeLists.txt
index 895e16e85..a69d37bc7 100644
--- a/src/libdepixelize/CMakeLists.txt
+++ b/src/libdepixelize/CMakeLists.txt
@@ -7,11 +7,11 @@ set(libdepixelize_SRC
kopftracer2011.h
splines.h
- priv/branchless.h
+ priv/branchless.h
priv/colorspace.h
priv/curvature.h
priv/homogeneoussplines.h
- priv/integral
+ priv/integral.h
priv/iterator.h
priv/optimization-kopf2011.h
priv/pixelgraph.h
diff --git a/src/libnrtype/FontFactory.cpp b/src/libnrtype/FontFactory.cpp
index 7c0b4ffba..4ae408397 100644
--- a/src/libnrtype/FontFactory.cpp
+++ b/src/libnrtype/FontFactory.cpp
@@ -825,17 +825,17 @@ font_instance* font_factory::FaceFromStyle(SPStyle const *style)
if (style) {
// First try to use the font specification if it is set
- if (style->text->font_specification.set
- && style->text->font_specification.value
- && *style->text->font_specification.value) {
+ if (style->font_specification.set
+ && style->font_specification.value
+ && *style->font_specification.value) {
- font = FaceFromFontSpecification(style->text->font_specification.value);
+ font = FaceFromFontSpecification(style->font_specification.value);
}
// If that failed, try using the CSS information in the style
if (!font) {
- font = Face(style->text->font_family.value, font_style_to_pos(*style));
+ font = Face(style->font_family.value, font_style_to_pos(*style));
// That was a hatchet job... so we need to check if this font exists!!
Glib::ustring fontSpec = font_factory::Default()->ConstructFontSpecification(font);
diff --git a/src/libnrtype/Layout-TNG-Input.cpp b/src/libnrtype/Layout-TNG-Input.cpp
index cb3e6f620..fa1e8c11b 100644
--- a/src/libnrtype/Layout-TNG-Input.cpp
+++ b/src/libnrtype/Layout-TNG-Input.cpp
@@ -286,16 +286,15 @@ font_instance *Layout::InputStreamTextSource::styleGetFontInstance() const
PangoFontDescription *Layout::InputStreamTextSource::styleGetFontDescription() const
{
- if (style->text == NULL) return NULL;
PangoFontDescription *descr = pango_font_description_new();
// Pango can't cope with spaces before or after the commas - let's remove them.
// this code is not exactly unicode-safe, but it's similar to what's done in
// pango, so it's not the limiting factor
Glib::ustring family;
- if (style->text->font_family.value == NULL) {
+ if (style->font_family.value == NULL) {
family = "sans-serif";
} else {
- gchar **families = g_strsplit(style->text->font_family.value, ",", -1);
+ gchar **families = g_strsplit(style->font_family.value, ",", -1);
if (families) {
for (gchar **f = families ; *f ; ++f) {
g_strstrip(*f);
diff --git a/src/libnrtype/Layout-TNG.h b/src/libnrtype/Layout-TNG.h
index c3ccbffb5..efb5ebc24 100644
--- a/src/libnrtype/Layout-TNG.h
+++ b/src/libnrtype/Layout-TNG.h
@@ -34,7 +34,7 @@ namespace Inkscape {
using Inkscape::Extension::Internal::CairoRenderContext;
#endif
-struct SPStyle;
+class SPStyle;
class Shape;
struct SPPrintContext;
class SVGLength;
diff --git a/src/libnrtype/font-lister.cpp b/src/libnrtype/font-lister.cpp
index 89d0cb037..98589d9d7 100644
--- a/src/libnrtype/font-lister.cpp
+++ b/src/libnrtype/font-lister.cpp
@@ -97,6 +97,34 @@ namespace Inkscape
// }
// font_list_store->foreach_iter( sigc::mem_fun(*this, &FontLister::print_document_font ));
+
+ /* Used to insert a font that was not in the document and not on the system into the font list. */
+ void
+ FontLister::insert_font_family( Glib::ustring new_family ) {
+
+ GList *styles = default_styles;
+
+ /* In case this is a fallback list, check if first font-family on system. */
+ std::vector<Glib::ustring> tokens = Glib::Regex::split_simple(",", new_family );
+ if( !tokens.empty() && !tokens[0].empty() ) {
+
+ Gtk::TreeModel::iterator iter2 = font_list_store->get_iter( "0" );
+ while( iter2 != font_list_store->children().end() ) {
+ Gtk::TreeModel::Row row = *iter2;
+ if( row[FontList.onSystem] && tokens[0].compare( row[FontList.family] ) == 0 ) {
+ styles = row[FontList.styles];
+ break;
+ }
+ ++iter2;
+ }
+ }
+
+ Gtk::TreeModel::iterator treeModelIter = font_list_store->prepend();
+ (*treeModelIter)[FontList.family] = reinterpret_cast<const char*>(g_strdup(new_family.c_str()));
+ (*treeModelIter)[FontList.styles] = styles;
+ (*treeModelIter)[FontList.onSystem] = false;
+ }
+
void
FontLister::update_font_list( SPDocument* document ) {
@@ -330,8 +358,8 @@ namespace Inkscape
sp_desktop_query_style (SP_ACTIVE_DESKTOP, query, QUERY_STYLE_PROPERTY_FONT_SPECIFICATION);
//std::cout << " Attempting selected style" << std::endl;
- if( result != QUERY_STYLE_NOTHING && query->text->font_specification.set ) {
- fontspec = query->text->font_specification.value;
+ if( result != QUERY_STYLE_NOTHING && query->font_specification.set ) {
+ fontspec = query->font_specification.value;
//std::cout << " fontspec from query :" << fontspec << ":" << std::endl;
}
@@ -665,15 +693,15 @@ std::pair<Glib::ustring, Glib::ustring> FontLister::new_font_family (Glib::ustri
if (style) {
// First try to use the font specification if it is set
- if (style->text->font_specification.set
- && style->text->font_specification.value
- && *style->text->font_specification.value) {
+ if (style->font_specification.set
+ && style->font_specification.value
+ && *style->font_specification.value) {
- fontspec = style->text->font_specification.value;
+ fontspec = style->font_specification.value;
} else {
- fontspec = style->text->font_family.value;
+ fontspec = style->font_family.value;
fontspec += ",";
switch (style->font_weight.computed) {
diff --git a/src/libnrtype/font-lister.h b/src/libnrtype/font-lister.h
index 5a8f578d9..a460388d3 100644
--- a/src/libnrtype/font-lister.h
+++ b/src/libnrtype/font-lister.h
@@ -26,7 +26,7 @@
class SPObject;
class SPDocument;
class SPCSSAttr;
-struct SPStyle;
+class SPStyle;
namespace Inkscape
{
@@ -127,6 +127,12 @@ namespace Inkscape
const Glib::RefPtr<Gtk::ListStore>
get_style_list () const;
+ /** Inserts a font family or font-fallback list (for use when not
+ * already in document or on system).
+ */
+ void
+ insert_font_family ( Glib::ustring new_family );
+
/** Updates font list to include fonts in document
*
*/
diff --git a/src/libnrtype/font-style-to-pos.h b/src/libnrtype/font-style-to-pos.h
index 56eb391c2..41ba6cf72 100644
--- a/src/libnrtype/font-style-to-pos.h
+++ b/src/libnrtype/font-style-to-pos.h
@@ -3,7 +3,7 @@
#include <libnrtype/nr-type-pos-def.h>
-struct SPStyle;
+class SPStyle;
NRTypePosDef font_style_to_pos(SPStyle const &style);
diff --git a/src/livarot/Path.h b/src/livarot/Path.h
index a109298a2..32ee71ffc 100644
--- a/src/livarot/Path.h
+++ b/src/livarot/Path.h
@@ -20,7 +20,7 @@ struct PathDescrCubicTo;
struct PathDescrBezierTo;
struct PathDescrIntermBezierTo;
-struct SPStyle;
+class SPStyle;
/*
* the Path class: a structure to hold path description and their polyline approximation (not kept in sync)
diff --git a/src/live_effects/Makefile_insert b/src/live_effects/Makefile_insert
index e2c35c3bd..fdbdec3b9 100644
--- a/src/live_effects/Makefile_insert
+++ b/src/live_effects/Makefile_insert
@@ -98,4 +98,4 @@ ink_common_sources += \
live_effects/lpe-jointype.cpp \
live_effects/lpe-jointype.h \
live_effects/lpe-taperstroke.cpp \
- live_effects/lpe-taperstroke.h
+ live_effects/lpe-taperstroke.h
diff --git a/src/live_effects/lpe-jointype.cpp b/src/live_effects/lpe-jointype.cpp
index f3ec02530..0c1813970 100644
--- a/src/live_effects/lpe-jointype.cpp
+++ b/src/live_effects/lpe-jointype.cpp
@@ -81,7 +81,7 @@ void LPEJoinType::doOnApply(SPLPEItem const* lpeitem)
double width = (lpeitem && lpeitem->style) ? lpeitem->style->stroke_width.computed : 1.;
SPCSSAttr *css = sp_repr_css_attr_new ();
- if (lpeitem->style->stroke.isSet()) {
+ if (true) {
if (lpeitem->style->stroke.isPaintserver()) {
SPPaintServer * server = lpeitem->style->getStrokePaintServer();
if (server) {
@@ -125,7 +125,7 @@ void LPEJoinType::doOnRemove(SPLPEItem const* lpeitem)
SPLPEItem *item = const_cast<SPLPEItem*>(lpeitem);
SPCSSAttr *css = sp_repr_css_attr_new ();
- if (lpeitem->style->fill.isSet()) {
+ if (true) {
if (lpeitem->style->fill.isPaintserver()) {
SPPaintServer * server = lpeitem->style->getFillPaintServer();
if (server) {
diff --git a/src/live_effects/lpe-powerstroke.cpp b/src/live_effects/lpe-powerstroke.cpp
index b63a2bf01..f7516677d 100644
--- a/src/live_effects/lpe-powerstroke.cpp
+++ b/src/live_effects/lpe-powerstroke.cpp
@@ -276,7 +276,7 @@ LPEPowerStroke::doOnApply(SPLPEItem const* lpeitem)
double width = (lpeitem && lpeitem->style) ? lpeitem->style->stroke_width.computed / 2 : 1.;
SPCSSAttr *css = sp_repr_css_attr_new ();
- if (lpeitem->style->stroke.isSet()) {
+ if (true) {
if (lpeitem->style->stroke.isPaintserver()) {
SPPaintServer * server = lpeitem->style->getStrokePaintServer();
if (server) {
@@ -329,7 +329,7 @@ void LPEPowerStroke::doOnRemove(SPLPEItem const* lpeitem)
if (SP_IS_SHAPE(lpeitem)) {
SPLPEItem *item = const_cast<SPLPEItem*>(lpeitem);
SPCSSAttr *css = sp_repr_css_attr_new ();
- if (lpeitem->style->fill.isSet()) {
+ if (true) {
if (lpeitem->style->fill.isPaintserver()) {
SPPaintServer * server = lpeitem->style->getFillPaintServer();
if (server) {
diff --git a/src/live_effects/lpe-taperstroke.cpp b/src/live_effects/lpe-taperstroke.cpp
index 8ddaa4087..5564a3b2c 100644
--- a/src/live_effects/lpe-taperstroke.cpp
+++ b/src/live_effects/lpe-taperstroke.cpp
@@ -107,7 +107,7 @@ void LPETaperStroke::doOnApply(SPLPEItem const* lpeitem)
double width = (lpeitem && lpeitem->style) ? lpeitem->style->stroke_width.computed : 1.;
SPCSSAttr *css = sp_repr_css_attr_new ();
- if (lpeitem->style->stroke.isSet()) {
+ if (true) {
if (lpeitem->style->stroke.isPaintserver()) {
SPPaintServer * server = lpeitem->style->getStrokePaintServer();
if (server) {
@@ -145,12 +145,10 @@ void LPETaperStroke::doOnRemove(SPLPEItem const* lpeitem)
{
if (SP_IS_SHAPE(lpeitem)) {
- //TODO: make it getobjbyrepr instead of const_cast because this can cause
- //undefined behavior
SPLPEItem *item = const_cast<SPLPEItem*>(lpeitem);
SPCSSAttr *css = sp_repr_css_attr_new ();
- if (lpeitem->style->fill.isSet()) {
+ if (true) {
if (lpeitem->style->fill.isPaintserver()) {
SPPaintServer * server = lpeitem->style->getFillPaintServer();
if (server) {
diff --git a/src/print.h b/src/print.h
index 80d0446fd..bbf95b833 100644
--- a/src/print.h
+++ b/src/print.h
@@ -18,7 +18,7 @@ class Window;
}
class SPDocument;
-struct SPStyle;
+class SPStyle;
namespace Inkscape {
namespace Extension {
diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp
index 5a981c6a0..868a9d743 100644
--- a/src/selection-chemistry.cpp
+++ b/src/selection-chemistry.cpp
@@ -2076,9 +2076,9 @@ GSList *sp_get_same_stroke_style(SPItem *sel, GSList *src, SPSelectStrokeStyleTy
match = true;
int len = sizeof(sel_style->marker)/sizeof(SPIString);
for (int i = 0; i < len; i++) {
- match = (sel_style->marker[i].set == iter_style->marker[i].set);
- if (sel_style->marker[i].set && iter_style->marker[i].set &&
- (strcmp(sel_style->marker[i].value, iter_style->marker[i].value))) {
+ match = (sel_style->marker_ptrs[i]->set == iter_style->marker_ptrs[i]->set);
+ if (sel_style->marker_ptrs[i]->set && iter_style->marker_ptrs[i]->set &&
+ (strcmp(sel_style->marker_ptrs[i]->value, iter_style->marker_ptrs[i]->value))) {
match = false;
break;
}
diff --git a/src/sp-lpe-item.cpp b/src/sp-lpe-item.cpp
index ae5763e67..b5dd74fc6 100644
--- a/src/sp-lpe-item.cpp
+++ b/src/sp-lpe-item.cpp
@@ -16,7 +16,6 @@
# include "config.h"
#endif
-//the gtk devs are really not smart about backwards compatibility
#include "ui/tool/multi-path-manipulator.h"
#include <glibmm/i18n.h>
@@ -243,7 +242,7 @@ bool SPLPEItem::performPathEffect(SPCurve *curve) {
// Groups have their doBeforeEffect called elsewhere
if (!SP_IS_GROUP(this)) {
- lpe->doBeforeEffect_impl(this);
+ lpe->doBeforeEffect(this);
}
try {
@@ -257,9 +256,6 @@ bool SPLPEItem::performPathEffect(SPCurve *curve) {
}
return false;
}
- if (!SP_IS_GROUP(this)) {
- lpe->doAfterEffect(this);
- }
}
}
}
@@ -415,7 +411,7 @@ void SPLPEItem::addPathEffect(gchar *value, bool reset)
}
// perform this once when the effect is applied
- lpe->doOnApply_impl(this);
+ lpe->doOnApply(this);
// indicate that all necessary preparations are done and the effect can be performed
lpe->setReady();
@@ -428,11 +424,9 @@ void SPLPEItem::addPathEffect(gchar *value, bool reset)
sp_lpe_item_update_patheffect(this, true, true);
//fix bug 1219324
- Inkscape::UI::Tools::NodeTool *tool = 0;
if (SP_ACTIVE_DESKTOP ) {
Inkscape::UI::Tools::ToolBase *ec = SP_ACTIVE_DESKTOP->event_context;
if (INK_IS_NODE_TOOL(ec)) {
- tool = static_cast<Inkscape::UI::Tools::NodeTool*>(ec);
tools_switch(SP_ACTIVE_DESKTOP, TOOLS_LPETOOL); //mhh
tools_switch(SP_ACTIVE_DESKTOP, TOOLS_NODES);
}
@@ -448,45 +442,48 @@ void SPLPEItem::addPathEffect(LivePathEffectObject * new_lpeobj)
g_free(hrefstr);
}
+/**
+ * If keep_path == true, the item should not be updated, effectively 'flattening' the LPE.
+ */
void SPLPEItem::removeCurrentPathEffect(bool keep_paths)
{
Inkscape::LivePathEffect::LPEObjectReference* lperef = this->getCurrentLPEReference();
if (!lperef)
return;
-
- Inkscape::LivePathEffect::Effect * lpe = this->getCurrentLPE();
- lpe->doOnRemove(this);
-
+
PathEffectList new_list = *this->path_effect_list;
new_list.remove(lperef); //current lpe ref is always our 'own' pointer from the path_effect_list
std::string r = patheffectlist_write_svg(new_list);
-
if (!r.empty()) {
this->getRepr()->setAttribute("inkscape:path-effect", r.c_str());
} else {
this->getRepr()->setAttribute("inkscape:path-effect", NULL);
+ }
+
+ if (!keep_paths) {
// Make sure that ellipse is stored as <svg:circle> or <svg:ellipse> if possible.
if( SP_IS_GENERICELLIPSE(this)) {
SP_GENERICELLIPSE(this)->write( this->getRepr()->document(), this->getRepr(), SP_OBJECT_WRITE_EXT );
}
- }
- if (!keep_paths) {
sp_lpe_item_cleanup_original_path_recursive(this);
}
}
+/**
+ * If keep_path == true, the item should not be updated, effectively 'flattening' the LPE.
+ */
void SPLPEItem::removeAllPathEffects(bool keep_paths)
{
this->getRepr()->setAttribute("inkscape:path-effect", NULL);
- // Make sure that ellipse is stored as <svg:circle> or <svg:ellipse> if possible.
- if( SP_IS_GENERICELLIPSE(this)) {
- SP_GENERICELLIPSE(this)->write( this->getRepr()->document(), this->getRepr(), SP_OBJECT_WRITE_EXT );
- }
-
if (!keep_paths) {
+ // Make sure that ellipse is stored as <svg:circle> or <svg:ellipse> if possible.
+ if (SP_IS_GENERICELLIPSE(this)) {
+ SP_GENERICELLIPSE(this)->write(this->getRepr()->document(), this->getRepr(), SP_OBJECT_WRITE_EXT);
+ }
+
sp_lpe_item_cleanup_original_path_recursive(this);
}
}
@@ -554,7 +551,6 @@ bool SPLPEItem::hasBrokenPathEffect() const
bool SPLPEItem::hasPathEffect() const
{
- if (!path_effect_list) return false; //nullptr sucks
if (path_effect_list->empty()) {
return false;
}
@@ -689,26 +685,17 @@ static std::string hreflist_write_svg(HRefList const & list)
// Return a copy of the effect list
PathEffectList SPLPEItem::getEffectList()
{
- if (!path_effect_list) {
- g_critical("Broken path effect list in %s\n", __FILE__);
- return PathEffectList();
- }
return *path_effect_list;
}
// Return a copy of the effect list
PathEffectList const SPLPEItem::getEffectList() const
{
- if (!path_effect_list) {
- g_critical("Broken path effect list in %s\n", __FILE__);
- return PathEffectList();
- }
return *path_effect_list;
}
Inkscape::LivePathEffect::LPEObjectReference* SPLPEItem::getCurrentLPEReference()
{
- if (!this->hasPathEffect()) return NULL;
if (!this->current_path_effect && !this->path_effect_list->empty()) {
setCurrentPathEffect(this->path_effect_list->back());
}
@@ -718,9 +705,6 @@ Inkscape::LivePathEffect::LPEObjectReference* SPLPEItem::getCurrentLPEReference(
Inkscape::LivePathEffect::Effect* SPLPEItem::getCurrentLPE()
{
- if (path_effect_list == NULL) {
- return NULL;
- }
Inkscape::LivePathEffect::LPEObjectReference* lperef = getCurrentLPEReference();
if (lperef && lperef->lpeobject)
diff --git a/src/sp-object.h b/src/sp-object.h
index 08407a2ed..a308caeae 100644
--- a/src/sp-object.h
+++ b/src/sp-object.h
@@ -57,7 +57,7 @@ class SPObject;
#include "util/forward-pointer-iterator.h"
class SPCSSAttr;
-struct SPStyle;
+class SPStyle;
namespace Inkscape {
namespace XML {
diff --git a/src/sp-shape.cpp b/src/sp-shape.cpp
index b3a331cba..61d35e6ff 100644
--- a/src/sp-shape.cpp
+++ b/src/sp-shape.cpp
@@ -77,7 +77,7 @@ void SPShape::build(SPDocument *document, Inkscape::XML::Node *repr) {
SPLPEItem::build(document, repr);
for (int i = 0 ; i < SP_MARKER_LOC_QTY ; i++) {
- sp_shape_set_marker (this, i, this->style->marker[i].value);
+ sp_shape_set_marker (this, i, this->style->marker_ptrs[i]->value);
}
}
@@ -136,7 +136,7 @@ void SPShape::update(SPCtx* ctx, guint flags) {
* match the style.
*/
for (int i = 0 ; i < SP_MARKER_LOC_QTY ; i++) {
- sp_shape_set_marker (this, i, this->style->marker[i].value);
+ sp_shape_set_marker (this, i, this->style->marker_ptrs[i]->value);
}
if (flags & (SP_OBJECT_STYLE_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
@@ -723,7 +723,7 @@ Inkscape::DrawingItem* SPShape::show(Inkscape::Drawing &drawing, unsigned int /*
* match the style.
*/
for (int i = 0 ; i < SP_MARKER_LOC_QTY ; i++) {
- sp_shape_set_marker (this, i, this->style->marker[i].value);
+ sp_shape_set_marker (this, i, this->style->marker_ptrs[i]->value);
}
if (this->hasMarkers ()) {
diff --git a/src/style-enums.h b/src/style-enums.h
index c6f9a1ea1..356029a40 100644
--- a/src/style-enums.h
+++ b/src/style-enums.h
@@ -15,7 +15,9 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-/* SPTextStyle */
+/* SPFontStyle */
+
+#include "display/canvas-bpath.h"
enum SPCSSFontSize {
SP_CSS_FONT_SIZE_XX_SMALL,
@@ -215,6 +217,267 @@ enum SPTextRendering {
SP_CSS_TEXT_RENDERING_GEOMETRICPRECISION
};
+
+struct SPStyleEnum {
+ gchar const *key;
+ gint value;
+};
+
+static SPStyleEnum const enum_fill_rule[] = {
+ {"nonzero", SP_WIND_RULE_NONZERO},
+ {"evenodd", SP_WIND_RULE_EVENODD},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_stroke_linecap[] = {
+ {"butt", SP_STROKE_LINECAP_BUTT},
+ {"round", SP_STROKE_LINECAP_ROUND},
+ {"square", SP_STROKE_LINECAP_SQUARE},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_stroke_linejoin[] = {
+ {"miter", SP_STROKE_LINEJOIN_MITER},
+ {"round", SP_STROKE_LINEJOIN_ROUND},
+ {"bevel", SP_STROKE_LINEJOIN_BEVEL},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_font_style[] = {
+ {"normal", SP_CSS_FONT_STYLE_NORMAL},
+ {"italic", SP_CSS_FONT_STYLE_ITALIC},
+ {"oblique", SP_CSS_FONT_STYLE_OBLIQUE},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_font_size[] = {
+ {"xx-small", SP_CSS_FONT_SIZE_XX_SMALL},
+ {"x-small", SP_CSS_FONT_SIZE_X_SMALL},
+ {"small", SP_CSS_FONT_SIZE_SMALL},
+ {"medium", SP_CSS_FONT_SIZE_MEDIUM},
+ {"large", SP_CSS_FONT_SIZE_LARGE},
+ {"x-large", SP_CSS_FONT_SIZE_X_LARGE},
+ {"xx-large", SP_CSS_FONT_SIZE_XX_LARGE},
+ {"smaller", SP_CSS_FONT_SIZE_SMALLER},
+ {"larger", SP_CSS_FONT_SIZE_LARGER},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_font_variant[] = {
+ {"normal", SP_CSS_FONT_VARIANT_NORMAL},
+ {"small-caps", SP_CSS_FONT_VARIANT_SMALL_CAPS},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_font_weight[] = {
+ {"100", SP_CSS_FONT_WEIGHT_100},
+ {"200", SP_CSS_FONT_WEIGHT_200},
+ {"300", SP_CSS_FONT_WEIGHT_300},
+ {"400", SP_CSS_FONT_WEIGHT_400},
+ {"500", SP_CSS_FONT_WEIGHT_500},
+ {"600", SP_CSS_FONT_WEIGHT_600},
+ {"700", SP_CSS_FONT_WEIGHT_700},
+ {"800", SP_CSS_FONT_WEIGHT_800},
+ {"900", SP_CSS_FONT_WEIGHT_900},
+ {"normal", SP_CSS_FONT_WEIGHT_NORMAL},
+ {"bold", SP_CSS_FONT_WEIGHT_BOLD},
+ {"lighter", SP_CSS_FONT_WEIGHT_LIGHTER},
+ {"bolder", SP_CSS_FONT_WEIGHT_BOLDER},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_font_stretch[] = {
+ {"ultra-condensed", SP_CSS_FONT_STRETCH_ULTRA_CONDENSED},
+ {"extra-condensed", SP_CSS_FONT_STRETCH_EXTRA_CONDENSED},
+ {"condensed", SP_CSS_FONT_STRETCH_CONDENSED},
+ {"semi-condensed", SP_CSS_FONT_STRETCH_SEMI_CONDENSED},
+ {"normal", SP_CSS_FONT_STRETCH_NORMAL},
+ {"semi-expanded", SP_CSS_FONT_STRETCH_SEMI_EXPANDED},
+ {"expanded", SP_CSS_FONT_STRETCH_EXPANDED},
+ {"extra-expanded", SP_CSS_FONT_STRETCH_EXTRA_EXPANDED},
+ {"ultra-expanded", SP_CSS_FONT_STRETCH_ULTRA_EXPANDED},
+ {"narrower", SP_CSS_FONT_STRETCH_NARROWER},
+ {"wider", SP_CSS_FONT_STRETCH_WIDER},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_text_align[] = {
+ {"start", SP_CSS_TEXT_ALIGN_START},
+ {"end", SP_CSS_TEXT_ALIGN_END},
+ {"left", SP_CSS_TEXT_ALIGN_LEFT},
+ {"right", SP_CSS_TEXT_ALIGN_RIGHT},
+ {"center", SP_CSS_TEXT_ALIGN_CENTER},
+ {"justify", SP_CSS_TEXT_ALIGN_JUSTIFY},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_text_transform[] = {
+ {"capitalize", SP_CSS_TEXT_TRANSFORM_CAPITALIZE},
+ {"uppercase", SP_CSS_TEXT_TRANSFORM_UPPERCASE},
+ {"lowercase", SP_CSS_TEXT_TRANSFORM_LOWERCASE},
+ {"none", SP_CSS_TEXT_TRANSFORM_NONE},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_text_anchor[] = {
+ {"start", SP_CSS_TEXT_ANCHOR_START},
+ {"middle", SP_CSS_TEXT_ANCHOR_MIDDLE},
+ {"end", SP_CSS_TEXT_ANCHOR_END},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_direction[] = {
+ {"ltr", SP_CSS_DIRECTION_LTR},
+ {"rtl", SP_CSS_DIRECTION_RTL},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_block_progression[] = {
+ {"tb", SP_CSS_BLOCK_PROGRESSION_TB},
+ {"rl", SP_CSS_BLOCK_PROGRESSION_RL},
+ {"lr", SP_CSS_BLOCK_PROGRESSION_LR},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_writing_mode[] = {
+ /* Note that using the same enumerator for lr as lr-tb means we write as lr-tb even if the
+ * input file said lr. We prefer writing lr-tb on the grounds that the spec says the initial
+ * value is lr-tb rather than lr.
+ *
+ * ECMA scripts may be surprised to find tb-rl in DOM if they set the attribute to rl, so
+ * sharing enumerators for different strings may be a bug (once we support ecma script).
+ */
+ {"lr-tb", SP_CSS_WRITING_MODE_LR_TB},
+ {"rl-tb", SP_CSS_WRITING_MODE_RL_TB},
+ {"tb-rl", SP_CSS_WRITING_MODE_TB_RL},
+ {"lr", SP_CSS_WRITING_MODE_LR_TB},
+ {"rl", SP_CSS_WRITING_MODE_RL_TB},
+ {"tb", SP_CSS_WRITING_MODE_TB_RL},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_baseline_shift[] = {
+ {"baseline", SP_CSS_BASELINE_SHIFT_BASELINE},
+ {"sub", SP_CSS_BASELINE_SHIFT_SUB},
+ {"super", SP_CSS_BASELINE_SHIFT_SUPER},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_visibility[] = {
+ {"hidden", SP_CSS_VISIBILITY_HIDDEN},
+ {"collapse", SP_CSS_VISIBILITY_COLLAPSE},
+ {"visible", SP_CSS_VISIBILITY_VISIBLE},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_overflow[] = {
+ {"visible", SP_CSS_OVERFLOW_VISIBLE},
+ {"hidden", SP_CSS_OVERFLOW_HIDDEN},
+ {"scroll", SP_CSS_OVERFLOW_SCROLL},
+ {"auto", SP_CSS_OVERFLOW_AUTO},
+ {NULL, -1}
+};
+
+// CSS Compositing and Blending Level 1
+static SPStyleEnum const enum_isolation[] = {
+ {"auto", SP_CSS_ISOLATION_AUTO},
+ {"isolate", SP_CSS_ISOLATION_ISOLATE},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_blend_mode[] = {
+ {"normal", SP_CSS_BLEND_NORMAL},
+ {"multiply", SP_CSS_BLEND_MULTIPLY},
+ {"screen", SP_CSS_BLEND_SCREEN},
+ {"darken", SP_CSS_BLEND_DARKEN},
+ {"lighten", SP_CSS_BLEND_LIGHTEN},
+ {"overlay", SP_CSS_BLEND_OVERLAY},
+ {"color-dodge", SP_CSS_BLEND_COLORDODGE},
+ {"color-burn", SP_CSS_BLEND_COLORBURN},
+ {"hard-light", SP_CSS_BLEND_HARDLIGHT},
+ {"soft-light", SP_CSS_BLEND_SOFTLIGHT},
+ {"difference", SP_CSS_BLEND_DIFFERENCE},
+ {"exclusion", SP_CSS_BLEND_EXCLUSION},
+ {"hue", SP_CSS_BLEND_HUE},
+ {"saturation", SP_CSS_BLEND_SATURATION},
+ {"color", SP_CSS_BLEND_COLOR},
+ {"luminosity", SP_CSS_BLEND_LUMINOSITY},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_display[] = {
+ {"none", SP_CSS_DISPLAY_NONE},
+ {"inline", SP_CSS_DISPLAY_INLINE},
+ {"block", SP_CSS_DISPLAY_BLOCK},
+ {"list-item", SP_CSS_DISPLAY_LIST_ITEM},
+ {"run-in", SP_CSS_DISPLAY_RUN_IN},
+ {"compact", SP_CSS_DISPLAY_COMPACT},
+ {"marker", SP_CSS_DISPLAY_MARKER},
+ {"table", SP_CSS_DISPLAY_TABLE},
+ {"inline-table", SP_CSS_DISPLAY_INLINE_TABLE},
+ {"table-row-group", SP_CSS_DISPLAY_TABLE_ROW_GROUP},
+ {"table-header-group", SP_CSS_DISPLAY_TABLE_HEADER_GROUP},
+ {"table-footer-group", SP_CSS_DISPLAY_TABLE_FOOTER_GROUP},
+ {"table-row", SP_CSS_DISPLAY_TABLE_ROW},
+ {"table-column-group", SP_CSS_DISPLAY_TABLE_COLUMN_GROUP},
+ {"table-column", SP_CSS_DISPLAY_TABLE_COLUMN},
+ {"table-cell", SP_CSS_DISPLAY_TABLE_CELL},
+ {"table-caption", SP_CSS_DISPLAY_TABLE_CAPTION},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_shape_rendering[] = {
+ {"auto", SP_CSS_SHAPE_RENDERING_AUTO},
+ {"optimizeSpeed", SP_CSS_SHAPE_RENDERING_OPTIMIZESPEED},
+ {"crispEdges", SP_CSS_SHAPE_RENDERING_CRISPEDGES},
+ {"geometricPrecision", SP_CSS_SHAPE_RENDERING_GEOMETRICPRECISION},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_color_rendering[] = {
+ {"auto", SP_CSS_COLOR_RENDERING_AUTO},
+ {"optimizeSpeed", SP_CSS_COLOR_RENDERING_OPTIMIZESPEED},
+ {"optimizeQuality", SP_CSS_COLOR_RENDERING_OPTIMIZEQUALITY},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_image_rendering[] = {
+ {"auto", SP_CSS_IMAGE_RENDERING_AUTO},
+ {"optimizeSpeed", SP_CSS_IMAGE_RENDERING_OPTIMIZESPEED},
+ {"optimizeQuality", SP_CSS_IMAGE_RENDERING_OPTIMIZEQUALITY},
+ {"-inkscape-crisp-edges", SP_CSS_IMAGE_RENDERING_CRISPEDGES},
+ {"-inkscape-pixelated", SP_CSS_IMAGE_RENDERING_PIXELATED},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_text_rendering[] = {
+ {"auto", SP_CSS_TEXT_RENDERING_AUTO},
+ {"optimizeSpeed", SP_CSS_TEXT_RENDERING_OPTIMIZESPEED},
+ {"optimizeLegibility", SP_CSS_TEXT_RENDERING_OPTIMIZELEGIBILITY},
+ {"geometricPrecision", SP_CSS_TEXT_RENDERING_GEOMETRICPRECISION},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_enable_background[] = {
+ {"accumulate", SP_CSS_BACKGROUND_ACCUMULATE},
+ {"new", SP_CSS_BACKGROUND_NEW},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_clip_rule[] = {
+ {"nonzero", SP_WIND_RULE_NONZERO},
+ {"evenodd", SP_WIND_RULE_EVENODD},
+ {NULL, -1}
+};
+
+static SPStyleEnum const enum_color_interpolation[] = {
+ {"auto", SP_CSS_COLOR_INTERPOLATION_AUTO},
+ {"sRGB", SP_CSS_COLOR_INTERPOLATION_SRGB},
+ {"linearRGB", SP_CSS_COLOR_INTERPOLATION_LINEARRGB},
+ {NULL, -1}
+};
+
+
#endif // SEEN_SP_STYLE_ENUMS_H
diff --git a/src/style-internal.cpp b/src/style-internal.cpp
new file mode 100644
index 000000000..df08d0adf
--- /dev/null
+++ b/src/style-internal.cpp
@@ -0,0 +1,2543 @@
+/**
+ * @file
+ * SVG stylesheets implementation - Classes used by SPStyle class.
+ */
+
+/* Authors:
+ * C++ conversion:
+ * Tavmjong Bah <tavmjong@free.fr>
+ * Legacy C implementation:
+ * Lauris Kaplinski <lauris@kaplinski.com>
+ * Peter Moulder <pmoulder@mail.csse.monash.edu.au>
+ * bulia byak <buliabyak@users.sf.net>
+ * Abhishek Sharma
+ * Kris De Gussem <Kris.DeGussem@gmail.com>
+ *
+ * Copyright (C) 2001-2002 Lauris Kaplinski
+ * Copyright (C) 2001 Ximian, Inc.
+ * Copyright (C) 2005 Monash University
+ * Copyright (C) 2012 Kris De Gussem
+ * Copyright (C) 2014 Tavmjong Bah
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "style-internal.h"
+#include "style-enums.h"
+#include "style.h"
+
+#include "svg/svg.h"
+#include "svg/svg-color.h"
+#include "svg/svg-icc-color.h"
+
+#include "streq.h"
+#include "strneq.h"
+
+#include "extract-uri.h"
+#include "preferences.h"
+#include "svg/css-ostringstream.h"
+#include "util/units.h"
+
+#include <sigc++/functors/ptr_fun.h>
+#include <sigc++/adaptors/bind.h>
+
+// TODO REMOVE OR MAKE MEMBER FUNCTIONS
+void sp_style_fill_paint_server_ref_changed( SPObject *old_ref, SPObject *ref, SPStyle *style);
+void sp_style_stroke_paint_server_ref_changed(SPObject *old_ref, SPObject *ref, SPStyle *style);
+void sp_style_filter_ref_changed( SPObject *old_ref, SPObject *ref, SPStyle *style);
+void sp_style_set_ipaint_to_uri(SPStyle *style, SPIPaint *paint, const Inkscape::URI *uri, SPDocument *document);
+void sp_style_set_ipaint_to_uri_string (SPStyle *style, SPIPaint *paint, const gchar *uri);
+
+using Inkscape::CSSOStringStream;
+
+// SPIBase --------------------------------------------------------------
+
+
+// SPIFloat -------------------------------------------------------------
+
+void
+SPIFloat::read( gchar const *str ) {
+
+ if( !str ) return;
+
+ if ( !strcmp(str, "inherit") ) {
+ set = TRUE;
+ inherit = TRUE;
+ } else {
+ gfloat value_tmp;
+ if (sp_svg_number_read_f(str, &value_tmp)) {
+ set = TRUE;
+ inherit = FALSE;
+ value = value_tmp;
+ }
+ }
+}
+
+const Glib::ustring
+SPIFloat::write( guint const flags, SPIBase const *const base) const {
+
+ SPIFloat const *const my_base = dynamic_cast<const SPIFloat*>(base);
+ if ( (flags & SP_STYLE_FLAG_ALWAYS) ||
+ ((flags & SP_STYLE_FLAG_IFSET) && this->set) ||
+ ((flags & SP_STYLE_FLAG_IFDIFF) && this->set
+ && (!my_base->set || this != my_base )))
+ {
+ if (this->inherit) {
+ return (name + ":inherit;");
+ } else {
+ Inkscape::CSSOStringStream os;
+ os << name << ":" << this->value << ";";
+ return os.str();
+ }
+ }
+ return Glib::ustring("");
+}
+
+void
+SPIFloat::cascade( const SPIBase* const parent ) {
+ if( const SPIFloat* p = dynamic_cast<const SPIFloat*>(parent) ) {
+ if( (inherits && !set) || inherit ) value = p->value;
+ } else {
+ std::cerr << "SPIFloat::cascade(): Incorrect parent type" << std::endl;
+ }
+}
+
+void
+SPIFloat::merge( const SPIBase* const parent ) {
+ if( const SPIFloat* p = dynamic_cast<const SPIFloat*>(parent) ) {
+ if( inherits ) {
+ if( (!set || inherit) && p->set && !(p->inherit) ) {
+ set = p->set;
+ inherit = p->inherit;
+ value = p->value;
+ }
+ }
+ } else {
+ std::cerr << "SPIFloat::merge(): Incorrect parent type" << std::endl;
+ }
+}
+
+bool
+SPIFloat::operator==(const SPIBase& rhs) {
+ if( const SPIFloat* r = dynamic_cast<const SPIFloat*>(&rhs) ) {
+ return (value == r->value && SPIBase::operator==(rhs));
+ } else {
+ return false;
+ }
+}
+
+
+
+// SPIScale24 -----------------------------------------------------------
+
+void
+SPIScale24::read( gchar const *str ) {
+
+ if( !str ) return;
+
+ if ( !strcmp(str, "inherit") ) {
+ set = TRUE;
+ inherit = TRUE;
+ } else {
+ gfloat value_in;
+ if (sp_svg_number_read_f(str, &value_in)) {
+ set = TRUE;
+ inherit = FALSE;
+ value_in = CLAMP(value_in, 0.0, 1.0);
+ value = SP_SCALE24_FROM_FLOAT( value_in );
+ }
+ }
+}
+
+const Glib::ustring
+SPIScale24::write( guint const flags, SPIBase const *const base) const {
+
+ SPIScale24 const *const my_base = dynamic_cast<const SPIScale24*>(base);
+ if ( (flags & SP_STYLE_FLAG_ALWAYS) ||
+ ((flags & SP_STYLE_FLAG_IFSET) && this->set) ||
+ ((flags & SP_STYLE_FLAG_IFDIFF) && this->set
+ && (!my_base->set || this != my_base )))
+ {
+ if (this->inherit) {
+ return (name + ":inherit;");
+ } else {
+ Inkscape::CSSOStringStream os;
+ os << name << ":" << SP_SCALE24_TO_FLOAT(this->value) << ";";
+ return os.str();
+ }
+ }
+ return Glib::ustring("");
+}
+
+void
+SPIScale24::cascade( const SPIBase* const parent ) {
+ if( const SPIScale24* p = dynamic_cast<const SPIScale24*>(parent) ) {
+ if( (inherits && !set) || inherit ) value = p->value;
+ } else {
+ std::cerr << "SPIScale24::cascade(): Incorrect parent type" << std::endl;
+ }
+}
+
+void
+SPIScale24::merge( const SPIBase* const parent ) {
+ if( const SPIScale24* p = dynamic_cast<const SPIScale24*>(parent) ) {
+ if( inherits ) {
+ if( (!set || inherit) && p->set && !(p->inherit) ) {
+ set = p->set;
+ inherit = p->inherit;
+ value = p->value;
+ }
+ } else {
+ // Needed only for 'opacity' which does not inherit. See comment at bottom of file.
+ if( name.compare( "opacity" ) != 0 )
+ std::cerr << "SPIScale24::merge: unhandled property: " << name << std::endl;
+ if( !set || (!inherit && value == SP_SCALE24_MAX) ) {
+ value = p->value;
+ } else {
+ if( inherit ) value = p->value; // Insures child is up-to-date
+ value = SP_SCALE24_MUL( value, p->value );
+ inherit = (inherit && p->inherit && (p->value == 0 || p->value == SP_SCALE24_MAX) );
+ set = (inherit || value < SP_SCALE24_MAX);
+ }
+ }
+ } else {
+ std::cerr << "SPIScale24::merge(): Incorrect parent type" << std::endl;
+ }
+}
+
+bool
+SPIScale24::operator==(const SPIBase& rhs) {
+ if( const SPIScale24* r = dynamic_cast<const SPIScale24*>(&rhs) ) {
+ return (value == r->value && SPIBase::operator==(rhs));
+ } else {
+ return false;
+ }
+}
+
+
+
+// SPILength ------------------------------------------------------------
+
+void
+SPILength::read( gchar const *str ) {
+
+ if( !str ) return;
+
+ if (!strcmp(str, "inherit")) {
+ set = TRUE;
+ inherit = TRUE;
+ unit = SP_CSS_UNIT_NONE;
+ value = computed = 0.0;
+ } else {
+ gdouble value_tmp;
+ gchar *e;
+ /** \todo fixme: Move this to standard place (Lauris) */
+ value_tmp = g_ascii_strtod(str, &e);
+ if ( !IS_FINITE(value_tmp) ) { // fix for bug lp:935157
+ return;
+ }
+ if ((gchar const *) e != str) {
+
+ value = value_tmp;
+ if (!*e) {
+ /* Userspace */
+ unit = SP_CSS_UNIT_NONE;
+ computed = value;
+ } else if (!strcmp(e, "px")) {
+ /* Userspace */
+ unit = SP_CSS_UNIT_PX;
+ computed = value;
+ } else if (!strcmp(e, "pt")) {
+ /* Userspace / DEVICESCALE */
+ unit = SP_CSS_UNIT_PT;
+ computed = Inkscape::Util::Quantity::convert(value, "pt", "px");
+ } else if (!strcmp(e, "pc")) {
+ unit = SP_CSS_UNIT_PC;
+ computed = Inkscape::Util::Quantity::convert(value, "pc", "px");
+ } else if (!strcmp(e, "mm")) {
+ unit = SP_CSS_UNIT_MM;
+ computed = Inkscape::Util::Quantity::convert(value, "mm", "px");
+ } else if (!strcmp(e, "cm")) {
+ unit = SP_CSS_UNIT_CM;
+ computed = Inkscape::Util::Quantity::convert(value, "cm", "px");
+ } else if (!strcmp(e, "in")) {
+ unit = SP_CSS_UNIT_IN;
+ computed = Inkscape::Util::Quantity::convert(value, "in", "px");
+ } else if (!strcmp(e, "em")) {
+ /* EM square */
+ unit = SP_CSS_UNIT_EM;
+ if( style && &style->font_size ) {
+ computed = value * style->font_size.computed;
+ } else {
+ computed = value * style->font_size.font_size_default;
+ }
+ } else if (!strcmp(e, "ex")) {
+ /* ex square */
+ unit = SP_CSS_UNIT_EX;
+ if( style && &style->font_size ) {
+ computed = value * style->font_size.computed * 0.5; // FIXME
+ } else {
+ computed = value * style->font_size.font_size_default * 0.5;
+ }
+ } else if (!strcmp(e, "%")) {
+ /* Percentage */
+ unit = SP_CSS_UNIT_PERCENT;
+ value = value * 0.01;
+ } else {
+ /* Invalid */
+ return;
+ }
+ set = TRUE;
+ inherit = FALSE;
+ }
+ }
+}
+
+const Glib::ustring
+SPILength::write( guint const flags, SPIBase const *const base) const {
+
+ SPILength const *const my_base = dynamic_cast<const SPILength*>(base);
+ if ( (flags & SP_STYLE_FLAG_ALWAYS) ||
+ ((flags & SP_STYLE_FLAG_IFSET) && this->set) ||
+ ((flags & SP_STYLE_FLAG_IFDIFF) && this->set
+ && (!my_base->set || this != my_base )))
+ {
+ if (this->inherit) {
+ return (name + ":inherit;");
+ } else {
+ Inkscape::CSSOStringStream os;
+ switch (this->unit) {
+ case SP_CSS_UNIT_NONE:
+ os << name << ":" << this->computed << ";";
+ break;
+ case SP_CSS_UNIT_PX:
+ os << name << ":" << this->computed << "px;";
+ break;
+ case SP_CSS_UNIT_PT:
+ os << name << ":" << Inkscape::Util::Quantity::convert(this->computed, "px", "pt") << "pt;";
+ break;
+ case SP_CSS_UNIT_PC:
+ os << name << ":" << Inkscape::Util::Quantity::convert(this->computed, "px", "pc") << "pc;";
+ break;
+ case SP_CSS_UNIT_MM:
+ os << name << ":" << Inkscape::Util::Quantity::convert(this->computed, "px", "mm") << "mm;";
+ break;
+ case SP_CSS_UNIT_CM:
+ os << name << ":" << Inkscape::Util::Quantity::convert(this->computed, "px", "cm") << "cm;";
+ break;
+ case SP_CSS_UNIT_IN:
+ os << name << ":" << Inkscape::Util::Quantity::convert(this->computed, "px", "in") << "in;";
+ break;
+ case SP_CSS_UNIT_EM:
+ os << name << ":" << this->value << "em;";
+ break;
+ case SP_CSS_UNIT_EX:
+ os << name << ":" << this->value << "ex;";
+ break;
+ case SP_CSS_UNIT_PERCENT:
+ os << name << ":" << (this->value * 100.0) << "%;";
+ break;
+ default:
+ /* Invalid */
+ break;
+ }
+ return os.str();
+ }
+ }
+ return Glib::ustring("");
+}
+
+void
+SPILength::cascade( const SPIBase* const parent ) {
+ if( const SPILength* p = dynamic_cast<const SPILength*>(parent) ) {
+ if( (inherits && !set) || inherit ) {
+ value = p->value;
+ computed = p->computed;
+ } else {
+ // Recalculate based on new font-size, font-family inherited from parent
+ double const em = style->font_size.computed;
+ if (unit == SP_CSS_UNIT_EM) {
+ computed = value * em;
+ } else if (unit == SP_CSS_UNIT_EX) {
+ // FIXME: Get x height from libnrtype or pango.
+ computed = value * em * 0.5;
+ }
+ }
+ } else {
+ std::cerr << "SPILength::cascade(): Incorrect parent type" << std::endl;
+ }
+}
+
+void
+SPILength::merge( const SPIBase* const parent ) {
+ if( const SPILength* p = dynamic_cast<const SPILength*>(parent) ) {
+ if( inherits ) {
+ if( (!set || inherit) && p->set && !(p->inherit) ) {
+ set = p->set;
+ inherit = p->inherit;
+ unit = p->unit;
+ value = p->value;
+ computed = p->computed;
+
+ // Fix up so values are correct
+ switch (p->unit) {
+ case SP_CSS_UNIT_EM:
+ case SP_CSS_UNIT_EX:
+ g_assert( &style->font_size != NULL && &p->style->font_size != NULL );
+ value *= p->style->font_size.computed / style->font_size.computed;
+ /** \todo
+ * FIXME: Have separate ex ratio parameter.
+ * Get x height from libnrtype or pango.
+ */
+ if (!IS_FINITE(value)) {
+ value = computed;
+ unit = SP_CSS_UNIT_NONE;
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+ } else {
+ std::cerr << "SPIFloat::merge(): Incorrect parent type" << std::endl;
+ }
+}
+
+bool
+SPILength::operator==(const SPIBase& rhs) {
+ if( const SPILength* r = dynamic_cast<const SPILength*>(&rhs) ) {
+
+ if( unit != r->unit ) return false;
+
+ // If length depends on external parameter, lengths cannot be equal.
+ if (unit == SP_CSS_UNIT_EM) return false;
+ if (unit == SP_CSS_UNIT_EX) return false;
+ if (unit == SP_CSS_UNIT_PERCENT) return false;
+ if (r->unit == SP_CSS_UNIT_EM) return false;
+ if (r->unit == SP_CSS_UNIT_EX) return false;
+ if (r->unit == SP_CSS_UNIT_PERCENT) return false;
+
+ return (computed == r->computed );
+ } else {
+ return false;
+ }
+}
+
+
+
+// SPILengthOrNormal ----------------------------------------------------
+
+void
+SPILengthOrNormal::read( gchar const *str ) {
+
+ if( !str ) return;
+
+ if ( !strcmp(str, "normal") ) {
+ set = TRUE;
+ inherit = FALSE;
+ unit = SP_CSS_UNIT_NONE;
+ value = computed = 0.0;
+ normal = TRUE;
+ } else {
+ SPILength::read( str );
+ normal = false;
+ }
+};
+
+const Glib::ustring
+SPILengthOrNormal::write( guint const flags, SPIBase const *const base) const {
+
+ SPILength const *const my_base = dynamic_cast<const SPILength*>(base);
+ if ( (flags & SP_STYLE_FLAG_ALWAYS) ||
+ ((flags & SP_STYLE_FLAG_IFSET) && this->set) ||
+ ((flags & SP_STYLE_FLAG_IFDIFF) && this->set
+ && (!my_base->set || this != my_base )))
+ {
+ if (this->normal) {
+ return (name + ":normal;");
+ } else {
+ return SPILength::write(flags, base);
+ }
+ }
+ return Glib::ustring("");
+}
+
+void
+SPILengthOrNormal::merge( const SPIBase* const parent ) {
+ if( const SPILengthOrNormal* p = dynamic_cast<const SPILengthOrNormal*>(parent) ) {
+ if( inherits ) {
+ if( (!set || inherit) && p->set && !(p->inherit) ) {
+ normal = p->normal;
+ SPILength::merge( parent );
+ }
+ }
+ }
+}
+
+bool
+SPILengthOrNormal::operator==(const SPIBase& rhs) {
+ if( const SPILengthOrNormal* r = dynamic_cast<const SPILengthOrNormal*>(&rhs) ) {
+ if( normal && r->normal ) { return true; }
+ if( normal != r->normal ) { return false; }
+ return SPILength::operator==(rhs);
+ } else {
+ return false;
+ }
+}
+
+
+
+// SPIEnum --------------------------------------------------------------
+
+void
+SPIEnum::read( gchar const *str ) {
+
+ if( !str ) return;
+
+ if( !strcmp(str, "inherit") ) {
+ set = TRUE;
+ inherit = TRUE;
+ } else {
+ for (unsigned i = 0; enums[i].key; i++) {
+ if (!strcmp(str, enums[i].key)) {
+ set = TRUE;
+ inherit = FALSE;
+ value = enums[i].value;
+ /* Save copying for values not needing it */
+ computed = value;
+ break;
+ }
+ }
+ // The following is defined in CSS 2.1
+ if( name.compare("font-weight" ) == 0 ) {
+ if( value == SP_CSS_FONT_WEIGHT_NORMAL ) {
+ computed = SP_CSS_FONT_WEIGHT_400;
+ } else if (value == SP_CSS_FONT_WEIGHT_BOLD ) {
+ computed = SP_CSS_FONT_WEIGHT_700;
+ }
+ }
+ }
+}
+
+const Glib::ustring
+SPIEnum::write( guint const flags, SPIBase const *const base) const {
+
+ SPIEnum const *const my_base = dynamic_cast<const SPIEnum*>(base);
+ if ( (flags & SP_STYLE_FLAG_ALWAYS) ||
+ ((flags & SP_STYLE_FLAG_IFSET) && this->set) ||
+ ((flags & SP_STYLE_FLAG_IFDIFF) && this->set
+ && (!my_base->set || this != my_base )))
+ {
+ if (this->inherit) {
+ return (name + ":inherit;");
+ }
+ for (unsigned i = 0; enums[i].key; ++i) {
+ if (enums[i].value == static_cast< gint > (this->value) ) {
+ return (name + ":" + enums[i].key + ";");
+ }
+ }
+ }
+ return Glib::ustring("");
+}
+
+void
+SPIEnum::cascade( const SPIBase* const parent ) {
+ if( const SPIEnum* p = dynamic_cast<const SPIEnum*>(parent) ) {
+ if( inherits && (!set || inherit) ) {
+ computed = p->computed;
+ } else {
+ if( name.compare("font-stretch" ) == 0 ) {
+ unsigned const parent_val = p->computed;
+ if( value == SP_CSS_FONT_STRETCH_NARROWER ) {
+ computed = (parent_val == SP_CSS_FONT_STRETCH_ULTRA_CONDENSED ?
+ parent_val : parent_val - 1);
+ } else if (value == SP_CSS_FONT_STRETCH_WIDER ) {
+ computed = (parent_val == SP_CSS_FONT_STRETCH_ULTRA_EXPANDED ?
+ parent_val : parent_val + 1);
+ }
+ }
+ // strictly, 'bolder' and 'lighter' should go to the next weight
+ // expressible in the current font family, but that's difficult to
+ // find out, so jumping by 3 seems an appropriate approximation
+ if( name.compare("font-weight" ) == 0 ) {
+ unsigned const parent_val = p->computed;
+ if( value == SP_CSS_FONT_WEIGHT_LIGHTER ) {
+ computed = (parent_val <= SP_CSS_FONT_WEIGHT_100 + 3 ?
+ (unsigned)SP_CSS_FONT_WEIGHT_100 : parent_val - 3);
+ } else if (value == SP_CSS_FONT_WEIGHT_BOLDER ) {
+ computed = (parent_val >= SP_CSS_FONT_WEIGHT_900 - 3 ?
+ (unsigned)SP_CSS_FONT_WEIGHT_900 : parent_val + 3);
+ }
+ }
+ }
+ } else {
+ std::cerr << "SPIEnum::cascade(): Incorrect parent type" << std::endl;
+ }
+}
+
+// FIXME Handle font_stretch and font_weight (relative values) New derived class?
+void
+SPIEnum::merge( const SPIBase* const parent ) {
+ if( const SPIEnum* p = dynamic_cast<const SPIEnum*>(parent) ) {
+ if( inherits ) {
+ if( p->set && !p->inherit ) {
+ if( !set || inherit ) {
+ set = p->set;
+ inherit = p->inherit;
+ value = p->value;
+ computed = p->computed; // Different from value for font-weight and font-stretch
+ } else {
+ // The following is to special case 'font-stretch' and 'font-weight'
+ unsigned max_computed_val = 100;
+ unsigned smaller_val = 100;
+ if( name.compare("font-stretch" ) == 0 ) {
+ max_computed_val = SP_CSS_FONT_STRETCH_ULTRA_EXPANDED;
+ smaller_val = SP_CSS_FONT_STRETCH_NARROWER;
+ } else if( name.compare("font-weight" ) == 0 ) {
+ max_computed_val = SP_CSS_FONT_WEIGHT_900;
+ smaller_val = SP_CSS_FONT_WEIGHT_LIGHTER;
+ }
+ unsigned const min_computed_val = 0;
+ unsigned const larger_val = smaller_val + 1;
+ if( value < smaller_val ) {
+ // Child has absolute value, leave as is.
+ // Works for all enum properties
+ } else if( (value == smaller_val && p->value == larger_val ) ||
+ (value == larger_val && p->value == smaller_val) ) {
+ // Values cancel, unset
+ set = false;
+ } else if( value == p->value ) {
+ // Leave as is, what does applying "wider" twice do?
+ } else {
+ // Child is smaller or larger, adjust parent value accordingly
+ unsigned const parent_val = p->computed;
+ value = (value == smaller_val ?
+ ( parent_val == min_computed_val ? parent_val : parent_val - 1 ) :
+ ( parent_val == max_computed_val ? parent_val : parent_val + 1 ) );
+ g_assert(value <= max_computed_val);
+ inherit = false;
+ g_assert(set);
+ }
+ }
+ }
+ }
+ }
+}
+
+bool
+SPIEnum::operator==(const SPIBase& rhs) {
+ if( const SPIEnum* r = dynamic_cast<const SPIEnum*>(&rhs) ) {
+ return (computed == r->computed && SPIBase::operator==(rhs));
+ } else {
+ return false;
+ }
+}
+
+
+
+// SPIString ------------------------------------------------------------
+
+void
+SPIString::read( gchar const *str ) {
+
+ if( !str ) return;
+
+ g_free(value);
+
+ if (!strcmp(str, "inherit")) {
+ set = TRUE;
+ inherit = TRUE;
+ value = NULL;
+ } else {
+ set = TRUE;
+ inherit = FALSE;
+ value = g_strdup(str);
+ }
+}
+
+
+const Glib::ustring
+SPIString::write( guint const flags, SPIBase const *const base) const {
+
+ SPIString const *const my_base = dynamic_cast<const SPIString*>(base);
+ if ( (flags & SP_STYLE_FLAG_ALWAYS) ||
+ ((flags & SP_STYLE_FLAG_IFSET) && this->set) ||
+ ((flags & SP_STYLE_FLAG_IFDIFF) && this->set
+ && (!my_base->set || this != my_base )))
+ {
+ if (this->inherit) {
+ return (name + ":inherit;");
+ } else {
+ if( this->value ) {
+ if( name.compare( "font-family" ) == 0 ) {
+ // This is for compatibilty with the C version of code.
+ // This is incorrect as it puts single quotes around the
+ // entire string rather around the individule font names.
+ // This should be handled by the routines that extract
+ // out the font family names and reassembles them into a
+ // font fallback list. FIXME
+ return (name + ":" + css2_escape_quote(this->value) + ";");
+ } else {
+ return (name + ":" + this->value + ";");
+ }
+ }
+ }
+ }
+ return Glib::ustring("");
+}
+
+void
+SPIString::clear() {
+ SPIBase::clear();
+ g_free( value );
+ value = NULL;
+ if( value_default ) value = strdup( value_default );
+}
+
+void
+SPIString::cascade( const SPIBase* const parent ) {
+ if( const SPIString* p = dynamic_cast<const SPIString*>(parent) ) {
+ if( inherits && (!set || inherit) ) {
+ g_free(value);
+ value = g_strdup(p->value);
+ }
+ } else {
+ std::cerr << "SPIString::cascade(): Incorrect parent type" << std::endl;
+ }
+}
+
+void
+SPIString::merge( const SPIBase* const parent ) {
+ if( const SPIString* p = dynamic_cast<const SPIString*>(parent) ) {
+ if( inherits ) {
+ if( (!set || inherit) && p->set && !(p->inherit) ) {
+ set = p->set;
+ inherit = p->inherit;
+ g_free(value);
+ value = g_strdup(p->value);
+ }
+ }
+ }
+}
+
+bool
+SPIString::operator==(const SPIBase& rhs) {
+ if( const SPIString* r = dynamic_cast<const SPIString*>(&rhs) ) {
+ if( value == NULL && r->value == NULL ) return (SPIBase::operator==(rhs));
+ if( value == NULL || r->value == NULL ) return false;
+
+ return (strcmp(value, r->value) == 0 && SPIBase::operator==(rhs));
+ } else {
+ return false;
+ }
+}
+
+
+
+// SPIColor -------------------------------------------------------------
+
+// Used for 'color', 'text-decoration-color', 'flood-color', 'lighting-color', and 'stop-color'.
+// (The last three have yet to be implemented.)
+// CSS3: 'currentcolor' is allowed value and is equal to inherit for the 'color' property.
+// FIXME: We should preserve named colors, hsl colors, etc.
+void SPIColor::read( gchar const *str ) {
+
+ if( !str ) return;
+
+ set = false;
+ inherit = false;
+ currentcolor = false;
+ if ( !strcmp(str, "inherit") ) {
+ set = true;
+ inherit = true;
+ } else if ( !strcmp(str, "currentColor") ) {
+ set = true;
+ currentcolor = true;
+ if( name.compare( "color") == 0 ) {
+ inherit = true; // CSS3
+ } else {
+ value.color = style->color.value.color;
+ }
+ } else {
+ guint32 const rgb0 = sp_svg_read_color(str, 0xff);
+ if (rgb0 != 0xff) {
+ setColor(rgb0);
+ set = TRUE;
+ }
+ }
+}
+
+const Glib::ustring
+SPIColor::write( guint const flags, SPIBase const *const base) const {
+
+ SPIColor const *const my_base = dynamic_cast<const SPIColor*>(base);
+ if ( (flags & SP_STYLE_FLAG_ALWAYS) ||
+ ((flags & SP_STYLE_FLAG_IFSET) && this->set) ||
+ ((flags & SP_STYLE_FLAG_IFDIFF) && this->set
+ && (!my_base->set || this != my_base )))
+ {
+ CSSOStringStream css;
+
+ if (this->currentcolor) {
+ // currentcolor goes first to handle special case for 'color' property
+ css << "currentColor";
+ } else if (this->inherit) {
+ css << "inherit";
+ } else {
+ char color_buf[8];
+ sp_svg_write_color(color_buf, sizeof(color_buf), this->value.color.toRGBA32( 0 ));
+ css << color_buf;
+
+ if (this->value.color.icc) {
+ if ( !css.str().empty() ) {
+ css << " ";
+ }
+ css << "icc-color(" << this->value.color.icc->colorProfile;
+ for (std::vector<double>::const_iterator i(this->value.color.icc->colors.begin()),
+ iEnd(this->value.color.icc->colors.end());
+ i != iEnd; ++i) {
+ css << ", " << *i;
+ }
+ css << ')';
+ }
+ }
+
+ if ( !css.str().empty() ) {
+ return (name + ":" + css.str() + ";");
+ }
+ }
+
+ return Glib::ustring("");
+}
+
+void
+SPIColor::cascade( const SPIBase* const parent ) {
+ if( const SPIColor* p = dynamic_cast<const SPIColor*>(parent) ) {
+ if( (inherits && !set) || inherit) { // FIXME verify for 'color'
+ if( !(inherit && currentcolor) ) currentcolor = p->currentcolor;
+ value.color = p->value.color;
+ } else {
+ // Add CSS4 Color: Lighter, Darker
+ }
+ } else {
+ std::cerr << "SPIColor::cascade(): Incorrect parent type" << std::endl;
+ }
+
+}
+
+void
+SPIColor::merge( const SPIBase* const parent ) {
+ if( const SPIColor* p = dynamic_cast<const SPIColor*>(parent) ) {
+ if( inherits ) {
+ if( (!set || inherit) && p->set && !(p->inherit) ) {
+ set = p->set;
+ inherit = p->inherit;
+ currentcolor = p->currentcolor;
+ value.color = p->value.color;
+ }
+ }
+ }
+}
+
+bool
+SPIColor::operator==(const SPIBase& rhs) {
+ if( const SPIColor* r = dynamic_cast<const SPIColor*>(&rhs) ) {
+
+ if ( (this->currentcolor != r->currentcolor ) ||
+ (this->value.color != r->value.color ) ||
+ (this->value.color.icc != r->value.color.icc ) ||
+ (this->value.color.icc && r->value.color.icc &&
+ this->value.color.icc->colorProfile != r->value.color.icc->colorProfile &&
+ this->value.color.icc->colors != r->value.color.icc->colors ) ) {
+ return false;
+ }
+
+ return SPIBase::operator==(rhs);
+
+ } else {
+ return false;
+ }
+}
+
+
+
+// SPIPaint -------------------------------------------------------------
+
+// Paint is used for 'fill' and 'stroke'. SPIPaint perhaps should be derived from SPIColor.
+// 'style' is set in SPStyle::SPStyle or in the legacy SPIPaint::read( gchar, style, document )
+// It is needed for computed value when value is 'currentColor'. It is also needed to
+// find the object for creating an href (this is done through document but should be done
+// directly so document not needed.. FIXME).
+
+SPIPaint::~SPIPaint() {
+ if( value.href ) {
+ clear();
+ delete value.href;
+ value.href = NULL;
+ }
+}
+
+/**
+ * Set SPIPaint object from string.
+ *
+ * \pre paint == \&style.fill || paint == \&style.stroke.
+ */
+void
+SPIPaint::read( gchar const *str ) {
+
+ // std::cout << "SPIPaint::read: Entrance: " << " |" << (str?str:"null") << "|" << std::endl;
+ // if( style ) {
+ // std::cout << " document: " << (void*)style->document << std::endl;
+ // std::cout << " object: " << (style->object?"present":"null") << std::endl;
+ // if( style->object )
+ // std::cout << " : " << (style->object->getId()?style->object->getId():"no ID")
+ // << " document: " << (style->object->document?"yes":"no") << std::endl;
+ // }
+
+ if(!str ) return;
+
+ reset( false ); // Do not init
+
+ // Is this necessary?
+ while (g_ascii_isspace(*str)) {
+ ++str;
+ }
+
+ if (streq(str, "inherit")) {
+ set = TRUE;
+ inherit = TRUE;
+ } else {
+ // Read any URL first. The other values can be stand-alone or backup to the URL.
+
+ if ( strneq(str, "url", 3) ) {
+
+ // FIXME: THE FOLLOWING CODE SHOULD BE PUT IN A PRIVATE FUNCTION FOR REUSE
+ gchar *uri = extract_uri( str, &str );
+ if(uri == NULL || uri[0] == '\0') {
+ std::cerr << "SPIPaint::read: url is empty or invalid" << std::endl;
+ } else if (!style ) {
+ std::cerr << "SPIPaint::read: url with empty SPStyle pointer" << std::endl;
+ } else {
+ set = TRUE;
+ SPDocument *document = (style->object) ? style->object->document : NULL;
+
+ // Create href if not done already
+ if (!value.href && document) {
+ // std::cout << " Creating value.href" << std::endl;
+ value.href = new SPPaintServerReference(document);
+ value.href->changedSignal().connect(sigc::bind(sigc::ptr_fun((this == &style->fill)? sp_style_fill_paint_server_ref_changed : sp_style_stroke_paint_server_ref_changed), style));
+ }
+
+ // std::cout << "uri: " << (uri?uri:"null") << std::endl;
+ // TODO check what this does in light of move away from union
+ sp_style_set_ipaint_to_uri_string ( style, this, uri);
+ }
+ g_free( uri );
+ }
+
+ while ( g_ascii_isspace(*str) ) {
+ ++str;
+ }
+
+ if (streq(str, "currentColor")) {
+ set = TRUE;
+ currentcolor = TRUE;
+ value.color = style->color.value.color;
+ } else if (streq(str, "none")) {
+ set = TRUE;
+ noneSet = TRUE;
+ } else {
+ guint32 const rgb0 = sp_svg_read_color(str, &str, 0xff);
+ if (rgb0 != 0xff) {
+ setColor( rgb0 );
+ set = TRUE;
+
+ while (g_ascii_isspace(*str)) {
+ ++str;
+ }
+ if (strneq(str, "icc-color(", 10)) {
+ SVGICCColor* tmp = new SVGICCColor();
+ if ( ! sp_svg_read_icc_color( str, &str, tmp ) ) {
+ delete tmp;
+ tmp = 0;
+ }
+ value.color.icc = tmp;
+ }
+ }
+ }
+ }
+}
+
+// Stand-alone read (Legacy read()), used multiple places, e.g. sp-stop.cpp
+// This function should not be necessary. FIXME
+void
+SPIPaint::read( gchar const *str, SPStyle &style_in, SPDocument *document_in ) {
+ style = &style_in;
+ style->document = document_in;
+ read( str );
+}
+
+const Glib::ustring
+SPIPaint::write( guint const flags, SPIBase const *const base) const {
+
+ SPIPaint const *const my_base = dynamic_cast<const SPIPaint*>(base);
+ if ( (flags & SP_STYLE_FLAG_ALWAYS) ||
+ ((flags & SP_STYLE_FLAG_IFSET) && this->set) ||
+ ((flags & SP_STYLE_FLAG_IFDIFF) && this->set
+ && (!my_base->set || this != my_base )))
+ {
+ CSSOStringStream css;
+
+ if (this->inherit) {
+ css << "inherit";
+ } else {
+
+ // url must go first as other values can serve as fallbacks
+ if ( this->value.href && this->value.href->getURI() ) {
+ const gchar* uri = this->value.href->getURI()->toString();
+ css << "url(" << uri << ")";
+ g_free((void *)uri);
+ }
+
+ if ( this->noneSet ) {
+ if ( !css.str().empty() ) {
+ css << " ";
+ }
+ css << "none";
+ }
+
+ if ( this->currentcolor ) {
+ if ( !css.str().empty() ) {
+ css << " ";
+ }
+ css << "currentColor";
+ }
+
+ if ( this->colorSet && !this->currentcolor ) {
+ if ( !css.str().empty() ) {
+ css << " ";
+ }
+ char color_buf[8];
+ sp_svg_write_color(color_buf, sizeof(color_buf), this->value.color.toRGBA32( 0 ));
+ css << color_buf;
+ }
+
+ if (this->value.color.icc && !this->currentcolor) {
+ if ( !css.str().empty() ) {
+ css << " ";
+ }
+ css << "icc-color(" << this->value.color.icc->colorProfile;
+ for (std::vector<double>::const_iterator i(this->value.color.icc->colors.begin()),
+ iEnd(this->value.color.icc->colors.end());
+ i != iEnd; ++i) {
+ css << ", " << *i;
+ }
+ css << ')';
+ }
+ }
+
+ if ( !css.str().empty() ) {
+ return (name + ":" + css.str() + ";");
+ }
+ }
+
+ return Glib::ustring("");
+}
+
+void
+SPIPaint::clear() {
+ // std::cout << "SPIPaint::clear(): " << name << std::endl;
+ reset( true ); // Reset and Init
+}
+
+void
+SPIPaint::reset( bool init ) {
+
+ // std::cout << "SPIPaint::reset(): " << name << " " << init << std::endl;
+ SPIBase::clear();
+ currentcolor = false;
+ colorSet = false;
+ noneSet = false;
+ value.color.set( false );
+ if (value.href){
+ if (value.href->getObject()) {
+ value.href->detach();
+ }
+ }
+ if( init ) {
+ if( name.compare( "fill" ) == 0 ) {
+ // 'black' is default for 'fill'
+ setColor(0.0, 0.0, 0.0);
+ }
+ if( name.compare( "text-decoration-color" ) == 0 ) {
+ currentcolor = true;
+ }
+ }
+}
+
+void
+SPIPaint::cascade( const SPIBase* const parent ) {
+
+ // std::cout << "SPIPaint::cascade" << std::endl;
+ if( const SPIPaint* p = dynamic_cast<const SPIPaint*>(parent) ) {
+ if(!set || inherit) { // Always inherits
+
+ reset( false ); // Do not init
+
+ if( p->isPaintserver() ) {
+ if( p->value.href) {
+ // Why can we use p->document ?
+ sp_style_set_ipaint_to_uri( style, this, p->value.href->getURI(), p->value.href->getOwnerDocument());
+ } else {
+ std::cerr << "SPIPaint::cascade: Expected paint server not found." << std::endl;
+ }
+ } else if( p->isColor() ) {
+ setColor( p->value.color );
+ } else if( p->isNoneSet() ) {
+ noneSet = TRUE;
+ } else if( p->currentcolor ) {
+ currentcolor = TRUE;
+ value.color = style->color.value.color;
+ } else if( isNone() ) {
+ //
+ } else {
+ g_assert_not_reached();
+ }
+ } else {
+ if( currentcolor ) {
+ // Update in case color value changed.
+ value.color = style->color.value.color;
+ }
+ }
+
+ } else {
+ std::cerr << "SPIPaint::cascade(): Incorrect parent type" << std::endl;
+ }
+
+}
+
+void
+SPIPaint::merge( const SPIBase* const parent ) {
+ if( const SPIPaint* p = dynamic_cast<const SPIPaint*>(parent) ) {
+ // if( inherits ) { Paint always inherits
+ if( (!set || inherit) && p->set && !(p->inherit) ) {
+ this->cascade( parent ); // Must call before setting 'set'
+ set = p->set;
+ inherit = p->inherit;
+ }
+ }
+}
+
+bool
+SPIPaint::operator==(const SPIBase& rhs) {
+
+ if( const SPIPaint* r = dynamic_cast<const SPIPaint*>(&rhs) ) {
+
+ if ( (this->isColor() != r->isColor() ) ||
+ (this->isPaintserver() != r->isPaintserver() ) ||
+ (this->currentcolor != r->currentcolor ) ) {
+ return false;
+ }
+
+ if ( this->isPaintserver() ) {
+ if( this->value.href == NULL || r->value.href == NULL ||
+ this->value.href->getObject() != r->value.href->getObject() ) {
+ return false;
+ }
+ }
+
+ if ( this->isColor() ) {
+ if ( (this->value.color != r->value.color ) ||
+ (this->value.color.icc != r->value.color.icc ) ||
+ (this->value.color.icc && r->value.color.icc &&
+ this->value.color.icc->colorProfile != r->value.color.icc->colorProfile &&
+ this->value.color.icc->colors != r->value.color.icc->colors ) ) {
+ return false;
+ }
+ }
+
+ return SPIBase::operator==(rhs);
+
+ } else {
+ return false;
+ }
+}
+
+
+
+// SPIPaintOrder --------------------------------------------------------
+
+void
+SPIPaintOrder::read( gchar const *str ) {
+
+ if( !str ) return;
+
+ g_free(value);
+ set = FALSE;
+ inherit = FALSE;
+
+ if (!strcmp(str, "inherit")) {
+ set = TRUE;
+ inherit = TRUE;
+ } else {
+ set = TRUE;
+ value = g_strdup(str);
+
+ if (!strcmp(value, "normal")) {
+ layer[0] = SP_CSS_PAINT_ORDER_NORMAL;
+ layer_set[0] = true;
+ } else {
+ // This certainly can be done more efficiently
+ gchar** c = g_strsplit(value, " ", PAINT_ORDER_LAYERS + 1);
+ bool used[3] = {false, false, false};
+ unsigned int i = 0;
+ for( ; i < PAINT_ORDER_LAYERS; ++i ) {
+ if( c[i] ) {
+ layer_set[i] = false;
+ if( !strcmp( c[i], "fill")) {
+ layer[i] = SP_CSS_PAINT_ORDER_FILL;
+ layer_set[i] = true;
+ used[0] = true;
+ } else if( !strcmp( c[i], "stroke")) {
+ layer[i] = SP_CSS_PAINT_ORDER_STROKE;
+ layer_set[i] = true;
+ used[1] = true;
+ } else if( !strcmp( c[i], "markers")) {
+ layer[i] = SP_CSS_PAINT_ORDER_MARKER;
+ layer_set[i] = true;
+ used[2] = true;
+ } else {
+ std::cerr << "sp_style_read_ipaintorder: illegal value: " << c[i] << std::endl;
+ break;
+ }
+ } else {
+ break;
+ }
+ }
+ g_strfreev(c);
+
+ // Fill out rest of the layers using the default order
+ if( !used[0] && i < PAINT_ORDER_LAYERS ) {
+ layer[i] = SP_CSS_PAINT_ORDER_FILL;
+ layer_set[i] = false;
+ ++i;
+ }
+ if( !used[1] && i < PAINT_ORDER_LAYERS ) {
+ layer[i] = SP_CSS_PAINT_ORDER_STROKE;
+ layer_set[i] = false;
+ ++i;
+ }
+ if( !used[2] && i < PAINT_ORDER_LAYERS ) {
+ layer[i] = SP_CSS_PAINT_ORDER_MARKER;
+ layer_set[i] = false;
+ }
+ }
+ }
+}
+
+const Glib::ustring
+SPIPaintOrder::write( guint const flags, SPIBase const *const base) const {
+
+ SPIPaintOrder const *const my_base = dynamic_cast<const SPIPaintOrder*>(base);
+ if ( (flags & SP_STYLE_FLAG_ALWAYS) ||
+ ((flags & SP_STYLE_FLAG_IFSET) && this->set) ||
+ ((flags & SP_STYLE_FLAG_IFDIFF) && this->set
+ && (!my_base->set || this != my_base )))
+ {
+ CSSOStringStream css;
+
+ if (this->inherit) {
+ css << "inherit";
+ } else {
+ for( unsigned i = 0; i < PAINT_ORDER_LAYERS; ++i ) {
+ if( this->layer_set[i] == true ) {
+ switch (this->layer[i]) {
+ case SP_CSS_PAINT_ORDER_NORMAL:
+ css << "normal";
+ assert( i == 0 );
+ break;
+ case SP_CSS_PAINT_ORDER_FILL:
+ if (i!=0) css << " ";
+ css << "fill";
+ break;
+ case SP_CSS_PAINT_ORDER_STROKE:
+ if (i!=0) css << " ";
+ css << "stroke";
+ break;
+ case SP_CSS_PAINT_ORDER_MARKER:
+ if (i!=0) css << " ";
+ css << "markers";
+ break;
+ }
+ } else {
+ break;
+ }
+ }
+ }
+ return (name + ":" + css.str() + ";");
+ }
+ return Glib::ustring("");
+}
+
+void
+SPIPaintOrder::cascade( const SPIBase* const parent ) {
+ if( const SPIPaintOrder* p = dynamic_cast<const SPIPaintOrder*>(parent) ) {
+ if(!set || inherit) { // Always inherits
+ for( unsigned i = 0; i < PAINT_ORDER_LAYERS; ++i ) {
+ layer[i] = p->layer[i];
+ layer_set[i] = p->layer_set[i];
+ }
+ g_free( value );
+ value = g_strdup(p->value);
+ }
+ } else {
+ std::cerr << "SPIPaintOrder::cascade(): Incorrect parent type" << std::endl;
+ }
+}
+
+void
+SPIPaintOrder::merge( const SPIBase* const parent ) {
+ if( const SPIPaintOrder* p = dynamic_cast<const SPIPaintOrder*>(parent) ) {
+ // if( inherits ) { PaintOrder always inherits
+ if( (!set || inherit) && p->set && !(p->inherit) ) {
+ this->cascade( parent ); // Must call be setting 'set'
+ set = p->set;
+ inherit = p->inherit;
+ }
+ }
+}
+
+bool
+SPIPaintOrder::operator==(const SPIBase& rhs) {
+ if( const SPIPaintOrder* r = dynamic_cast<const SPIPaintOrder*>(&rhs) ) {
+ if( layer[0] == SP_CSS_PAINT_ORDER_NORMAL &&
+ r->layer[0] == SP_CSS_PAINT_ORDER_NORMAL ) return SPIBase::operator==(rhs);
+ for (unsigned i = 0; i < PAINT_ORDER_LAYERS; ++i ) {
+ if( layer[i] != r->layer[i] ) return false;
+ }
+ return SPIBase::operator==(rhs);
+ } else {
+ return false;
+ }
+}
+
+
+
+// SPIFilter ------------------------------------------------------------
+
+SPIFilter::~SPIFilter() {
+ if( href ) {
+ clear();
+ delete href;
+ href = NULL;
+ }
+}
+
+void
+SPIFilter::read( gchar const *str ) {
+
+ if( !str ) return;
+
+ clear();
+
+ if ( streq(str, "inherit") ) {
+ set = TRUE;
+ inherit = TRUE;
+ } else if(streq(str, "none")) {
+ set = TRUE;
+ } else if (strneq(str, "url", 3)) {
+ gchar *uri = extract_uri(str);
+ if(uri == NULL || uri[0] == '\0') {
+ std::cerr << "SPIFilter::read: url is empty or invalid" << std::endl;
+ return;
+ } else if (!style) {
+ std::cerr << "SPIFilter::read: url with empty SPStyle pointer" << std::endl;
+ return;
+ }
+ set = TRUE;
+
+ // Create href if not already done.
+ if (!href && style->object) {
+ href = new SPFilterReference(style->object);
+ href->changedSignal().connect(sigc::bind(sigc::ptr_fun(sp_style_filter_ref_changed), style));
+ }
+
+ try {
+ href->attach(Inkscape::URI(uri));
+ } catch (Inkscape::BadURIException &e) {
+ std::cerr << "SPIFilter::read() " << e.what() << std::endl;
+ href->detach();
+ }
+ g_free (uri);
+
+ } else {
+ std::cerr << "SPIFilter::read(): malformed value: " << str << std::endl;
+ }
+}
+
+const Glib::ustring
+SPIFilter::write( guint const flags, SPIBase const *const base) const {
+
+ // TODO: fix base
+ //SPILength const *const my_base = dynamic_cast<const SPILength*>(base);
+ if ( (flags & SP_STYLE_FLAG_ALWAYS) ||
+ ((flags & SP_STYLE_FLAG_IFSET) && this->set))
+ {
+ if (this->inherit) {
+ return (name + ":inherit;");
+ } else if(this->href && this->href->getURI()) {
+ gchar *uri = this->href->getURI()->toString();
+ Glib::ustring retval = name + ":url(" + uri + ");";
+ g_free(uri);
+ return retval;
+ }
+ }
+ return Glib::ustring("");
+}
+
+
+void
+SPIFilter::clear() {
+
+ SPIBase::clear();
+ if( href ) {
+ if( href->getObject() ) {
+ href->detach();
+ }
+ }
+}
+
+void
+SPIFilter::cascade( const SPIBase* const parent ) {
+ if( const SPIFilter* p = dynamic_cast<const SPIFilter*>(parent) ) {
+ if( inherit ) { // Only inherits if 'inherit' true/
+ // This is rather unlikely so ignore for now. FIXME
+ (void)p;
+ std::cerr << "SPIFilter::cascade: value 'inherit' not supported." << std::endl;
+ } else {
+ // Do nothing
+ }
+ } else {
+ std::cerr << "SPIFilter::cascade(): Incorrect parent type" << std::endl;
+ }
+}
+
+void
+SPIFilter::merge( const SPIBase* const parent ) {
+ if( const SPIFilter* p = dynamic_cast<const SPIFilter*>(parent) ) {
+ // The "correct" thing to due is to combine the filter primitives.
+ // The next best thing is to keep any filter on this object. If there
+ // is no filter on this object, then use any filter on the parent.
+ if( (!set || inherit) && p->href && p->href->getObject() ) { // is the getObject() needed?
+ set = p->set;
+ inherit = p->inherit;
+ if( href ) {
+ // If we alread have an href, use it (unlikely but heck...)
+ if( href->getObject() ) {
+ href->detach();
+ }
+ } else {
+ // If we don't have an href, create it
+ if( &style->document ) { // FIXME
+ href = new SPFilterReference(style->document);
+ //href->changedSignal().connect(sigc::bind(sigc::ptr_fun(sp_style_filter_ref_changed), style));
+ }
+ }
+ if( href ) {
+ // If we now have an href, try to attach parent filter
+ try {
+ href->attach(*p->href->getURI());
+ } catch (Inkscape::BadURIException &e) {
+ std::cerr << "SPIFilter::merge: " << e.what() << std::endl;
+ href->detach();
+ }
+ }
+ }
+ }
+}
+
+// FIXME
+bool
+SPIFilter::operator==(const SPIBase& rhs) {
+ if( const SPIFilter* r = dynamic_cast<const SPIFilter*>(&rhs) ) {
+ (void)r;
+ return true;
+ } else {
+ return false;
+ }
+}
+
+
+
+// SPIDashArray ---------------------------------------------------------
+
+void
+SPIDashArray::read( gchar const *str ) {
+
+ if( !str ) return;
+
+ set = true;
+
+ if( strcmp( str, "inherit") == 0 ) {
+ inherit = true;
+ return;
+ }
+
+ values.clear();
+
+ if( strcmp(str, "none") == 0) {
+ return;
+ }
+
+ gchar *e = NULL;
+ bool LineSolid = true;
+ while (e != str) {
+ /* TODO: Should allow <length> rather than just a unitless (px) number. */
+ double number = g_ascii_strtod(str, (char **) &e);
+ values.push_back( number );
+ if (number > 0.00000001)
+ LineSolid = false;
+ if (e != str) {
+ str = e;
+ }
+ while (str && *str && !isalnum(*str)) str += 1;
+ }
+
+ if (LineSolid) {
+ values.clear();
+ }
+ return;
+}
+
+const Glib::ustring
+SPIDashArray::write( guint const flags, SPIBase const *const base) const {
+
+ SPIDashArray const *const my_base = dynamic_cast<const SPIDashArray*>(base);
+ if ( (flags & SP_STYLE_FLAG_ALWAYS) ||
+ ((flags & SP_STYLE_FLAG_IFSET) && this->set) ||
+ ((flags & SP_STYLE_FLAG_IFDIFF) && this->set
+ && (!my_base->set || this != my_base )))
+ {
+ if (this->inherit) {
+ return (name + ":inherit;");
+ } else if (this->values.empty() ) {
+ return (name + ":none;");
+ } else {
+ Inkscape::CSSOStringStream os;
+ os << name << ":";
+ for (unsigned i = 0; i < this->values.size(); ++i) {
+ if (i) {
+ os << ", ";
+ }
+ os << this->values[i];
+ }
+ os << ";";
+ return os.str();
+ }
+ }
+ return Glib::ustring("");
+}
+
+
+void
+SPIDashArray::cascade( const SPIBase* const parent ) {
+ if( const SPIDashArray* p = dynamic_cast<const SPIDashArray*>(parent) ) {
+ if( !set || inherit ) values = p->values; // Always inherits
+ } else {
+ std::cerr << "SPIDashArray::cascade(): Incorrect parent type" << std::endl;
+ }
+}
+
+void
+SPIDashArray::merge( const SPIBase* const parent ) {
+ if( const SPIDashArray* p = dynamic_cast<const SPIDashArray*>(parent) ) {
+ if( inherits ) {
+ if( (!set || inherit) && p->set && !(p->inherit) ) {
+ set = p->set;
+ inherit = p->inherit;
+ values = p->values;
+ }
+ }
+ } else {
+ std::cerr << "SPIDashArray::merge(): Incorrect parent type" << std::endl;
+ }
+}
+
+bool
+SPIDashArray::operator==(const SPIBase& rhs) {
+ if( const SPIDashArray* r = dynamic_cast<const SPIDashArray*>(&rhs) ) {
+ return values == r->values && SPIBase::operator==(rhs);
+ } else {
+ return false;
+ }
+}
+
+
+
+// SPIFontSize ----------------------------------------------------------
+
+/** Indexed by SP_CSS_FONT_SIZE_blah. These seem a bit small */
+float const SPIFontSize::font_size_table[] = {6.0, 8.0, 10.0, 12.0, 14.0, 18.0, 24.0};
+float const SPIFontSize::font_size_default = 12.0;
+
+void
+SPIFontSize::read( gchar const *str ) {
+
+ if( !str ) return;
+
+ if (!strcmp(str, "inherit")) {
+ set = TRUE;
+ inherit = TRUE;
+ } else if ((*str == 'x') || (*str == 's') || (*str == 'm') || (*str == 'l')) {
+ // xx-small, x-small, etc.
+ for (unsigned i = 0; enum_font_size[i].key; i++) {
+ if (!strcmp(str, enum_font_size[i].key)) {
+ set = TRUE;
+ inherit = FALSE;
+ type = SP_FONT_SIZE_LITERAL;
+ literal = enum_font_size[i].value;
+ return;
+ }
+ }
+ /* Invalid */
+ return;
+ } else {
+ SPILength length("temp");
+ length.set = FALSE;
+ length.read( str );
+ if( length.set ) {
+ set = TRUE;
+ inherit = length.inherit;
+ unit = length.unit;
+ value = length.value;
+ computed = length.computed;
+ if( unit == SP_CSS_UNIT_PERCENT ) {
+ type = SP_FONT_SIZE_PERCENTAGE;
+ } else {
+ type = SP_FONT_SIZE_LENGTH;
+ }
+ }
+ return;
+ }
+}
+
+const Glib::ustring
+SPIFontSize::write( guint const flags, SPIBase const *const base) const {
+
+ SPIFontSize const *const my_base = dynamic_cast<const SPIFontSize*>(base);
+ if ( (flags & SP_STYLE_FLAG_ALWAYS) ||
+ ((flags & SP_STYLE_FLAG_IFSET) && this->set) ||
+ ((flags & SP_STYLE_FLAG_IFDIFF) && this->set
+ && (!my_base->set || this != my_base )))
+ {
+ CSSOStringStream css;
+
+ if (this->inherit) {
+ css << "inherit";
+ } else if (this->type == SP_FONT_SIZE_LITERAL) {
+ for (unsigned i = 0; enum_font_size[i].key; i++) {
+ if (enum_font_size[i].value == static_cast< gint > (this->literal) ) {
+ css << enum_font_size[i].key;
+ }
+ }
+ } else if (this->type == SP_FONT_SIZE_LENGTH) {
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ int unit = prefs->getInt("/options/font/unitType", SP_CSS_UNIT_PT);
+ if (prefs->getBool("/options/font/textOutputPx", true)) {
+ unit = SP_CSS_UNIT_PX;
+ }
+ css << sp_style_css_size_px_to_units(this->computed, unit) << sp_style_get_css_unit_string(unit);
+ } else if (this->type == SP_FONT_SIZE_PERCENTAGE) {
+ css << (this->value * 100.0) << "%";
+ }
+ return (name + ":" + css.str() + ";");
+ }
+ return Glib::ustring("");
+}
+
+void
+SPIFontSize::cascade( const SPIBase* const parent ) {
+ if( const SPIFontSize* p = dynamic_cast<const SPIFontSize*>(parent) ) {
+ if( !set || inherit ) { // Always inherits
+ computed = p->computed;value = p->value;
+
+
+ // Calculate computed based on parent as needed
+ } else if( type == SP_FONT_SIZE_LITERAL ) {
+ if( literal < SP_CSS_FONT_SIZE_SMALLER ) {
+ computed = font_size_table[ literal ];
+ } else if( literal == SP_CSS_FONT_SIZE_SMALLER ) {
+ computed = p->computed / 1.2;
+ } else if( literal == SP_CSS_FONT_SIZE_LARGER ) {
+ computed = p->computed * 1.2;
+ } else {
+ std::cerr << "SPIFontSize::cascade: Illegal literal value" << std::endl;
+ }
+ } else if( type == SP_FONT_SIZE_PERCENTAGE ) {
+ // Percentage for font size is relative to parent computed (rather than viewport)
+ computed = p->computed * value;
+ } else if( type == SP_FONT_SIZE_LENGTH ) {
+ switch ( unit ) {
+ case SP_CSS_UNIT_EM:
+ /* Relative to parent font size */
+ computed = p->computed * value;
+ break;
+ case SP_CSS_UNIT_EX:
+ /* Relative to parent font size */
+ computed = p->computed * value * 0.5; /* Hack FIXME */
+ break;
+ default:
+ /* No change */
+ break;
+ }
+ }
+ } else {
+ std::cerr << "SPIFontSize::cascade(): Incorrect parent type" << std::endl;
+ }
+}
+
+double
+SPIFontSize::relative_fraction() const {
+
+ switch (type) {
+ case SP_FONT_SIZE_LITERAL: {
+ switch (literal) {
+ case SP_CSS_FONT_SIZE_SMALLER:
+ return 5.0 / 6.0;
+
+ case SP_CSS_FONT_SIZE_LARGER:
+ return 6.0 / 5.0;
+
+ default:
+ g_assert_not_reached();
+ }
+ }
+
+ case SP_FONT_SIZE_PERCENTAGE:
+ return value;
+
+ case SP_FONT_SIZE_LENGTH: {
+ switch (unit ) {
+ case SP_CSS_UNIT_EM:
+ return value;
+
+ case SP_CSS_UNIT_EX:
+ return value * 0.5;
+
+ default:
+ g_assert_not_reached();
+ }
+ }
+ }
+ g_assert_not_reached();
+}
+
+void
+SPIFontSize::merge( const SPIBase* const parent ) {
+ if( const SPIFontSize* p = dynamic_cast<const SPIFontSize*>(parent) ) {
+ if( p->set && !(p->inherit) ) {
+ // Parent has definined font-size
+ if( (!set || inherit) ) {
+ // Computed value same as parent
+ set = p->set;
+ inherit = p->inherit;
+ value = p->value;
+ computed = p->computed; // Just to be sure
+ } else if ( type == SP_FONT_SIZE_LENGTH &&
+ unit != SP_CSS_UNIT_EM &&
+ unit != SP_CSS_UNIT_EX ) {
+ // Absolute size, computed value already set
+ } else if ( type == SP_FONT_SIZE_LITERAL &&
+ literal < SP_CSS_FONT_SIZE_SMALLER ) {
+ // Absolute size, computed value already set
+ //g_assert( literal < G_N_ELEMENTS(font_size_table) );
+ g_assert( computed == font_size_table[literal] );
+ } else {
+ // Relative size
+ double const child_frac( relative_fraction() );
+ set = true;
+ inherit = false;
+ computed = p->computed * child_frac;
+
+ if ( ( p->type == SP_FONT_SIZE_LITERAL &&
+ p->literal < SP_CSS_FONT_SIZE_SMALLER ) ||
+ ( p->type == SP_FONT_SIZE_LENGTH &&
+ p->unit != SP_CSS_UNIT_EM &&
+ p->unit != SP_CSS_UNIT_EX ) ) {
+ // Parent absolut size
+ type = SP_FONT_SIZE_LENGTH;
+
+ } else {
+ // Parent relative size
+ double const parent_frac( p->relative_fraction() );
+ if( type == SP_FONT_SIZE_LENGTH ) {
+ // ex/em
+ value *= parent_frac;
+ } else {
+ value = parent_frac * child_frac;
+ type = SP_FONT_SIZE_PERCENTAGE;
+ }
+ }
+ } // Relative size
+ } // Parent set and not inherit
+ } else {
+ std::cerr << "SPIFontSize::merge(): Incorrect parent type" << std::endl;
+ }
+}
+
+// What about different SVG units?
+bool
+SPIFontSize::operator==(const SPIBase& rhs) {
+ if( const SPIFontSize* r = dynamic_cast<const SPIFontSize*>(&rhs) ) {
+ if( type != r->type ) { return false;}
+ if( type == SP_FONT_SIZE_LENGTH ) {
+ if( computed != r->computed ) { return false;}
+ } else if (type == SP_FONT_SIZE_LITERAL ) {
+ if( literal != r->literal ) { return false;}
+ } else {
+ if( value != r->value ) { return false;}
+ }
+ return SPIBase::operator==(rhs);
+ } else {
+ return false;
+ }
+}
+
+
+
+// SPIFont ----------------------------------------------------------
+
+void
+SPIFont::read( gchar const *str ) {
+
+ if( !str ) return;
+
+ if( !style ) {
+ std::cerr << "SPIFont::read(): style is void" << std::endl;
+ return;
+ }
+
+ if ( !strcmp(str, "inherit") ) {
+ set = TRUE;
+ inherit = TRUE;
+ } else {
+
+ // Break string into white space separated tokens
+ std::stringstream os( str );
+ Glib::ustring param;
+
+ while (os >> param) {
+
+ // CSS is case insensitive but we're comparing against lowercase strings
+ Glib::ustring lparam = param.lowercase();
+
+ if (lparam == "/" ) {
+ // line_height follows... note: font-size already read
+
+ os >> param;
+ lparam = param.lowercase();
+ style->line_height.readIfUnset( lparam.c_str() );
+
+ } else {
+ // Try to parse each property in turn
+
+ SPIEnum test_style("font-style", enum_font_style);
+ test_style.read( lparam.c_str() );
+ if( test_style.set ) {
+ style->font_style = test_style;
+ continue;
+ }
+
+ // font-variant (Note: only CSS2.1 value small-caps is valid in shortcut.)
+ SPIEnum test_variant("font-variant", enum_font_variant);
+ test_variant.read( lparam.c_str() );
+ if( test_variant.set ) {
+ style->font_variant = test_variant;
+ continue;
+ }
+
+ // font-weight
+ SPIEnum test_weight("font-weight", enum_font_weight);
+ test_weight.read( lparam.c_str() );
+ if( test_weight.set ) {
+ style->font_weight = test_weight;
+ continue;
+ }
+
+ // font-stretch (added in CSS 3 Fonts)
+ SPIEnum test_stretch("font-stretch", enum_font_stretch);
+ test_stretch.read( lparam.c_str() );
+ if( test_stretch.set ) {
+ style->font_stretch = test_stretch;
+ continue;
+ }
+
+ // font-size
+ SPIFontSize test_size;
+ test_size.read( lparam.c_str() );
+ if( test_size.set ) {
+ style->font_size = test_size;
+ continue;
+ }
+
+ // No valid property value found.
+ break;
+ }
+ } // params
+
+ // The rest must be font-family...
+ std::string str_s = str; // Why this extra step?
+ std::string family = str_s.substr( str_s.find( param ) );
+
+ style->font_family.readIfUnset( family.c_str() );
+
+ // Everything in shorthand is set per CSS rules, this works since
+ // properties are read backwards from end to start.
+ style->font_style.set = true;
+ style->font_variant.set = true;
+ style->font_weight.set = true;
+ style->font_stretch.set = true;
+ style->font_size.set = true;
+ style->line_height.set = true;
+ style->font_family.set = true;
+ // style->font_size_adjust.set = true;
+ // style->font_kerning.set = true;
+ // style->font_language_override.set = true;;
+ }
+}
+
+const Glib::ustring
+SPIFont::write( guint const flags, SPIBase const *const base) const {
+
+ // At the moment, do nothing. We could add a preference to write out
+ // 'font' shorthand rather than longhand properties.
+
+ // SPIFontSize const *const my_base = dynamic_cast<const SPIFontSize*>(base);
+ // if ( (flags & SP_STYLE_FLAG_ALWAYS) ||
+ // ((flags & SP_STYLE_FLAG_IFSET) && this->set) ||
+ // ((flags & SP_STYLE_FLAG_IFDIFF) && this->set
+ // && (!my_base->set || this != my_base )))
+ // {
+ // CSSOStringStream css;
+ // }
+ return Glib::ustring("");
+}
+
+// void
+// SPIFont::cascade( const SPIBase* const parent ) {
+// }
+
+// void
+// SPIFont::merge( const SPIBase* const parent ) {
+// }
+
+// Does nothing...
+bool
+SPIFont::operator==(const SPIBase& rhs) {
+ if( /* const SPIFont* r = */ dynamic_cast<const SPIFont*>(&rhs) ) {
+ return SPIBase::operator==(rhs);
+ } else {
+ return false;
+ }
+}
+
+
+
+// SPIBaselineShift -----------------------------------------------------
+
+void
+SPIBaselineShift::read( gchar const *str ) {
+
+ if( !str ) return;
+
+ if (!strcmp(str, "inherit")) {
+ set = TRUE;
+ inherit = TRUE;
+ } else if ((*str == 'b') || (*str == 's')) {
+ // baseline or sub or super
+ for (unsigned i = 0; enum_baseline_shift[i].key; i++) {
+ if (!strcmp(str, enum_baseline_shift[i].key)) {
+ set = TRUE;
+ inherit = FALSE;
+ type = SP_BASELINE_SHIFT_LITERAL;
+ literal = enum_baseline_shift[i].value;
+ return;
+ }
+ }
+ /* Invalid */
+ return;
+ } else {
+ SPILength length( "temp" );
+ length.read( str );
+ set = length.set;
+ inherit = length.inherit;
+ unit = length.unit;
+ value = length.value;
+ computed = length.computed;
+ if( unit == SP_CSS_UNIT_PERCENT ) {
+ type = SP_BASELINE_SHIFT_PERCENTAGE;
+ } else {
+ type = SP_BASELINE_SHIFT_LENGTH;
+ }
+ return;
+ }
+}
+
+const Glib::ustring
+SPIBaselineShift::write( guint const flags, SPIBase const *const base) const {
+
+ SPIBaselineShift const *const my_base = dynamic_cast<const SPIBaselineShift*>(base);
+ if ( (flags & SP_STYLE_FLAG_ALWAYS) ||
+ ((flags & SP_STYLE_FLAG_IFSET) && this->set) ||
+ ((flags & SP_STYLE_FLAG_IFDIFF) && this->set
+ && (!my_base->set || !this->isZero() )))
+ {
+ CSSOStringStream css;
+
+ if (this->inherit) {
+ css << "inherit";
+ } else if (this->type == SP_BASELINE_SHIFT_LITERAL) {
+ for (unsigned i = 0; enum_baseline_shift[i].key; i++) {
+ if (enum_baseline_shift[i].value == static_cast< gint > (this->literal) ) {
+ css << enum_baseline_shift[i].key;
+ }
+ }
+ } else if (this->type == SP_BASELINE_SHIFT_LENGTH) {
+ if( this->unit == SP_CSS_UNIT_EM || this->unit == SP_CSS_UNIT_EX ) {
+ css << this->value << (this->unit == SP_CSS_UNIT_EM ? "em" : "ex");
+ } else {
+ css << this->computed << "px"; // must specify px, see inkscape bug 1221626, mozilla bug 234789
+ }
+ } else if (this->type == SP_BASELINE_SHIFT_PERCENTAGE) {
+ css << (this->value * 100.0) << "%";
+ }
+ return (name + ":" + css.str() + ";");
+ }
+ return Glib::ustring("");
+}
+
+void
+SPIBaselineShift::cascade( const SPIBase* const parent ) {
+ if( const SPIBaselineShift* p = dynamic_cast<const SPIBaselineShift*>(parent) ) {
+ SPIFontSize *pfont_size = &(p->style->font_size);
+ g_assert( pfont_size != NULL );
+
+ if( !set || inherit ) {
+ computed = p->computed; // Shift relative to parent shift, corrected below
+ } else if (type == SP_BASELINE_SHIFT_LITERAL) {
+ if( literal == SP_CSS_BASELINE_SHIFT_BASELINE ) {
+ computed = 0; // No change
+ } else if (literal == SP_CSS_BASELINE_SHIFT_SUB ) {
+ // Should use subscript position from font relative to alphabetic baseline
+ // OpenOffice, Adobe: -0.33, Word -0.14, LaTex about -0.2.
+ computed = -0.2 * pfont_size->computed;
+ } else if (literal == SP_CSS_BASELINE_SHIFT_SUPER ) {
+ // Should use superscript position from font relative to alphabetic baseline
+ // OpenOffice, Adobe: 0.33, Word 0.35, LaTex about 0.45.
+ computed = 0.4 * pfont_size->computed;
+ } else {
+ /* Illegal value */
+ }
+ } else if (type == SP_BASELINE_SHIFT_PERCENTAGE) {
+ // Percentage for baseline shift is relative to computed "line-height"
+ // which is just font-size (see SVG1.1 'font').
+ computed = pfont_size->computed * value;
+ } else if (type == SP_BASELINE_SHIFT_LENGTH) {
+ switch (unit) {
+ case SP_CSS_UNIT_EM:
+ computed = value * pfont_size->computed;
+ break;
+ case SP_CSS_UNIT_EX:
+ computed = value * 0.5 * pfont_size->computed;
+ break;
+ default:
+ /* No change */
+ break;
+ }
+ }
+ // baseline-shifts are relative to parent baseline
+ computed += p->computed;
+
+ } else {
+ std::cerr << "SPIBaselineShift::cascade(): Incorrect parent type" << std::endl;
+ }
+}
+
+// This was not defined in the legacy C code, it needs some serious thinking (but is low priority).
+// FIX ME
+void
+SPIBaselineShift::merge( const SPIBase* const parent ) {
+ if( const SPIBaselineShift* p = dynamic_cast<const SPIBaselineShift*>(parent) ) {
+ if( (!set || inherit) && p->set && !(p->inherit) ) {
+ set = p->set;
+ inherit = p->inherit;
+ value = p->value;
+ }
+ } else {
+ std::cerr << "SPIBaselineShift::merge(): Incorrect parent type" << std::endl;
+ }
+}
+
+// This is not used but we have it for completeness, it has not been tested.
+bool
+SPIBaselineShift::operator==(const SPIBase& rhs) {
+ if( const SPIBaselineShift* r = dynamic_cast<const SPIBaselineShift*>(&rhs) ) {
+ if( type != r->type ) return false;
+ if( type == SP_BASELINE_SHIFT_LENGTH ) {
+ if( computed != r->computed ) return false;
+ } else if ( type == SP_BASELINE_SHIFT_LITERAL ) {
+ if( literal != r->literal ) return false;
+ } else {
+ if( value != r->value ) return false;
+ }
+ return SPIBase::operator==(rhs);
+ } else {
+ return false;
+ }
+}
+
+bool
+SPIBaselineShift::isZero() const {
+ if( type == SP_BASELINE_SHIFT_LITERAL ) {
+ if( literal == SP_CSS_BASELINE_SHIFT_BASELINE ) return true;
+ } else {
+ if( value == 0.0 ) return true;
+ }
+ return false;
+}
+
+
+
+// SPITextDecorationLine ------------------------------------------------
+
+void
+SPITextDecorationLine::read( gchar const *str ) {
+
+ if( !str ) return;
+
+ if (!strcmp(str, "inherit")) {
+ set = true;
+ inherit = true;
+ } else if (!strcmp(str, "none")) {
+ set = true;
+ inherit = false;
+ underline = false;
+ overline = false;
+ line_through = false;
+ blink = false;
+ } else {
+ bool found_one = false;
+ bool hit_one = false;
+
+ // CSS 2 keywords
+ bool found_underline = false;
+ bool found_overline = false;
+ bool found_line_through = false;
+ bool found_blink = false;
+
+ // This method ignores inlineid keys and extra delimiters, so " ,,, blink hello" will set
+ // blink and ignore hello
+ const gchar *hstr = str;
+ while (1) {
+ if (*str == ' ' || *str == ',' || *str == '\0'){
+ int slen = str - hstr;
+ // CSS 2 keywords
+ while(1){ // not really a loop, used to avoid a goto
+ hit_one = true; // most likely we will
+ if ((slen == 9) && strneq(hstr, "underline", slen)){ found_underline = true; break; }
+ if ((slen == 8) && strneq(hstr, "overline", slen)){ found_overline = true; break; }
+ if ((slen == 12) && strneq(hstr, "line-through", slen)){ found_line_through = true; break; }
+ if ((slen == 5) && strneq(hstr, "blink", slen)){ found_blink = true; break; }
+ if ((slen == 4) && strneq(hstr, "none", slen)){ break; }
+
+ hit_one = false; // whatever this thing is, we do not recognize it
+ break;
+ }
+ found_one |= hit_one;
+ if(*str == '\0')break;
+ hstr = str + 1;
+ }
+ str++;
+ }
+ if (found_one) {
+ set = true;
+ inherit = false;
+ underline = found_underline;
+ overline = found_overline;
+ line_through = found_line_through;
+ blink = found_blink;
+ }
+ else {
+ set = false;
+ inherit = false;
+ }
+ }
+}
+
+const Glib::ustring
+SPITextDecorationLine::write( guint const flags, SPIBase const *const base) const {
+ SPITextDecorationLine const *const my_base = dynamic_cast<const SPITextDecorationLine*>(base);
+ if ( (flags & SP_STYLE_FLAG_ALWAYS) ||
+ ((flags & SP_STYLE_FLAG_IFSET) && this->set) ||
+ ((flags & SP_STYLE_FLAG_IFDIFF) && this->set
+ && (!my_base->set || this != my_base )))
+ {
+ Inkscape::CSSOStringStream os;
+ os << name << ":";
+ if( inherit ) {
+ os << "inherit";
+ } else if (this->underline || this->overline || this->line_through || this->blink) {
+ if (this->underline) os << " underline";
+ if (this->overline) os << " overline";
+ if (this->line_through) os << " line-through";
+ if (this->blink) os << " blink"; // Deprecated
+ } else {
+ os << "none";
+ }
+ os << ";";
+ return ( os.str() );
+ }
+ return Glib::ustring("");
+}
+
+void
+SPITextDecorationLine::cascade( const SPIBase* const parent ) {
+ if( const SPITextDecorationLine* p = dynamic_cast<const SPITextDecorationLine*>(parent) ) {
+ if( inherits && (!set || inherit) ) {
+ underline = p->underline;
+ overline = p->overline;
+ line_through = p->line_through;
+ blink = p->blink;
+ }
+ } else {
+ std::cerr << "SPITextDecorationLine::cascade(): Incorrect parent type" << std::endl;
+ }
+}
+
+void
+SPITextDecorationLine::merge( const SPIBase* const parent ) {
+ if( const SPITextDecorationLine* p = dynamic_cast<const SPITextDecorationLine*>(parent) ) {
+ if( inherits ) { // Always inherits... but special rules?
+ if( (!set || inherit) && p->set && !(p->inherit) ) {
+ set = p->set;
+ inherit = p->inherit;
+ underline = p->underline;
+ overline = p->overline;
+ line_through = p->line_through;
+ blink = p->blink;
+ }
+ }
+ }
+}
+
+bool
+SPITextDecorationLine::operator==(const SPIBase& rhs) {
+ if( const SPITextDecorationLine* r = dynamic_cast<const SPITextDecorationLine*>(&rhs) ) {
+ return
+ (underline == r->underline ) &&
+ (overline == r->overline ) &&
+ (line_through == r->line_through ) &&
+ (blink == r->blink ) &&
+ SPIBase::operator==(rhs);
+ } else {
+ return false;
+ }
+}
+
+
+
+// SPITextDecorationStyle -----------------------------------------------
+
+void
+SPITextDecorationStyle::read( gchar const *str ) {
+
+ if( !str ) return;
+
+ set = false;
+ inherit = false;
+
+ solid = true; // Default
+ isdouble = false;
+ dotted = false;
+ dashed = false;
+ wavy = false;
+
+ if (!strcmp(str, "inherit")) {
+ set = true;
+ inherit = true;
+ solid = false;
+ } else {
+ // note, these are CSS 3 keywords
+ bool found_solid = false;
+ bool found_double = false;
+ bool found_dotted = false;
+ bool found_dashed = false;
+ bool found_wavy = false;
+ bool found_one = false;
+
+ // this method ignores inlineid keys and extra delimiters, so " ,,, style hello" will set style and ignore hello
+ // if more than one style is present, the first is used
+ const gchar *hstr = str;
+ while (1) {
+ if (*str == ' ' || *str == ',' || *str == '\0'){
+ int slen = str - hstr;
+ if ( (slen == 5) && strneq(hstr, "solid", slen)){ found_solid = true; found_one = true; break; }
+ else if ((slen == 6) && strneq(hstr, "double", slen)){ found_double = true; found_one = true; break; }
+ else if ((slen == 6) && strneq(hstr, "dotted", slen)){ found_dotted = true; found_one = true; break; }
+ else if ((slen == 6) && strneq(hstr, "dashed", slen)){ found_dashed = true; found_one = true; break; }
+ else if ((slen == 4) && strneq(hstr, "wavy", slen)){ found_wavy = true; found_one = true; break; }
+ if(*str == '\0')break; // nothing more to test
+ hstr = str + 1;
+ }
+ str++;
+ }
+ if(found_one){
+ set = true;
+ solid = found_solid;
+ isdouble = found_double;
+ dotted = found_dotted;
+ dashed = found_dashed;
+ wavy = found_wavy;
+ }
+ else {
+ set = false;
+ inherit = false;
+ }
+ }
+}
+
+const Glib::ustring
+SPITextDecorationStyle::write( guint const flags, SPIBase const *const base) const {
+ SPITextDecorationStyle const *const my_base = dynamic_cast<const SPITextDecorationStyle*>(base);
+ if ( (flags & SP_STYLE_FLAG_ALWAYS) ||
+ ((flags & SP_STYLE_FLAG_IFSET) && this->set) ||
+ ((flags & SP_STYLE_FLAG_IFDIFF) && this->set
+ && (!my_base->set || this != my_base )))
+ {
+ Inkscape::CSSOStringStream os;
+ os << name << ":";
+ if( inherit ) {
+ os << "inherit";
+ } else if (this->solid ) {
+ os << "solid";
+ } else if (this->isdouble ) {
+ os << "double";
+ } else if (this->dotted ) {
+ os << "dotted";
+ } else if (this->dashed ) {
+ os << "dashed";
+ } else if (this->wavy ) {
+ os << "wavy";
+ } else {
+ std::cerr << "SPITextDecorationStyle::write(): No valid value for property" << std::endl;
+ return Glib::ustring("");
+ }
+ os << ";";
+ return ( os.str() );
+ }
+ return Glib::ustring("");
+}
+
+void
+SPITextDecorationStyle::cascade( const SPIBase* const parent ) {
+ if( const SPITextDecorationStyle* p = dynamic_cast<const SPITextDecorationStyle*>(parent) ) {
+ if( inherits && (!set || inherit) ) {
+ solid = p->solid;
+ isdouble = p->isdouble;
+ dotted = p->dotted;
+ dashed = p->dashed;
+ wavy = p->wavy;
+ }
+ } else {
+ std::cerr << "SPITextDecorationStyle::cascade(): Incorrect parent type" << std::endl;
+ }
+}
+
+void
+SPITextDecorationStyle::merge( const SPIBase* const parent ) {
+ if( const SPITextDecorationStyle* p = dynamic_cast<const SPITextDecorationStyle*>(parent) ) {
+ if( inherits ) { // Always inherits... but special rules?
+ if( (!set || inherit) && p->set && !(p->inherit) ) {
+ set = p->set;
+ inherit = p->inherit;
+ solid = p->solid;
+ isdouble = p->isdouble;
+ dotted = p->dotted;
+ dashed = p->dashed;
+ wavy = p->wavy;
+ }
+ }
+ }
+}
+
+bool
+SPITextDecorationStyle::operator==(const SPIBase& rhs) {
+ if( const SPITextDecorationStyle* r = dynamic_cast<const SPITextDecorationStyle*>(&rhs) ) {
+ return
+ (solid == r->solid ) &&
+ (isdouble == r->isdouble ) &&
+ (dotted == r->dotted ) &&
+ (dashed == r->dashed ) &&
+ (wavy == r->wavy ) &&
+ SPIBase::operator==(rhs);
+ } else {
+ return false;
+ }
+}
+
+
+
+// TextDecorationColor is handled by SPIPaint (should be SPIColor), default value is "currentColor"
+// FIXME
+
+
+
+// SPITextDecoration ----------------------------------------------------
+
+void
+SPITextDecoration::read( gchar const *str ) {
+
+ if( !str ) return;
+
+ style->text_decoration_line.read( str );
+ style->text_decoration_style.read( str );
+ // the color routine must be fed one token at a time - if multiple colors are found the LAST
+ // one is used ???? then why break on set?
+ const gchar *hstr = str;
+
+ style->text_decoration_color.read( "currentColor" ); // Default value
+ style->text_decoration_color.set = false;
+ while (1) {
+ if (*str == ' ' || *str == ',' || *str == '\0'){
+ int slen = str - hstr;
+ gchar *frag = g_strndup(hstr,slen+1); // only send one piece at a time, since keywords may be intermixed
+
+ if( strcmp( frag, "none" ) != 0 ) { // 'none' not allowed
+ style->text_decoration_color.read( frag );
+ }
+
+ free(frag);
+ if( style->text_decoration_color.set ) break;
+ style->text_decoration_color.read( "currentColor" ); // Default value
+ if( *str == '\0' )break;
+ hstr = str + 1;
+ }
+ str++;
+ }
+}
+
+// Returns CSS2 'text-decoration' (using settings in SPTextDecorationLine)
+// This is required until all SVG renderers support CSS3 'text-decoration'
+const Glib::ustring
+SPITextDecoration::write( guint const flags, SPIBase const *const base) const {
+ SPITextDecoration const *const my_base = dynamic_cast<const SPITextDecoration*>(base);
+ if ( (flags & SP_STYLE_FLAG_ALWAYS) ||
+ ((flags & SP_STYLE_FLAG_IFSET) && style->text_decoration_line.set) ||
+ ((flags & SP_STYLE_FLAG_IFDIFF) && style->text_decoration_line.set
+ && (!my_base->style->text_decoration_line.set ||
+ style->text_decoration_line != my_base->style->text_decoration_line )))
+ {
+ Inkscape::CSSOStringStream os;
+ os << name << ":";
+ if( inherit ) {
+ os << "inherit";
+ } else if (style->text_decoration_line.underline ||
+ style->text_decoration_line.overline ||
+ style->text_decoration_line.line_through ||
+ style->text_decoration_line.blink) {
+ if (style->text_decoration_line.underline) os << " underline";
+ if (style->text_decoration_line.overline) os << " overline";
+ if (style->text_decoration_line.line_through) os << " line-through";
+ if (style->text_decoration_line.blink) os << " blink"; // Deprecated
+ } else {
+ os << "none";
+ }
+ os << ";";
+ return ( os.str() );
+ }
+ return Glib::ustring("");
+}
+
+// Done in SPITextDecorationLine
+// void
+// SPITextDecoration::cascade( const SPIBase* const parent ) {
+// }
+
+// void
+// SPITextDecoration::merge( const SPIBase* const parent ) {
+// }
+
+// Use CSS2 value
+bool
+SPITextDecoration::operator==(const SPIBase& rhs) {
+ if( const SPITextDecoration* r = dynamic_cast<const SPITextDecoration*>(&rhs) ) {
+ return (style->text_decoration_line == r->style->text_decoration_line &&
+ SPIBase::operator==(rhs));
+ } else {
+ return false;
+ }
+}
+
+
+
+/* ---------------------------- NOTES ----------------------------- */
+
+/*
+ * opacity's effect is cumulative; we set the new value to the combined effect. The
+ * default value for opacity is 1.0, not inherit. (Note that stroke-opacity and
+ * fill-opacity are quite different from opacity, and don't need any special handling.)
+ *
+ * Cases:
+ * - parent & child were each previously unset, in which case the effective
+ * opacity value is 1.0, and style should remain unset.
+ * - parent was previously unset (so computed opacity value of 1.0)
+ * and child was set to inherit. The merged child should
+ * get a value of 1.0, and shouldn't inherit (lest the new parent
+ * has a different opacity value). Given that opacity's default
+ * value is 1.0 (rather than inherit), we might as well have the
+ * merged child's opacity be unset.
+ * - parent was previously unset (so opacity 1.0), and child was set to a number.
+ * The merged child should retain its existing settings (though it doesn't matter
+ * if we make it unset if that number was 1.0).
+ * - parent was inherit and child was unset. Merged child should be set to inherit.
+ * - parent was inherit and child was inherit. (We can't in general reproduce this
+ * effect (short of introducing a new group), but setting opacity to inherit is rare.)
+ * If the inherited value was strictly between 0.0 and 1.0 (exclusive) then the merged
+ * child's value should be set to the product of the two, i.e. the square of the
+ * inherited value, and should not be marked as inherit. (This decision assumes that it
+ * is more important to retain the effective opacity than to retain the inheriting
+ * effect, and assumes that the inheriting effect either isn't important enough to create
+ * a group or isn't common enough to bother maintaining the code to create a group.) If
+ * the inherited value was 0.0 or 1.0, then marking the merged child as inherit comes
+ * closer to maintaining the effect.
+ * - parent was inherit and child was set to a numerical value. If the child's value
+ * was 1.0, then the merged child should have the same settings as the parent.
+ * If the child's value was 0, then the merged child should also be set to 0.
+ * If the child's value was anything else, then we do the same as for the inherit/inherit
+ * case above: have the merged child set to the product of the two opacities and not
+ * marked as inherit, for the same reasons as for that case.
+ * - parent was set to a value, and child was unset. The merged child should have
+ * parent's settings.
+ * - parent was set to a value, and child was inherit. The merged child should
+ * be set to the product, i.e. the square of the parent's value.
+ * - parent & child are each set to a value. The merged child should be set to the
+ * product.
+ */
+
+
+/*
+ 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/style-internal.h b/src/style-internal.h
index 7d45f96f8..d1a331acf 100644
--- a/src/style-internal.h
+++ b/src/style-internal.h
@@ -7,7 +7,9 @@
/* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
* Jon A. Cruz <jon@joncruz.org>
+ * Tavmjong Bah <tavmjong@free.fr>
*
+ * Copyright (C) 2014 Tavmjong Bah
* Copyright (C) 2010 Jon A. Cruz
* Copyright (C) 2001-2002 Lauris Kaplinski
* Copyright (C) 2001 Ximian, Inc.
@@ -15,21 +17,168 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
+#include "style-enums.h"
+
#include "color.h"
+#include "svg/svg-icc-color.h"
#include "sp-marker-loc.h"
#include "sp-filter.h"
#include "sp-filter-reference.h"
#include "sp-paint-server-reference.h"
#include "uri.h"
+#include "xml/repr.h"
#include <vector>
-/// Float type internal to SPStyle.
-struct SPIFloat {
- unsigned set : 1;
- unsigned inherit : 1;
- unsigned data : 30;
+struct SPStyleEnum;
+
+static const unsigned SP_STYLE_FLAG_ALWAYS (1 << 2);
+static const unsigned SP_STYLE_FLAG_IFSET (1 << 0);
+static const unsigned SP_STYLE_FLAG_IFDIFF (1 << 1);
+
+
+/* General comments:
+ *
+ * This code is derived from the original C style code in style.cpp.
+ *
+ * Overview:
+ * Style can be obtained (in order of precidence) [CHECK]
+ * 1. "style" property in an element (style="fill:red").
+ * 2. Style sheet, internal or external (<style> rect {fill:red;}</style>).
+ * 3. Attributes in an element (fill="red").
+ * 4. Parent's style.
+ * A later property overrides an earlier property. This is implemented by
+ * reading in the properties backwards. If a property is already set, it
+ * prevents an earlier property from being read.
+ *
+ * In order for cascading to work, each element in the tree must be read in from top to bottom
+ * (parent before child). At each step, if a style property is not explicitly set, the property
+ * value is taken from the parent. Some properties have "computed" values that depend on:
+ * the parent's value (e.g. "font-size:larger"),
+ * another property value ("stroke-width":1em"), or
+ * an external value ("stroke-width:5%").
+ *
+ * To summarize:
+ *
+ * An explicitly set value (including 'inherit') has a 'true' "set" flag.
+ * The "value" is either explicitly set or inherited.
+ * The "computed" value (if present) is calculated from "value" and some other input.
+ *
+ * Functions:
+ * write(): Write a property and its value to a string.
+ * Flags:
+ * ALWAYS: Always write out property.
+ * IFSET: Write a property if 'set' flag is true, otherwise return empty string.
+ * IFDIFF: Write a property if computed values are different, otherwise return empty string,
+ * This is only used for text!!
+ *
+ * read(): Set a property value from a string.
+ * clear(): Set a property to its default value and set the 'set' flag to false.
+ * cascade(): Cascade the parent's property values to the child if the child's property
+ * is unset (and it allows inheriting) or the value is 'inherit'.
+ * Calculate computed values that depend on parent.
+ * This requires that the parent already be updated.
+ * merge(): Merge the property values of a child and a parent that is being deleted,
+ * attempting to preserve the style of the child.
+ * operator=: Assignment operator required due to use of templates (in original C code).
+ * operator==: True if computed values are equal. TO DO: DEFINE EXACTLY WHAT THIS MEANS
+ * operator!=: Inverse of operator==.
+ *
+ *
+ * Outside dependencies:
+ *
+ * The C structures that these classes are evolved from were designed to be embedded in to the
+ * style structure (i.e they are "internal" and thus have an "I" in the SPI prefix). However,
+ * they should be reasonably stand-alone and can provide some functionality outside of the style
+ * stucture (i.e. reading and writing style strings). Some properties do need access to other
+ * properties from the same object (e.g. SPILength sometimes needs to know font size) to
+ * calculate 'computed' values. Inheritence, of course, requires access to the parent object's
+ * style class.
+ *
+ * The only real outside dependancy is SPObject... which is needed in the cases of SPIPaint and
+ * SPIFilter for setting up the "href". (Currently, SPDocument is needed but this dependency
+ * should be removed as an "href" only needs the SPDocument for attaching an external document to
+ * the XML tree [see uri-references.cpp]. If SPDocument is really needed, it can be obtained from
+ * SPObject.)
+ *
+ */
+
+/// Virtual base class for all SPStyle interal classes
+class SPIBase {
+
+ public:
+ SPIBase( Glib::ustring const &name, bool inherits = true )
+ : name(name), inherits(inherits), set(false), inherit(false), style_att(false), style(NULL) {};
+ virtual ~SPIBase() {};
+ virtual void read( gchar const *str ) = 0;
+ virtual void readIfUnset( gchar const *str ) { if( !set ) read( str ); }
+ virtual void readAttribute( Inkscape::XML::Node *repr ) { readIfUnset( repr->attribute( name.c_str() ) ); }
+ virtual const Glib::ustring write( guint const flags = SP_STYLE_FLAG_IFSET,
+ SPIBase const *const base = NULL ) const = 0;
+ virtual void clear() { set = false, inherit = false; };
+ virtual void cascade( const SPIBase* const parent ) {};
+ virtual void merge( const SPIBase* const parent ) {}; // To do: Set to 0
+
+ virtual void setStylePointer( SPStyle *style_in ) { style = style_in; };
+
+ // Explicit assignment operator required due to templates.
+ SPIBase& operator=(const SPIBase& rhs) {
+ name = rhs.name;
+ inherits = rhs.inherits;
+ set = rhs.set;
+ inherit = rhs.inherit;
+ style_att = rhs.style_att;
+ return *this;
+ }
+
+ // Check apples being compared to apples
+ virtual bool operator==(const SPIBase& rhs) { return (name == rhs.name); };
+ virtual bool operator!=(const SPIBase& rhs) { return !(*this == rhs); };
+
+ // To do: make private
+ public:
+ Glib::ustring name; // Make const
+ unsigned inherits : 1; // Property inherits by default from parent.
+ unsigned set : 1; // Property has been explicitly set (vs. inherited).
+ unsigned inherit : 1; // Property value set to 'inherit'.
+ unsigned style_att : 2; // Source (attribute, style attribute, style-sheet). NOT USED YET FIX ME
+
+ // To do: make private after g_asserts removed
+ public:
+ SPStyle* style; // Used by SPIPaint, SPIFilter... to find values of other properties
+};
+
+/// Float type internal to SPStyle. (Only 'stroke-miterlimit')
+class SPIFloat : public SPIBase {
+
+ public:
+ SPIFloat() : SPIBase( "anonymous_float" ), value(0.0) {};
+ SPIFloat( Glib::ustring name, float value_default = 0.0 )
+ : SPIBase( name ), value(value_default), value_default(value_default) {};
+ virtual ~SPIFloat() {};
+ virtual void read( gchar const *str );
+ virtual const Glib::ustring write( guint const flags = SP_STYLE_FLAG_IFSET,
+ SPIBase const *const base = NULL ) const;
+ virtual void clear() { SPIBase::clear(); value = value_default; };
+ virtual void cascade( const SPIBase* const parent );
+ virtual void merge( const SPIBase* const parent );
+
+ SPIFloat& operator=(const SPIFloat& rhs) {
+ SPIBase::operator=(rhs);
+ value = rhs.value;
+ value_default = value_default;
+ return *this;
+ }
+
+ virtual bool operator==(const SPIBase& rhs);
+ virtual bool operator!=(const SPIBase& rhs) { return !(*this == rhs); };
+
+ // To do: make private
+ public:
float value;
+
+ private:
+ float value_default;
};
/*
@@ -60,44 +209,42 @@ static const unsigned SP_SCALE24_MAX = 0xff0000;
/** Returns a scale24 for the product of two scale24 values. */
#define SP_SCALE24_MUL(_v1, _v2) unsigned((double)(_v1) * (_v2) / SP_SCALE24_MAX + .5)
+
/// 24 bit data type internal to SPStyle.
-struct SPIScale24 {
- unsigned set : 1;
- unsigned inherit : 1;
+// Used only for opacity, fill-opacity, stroke-opacity.
+// Opacity does not inherit but stroke-opacity and fill-opacity do.
+class SPIScale24 : public SPIBase {
+
+ public:
+ SPIScale24() : SPIBase( "anonymous_scale24" ), value(0) {};
+ SPIScale24( Glib::ustring name, unsigned value = 0, bool inherits = true )
+ : SPIBase( name, inherits ), value(value), value_default(value) {};
+ virtual ~SPIScale24() {};
+ virtual void read( gchar const *str );
+ virtual const Glib::ustring write( guint const flags = SP_STYLE_FLAG_IFSET,
+ SPIBase const *const base = NULL ) const;
+ virtual void clear() { SPIBase::clear(); value = value_default; };
+ virtual void cascade( const SPIBase* const parent );
+ virtual void merge( const SPIBase* const parent );
+
+ SPIScale24& operator=(const SPIScale24& rhs) {
+ SPIBase::operator=(rhs);
+ value = rhs.value;
+ return *this;
+ }
+
+ virtual bool operator==(const SPIBase& rhs);
+ virtual bool operator!=(const SPIBase& rhs) { return !(*this == rhs); };
+
+
+ // To do: make private
+ public:
unsigned value : 24;
-};
-
-/// Int type internal to SPStyle.
-struct SPIInt {
- unsigned set : 1;
- unsigned inherit : 1;
- unsigned data : 30;
- int value;
-};
-/// Short type internal to SPStyle.
-struct SPIShort {
- unsigned set : 1;
- unsigned inherit : 1;
- unsigned data : 14;
- int value : 16;
-};
-
-/// Enum type internal to SPStyle.
-struct SPIEnum {
- unsigned set : 1;
- unsigned inherit : 1;
- unsigned value : 8;
- unsigned computed : 8;
+ private:
+ unsigned value_default : 24;
};
-/// String type internal to SPStyle.
-struct SPIString {
- unsigned set : 1;
- unsigned inherit : 1;
- unsigned data : 30;
- gchar *value;
-};
enum SPCSSUnit {
SP_CSS_UNIT_NONE,
@@ -112,33 +259,235 @@ enum SPCSSUnit {
SP_CSS_UNIT_PERCENT
};
+
/// Length type internal to SPStyle.
-struct SPILength {
- unsigned set : 1;
- unsigned inherit : 1;
+// Needs access to 'font-size' and 'font-family' for computed values.
+// Used for 'stroke-width' 'stroke-dash-offset' ('none' not handled), text-indent
+class SPILength : public SPIBase {
+
+ public:
+ SPILength() : SPIBase( "anonymous_length" ), unit(SP_CSS_UNIT_NONE), value(0), computed(0) {};
+ SPILength( Glib::ustring name, unsigned value = 0 )
+ : SPIBase( name ), unit(SP_CSS_UNIT_NONE), value(value), computed(value), value_default(value) {};
+ virtual ~SPILength() {};
+ virtual void read( gchar const *str );
+ virtual const Glib::ustring write( guint const flags = SP_STYLE_FLAG_IFSET,
+ SPIBase const *const base = NULL ) const;
+ virtual void clear() { SPIBase::clear(); unit = SP_CSS_UNIT_NONE, value = value_default; computed = value_default; };
+ virtual void cascade( const SPIBase* const parent );
+ virtual void merge( const SPIBase* const parent );
+
+ SPILength& operator=(const SPILength& rhs) {
+ SPIBase::operator=(rhs);
+ unit = rhs.unit;
+ value = rhs.value;
+ computed = rhs.computed;
+ value_default = rhs.value_default;
+ return *this;
+ };
+
+ virtual bool operator==(const SPIBase& rhs);
+ virtual bool operator!=(const SPIBase& rhs) { return !(*this == rhs); };
+
+ // To do: make private
+ public:
unsigned unit : 4;
float value;
float computed;
+
+ private:
+ float value_default;
};
-#define SP_STYLE_FILL_SERVER(s) ((const_cast<SPStyle *> (s))->getFillPaintServer())
-#define SP_STYLE_STROKE_SERVER(s) ((const_cast<SPStyle *> (s))->getStrokePaintServer())
-/// Paint type internal to SPStyle.
-struct SPIPaint {
- unsigned int set : 1; //c++ bitfields are used here as opposed to bools to reduce memory consumption, see http://tinyurl.com/cswh6mq
- unsigned int inherit : 1;
- unsigned int currentcolor : 1;
- unsigned int colorSet : 1;
- unsigned int noneSet : 1;
+/// Extended length type internal to SPStyle.
+// Used for: line-height, letter-spacing, word-spacing
+class SPILengthOrNormal : public SPILength {
+
+ public:
+ SPILengthOrNormal() : SPILength( "anonymous_length" ), normal(true) {};
+ SPILengthOrNormal( Glib::ustring name, unsigned value = 0 )
+ : SPILength( name, value ), normal(true) {};
+ virtual ~SPILengthOrNormal() {};
+ virtual void read( gchar const *str );
+ virtual const Glib::ustring write( guint const flags = SP_STYLE_FLAG_IFSET,
+ SPIBase const *const base = NULL ) const;
+ virtual void clear() { SPILength::clear(); normal = true; };
+ // virtual void cascade( const SPIBase* const parent ); // Use SPILength::cascade
+ virtual void merge( const SPIBase* const parent );
+
+ SPILengthOrNormal& operator=(const SPILengthOrNormal& rhs) {
+ SPILength::operator=(rhs);
+ normal = rhs.normal;
+ return *this;
+ }
+
+ virtual bool operator==(const SPIBase& rhs);
+ virtual bool operator!=(const SPIBase& rhs) { return !(*this == rhs); };
+
+ // To do: make private
+ public:
+ bool normal : 1;
+};
+
+
+/// Enum type internal to SPStyle.
+// Used for many properties. 'font-stretch' and 'font-weight' must be special cased.
+class SPIEnum : public SPIBase {
+
+ public:
+ SPIEnum() :
+ SPIBase( "anonymous_enum" ), enums( NULL ), value(0), computed(0) {};
+ SPIEnum( Glib::ustring name, SPStyleEnum const *enums, unsigned value = 0, bool inherits = true ) :
+ SPIBase( name, inherits ), enums( enums ), value(value), computed(value),
+ value_default(value), computed_default(value) {};
+ // Following is needed for font-weight
+ SPIEnum( Glib::ustring name, SPStyleEnum const *enums, SPCSSFontWeight value, SPCSSFontWeight computed ) :
+ SPIBase( name ), enums( enums ), value(value), computed(computed),
+ value_default(value), computed_default(computed) {};
+ virtual ~SPIEnum() {};
+ virtual void read( gchar const *str );
+ virtual const Glib::ustring write( guint const flags = SP_STYLE_FLAG_IFSET,
+ SPIBase const *const base = NULL ) const;
+ virtual void clear() { SPIBase::clear(); value = value_default, computed = computed_default; };
+ virtual void cascade( const SPIBase* const parent );
+ virtual void merge( const SPIBase* const parent );
+
+ SPIEnum& operator=(const SPIEnum& rhs) {
+ SPIBase::operator=(rhs);
+ value = rhs.value;
+ computed = rhs.computed;
+ value_default = rhs.value_default;
+ computed_default = rhs.computed_default;
+ return *this;
+ }
+
+ virtual bool operator==(const SPIBase& rhs);
+ virtual bool operator!=(const SPIBase& rhs) { return !(*this == rhs); };
+
+ // To do: make private
+ public:
+ SPStyleEnum const *enums;
+
+ unsigned value : 8;
+ unsigned computed: 8;
+
+ private:
+ unsigned value_default : 8;
+ unsigned computed_default: 8; // for font-weight
+};
+
+
+/// String type internal to SPStyle.
+// Used for 'marker', ..., 'font', 'font-family', 'inkscape-font-specification'
+class SPIString : public SPIBase {
+
+ public:
+ SPIString() :
+ SPIBase( "anonymous_string" ), value(NULL) {};
+ SPIString( Glib::ustring name, gchar* value_default_in = NULL ) :
+ SPIBase( name ) , value(NULL) , value_default(NULL) {
+ value_default = value_default_in?g_strdup(value_default_in):NULL;
+ };
+ virtual ~SPIString() { g_free(value); };
+ virtual void read( gchar const *str );
+ virtual const Glib::ustring write( guint const flags = SP_STYLE_FLAG_IFSET,
+ SPIBase const *const base = NULL ) const;
+ virtual void clear();
+ virtual void cascade( const SPIBase* const parent );
+ virtual void merge( const SPIBase* const parent );
+
+ SPIString& operator=(const SPIString& rhs) {
+ SPIBase::operator=(rhs);
+ value = rhs.value?g_strdup(rhs.value):NULL;
+ return *this;
+ }
+
+ virtual bool operator==(const SPIBase& rhs);
+ virtual bool operator!=(const SPIBase& rhs) { return !(*this == rhs); };
+
+ // To do: make private, convert value to Glib::ustring
+ public:
+ gchar *value;
+ gchar *value_default;
+};
+
+/// Color type interal to SPStyle, FIXME Add string value to store SVG named color.
+class SPIColor : public SPIBase {
+
+ public:
+ SPIColor() : SPIBase( "anonymous_color" ), currentcolor(false) { value.color.set(0); }
+ SPIColor( Glib::ustring name ) : SPIBase( name ), currentcolor(false) { value.color.set(0); }
+ virtual ~SPIColor() {}
+ virtual void read( gchar const *str );
+ virtual const Glib::ustring write( guint const flags = SP_STYLE_FLAG_IFSET,
+ SPIBase const *const base = NULL ) const;
+ virtual void clear() { SPIBase::clear(); value.color.set(0); }
+ virtual void cascade( const SPIBase* const parent );
+ virtual void merge( const SPIBase* const parent );
+
+ SPIColor& operator=(const SPIColor& rhs) {
+ SPIBase::operator=(rhs);
+ value.color = rhs.value.color;
+ return *this;
+ }
+
+ virtual bool operator==(const SPIBase& rhs);
+ virtual bool operator!=(const SPIBase& rhs) { return !(*this == rhs); }
+
+ void setColor( float r, float g, float b ) { value.color.set( r, g, b ); }
+ void setColor( guint32 val ) { value.color.set( val ); }
+ void setColor( SPColor const& color ) { value.color = color; }
+
+ public:
+ bool currentcolor : 1;
+ // FIXME: remove structure and derive SPIPaint from this class.
struct {
- SPPaintServerReference *href;
SPColor color;
} value;
+};
+
- SPIPaint();
- bool isSet() const { return true; /* set || colorSet*/}
+#define SP_STYLE_FILL_SERVER(s) ((const_cast<SPStyle *> (s))->getFillPaintServer())
+#define SP_STYLE_STROKE_SERVER(s) ((const_cast<SPStyle *> (s))->getStrokePaintServer())
+
+/// Paint type internal to SPStyle.
+class SPIPaint : public SPIBase {
+
+ public:
+ SPIPaint() : SPIBase( "anonymous_paint" ), currentcolor(false), colorSet(false), noneSet(false) {
+ value.href = NULL;
+ clear();
+ };
+ SPIPaint( Glib::ustring name )
+ : SPIBase( name ), currentcolor(false), colorSet(false), noneSet(false) {
+ value.href = NULL;
+ clear(); // Sets defaults
+ };
+ virtual ~SPIPaint(); // Clear and delete href.
+ virtual void read( gchar const *str );
+ virtual void read( gchar const *str, SPStyle &style, SPDocument *document = 0);
+ virtual const Glib::ustring write( guint const flags = SP_STYLE_FLAG_IFSET,
+ SPIBase const *const base = NULL ) const;
+ virtual void clear();
+ virtual void reset( bool init ); // Used internally when reading or cascading
+ virtual void cascade( const SPIBase* const parent );
+ virtual void merge( const SPIBase* const parent );
+
+ SPIPaint& operator=(const SPIPaint& rhs) {
+ SPIBase::operator=(rhs);
+ currentcolor = rhs.currentcolor;
+ colorSet = rhs.colorSet;
+ noneSet = rhs.noneSet;
+ value.color = rhs.value.color;
+ value.href = rhs.value.href;
+ return *this;
+ }
+
+ virtual bool operator==(const SPIBase& rhs);
+ virtual bool operator!=(const SPIBase& rhs) { return !(*this == rhs); };
+
bool isSameType( SPIPaint const & other ) const {return (isPaintserver() == other.isPaintserver()) && (colorSet == other.colorSet) && (currentcolor == other.currentcolor);}
bool isNoneSet() const {return noneSet;}
@@ -147,22 +496,24 @@ struct SPIPaint {
bool isColor() const {return colorSet && !isPaintserver();}
bool isPaintserver() const {return (value.href) ? value.href->getObject():0;}
- void clear();
-
void setColor( float r, float g, float b ) {value.color.set( r, g, b ); colorSet = true;}
void setColor( guint32 val ) {value.color.set( val ); colorSet = true;}
void setColor( SPColor const& color ) {value.color = color; colorSet = true;}
- void read( gchar const *str, SPStyle &tyle, SPDocument *document = 0);
-};
-class SPIDashArray {
- public:
- unsigned set : 1;
- unsigned inherit : 1;
- std::vector<double> values;
+
+ // To do: make private
+ public:
+ bool currentcolor : 1;
+ bool colorSet : 1;
+ bool noneSet : 1;
+ struct {
+ SPPaintServerReference *href;
+ SPColor color;
+ } value;
};
+
// SVG 2
enum SPPaintOrderLayer {
SP_CSS_PAINT_ORDER_NORMAL,
@@ -171,54 +522,225 @@ enum SPPaintOrderLayer {
SP_CSS_PAINT_ORDER_MARKER
};
+// Normal maybe should be moved out as is done in other classes.
+// This could be replaced by a generic enum class where multiple keywords are allowed and
+// where order matters (in contrast to 'text-decoration-line' where order does not matter).
+
+// Each layer represents a layer of paint which can be a fill, a stroke, or markers.
const size_t PAINT_ORDER_LAYERS = 3;
-struct SPIPaintOrder {
- unsigned set : 1;
- unsigned inherit : 1;
+
+/// Paint order type internal to SPStyle
+class SPIPaintOrder : public SPIBase {
+
+ public:
+ SPIPaintOrder() : SPIBase( "paint-order" ), value(NULL) { this->clear(); };
+ virtual ~SPIPaintOrder() { g_free( value ); };
+ virtual void read( gchar const *str );
+ virtual const Glib::ustring write( guint const flags = SP_STYLE_FLAG_IFSET,
+ SPIBase const *const base = NULL ) const;
+ virtual void clear() {
+ SPIBase::clear();
+ for( unsigned i = 0; i < PAINT_ORDER_LAYERS; ++i ) {
+ layer[i] = SP_CSS_PAINT_ORDER_NORMAL;
+ layer_set[i] = false;
+ }
+ g_free(value);
+ value = NULL;
+ }
+ virtual void cascade( const SPIBase* const parent );
+ virtual void merge( const SPIBase* const parent );
+
+ SPIPaintOrder& operator=(const SPIPaintOrder& rhs) {
+ SPIBase::operator=(rhs);
+ for( unsigned i = 0; i < PAINT_ORDER_LAYERS; ++i ) {
+ layer[i] = rhs.layer[i];
+ layer_set[i] = rhs.layer_set[i];
+ }
+ value = g_strdup(rhs.value);
+ return *this;
+ }
+
+ virtual bool operator==(const SPIBase& rhs);
+ virtual bool operator!=(const SPIBase& rhs) { return !(*this == rhs); };
+
+
+ // To do: make private
+ public:
SPPaintOrderLayer layer[PAINT_ORDER_LAYERS];
bool layer_set[PAINT_ORDER_LAYERS];
gchar *value; // Raw string
};
+
/// Filter type internal to SPStyle
-struct SPIFilter {
- unsigned set : 1;
- unsigned inherit : 1;
+class SPIDashArray : public SPIBase {
+
+ public:
+ SPIDashArray() : SPIBase( "stroke-dasharray" ) {}; // Only one instance of SPIDashArray
+ virtual ~SPIDashArray() {};
+ virtual void read( gchar const *str );
+ virtual const Glib::ustring write( guint const flags = SP_STYLE_FLAG_IFSET,
+ SPIBase const *const base = NULL ) const;
+ virtual void clear() { SPIBase::clear(); values.clear(); };
+ virtual void cascade( const SPIBase* const parent );
+ virtual void merge( const SPIBase* const parent );
+
+ SPIDashArray& operator=(const SPIDashArray& rhs) {
+ SPIBase::operator=(rhs);
+ values = rhs.values;
+ return *this;
+ }
+
+ virtual bool operator==(const SPIBase& rhs);
+ virtual bool operator!=(const SPIBase& rhs) { return !(*this == rhs); };
+
+
+ // To do: make private, change double to SVGLength
+ public:
+ std::vector<double> values;
+};
+
+/// Filter type internal to SPStyle
+class SPIFilter : public SPIBase {
+
+ public:
+ SPIFilter() : SPIBase( "filter", false ), href(NULL) {};
+ virtual ~SPIFilter();
+ virtual void read( gchar const *str );
+ virtual const Glib::ustring write( guint const flags = SP_STYLE_FLAG_IFSET,
+ SPIBase const *const base = NULL ) const;
+ virtual void clear();
+ virtual void cascade( const SPIBase* const parent );
+ virtual void merge( const SPIBase* const parent );
+
+ SPIFilter& operator=(const SPIFilter& rhs) {
+ SPIBase::operator=(rhs);
+ href = rhs.href;
+ return *this;
+ }
+
+ virtual bool operator==(const SPIBase& rhs);
+ virtual bool operator!=(const SPIBase& rhs) { return !(*this == rhs); };
+
+ // To do: make private
+ public:
SPFilterReference *href;
};
+
+
enum {
SP_FONT_SIZE_LITERAL,
SP_FONT_SIZE_LENGTH,
SP_FONT_SIZE_PERCENTAGE
};
-enum {
- SP_BASELINE_SHIFT_LITERAL,
- SP_BASELINE_SHIFT_LENGTH,
- SP_BASELINE_SHIFT_PERCENTAGE
-};
-
-
-#define SP_STYLE_FLAG_IFSET (1 << 0)
-#define SP_STYLE_FLAG_IFDIFF (1 << 1)
-#define SP_STYLE_FLAG_ALWAYS (1 << 2)
-
/// Fontsize type internal to SPStyle (also used by libnrtype/Layout-TNG-Input.cpp).
-struct SPIFontSize {
- unsigned set : 1;
- unsigned inherit : 1;
+class SPIFontSize : public SPIBase {
+
+ public:
+ SPIFontSize() : SPIBase( "font-size" ) { this->clear(); };
+ virtual ~SPIFontSize() {};
+ virtual void read( gchar const *str );
+ virtual const Glib::ustring write( guint const flags = SP_STYLE_FLAG_IFSET,
+ SPIBase const *const base = NULL ) const;
+ virtual void clear() { SPIBase::clear(); type = SP_FONT_SIZE_LITERAL, unit = SP_CSS_UNIT_NONE,
+ literal = SP_CSS_FONT_SIZE_MEDIUM, value = 12.0, computed = 12.0; }
+ virtual void cascade( const SPIBase* const parent );
+ virtual void merge( const SPIBase* const parent );
+
+ SPIFontSize& operator=(const SPIFontSize& rhs) {
+ SPIBase::operator=(rhs);
+ type = rhs.type;
+ unit = rhs.unit;
+ literal = rhs.literal;
+ value = rhs.value;
+ computed = rhs.computed;
+ return *this;
+ }
+
+ virtual bool operator==(const SPIBase& rhs);
+ virtual bool operator!=(const SPIBase& rhs) { return !(*this == rhs); };
+
+ public:
+ static float const font_size_default;
+
+ // To do: make private
+ public:
unsigned type : 2;
unsigned unit : 4;
- unsigned literal: 4;
+ unsigned literal : 4;
float value;
float computed;
+
+ private:
+ double relative_fraction() const;
+ static float const font_size_table[];
};
-/// Baseline shift type internal to SPStyle.
-struct SPIBaselineShift {
- unsigned set : 1;
- unsigned inherit : 1;
+
+/// Font type internal to SPStyle ('font' shorthand)
+class SPIFont : public SPIBase {
+
+ public:
+ SPIFont() : SPIBase( "font" ) {};
+ virtual ~SPIFont() {};
+ virtual void read( gchar const *str );
+ virtual const Glib::ustring write( guint const flags = SP_STYLE_FLAG_IFSET,
+ SPIBase const *const base = NULL ) const;
+ virtual void clear() {
+ SPIBase::clear();
+ };
+ virtual void cascade( const SPIBase* const parent ) {}; // Done in dependent properties
+ virtual void merge( const SPIBase* const parent ) {};
+
+ SPIFont& operator=(const SPIFont& rhs) {
+ SPIBase::operator=(rhs);
+ return *this;
+ }
+
+ virtual bool operator==(const SPIBase& rhs);
+ virtual bool operator!=(const SPIBase& rhs) { return !(*this == rhs); };
+};
+
+
+enum {
+ SP_BASELINE_SHIFT_LITERAL,
+ SP_BASELINE_SHIFT_LENGTH,
+ SP_BASELINE_SHIFT_PERCENTAGE
+};
+
+/// Baseline shift type internal to SPStyle. (This is actually just like SPIFontSize)
+class SPIBaselineShift : public SPIBase {
+
+ public:
+ SPIBaselineShift() : SPIBase( "baseline-shift", false ) { this->clear(); };
+ virtual ~SPIBaselineShift() {};
+ virtual void read( gchar const *str );
+ virtual const Glib::ustring write( guint const flags = SP_STYLE_FLAG_IFSET,
+ SPIBase const *const base = NULL ) const;
+ virtual void clear() { SPIBase::clear(); type=SP_BASELINE_SHIFT_LITERAL, unit=SP_CSS_UNIT_NONE,
+ literal = SP_CSS_BASELINE_SHIFT_BASELINE, value = 0.0, computed = 0.0; }
+ virtual void cascade( const SPIBase* const parent );
+ virtual void merge( const SPIBase* const parent );
+
+ SPIBaselineShift& operator=(const SPIBaselineShift& rhs) {
+ SPIBase::operator=(rhs);
+ type = rhs.type;
+ unit = rhs.unit;
+ literal = rhs.literal;
+ value = rhs.value;
+ computed = rhs.computed;
+ return *this;
+ }
+
+ // This is not used but we have it for completeness, it has not been tested.
+ virtual bool operator==(const SPIBase& rhs);
+ virtual bool operator!=(const SPIBase& rhs) { return !(*this == rhs); };
+ bool isZero() const;
+
+ // To do: make private
+ public:
unsigned type : 2;
unsigned unit : 4;
unsigned literal: 2;
@@ -227,38 +749,112 @@ struct SPIBaselineShift {
};
// CSS 2. Changes in CSS 3, where description is for TextDecorationLine, NOT TextDecoration
-/// Text decoration type internal to SPStyle.
-struct SPITextDecorationLine {
- unsigned set : 1;
- unsigned inherit : 1;
- unsigned underline : 1;
- unsigned overline : 1;
- unsigned line_through : 1;
- unsigned blink : 1; // "Conforming user agents are not required to support this value." yay!
+// See http://www.w3.org/TR/css-text-decor-3/
+
+// CSS3 2.2
+/// Text decoration line type internal to SPStyle. THIS SHOULD BE A GENERIC CLASS
+class SPITextDecorationLine : public SPIBase {
+
+ public:
+ SPITextDecorationLine() : SPIBase( "text-decoration-line" ) { this->clear(); };
+ virtual ~SPITextDecorationLine() {};
+ virtual void read( gchar const *str );
+ virtual const Glib::ustring write( guint const flags = SP_STYLE_FLAG_IFSET,
+ SPIBase const *const base = NULL ) const;
+ virtual void clear() { SPIBase::clear(); underline = false, overline = false, line_through = false, blink = false; }
+ virtual void cascade( const SPIBase* const parent );
+ virtual void merge( const SPIBase* const parent );
+
+ SPITextDecorationLine& operator=(const SPITextDecorationLine& rhs) {
+ SPIBase::operator=(rhs);
+ underline = rhs.underline;
+ overline = rhs.overline;
+ line_through = rhs.line_through;
+ blink = rhs.blink;
+ return *this;
+ }
+
+ virtual bool operator==(const SPIBase& rhs);
+ virtual bool operator!=(const SPIBase& rhs) { return !(*this == rhs); };
+
+ // To do: make private
+ public:
+ bool underline : 1;
+ bool overline : 1;
+ bool line_through : 1;
+ bool blink : 1; // "Conforming user agents are not required to support this value." yay!
};
// CSS3 2.2
-/// Text decoration style type internal to SPStyle.
-struct SPITextDecorationStyle {
- unsigned set : 1;
- unsigned inherit : 1;
- unsigned solid : 1;
- unsigned isdouble : 1; // cannot use "double" as it is a reserved keyword
- unsigned dotted : 1;
- unsigned dashed : 1;
- unsigned wavy : 1;
+/// Text decoration style type internal to SPStyle. THIS SHOULD JUST BE SPIEnum!
+class SPITextDecorationStyle : public SPIBase {
+
+ public:
+ SPITextDecorationStyle() : SPIBase( "text-decoration-style" ) { this->clear(); };
+ virtual ~SPITextDecorationStyle() {};
+ virtual void read( gchar const *str );
+ virtual const Glib::ustring write( guint const flags = SP_STYLE_FLAG_IFSET,
+ SPIBase const *const base = NULL ) const;
+ virtual void clear() { SPIBase::clear(); solid = true, isdouble = false, dotted = false, dashed = false, wavy = false; }
+ virtual void cascade( const SPIBase* const parent );
+ virtual void merge( const SPIBase* const parent );
+
+ SPITextDecorationStyle& operator=(const SPITextDecorationStyle& rhs) {
+ SPIBase::operator=(rhs);
+ solid = rhs.solid;
+ isdouble = rhs.isdouble;
+ dotted = rhs.dotted;
+ dashed = rhs.dashed;
+ wavy = rhs.wavy;
+ return *this;
+ }
+
+ virtual bool operator==(const SPIBase& rhs);
+ virtual bool operator!=(const SPIBase& rhs) { return !(*this == rhs); };
+
+ // To do: make private
+ public:
+ bool solid : 1;
+ bool isdouble : 1; // cannot use "double" as it is a reserved keyword
+ bool dotted : 1;
+ bool dashed : 1;
+ bool wavy : 1;
};
-/// Extended length type internal to SPStyle.
-struct SPILengthOrNormal {
- unsigned set : 1;
- unsigned inherit : 1;
- unsigned normal : 1;
- unsigned unit : 4;
- float value;
- float computed;
+
+
+// This class reads in both CSS2 and CSS3 'text-decoration' property. It passes the line, style,
+// and color parts to the appropriate CSS3 long-hand classes for reading and storing values. When
+// writing out data, we write all four properties, with 'text-decoration' being written out with
+// the CSS2 format. This allows CSS1/CSS2 renderers to at least render lines, even if they are not
+// the right style. (See http://www.w3.org/TR/css-text-decor-3/#text-decoration-property )
+
+/// Text decoration type internal to SPStyle.
+class SPITextDecoration: public SPIBase {
+
+ public:
+ SPITextDecoration() : SPIBase( "text-decoration" ) {};
+ virtual ~SPITextDecoration() {};
+ virtual void read( gchar const *str );
+ virtual const Glib::ustring write( guint const flags = SP_STYLE_FLAG_IFSET,
+ SPIBase const *const base = NULL ) const;
+ virtual void clear() {
+ SPIBase::clear();
+ };
+ virtual void cascade( const SPIBase* const parent ) {}; // Done in SPITextDecorationLine
+ virtual void merge( const SPIBase* const parent ) {}; // Done in SPITextDecorationLine
+
+ SPITextDecoration& operator=(const SPITextDecoration& rhs) {
+ SPIBase::operator=(rhs);
+ return *this;
+ }
+
+ // Use CSS2 value
+ virtual bool operator==(const SPIBase& rhs);
+ virtual bool operator!=(const SPIBase& rhs) { return !(*this == rhs); };
};
+
// These are used to implement text_decoration. The values are not saved to or read from SVG file
struct SPITextDecorationData {
float phase_length; // length along text line,used for phase for dot/dash/wavy
@@ -274,22 +870,6 @@ struct SPITextDecorationData {
float line_through_position;
};
-struct SPTextStyle;
-
-/// An SPTextStyle has a refcount, a font family, and a font name.
-struct SPTextStyle {
- int refcount;
-
- /* CSS font properties */
- SPIString font_family;
-
- /* Full font name, as font_factory::ConstructFontSpecification would give */
- SPIString font_specification;
-
- /** \todo fixme: The 'font' property is ugly, and not working (lauris) */
- SPIString font;
-};
-
#endif // SEEN_SP_STYLE_INTERNAL_H
diff --git a/src/style-test.h b/src/style-test.h
index c88c1c30a..2fe270336 100644
--- a/src/style-test.h
+++ b/src/style-test.h
@@ -48,6 +48,7 @@ public:
// ---------------------------------------------------------------
// ---------------------------------------------------------------
+ // Reading and writing style string
void testOne()
{
struct TestCase {
@@ -95,15 +96,33 @@ public:
TestCase("overflow:visible"), // SPIEnum
TestCase("overflow:auto"), // SPIEnum
- // Not directly read
+ TestCase("color:#ff0000"),
+ TestCase("color:blue", "color:#0000ff"),
+ // TestCase("color:currentColor"), SVG 1.1 does not allow color value 'currentColor'
+
+ // Font shorthand
TestCase("font:bold 12px Arial",
- "font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-family:Arial"),
- // line-height not read in
- //TestCase("font:bold 12px/24px 'Times New Roman'",
- // "font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;line-height:24px;font-family:Times New Roman"),
+ "font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:normal;font-family:Arial"),
+ TestCase("font:bold 12px/24px 'Times New Roman'",
+ "font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:24px;font-family:\'\"Times New Roman\"\'"),
+ // From CSS 3 Fonts (examples):
+ TestCase("font: 12pt/14pt sans-serif",
+ "font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:14pt;font-family:sans-serif"),
+ TestCase("font: 80% sans-serif",
+ "font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:80.00000119%;line-height:normal;font-family:sans-serif"),
+ TestCase("font: x-large/110% 'new century schoolbook', serif",
+ "font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:x-large;line-height:110.00000238%;font-family:\'\"new century schoolbook\", serif\'"),
+ TestCase("font: bold italic large Palatino, serif",
+ "font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:large;line-height:normal;font-family:\'Palatino, serif\'"),
+ TestCase("font: normal small-caps 120%/120% fantasy",
+ "font-style:normal;font-variant:small-caps;font-weight:normal;font-stretch:normal;font-size:120.00000477%;line-height:120.00000477%;font-family:fantasy"),
+ TestCase("font: condensed oblique 12pt 'Helvetica Neue', serif;",
+ "font-style:oblique;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:15px;line-height:normal;font-family:\'\"Helvetica Neue\", serif\'"),
+
TestCase("font-family:sans-serif"), // SPIString, text_private
TestCase("font-family:Arial"),
TestCase("font-variant:normal;font-stretch:normal;-inkscape-font-specification:Nimbus Roman No9 L Bold Italic"),
+
// Needs to be fixed (quotes should be around each font-family):
TestCase("font-family:Georgia, 'Minion Web'","font-family:'Georgia, \"Minion Web\"'"),
TestCase("font-size:12", "font-size:12px"), // SPIFontSize
@@ -121,9 +140,31 @@ public:
// Should be moved down
TestCase("text-indent:12em"), // SPILength?
TestCase("text-align:center"), // SPIEnum
- TestCase("text-decoration: underline"), // SPITextDecoration
- TestCase("text-decoration: underline wavy #0000ff"), // SPITextDecoration CSS3
- TestCase("text-decoration: overline double #ff0000"),
+
+ // SPITextDecoration
+ // The default value for 'text-decoration-color' is 'currentColor', but
+ // we cannot set the default to that value yet. (We need to switch
+ // SPIPaint to SPIColor and then add the ability to set default.)
+ TestCase("text-decoration: underline",
+ "text-decoration: underline;text-decoration-line: underline;text-decoration-color:currentColor"),
+ TestCase("text-decoration: overline underline",
+ "text-decoration: underline overline;text-decoration-line: underline overline;text-decoration-color:currentColor"),
+
+ TestCase("text-decoration: underline wavy #0000ff",
+ "text-decoration: underline;text-decoration-line: underline;text-decoration-style:wavy;text-decoration-color:#0000ff"),
+ TestCase("text-decoration: double overline underline #ff0000",
+ "text-decoration: underline overline;text-decoration-line: underline overline;text-decoration-style:double;text-decoration-color:#ff0000"),
+
+ // SPITextDecorationLine
+ TestCase("text-decoration-line: underline",
+ "text-decoration: underline;text-decoration-line: underline"),
+
+ // SPITextDecorationStyle
+ TestCase("text-decoration-style:solid"),
+ TestCase("text-decoration-style:dotted"),
+
+ // SPITextDecorationColor
+ TestCase("text-decoration-color:#ff00ff"),
// Should be moved up
TestCase("line-height:24px"), // SPILengthOrNormal
@@ -166,11 +207,13 @@ public:
TestCase("paint-order:stroke"), // SPIPaintOrder
TestCase("paint-order:normal"),
TestCase("paint-order: markers stroke fill", "paint-order:markers stroke fill"),
+
#endif
TestCase(0)
};
for ( gint i = 0; cases[i].src; i++ ) {
+ // std::cout << "Test one: " << i << std::endl;
SPStyle *style = sp_style_new(_doc);
TS_ASSERT(style);
if ( style ) {
@@ -188,10 +231,10 @@ public:
gchar *str0_set = sp_style_write_string( style, SP_STYLE_FLAG_IFSET );
//printf("<<%s>>\n", str0_set);
if ( cases[i].dst ) {
- //std::cout << " " << std::string(str0_set) << " " << std::string(cases[i].dst) << std::endl;
+ // std::cout << " " << std::string(str0_set) << " " << std::string(cases[i].dst) << std::endl;
TS_ASSERT_EQUALS( std::string(str0_set), std::string(cases[i].dst) );
} else {
- //std::cout << " " << std::string(str0_set) << " " << std::string(cases[i].src) << std::endl;
+ // std::cout << " " << std::string(str0_set) << " " << std::string(cases[i].src) << std::endl;
TS_ASSERT_EQUALS( std::string(str0_set), std::string(cases[i].src) );
}
@@ -201,6 +244,273 @@ public:
}
}
+ // Testing operator==
+ void testTwo()
+ {
+ struct TestCase {
+ TestCase(gchar const* src, gchar const* dst, bool match) :
+ src(src), dst(dst), match(match) {}
+ gchar const* src;
+ gchar const* dst;
+ bool match;
+ };
+
+ TestCase cases[] = {
+
+ // SPIFloat
+ TestCase("stroke-miterlimit:4", "stroke-miterlimit:4", true ),
+ TestCase("stroke-miterlimit:4", "stroke-miterlimit:2", false),
+ TestCase("stroke-miterlimit:4", "", true ), // Default
+
+ // SPIScale24
+ TestCase("opacity:0.3", "opacity:0.3", true ),
+ TestCase("opacity:0.3", "opacity:0.6", false),
+ TestCase("opacity:1.0", "", true ), // Default
+
+ // SPILength
+ TestCase("text-indent:3", "text-indent:3", true ),
+ TestCase("text-indent:6", "text-indent:3", false),
+ TestCase("text-indent:6px", "text-indent:3", false),
+ TestCase("text-indent:1px", "text-indent:12pc", false),
+ TestCase("text-indent:2ex", "text-indent:2ex", false),
+
+ // SPILengthOrNormal
+ TestCase("letter-spacing:normal", "letter-spacing:normal", true ),
+ TestCase("letter-spacing:2", "letter-spacing:normal", false),
+ TestCase("letter-spacing:normal", "letter-spacing:2", false),
+ TestCase("letter-spacing:5px", "letter-spacing:5px", true ),
+ TestCase("letter-spacing:10px", "letter-spacing:5px", false),
+ TestCase("letter-spacing:10em", "letter-spacing:10em", false),
+
+ // SPIEnum
+ TestCase("text-anchor:start", "text-anchor:start", true ),
+ TestCase("text-anchor:start", "text-anchor:middle", false),
+ TestCase("text-anchor:start", "", true ), // Default
+ TestCase("text-anchor:start", "text-anchor:junk", true ), // Bad value
+
+ TestCase("font-weight:normal", "font-weight:400", true ),
+ TestCase("font-weight:bold", "font-weight:700", true ),
+
+
+ // SPIString and SPIFontString
+ TestCase("font-family:Arial", "font-family:Arial", true ),
+ TestCase("font-family:A B", "font-family:A B", true ),
+ TestCase("font-family:A B", "font-family:A C", false),
+ // Default is not set by class... value is NULL which cannot be compared
+ // TestCase("font-family:sans-serif", "", true ), // Default
+
+ // SPIColor
+ TestCase("color:blue", "color:blue", true ),
+ TestCase("color:blue", "color:red", false),
+ TestCase("color:red", "color:#ff0000", true ),
+
+ // SPIPaint
+ TestCase("fill:blue", "fill:blue", true ),
+ TestCase("fill:blue", "fill:red", false),
+ TestCase("fill:currentColor", "fill:currentColor", true ),
+ TestCase("fill:url(#xxx)", "fill:url(#xxx)", true ),
+ // Needs URL defined as in test 1
+ //TestCase("fill:url(#xxx)", "fill:url(#yyy)", false),
+
+ // SPIPaintOrder
+ TestCase("paint-order:markers", "paint-order:markers", true ),
+ TestCase("paint-order:markers", "paint-order:stroke", false),
+ //TestCase("paint-order:fill stroke markers", "", true ), // Default
+ TestCase("paint-order:normal", "paint-order:normal", true ),
+ //TestCase("paint-order:fill stroke markers", "paint-order:normal", true ),
+
+ // SPIDashArray
+ TestCase("stroke-dasharray:0 1 2 3","stroke-dasharray:0 1 2 3",true ),
+ TestCase("stroke-dasharray:0 1", "stroke-dasharray:0 2", false),
+
+ // SPIFilter
+
+ // SPIFontSize
+ TestCase("font-size:12px", "font-size:12px", true ),
+ TestCase("font-size:12px", "font-size:24px", false),
+ TestCase("font-size:12ex", "font-size:24ex", false),
+ TestCase("font-size:medium", "font-size:medium", true ),
+ TestCase("font-size:medium", "font-size:large", false),
+
+ // SPIBaselineShift
+ TestCase("baseline-shift:baseline", "baseline-shift:baseline", true ),
+ TestCase("baseline-shift:sub", "baseline-shift:sub", true ),
+ TestCase("baseline-shift:sub", "baseline-shift:super", false),
+ TestCase("baseline-shift:baseline", "baseline-shift:sub", false),
+ TestCase("baseline-shift:10px", "baseline-shift:10px", true ),
+ TestCase("baseline-shift:10px", "baseline-shift:12px", false),
+
+
+ // SPITextDecorationLine
+ TestCase("text-decoration-line:underline", "text-decoration-line:underline", true ),
+ TestCase("text-decoration-line:underline", "text-decoration-line:overline", false),
+ TestCase("text-decoration-line:underline overline", "text-decoration-line:underline overline", true ),
+ TestCase("text-decoration-line:none", "", true ), // Default
+
+
+ // SPITextDecorationStyle
+ TestCase("text-decoration-style:solid", "text-decoration-style:solid", true ),
+ TestCase("text-decoration-style:dotted", "text-decoration-style:solid", false),
+ TestCase("text-decoration-style:solid", "", true ), // Default
+
+ // SPITextDecoration
+ TestCase("text-decoration:underline", "text-decoration:underline", true ),
+ TestCase("text-decoration:underline", "text-decoration:overline", false),
+ TestCase("text-decoration:underline overline","text-decoration:underline overline",true ),
+ TestCase("text-decoration:overline underline","text-decoration:underline overline",true ),
+ TestCase("text-decoration:none", "text-decoration-color:currentColor", true ), // Default
+
+
+ // Terminate
+ TestCase(0,0,0)
+ };
+ for ( gint i = 0; cases[i].src; i++ ) {
+ // std::cout << "Test two: " << i << std::endl;
+ SPStyle *style_src = sp_style_new(_doc);
+ TS_ASSERT(style_src);
+ SPStyle *style_dst = sp_style_new(_doc);
+ TS_ASSERT(style_dst);
+
+ if ( style_src && style_dst ) {
+ sp_style_merge_from_style_string( style_src, cases[i].src );
+ sp_style_merge_from_style_string( style_dst, cases[i].dst );
+ // std::cout << "Test:" << std::endl;
+ // std::cout << " C: |" << cases[i].src << "| |" << cases[i].dst << "|" << std::endl;
+ // std::cout << " S: |" << style_src->write( SP_STYLE_FLAG_IFSET, NULL ) << "| |"
+ // << style_dst->write( SP_STYLE_FLAG_IFSET, NULL ) << "|" <<std::endl;
+ TS_ASSERT( (*style_src == *style_dst) == cases[i].match );
+ sp_style_unref(style_src);
+ sp_style_unref(style_dst);
+ // std::cout << "End Test\n" << std::endl;
+ }
+ }
+ }
+
+ // Test of cascade
+ void testThree()
+ {
+ struct TestCase {
+ TestCase(gchar const* parent, gchar const* child, gchar const* result) :
+ parent(parent), child(child), result(result) {}
+ gchar const* parent;
+ gchar const* child;
+ gchar const* result;
+ };
+
+ TestCase cases[] = {
+
+ // SPIFloat
+ TestCase("stroke-miterlimit:6", "stroke-miterlimit:2", "stroke-miterlimit:2" ),
+ TestCase("stroke-miterlimit:6", "", "stroke-miterlimit:6" ),
+ TestCase("", "stroke-miterlimit:2", "stroke-miterlimit:2" ),
+
+ // SPIScale24
+ TestCase("opacity:0.3", "opacity:0.3", "opacity:0.3" ),
+ TestCase("opacity:0.3", "opacity:0.6", "opacity:0.6" ),
+ // 'opacity' does not inherit
+ TestCase("opacity:0.3", "", "opacity:1.0" ),
+ TestCase("", "opacity:0.3", "opacity:0.3" ),
+ TestCase("opacity:0.5", "opacity:inherit", "opacity:0.5" ),
+ TestCase("", "", "opacity:1.0" ),
+
+ // SPILength
+ TestCase("text-indent:3", "text-indent:3", "text-indent:3" ),
+ TestCase("text-indent:6", "text-indent:3", "text-indent:3" ),
+ TestCase("text-indent:6px", "text-indent:3", "text-indent:3" ),
+ TestCase("text-indent:1px", "text-indent:12pc", "text-indent:12pc" ),
+ // ex, em cannot be equal
+ //TestCase("text-indent:2ex", "text-indent:2ex", "text-indent:2ex" ),
+ TestCase("text-indent:3", "", "text-indent:3" ),
+ TestCase("text-indent:3", "text-indent:inherit", "text-indent:3" ),
+
+ // SPILengthOrNormal
+ TestCase("letter-spacing:normal", "letter-spacing:normal", "letter-spacing:normal" ),
+ TestCase("letter-spacing:2", "letter-spacing:normal", "letter-spacing:normal" ),
+ TestCase("letter-spacing:normal", "letter-spacing:2", "letter-spacing:2" ),
+ TestCase("letter-spacing:5px", "letter-spacing:5px", "letter-spacing:5px" ),
+ TestCase("letter-spacing:10px", "letter-spacing:5px", "letter-spacing:5px" ),
+ // ex, em cannot be equal
+ // TestCase("letter-spacing:10em", "letter-spacing:10em", "letter-spacing:10em" ),
+
+ // SPIEnum
+ TestCase("text-anchor:start", "text-anchor:start", "text-anchor:start" ),
+ TestCase("text-anchor:start", "text-anchor:middle", "text-anchor:middle" ),
+ TestCase("text-anchor:start", "", "text-anchor:start" ),
+ TestCase("text-anchor:start", "text-anchor:junk", "text-anchor:start" ),
+ TestCase("text-anchor:end", "text-anchor:inherit", "text-anchor:end" ),
+
+ TestCase("font-weight:400", "font-weight:400", "font-weight:400" ),
+ TestCase("font-weight:400", "font-weight:700", "font-weight:700" ),
+ TestCase("font-weight:400", "font-weight:bolder", "font-weight:700" ),
+ TestCase("font-weight:700", "font-weight:bolder", "font-weight:900" ),
+ TestCase("font-weight:400", "font-weight:lighter", "font-weight:100" ),
+ TestCase("font-weight:200", "font-weight:lighter", "font-weight:100" ),
+
+ TestCase("font-stretch:condensed","font-stretch:expanded", "font-stretch:expanded" ),
+ TestCase("font-stretch:condensed","font-stretch:wider", "font-stretch:semi-condensed" ),
+
+ // SPIString and SPIFontString
+
+ // SPIPaint
+
+ // SPIPaintOrder
+
+ // SPIDashArray
+
+ // SPIFilter
+
+ // SPIFontSize
+
+ // SPIBaselineShift
+
+
+ // SPITextDecorationLine
+ TestCase("text-decoration-line:overline", "text-decoration-line:underline",
+ "text-decoration-line:underline" ),
+
+ // SPITextDecorationStyle
+
+ // SPITextDecoration
+
+ // Terminate
+ TestCase(0,0,0)
+ };
+ for ( gint i = 0; cases[i].parent; i++ ) {
+ // std::cout << "Test three: " << i << std::endl;
+ SPStyle *style_parent = sp_style_new(_doc);
+ TS_ASSERT(style_parent);
+ SPStyle *style_child = sp_style_new(_doc);
+ TS_ASSERT(style_child);
+ SPStyle *style_result = sp_style_new(_doc);
+ TS_ASSERT(style_result);
+
+ if ( style_parent && style_child && style_result ) {
+ sp_style_merge_from_style_string( style_parent, cases[i].parent );
+ sp_style_merge_from_style_string( style_child, cases[i].child );
+ sp_style_merge_from_style_string( style_result, cases[i].result );
+ // std::cout << "Test:" << std::endl;
+ // std::cout << " Input: ";
+ // std::cout << " Parent: " << cases[i].parent
+ // << " Child: " << cases[i].child
+ // << " Result: " << cases[i].result << std::endl;
+ // std::cout << " Write: ";
+ // std::cout << " Parent: " << style_parent->write( SP_STYLE_FLAG_IFSET )
+ // << " Child: " << style_child->write( SP_STYLE_FLAG_IFSET )
+ // << " Result: " << style_result->write( SP_STYLE_FLAG_IFSET ) << std::endl;
+
+ //sp_style_merge_from_parent( style_child, style_parent );
+ style_child->cascade( style_parent );
+
+ TS_ASSERT(*style_child == *style_result );
+
+ sp_style_unref(style_child);
+ sp_style_unref(style_parent);
+ sp_style_unref(style_result);
+ // std::cout << "End Test: *************\n" << std::endl;
+ }
+ }
+ }
+
};
diff --git a/src/style.cpp b/src/style.cpp
index bc869b127..11b1dc440 100644
--- a/src/style.cpp
+++ b/src/style.cpp
@@ -14,6 +14,7 @@
* Copyright (C) 2001 Ximian, Inc.
* Copyright (C) 2005 Monash University
* Copyright (C) 2012 Kris De Gussem
+ * Copyright (C) 2014 Tavmjong Bah
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
@@ -24,6 +25,7 @@
#include <cstring>
#include <string>
+#include <algorithm>
#include "libcroco/cr-sel-eng.h"
#include "xml/croco-node-iface.h"
@@ -65,925 +67,541 @@ using std::vector;
struct SPStyleEnum;
+int SPStyle::_count = 0;
+
/*#########################
## FORWARD DECLARATIONS
#########################*/
-static void sp_style_clear(SPStyle *style);
-
-static void sp_style_merge_property(SPStyle *style, gint id, gchar const *val);
-
-static void sp_style_merge_ipaint(SPStyle *style, SPIPaint *paint, SPIPaint const *parent);
-static void sp_style_merge_ifilter(SPStyle *style, SPIFilter const *parent);
-static void sp_style_read_dash(SPStyle *style, gchar const *str);
-
-static SPTextStyle *sp_text_style_new(void);
-static void sp_text_style_clear(SPTextStyle *ts);
-static SPTextStyle *sp_text_style_unref(SPTextStyle *st);
-static SPTextStyle *sp_text_style_duplicate_unset(SPTextStyle *st);
-static guint sp_text_style_write(gchar *p, guint len, SPTextStyle const *st, guint flags = SP_STYLE_FLAG_IFSET);
-static void sp_style_privatize_text(SPStyle *style);
-
-static void sp_style_read_ifloat(SPIFloat *val, gchar const *str);
-static void sp_style_read_iscale24(SPIScale24 *val, gchar const *str);
-static void sp_style_read_ienum(SPIEnum *val, gchar const *str, SPStyleEnum const *dict, bool can_explicitly_inherit);
-static void sp_style_read_istring(SPIString *val, gchar const *str);
-static void sp_style_read_ilength(SPILength *val, gchar const *str);
-static void sp_style_read_ilengthornormal(SPILengthOrNormal *val, gchar const *str);
-
-static void sp_style_read_ipaintorder(SPIPaintOrder *val, gchar const *str);
-
-static void sp_style_read_itextdecoration(SPITextDecorationLine *line, SPITextDecorationStyle *style, SPIPaint *color, gchar const *str);
-static void sp_style_read_itextdecorationLine(SPITextDecorationLine *line, gchar const *str);
-static void sp_style_read_itextdecorationStyle(SPITextDecorationStyle *style, gchar const *str);
-static void sp_style_read_itextdecorationColor(SPIPaint *color, gchar const *str);
-
-static void sp_style_read_icolor(SPIPaint *paint, gchar const *str, SPStyle *style, SPDocument *document);
-static void sp_style_read_ifontsize(SPIFontSize *val, gchar const *str);
-static void sp_style_read_ibaselineshift(SPIBaselineShift *val, gchar const *str);
-static void sp_style_read_ifilter(gchar const *str, SPStyle *style, SPDocument *document);
-
-static void sp_style_read_penum(SPIEnum *val, Inkscape::XML::Node *repr, gchar const *key, SPStyleEnum const *dict, bool can_explicitly_inherit);
-static void sp_style_read_plength(SPILength *val, Inkscape::XML::Node *repr, gchar const *key);
-static void sp_style_read_pfontsize(SPIFontSize *val, Inkscape::XML::Node *repr, gchar const *key);
-static void sp_style_read_pbaselineshift(SPIBaselineShift *val, Inkscape::XML::Node *repr, gchar const *key);
-static void sp_style_read_pfloat(SPIFloat *val, Inkscape::XML::Node *repr, gchar const *key);
-
-static gint sp_style_write_ifloat(gchar *p, gint len, gchar const *key, SPIFloat const *val, SPIFloat const *base, guint flags);
-static gint sp_style_write_iscale24(gchar *p, gint len, gchar const *key, SPIScale24 const *val, SPIScale24 const *base, guint flags);
-static gint sp_style_write_ienum(gchar *p, gint len, gchar const *key, SPStyleEnum const *dict, SPIEnum const *val, SPIEnum const *base, guint flags);
-static gint sp_style_write_istring(gchar *p, gint len, gchar const *key, SPIString const *val, SPIString const *base, guint flags);
-static gint sp_style_write_ilength(gchar *p, gint len, gchar const *key, SPILength const *val, SPILength const *base, guint flags);
-static gint sp_style_write_ipaint(gchar *b, gint len, gchar const *key, SPIPaint const *paint, SPIPaint const *base, guint flags);
-static gint sp_style_write_ipaintorder(gchar *p, gint len, gchar const *key, SPIPaintOrder const *paint_order, SPIPaintOrder const *base, guint flags);
-static gint sp_style_write_idasharray(gchar *p, gint const len, gchar const *const key, SPIDashArray const *const val, SPIDashArray const *const base, guint const flags);
-
-static gint sp_style_write_ifontsize(gchar *p, gint len, gchar const *key, SPIFontSize const *val, SPIFontSize const *base, guint flags);
-static gint sp_style_write_ibaselineshift(gchar *p, gint len, gchar const *key, SPIBaselineShift const *val, SPIBaselineShift const *base, guint flags);
-static gint sp_style_write_ilengthornormal(gchar *p, gint const len, gchar const *const key, SPILengthOrNormal const *const val, SPILengthOrNormal const *const base, guint const flags);
-static gint sp_style_write_itextdecoration(gchar *p, gint const len, gchar const *const key,
- SPITextDecorationLine const *const line,
- SPITextDecorationStyle const *const style,
- SPIPaint const *const color,
- SPITextDecorationLine const *const baseLine,
- SPITextDecorationStyle const *const baseStyle,
- SPIPaint const *const baseColor,
- guint const flags);
-static gint sp_style_write_ifilter(gchar *b, gint len, gchar const *key, SPIFilter const *filter, SPIFilter const *base, guint flags);
-
-static void sp_style_filter_clear(SPStyle *style);
-
-#define SPS_READ_IENUM_IF_UNSET(v,s,d,i) if (!(v)->set) {sp_style_read_ienum((v), (s), (d), (i));}
-#define SPS_READ_PENUM_IF_UNSET(v,r,k,d,i) if (!(v)->set) {sp_style_read_penum((v), (r), (k), (d), (i));}
-
-#define SPS_READ_ILENGTH_IF_UNSET(v,s) if (!(v)->set) {sp_style_read_ilength((v), (s));}
-#define SPS_READ_PLENGTH_IF_UNSET(v,r,k) if (!(v)->set) {sp_style_read_plength((v), (r), (k));}
-
-#define SPS_READ_PFLOAT_IF_UNSET(v,r,k) if (!(v)->set) {sp_style_read_pfloat((v), (r), (k));}
-
-#define SPS_READ_IFONTSIZE_IF_UNSET(v,s) if (!(v)->set) {sp_style_read_ifontsize((v), (s));}
-#define SPS_READ_PFONTSIZE_IF_UNSET(v,r,k) if (!(v)->set) {sp_style_read_pfontsize((v), (r), (k));}
-
-#define SPS_READ_IBASELINE_SHIFT_IF_UNSET(v,s) if (!(v)->set) {sp_style_read_ibaselineshift((v), (s));}
-#define SPS_READ_PBASELINE_SHIFT_IF_UNSET(v,r,k) if (!(v)->set) {sp_style_read_pbaselineshift((v), (r), (k));}
-
-static void sp_style_merge_from_object_stylesheet(SPStyle *, SPObject const *);
-
-struct SPStyleEnum {
- gchar const *key;
- gint value;
-};
-
-static SPStyleEnum const enum_fill_rule[] = {
- {"nonzero", SP_WIND_RULE_NONZERO},
- {"evenodd", SP_WIND_RULE_EVENODD},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_stroke_linecap[] = {
- {"butt", SP_STROKE_LINECAP_BUTT},
- {"round", SP_STROKE_LINECAP_ROUND},
- {"square", SP_STROKE_LINECAP_SQUARE},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_stroke_linejoin[] = {
- {"miter", SP_STROKE_LINEJOIN_MITER},
- {"round", SP_STROKE_LINEJOIN_ROUND},
- {"bevel", SP_STROKE_LINEJOIN_BEVEL},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_font_style[] = {
- {"normal", SP_CSS_FONT_STYLE_NORMAL},
- {"italic", SP_CSS_FONT_STYLE_ITALIC},
- {"oblique", SP_CSS_FONT_STYLE_OBLIQUE},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_font_size[] = {
- {"xx-small", SP_CSS_FONT_SIZE_XX_SMALL},
- {"x-small", SP_CSS_FONT_SIZE_X_SMALL},
- {"small", SP_CSS_FONT_SIZE_SMALL},
- {"medium", SP_CSS_FONT_SIZE_MEDIUM},
- {"large", SP_CSS_FONT_SIZE_LARGE},
- {"x-large", SP_CSS_FONT_SIZE_X_LARGE},
- {"xx-large", SP_CSS_FONT_SIZE_XX_LARGE},
- {"smaller", SP_CSS_FONT_SIZE_SMALLER},
- {"larger", SP_CSS_FONT_SIZE_LARGER},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_font_variant[] = {
- {"normal", SP_CSS_FONT_VARIANT_NORMAL},
- {"small-caps", SP_CSS_FONT_VARIANT_SMALL_CAPS},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_font_weight[] = {
- {"100", SP_CSS_FONT_WEIGHT_100},
- {"200", SP_CSS_FONT_WEIGHT_200},
- {"300", SP_CSS_FONT_WEIGHT_300},
- {"400", SP_CSS_FONT_WEIGHT_400},
- {"500", SP_CSS_FONT_WEIGHT_500},
- {"600", SP_CSS_FONT_WEIGHT_600},
- {"700", SP_CSS_FONT_WEIGHT_700},
- {"800", SP_CSS_FONT_WEIGHT_800},
- {"900", SP_CSS_FONT_WEIGHT_900},
- {"normal", SP_CSS_FONT_WEIGHT_NORMAL},
- {"bold", SP_CSS_FONT_WEIGHT_BOLD},
- {"lighter", SP_CSS_FONT_WEIGHT_LIGHTER},
- {"bolder", SP_CSS_FONT_WEIGHT_BOLDER},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_font_stretch[] = {
- {"ultra-condensed", SP_CSS_FONT_STRETCH_ULTRA_CONDENSED},
- {"extra-condensed", SP_CSS_FONT_STRETCH_EXTRA_CONDENSED},
- {"condensed", SP_CSS_FONT_STRETCH_CONDENSED},
- {"semi-condensed", SP_CSS_FONT_STRETCH_SEMI_CONDENSED},
- {"normal", SP_CSS_FONT_STRETCH_NORMAL},
- {"semi-expanded", SP_CSS_FONT_STRETCH_SEMI_EXPANDED},
- {"expanded", SP_CSS_FONT_STRETCH_EXPANDED},
- {"extra-expanded", SP_CSS_FONT_STRETCH_EXTRA_EXPANDED},
- {"ultra-expanded", SP_CSS_FONT_STRETCH_ULTRA_EXPANDED},
- {"narrower", SP_CSS_FONT_STRETCH_NARROWER},
- {"wider", SP_CSS_FONT_STRETCH_WIDER},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_text_align[] = {
- {"start", SP_CSS_TEXT_ALIGN_START},
- {"end", SP_CSS_TEXT_ALIGN_END},
- {"left", SP_CSS_TEXT_ALIGN_LEFT},
- {"right", SP_CSS_TEXT_ALIGN_RIGHT},
- {"center", SP_CSS_TEXT_ALIGN_CENTER},
- {"justify", SP_CSS_TEXT_ALIGN_JUSTIFY},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_text_transform[] = {
- {"capitalize", SP_CSS_TEXT_TRANSFORM_CAPITALIZE},
- {"uppercase", SP_CSS_TEXT_TRANSFORM_UPPERCASE},
- {"lowercase", SP_CSS_TEXT_TRANSFORM_LOWERCASE},
- {"none", SP_CSS_TEXT_TRANSFORM_NONE},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_text_anchor[] = {
- {"start", SP_CSS_TEXT_ANCHOR_START},
- {"middle", SP_CSS_TEXT_ANCHOR_MIDDLE},
- {"end", SP_CSS_TEXT_ANCHOR_END},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_direction[] = {
- {"ltr", SP_CSS_DIRECTION_LTR},
- {"rtl", SP_CSS_DIRECTION_RTL},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_block_progression[] = {
- {"tb", SP_CSS_BLOCK_PROGRESSION_TB},
- {"rl", SP_CSS_BLOCK_PROGRESSION_RL},
- {"lr", SP_CSS_BLOCK_PROGRESSION_LR},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_writing_mode[] = {
- /* Note that using the same enumerator for lr as lr-tb means we write as lr-tb even if the
- * input file said lr. We prefer writing lr-tb on the grounds that the spec says the initial
- * value is lr-tb rather than lr.
- *
- * ECMA scripts may be surprised to find tb-rl in DOM if they set the attribute to rl, so
- * sharing enumerators for different strings may be a bug (once we support ecma script).
- */
- {"lr-tb", SP_CSS_WRITING_MODE_LR_TB},
- {"rl-tb", SP_CSS_WRITING_MODE_RL_TB},
- {"tb-rl", SP_CSS_WRITING_MODE_TB_RL},
- {"lr", SP_CSS_WRITING_MODE_LR_TB},
- {"rl", SP_CSS_WRITING_MODE_RL_TB},
- {"tb", SP_CSS_WRITING_MODE_TB_RL},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_baseline_shift[] = {
- {"baseline", SP_CSS_BASELINE_SHIFT_BASELINE},
- {"sub", SP_CSS_BASELINE_SHIFT_SUB},
- {"super", SP_CSS_BASELINE_SHIFT_SUPER},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_visibility[] = {
- {"hidden", SP_CSS_VISIBILITY_HIDDEN},
- {"collapse", SP_CSS_VISIBILITY_COLLAPSE},
- {"visible", SP_CSS_VISIBILITY_VISIBLE},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_overflow[] = {
- {"visible", SP_CSS_OVERFLOW_VISIBLE},
- {"hidden", SP_CSS_OVERFLOW_HIDDEN},
- {"scroll", SP_CSS_OVERFLOW_SCROLL},
- {"auto", SP_CSS_OVERFLOW_AUTO},
- {NULL, -1}
-};
-
-// CSS Compositing and Blending Level 1
-static SPStyleEnum const enum_isolation[] = {
- {"auto", SP_CSS_ISOLATION_AUTO},
- {"isolate", SP_CSS_ISOLATION_ISOLATE},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_blend_mode[] = {
- {"normal", SP_CSS_BLEND_NORMAL},
- {"multiply", SP_CSS_BLEND_MULTIPLY},
- {"screen", SP_CSS_BLEND_SCREEN},
- {"darken", SP_CSS_BLEND_DARKEN},
- {"lighten", SP_CSS_BLEND_LIGHTEN},
- {"overlay", SP_CSS_BLEND_OVERLAY},
- {"color-dodge", SP_CSS_BLEND_COLORDODGE},
- {"color-burn", SP_CSS_BLEND_COLORBURN},
- {"hard-light", SP_CSS_BLEND_HARDLIGHT},
- {"soft-light", SP_CSS_BLEND_SOFTLIGHT},
- {"difference", SP_CSS_BLEND_DIFFERENCE},
- {"exclusion", SP_CSS_BLEND_EXCLUSION},
- {"hue", SP_CSS_BLEND_HUE},
- {"saturation", SP_CSS_BLEND_SATURATION},
- {"color", SP_CSS_BLEND_COLOR},
- {"luminosity", SP_CSS_BLEND_LUMINOSITY},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_display[] = {
- {"none", SP_CSS_DISPLAY_NONE},
- {"inline", SP_CSS_DISPLAY_INLINE},
- {"block", SP_CSS_DISPLAY_BLOCK},
- {"list-item", SP_CSS_DISPLAY_LIST_ITEM},
- {"run-in", SP_CSS_DISPLAY_RUN_IN},
- {"compact", SP_CSS_DISPLAY_COMPACT},
- {"marker", SP_CSS_DISPLAY_MARKER},
- {"table", SP_CSS_DISPLAY_TABLE},
- {"inline-table", SP_CSS_DISPLAY_INLINE_TABLE},
- {"table-row-group", SP_CSS_DISPLAY_TABLE_ROW_GROUP},
- {"table-header-group", SP_CSS_DISPLAY_TABLE_HEADER_GROUP},
- {"table-footer-group", SP_CSS_DISPLAY_TABLE_FOOTER_GROUP},
- {"table-row", SP_CSS_DISPLAY_TABLE_ROW},
- {"table-column-group", SP_CSS_DISPLAY_TABLE_COLUMN_GROUP},
- {"table-column", SP_CSS_DISPLAY_TABLE_COLUMN},
- {"table-cell", SP_CSS_DISPLAY_TABLE_CELL},
- {"table-caption", SP_CSS_DISPLAY_TABLE_CAPTION},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_shape_rendering[] = {
- {"auto", SP_CSS_SHAPE_RENDERING_AUTO},
- {"optimizeSpeed", SP_CSS_SHAPE_RENDERING_OPTIMIZESPEED},
- {"crispEdges", SP_CSS_SHAPE_RENDERING_CRISPEDGES},
- {"geometricPrecision", SP_CSS_SHAPE_RENDERING_GEOMETRICPRECISION},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_color_rendering[] = {
- {"auto", SP_CSS_COLOR_RENDERING_AUTO},
- {"optimizeSpeed", SP_CSS_COLOR_RENDERING_OPTIMIZESPEED},
- {"optimizeQuality", SP_CSS_COLOR_RENDERING_OPTIMIZEQUALITY},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_image_rendering[] = {
- {"auto", SP_CSS_IMAGE_RENDERING_AUTO},
- {"optimizeSpeed", SP_CSS_IMAGE_RENDERING_OPTIMIZESPEED},
- {"optimizeQuality", SP_CSS_IMAGE_RENDERING_OPTIMIZEQUALITY},
- {"-inkscape-crisp-edges", SP_CSS_IMAGE_RENDERING_CRISPEDGES},
- {"-inkscape-pixelated", SP_CSS_IMAGE_RENDERING_PIXELATED},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_text_rendering[] = {
- {"auto", SP_CSS_TEXT_RENDERING_AUTO},
- {"optimizeSpeed", SP_CSS_TEXT_RENDERING_OPTIMIZESPEED},
- {"optimizeLegibility", SP_CSS_TEXT_RENDERING_OPTIMIZELEGIBILITY},
- {"geometricPrecision", SP_CSS_TEXT_RENDERING_GEOMETRICPRECISION},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_enable_background[] = {
- {"accumulate", SP_CSS_BACKGROUND_ACCUMULATE},
- {"new", SP_CSS_BACKGROUND_NEW},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_clip_rule[] = {
- {"nonzero", SP_WIND_RULE_NONZERO},
- {"evenodd", SP_WIND_RULE_EVENODD},
- {NULL, -1}
-};
-
-static SPStyleEnum const enum_color_interpolation[] = {
- {"auto", SP_CSS_COLOR_INTERPOLATION_AUTO},
- {"sRGB", SP_CSS_COLOR_INTERPOLATION_SRGB},
- {"linearRGB", SP_CSS_COLOR_INTERPOLATION_LINEARRGB},
- {NULL, -1}
-};
+void sp_style_filter_ref_changed(SPObject *old_ref, SPObject *ref, SPStyle *style);
+void sp_style_fill_paint_server_ref_changed(SPObject *old_ref, SPObject *ref, SPStyle *style);
+void sp_style_stroke_paint_server_ref_changed(SPObject *old_ref, SPObject *ref, SPStyle *style);
+
+static void sp_style_object_release(SPObject *object, SPStyle *style);
+static CRSelEng *sp_repr_sel_eng();
+
+
+//SPPropMap SPStyle::_propmap;
+
+// C++11 allows one constructor to call another... might be useful. The original C code
+// had separate calls to create SPStyle, one with only SPDocument and the other with only
+// SPObject as parameters.
+SPStyle::SPStyle(SPDocument *document_in, SPObject *object_in) :
+
+ // Unimplemented SVG 1.1: alignment-baseline, clip, clip-path, color-profile, cursor,
+ // dominant-baseline, flood-color, flood-opacity, font-size-adjust,
+ // glyph-orientation-horizontal, glyph-orientation-vertical, kerning, lighting-color,
+ // pointer-events, stop-color, stop-opacity, unicode-bidi
+
+ // For enums: property( name, enumeration, default value , inherits = true );
+ // For scale24: property( name, default value = 0, inherits = true );
+
+ // 'font', 'font-size', and 'font-family' must come first as other properties depend on them
+ // for calculated values (through 'em' and 'ex'). ('ex' is currently not read.)
+ // The following properties can depend on 'em' and 'ex':
+ // baseline-shift, kerning, letter-spacing, stroke-dash-offset, stroke-width, word-spacing,
+ // Non-SVG 1.1: text-indent, line-spacing
+
+ // Hidden in SPIFontStyle: (to be refactored)
+ // font-family
+ // font-specification
+
+ // Font related properties and 'font' shorthand
+ font_style( "font-style", enum_font_style, SP_CSS_FONT_STYLE_NORMAL ),
+ font_variant( "font-variant", enum_font_variant, SP_CSS_FONT_VARIANT_NORMAL ),
+ font_weight( "font-weight", enum_font_weight, SP_CSS_FONT_WEIGHT_NORMAL, SP_CSS_FONT_WEIGHT_400 ),
+ font_stretch( "font-stretch", enum_font_stretch, SP_CSS_FONT_STRETCH_NORMAL ),
+ font_size(),
+ line_height( "line-height", 1.0 ), // SPILengthOrNormal
+ font_family( "font-family", "sans-serif" ), // SPIString w/default
+ font(), // SPIFont
+ font_specification( "-inkscape-font-specification" ), // SPIString
+
+ // Text related properties
+ text_indent( "text-indent", 0.0 ), // SPILength
+ text_align( "text-align", enum_text_align, SP_CSS_TEXT_ALIGN_START ),
+ text_decoration(),
+ text_decoration_line(),
+ text_decoration_style(),
+ text_decoration_color( "text-decoration-color" ), // SPIColor
+
+ letter_spacing( "letter-spacing", 0.0 ), // SPILengthOrNormal
+ word_spacing( "word-spacing", 0.0 ), // SPILengthOrNormal
+ text_transform( "text-transform", enum_text_transform, SP_CSS_TEXT_TRANSFORM_NONE ),
+
+ direction( "direction", enum_direction, SP_CSS_DIRECTION_LTR ),
+ block_progression("block-progression", enum_block_progression, SP_CSS_BLOCK_PROGRESSION_TB),
+ writing_mode( "writing-mode", enum_writing_mode, SP_CSS_WRITING_MODE_LR_TB ),
+ baseline_shift(),
+ text_anchor( "text-anchor", enum_text_anchor, SP_CSS_TEXT_ANCHOR_START ),
+
+ // General visual properties
+ clip_rule( "clip-rule", enum_clip_rule, SP_WIND_RULE_NONZERO ),
+ display( "display", enum_display, SP_CSS_DISPLAY_INLINE, false ),
+ overflow( "overflow", enum_overflow, SP_CSS_OVERFLOW_VISIBLE, false ),
+ visibility( "visibility", enum_visibility, SP_CSS_VISIBILITY_VISIBLE ),
+ opacity( "opacity", SP_SCALE24_MAX, false ),
+
+ isolation( "isolation", enum_isolation, SP_CSS_ISOLATION_AUTO ),
+ blend_mode( "blend_mode", enum_blend_mode, SP_CSS_BLEND_NORMAL ),
+
+ paint_order(), // SPIPaintOrder
+
+ // Color properties
+ color( "color" ), // SPIColor
+ color_interpolation( "color-interpolation", enum_color_interpolation, SP_CSS_COLOR_INTERPOLATION_SRGB),
+ color_interpolation_filters("color-interpolation-filters", enum_color_interpolation, SP_CSS_COLOR_INTERPOLATION_LINEARRGB),
+
+ // Fill properties
+ fill( "fill" ), // SPIPaint
+ fill_opacity( "fill-opacity", SP_SCALE24_MAX ),
+ fill_rule( "fill-rule", enum_fill_rule, SP_WIND_RULE_NONZERO ),
+
+ // Stroke properites
+ stroke( "stroke" ), // SPIPaint
+ stroke_width( "stroke-width", 1.0 ), // SPILength
+ stroke_linecap( "stroke-linecap", enum_stroke_linecap, SP_STROKE_LINECAP_BUTT ),
+ stroke_linejoin( "stroke-linejoin", enum_stroke_linejoin, SP_STROKE_LINEJOIN_MITER ),
+ stroke_miterlimit("stroke-miterlimit", 4 ), // SPIFloat (only use of float!)
+ stroke_dasharray(), // SPIDashArray
+ stroke_dashoffset("stroke-dashoffset", 0.0 ), // SPILength for now
+
+ stroke_opacity( "stroke-opacity", SP_SCALE24_MAX ),
+
+ marker( "marker" ), // SPIString
+ marker_start( "marker-start" ), // SPIString
+ marker_mid( "marker-mid" ), // SPIString
+ marker_end( "marker-end" ), // SPIString
+
+ // Filter properties
+ filter(),
+ filter_blend_mode("filter-blend-mode", enum_blend_mode, SP_CSS_BLEND_NORMAL),
+ filter_gaussianBlur_deviation( "filter-gaussianBlur-deviation", 0.0 ), // SPILength
+ enable_background("enable-background", enum_enable_background, SP_CSS_BACKGROUND_ACCUMULATE, false),
+
+ // Rendering hint properties
+ color_rendering( "color-rendering", enum_color_rendering, SP_CSS_COLOR_RENDERING_AUTO),
+ image_rendering( "image-rendering", enum_image_rendering, SP_CSS_IMAGE_RENDERING_AUTO),
+ shape_rendering( "shape-rendering", enum_shape_rendering, SP_CSS_SHAPE_RENDERING_AUTO),
+ text_rendering( "text-rendering", enum_text_rendering, SP_CSS_TEXT_RENDERING_AUTO )
+
+{
+ // std::cout << "SPStyle::SPStyle( SPDocument ): Entrance: (" << _count << ")" << std::endl;
+ // std::cout << " Document: " << (document_in?"present":"null") << std::endl;
+ // std::cout << " Object: "
+ // << (object_in?(object_in->getId()?object_in->getId():"id null"):"object null") << std::endl;
+
+ // static bool first = true;
+ // if( first ) {
+ // std::cout << "Size of SPStyle: " << sizeof(SPStyle) << std::endl;
+ // std::cout << " SPIBase: " << sizeof(SPIBase) << std::endl;
+ // std::cout << " SPIFloat: " << sizeof(SPIFloat) << std::endl;
+ // std::cout << " SPIScale24: " << sizeof(SPIScale24) << std::endl;
+ // std::cout << " SPILength: " << sizeof(SPILength) << std::endl;
+ // std::cout << " SPILengthOrNormal: " << sizeof(SPILengthOrNormal) << std::endl;
+ // std::cout << " SPIColor: " << sizeof(SPIColor) << std::endl;
+ // std::cout << " SPIPaint: " << sizeof(SPIPaint) << std::endl;
+ // std::cout << " SPITextDecorationLine" << sizeof(SPITextDecorationLine) << std::endl;
+ // std::cout << " Glib::ustring:" << sizeof(Glib::ustring) << std::endl;
+ // std::cout << " SPColor: " << sizeof(SPColor) << std::endl;
+ // first = false;
+ // }
+
+ ++_count; // Poor man's memory leak detector
+
+ _refcount = 1;
+
+ cloned = false;
+
+ object = object_in;
+ if( object ) {
+ g_assert( SP_IS_OBJECT(object) );
+ document = object->document;
+ release_connection =
+ object->connectRelease(sigc::bind<1>(sigc::ptr_fun(&sp_style_object_release), this));
+
+ cloned = object->cloned;
-/**
- * Release callback.
- */
-static void
-sp_style_object_release(SPObject *object, SPStyle *style)
-{
- (void)object; // TODO
- style->object = NULL;
-}
+ } else {
+ document = document_in;
+ }
+
+ new (&release_connection) sigc::connection();
+ new (&filter_modified_connection) sigc::connection();
+ new (&fill_ps_modified_connection) sigc::connection();
+ new (&stroke_ps_modified_connection) sigc::connection();
+
+ // 'font' shorthand requires access to included properties.
+ font.setStylePointer( this );
+
+ // Properties that depend on 'font-size' for calculating lengths.
+ baseline_shift.setStylePointer( this );
+ text_indent.setStylePointer( this );
+ line_height.setStylePointer( this );
+ letter_spacing.setStylePointer( this );
+ word_spacing.setStylePointer( this );
+ stroke_width.setStylePointer( this );
+ stroke_dashoffset.setStylePointer( this );
+
+ // Properties that depend on 'color'
+ text_decoration_color.setStylePointer( this );
+ fill.setStylePointer( this );
+ stroke.setStylePointer( this );
+ // color.setStylePointer( this ); // Doen't need reference to self
+
+ // 'text_decoration' shorthand requires access to included properties.
+ text_decoration.setStylePointer( this );
+
+ // SPIPaint, SPIFilter needs access to 'this' (SPStyle)
+ // for setting up signals... 'fill', 'stroke' already done
+ filter.setStylePointer( this );
+
+ // Used to iterate over markers
+ marker_ptrs[SP_MARKER_LOC] = &marker;
+ marker_ptrs[SP_MARKER_LOC_START] = &marker_start;
+ marker_ptrs[SP_MARKER_LOC_MID] = &marker_mid;
+ marker_ptrs[SP_MARKER_LOC_END] = &marker_end;
+
+
+ // This might be too resource hungary... but for now it possible to loop over properties
+
+ // 'color' must be before 'fill', 'stroke', 'text-decoration-color', ...
+ _properties.push_back( &color );
+
+ // 'font-size'/'font' must be before properties that need to know em, ex size (SPILength,
+ // SPILenghtOrNormal)
+ _properties.push_back( &font_style );
+ _properties.push_back( &font_variant );
+ _properties.push_back( &font_weight );
+ _properties.push_back( &font_stretch );
+ _properties.push_back( &font_size );
+ _properties.push_back( &line_height );
+ _properties.push_back( &font_family );
+ _properties.push_back( &font );
+ _properties.push_back( &font_specification );
+
+ _properties.push_back( &text_indent );
+ _properties.push_back( &text_align );
+
+ _properties.push_back( &text_decoration );
+ _properties.push_back( &text_decoration_line );
+ _properties.push_back( &text_decoration_style );
+ _properties.push_back( &text_decoration_color );
+
+ _properties.push_back( &letter_spacing );
+ _properties.push_back( &word_spacing );
+ _properties.push_back( &text_transform );
+
+ _properties.push_back( &direction );
+ _properties.push_back( &block_progression );
+ _properties.push_back( &writing_mode );
+ _properties.push_back( &baseline_shift );
+ _properties.push_back( &text_anchor );
+
+ _properties.push_back( &clip_rule );
+ _properties.push_back( &display );
+ _properties.push_back( &overflow );
+ _properties.push_back( &visibility );
+ _properties.push_back( &opacity );
+
+ _properties.push_back( &isolation );
+ _properties.push_back( &blend_mode );
+
+ _properties.push_back( &color_interpolation );
+ _properties.push_back( &color_interpolation_filters );
+
+ _properties.push_back( &fill );
+ _properties.push_back( &fill_opacity );
+ _properties.push_back( &fill_rule );
+
+ _properties.push_back( &stroke );
+ _properties.push_back( &stroke_width );
+ _properties.push_back( &stroke_linecap );
+ _properties.push_back( &stroke_linejoin );
+ _properties.push_back( &stroke_miterlimit );
+ _properties.push_back( &stroke_dasharray );
+ _properties.push_back( &stroke_dashoffset );
+ _properties.push_back( &stroke_opacity );
+
+ _properties.push_back( &marker );
+ _properties.push_back( &marker_start );
+ _properties.push_back( &marker_mid );
+ _properties.push_back( &marker_end );
+
+ _properties.push_back( &paint_order );
+
+ _properties.push_back( &filter );
+ _properties.push_back( &filter_blend_mode );
+ _properties.push_back( &filter_gaussianBlur_deviation );
+
+ _properties.push_back( &color_rendering );
+ _properties.push_back( &image_rendering );
+ _properties.push_back( &shape_rendering );
+ _properties.push_back( &text_rendering );
+
+ _properties.push_back( &enable_background );
-/**
- * Emit style modified signal on style's object if the filter changed.
- */
-static void
-sp_style_filter_ref_modified(SPObject *obj, guint flags, SPStyle *style)
-{
- (void)flags; // TODO
- SPFilter *filter=static_cast<SPFilter *>(obj);
- if (style->getFilter() == filter)
- {
- if (style->object) {
- style->object->requestModified(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG);
- }
- }
-}
+ // MAP -------------------------------------------
-/**
- * Gets called when the filter is (re)attached to the style
- */
-static void
-sp_style_filter_ref_changed(SPObject *old_ref, SPObject *ref, SPStyle *style)
-{
- if (old_ref) {
- style->filter_modified_connection.disconnect();
- }
- if ( SP_IS_FILTER(ref))
- {
- style->filter_modified_connection =
- ref->connectModified(sigc::bind(sigc::ptr_fun(&sp_style_filter_ref_modified), style));
- }
+ // if( _propmap.size() == 0 ) {
- sp_style_filter_ref_modified(ref, 0, style);
-}
+ // // 'color' must be before 'fill', 'stroke', 'text-decoration-color', ...
+ // _propmap.insert( std::make_pair( color.name, reinterpret_cast<SPIBasePtr>(&SPStyle::color ) ) );
-/**
- * Emit style modified signal on style's object if server is style's fill
- * or stroke paint server.
- */
-static void
-sp_style_paint_server_ref_modified(SPObject *obj, guint flags, SPStyle *style)
-{
- (void)flags; // TODO
- SPPaintServer *server = static_cast<SPPaintServer *>(obj);
+ // // 'font-size' must be before properties that need to know em, ex size (SPILength, SPILenghtOrNormal)
+ // _propmap.insert( std::make_pair( font_style.name, reinterpret_cast<SPIBasePtr>(&SPStyle::font_style ) ) );
+ // _propmap.insert( std::make_pair( font_variant.name, reinterpret_cast<SPIBasePtr>(&SPStyle::font_variant ) ) );
+ // _propmap.insert( std::make_pair( font_weight.name, reinterpret_cast<SPIBasePtr>(&SPStyle::font_weight ) ) );
+ // _propmap.insert( std::make_pair( font_stretch.name, reinterpret_cast<SPIBasePtr>(&SPStyle::font_stretch ) ) );
+ // _propmap.insert( std::make_pair( font_size.name, reinterpret_cast<SPIBasePtr>(&SPStyle::font_size ) ) );
+ // _propmap.insert( std::make_pair( line_height.name, reinterpret_cast<SPIBasePtr>(&SPStyle::line_height ) ) );
+ // _propmap.insert( std::make_pair( font_family.name, reinterpret_cast<SPIBasePtr>(&SPStyle::font_family ) ) );
+ // _propmap.insert( std::make_pair( font.name, reinterpret_cast<SPIBasePtr>(&SPStyle::font ) ) );
+ // _propmap.insert( std::make_pair( font_specification.name, reinterpret_cast<SPIBasePtr>(&SPStyle::font_specification ) ) );
- if ((style->fill.isPaintserver())
- && style->getFillPaintServer() == server)
- {
- if (style->object) {
- /** \todo
- * fixme: I do not know, whether it is optimal - we are
- * forcing reread of everything (Lauris)
- */
- /** \todo
- * fixme: We have to use object_modified flag, because parent
- * flag is only available downstreams.
- */
- style->object->requestModified(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG);
- }
- } else if ((style->stroke.isPaintserver())
- && style->getStrokePaintServer() == server)
- {
- if (style->object) {
- /// \todo fixme:
- style->object->requestModified(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG);
- }
- } else if (server) {
- g_assert_not_reached();
- }
-}
+ // _propmap.insert( std::make_pair( text_indent.name, reinterpret_cast<SPIBasePtr>(&SPStyle::text_indent ) ) );
+ // _propmap.insert( std::make_pair( text_align.name, reinterpret_cast<SPIBasePtr>(&SPStyle::text_align ) ) );
-/**
- * Gets called when the paintserver is (re)attached to the style
- */
-static void
-sp_style_fill_paint_server_ref_changed(SPObject *old_ref, SPObject *ref, SPStyle *style)
-{
- if (old_ref) {
- style->fill_ps_modified_connection.disconnect();
- }
- if (SP_IS_PAINT_SERVER(ref)) {
- style->fill_ps_modified_connection =
- ref->connectModified(sigc::bind(sigc::ptr_fun(&sp_style_paint_server_ref_modified), style));
- }
+ // _propmap.insert( std::make_pair( text_decoration.name, reinterpret_cast<SPIBasePtr>(&SPStyle::text_decoration ) ) );
+ // _propmap.insert( std::make_pair( text_decoration_line.name, reinterpret_cast<SPIBasePtr>(&SPStyle::text_decoration_line ) ) );
+ // _propmap.insert( std::make_pair( text_decoration_style.name, reinterpret_cast<SPIBasePtr>(&SPStyle::text_decoration_style ) ) );
+ // _propmap.insert( std::make_pair( text_decoration_color.name, reinterpret_cast<SPIBasePtr>(&SPStyle::text_decoration_color ) ) );
- sp_style_paint_server_ref_modified(ref, 0, style);
-}
+ // _propmap.insert( std::make_pair( letter_spacing.name, reinterpret_cast<SPIBasePtr>(&SPStyle::letter_spacing ) ) );
+ // _propmap.insert( std::make_pair( word_spacing.name, reinterpret_cast<SPIBasePtr>(&SPStyle::word_spacing ) ) );
+ // _propmap.insert( std::make_pair( text_transform.name, reinterpret_cast<SPIBasePtr>(&SPStyle::text_transform ) ) );
-/**
- * Gets called when the paintserver is (re)attached to the style
- */
-static void
-sp_style_stroke_paint_server_ref_changed(SPObject *old_ref, SPObject *ref, SPStyle *style)
-{
- if (old_ref) {
- style->stroke_ps_modified_connection.disconnect();
- }
- if (SP_IS_PAINT_SERVER(ref)) {
- style->stroke_ps_modified_connection =
- ref->connectModified(sigc::bind(sigc::ptr_fun(&sp_style_paint_server_ref_modified), style));
- }
+ // _propmap.insert( std::make_pair( direction.name, reinterpret_cast<SPIBasePtr>(&SPStyle::direction ) ) );
+ // _propmap.insert( std::make_pair( block_progression.name, reinterpret_cast<SPIBasePtr>(&SPStyle::block_progression ) ) );
+ // _propmap.insert( std::make_pair( writing_mode.name, reinterpret_cast<SPIBasePtr>(&SPStyle::writing_mode ) ) );
+ // _propmap.insert( std::make_pair( baseline_shift.name, reinterpret_cast<SPIBasePtr>(&SPStyle::baseline_shift ) ) );
+ // _propmap.insert( std::make_pair( text_anchor.name, reinterpret_cast<SPIBasePtr>(&SPStyle::text_anchor ) ) );
- sp_style_paint_server_ref_modified(ref, 0, style);
-}
+ // _propmap.insert( std::make_pair( clip_rule.name, reinterpret_cast<SPIBasePtr>(&SPStyle::clip_rule ) ) );
+ // _propmap.insert( std::make_pair( display.name, reinterpret_cast<SPIBasePtr>(&SPStyle::display ) ) );
+ // _propmap.insert( std::make_pair( overflow.name, reinterpret_cast<SPIBasePtr>(&SPStyle::overflow ) ) );
+ // _propmap.insert( std::make_pair( visibility.name, reinterpret_cast<SPIBasePtr>(&SPStyle::visibility ) ) );
+ // _propmap.insert( std::make_pair( opacity.name, reinterpret_cast<SPIBasePtr>(&SPStyle::opacity ) ) );
-/**
- * Returns a new SPStyle object with settings as per sp_style_clear().
- */
-SPStyle *
-sp_style_new(SPDocument *document)
-{
- SPStyle *const style = g_new0(SPStyle, 1);
+ // _propmap.insert( std::make_pair( isolation.name, reinterpret_cast<SPIBasePtr>(&SPStyle::isolation ) ) );
+ // _propmap.insert( std::make_pair( blend_mode.name, reinterpret_cast<SPIBasePtr>(&SPStyle::blend_mode ) ) );
- style->refcount = 1;
- style->object = NULL;
- style->document = document;
- style->text = sp_text_style_new();
- style->text_private = TRUE;
+ // _propmap.insert( std::make_pair( color_interpolation.name, reinterpret_cast<SPIBasePtr>(&SPStyle::color_interpolation ) ) );
+ // _propmap.insert( std::make_pair( color_interpolation_filters.name, reinterpret_cast<SPIBasePtr>(&SPStyle::color_interpolation_filters ) ) );
- sp_style_clear(style);
+ // _propmap.insert( std::make_pair( fill.name, reinterpret_cast<SPIBasePtr>(&SPStyle::fill ) ) );
+ // _propmap.insert( std::make_pair( fill_opacity.name, reinterpret_cast<SPIBasePtr>(&SPStyle::fill_opacity ) ) );
+ // _propmap.insert( std::make_pair( fill_rule.name, reinterpret_cast<SPIBasePtr>(&SPStyle::fill_rule ) ) );
- style->cloned = false;
+ // _propmap.insert( std::make_pair( stroke.name, reinterpret_cast<SPIBasePtr>(&SPStyle::stroke ) ) );
+ // _propmap.insert( std::make_pair( stroke_width.name, reinterpret_cast<SPIBasePtr>(&SPStyle::stroke_width ) ) );
+ // _propmap.insert( std::make_pair( stroke_linecap.name, reinterpret_cast<SPIBasePtr>(&SPStyle::stroke_linecap ) ) );
+ // _propmap.insert( std::make_pair( stroke_linejoin.name, reinterpret_cast<SPIBasePtr>(&SPStyle::stroke_linejoin ) ) );
+ // _propmap.insert( std::make_pair( stroke_miterlimit.name, reinterpret_cast<SPIBasePtr>(&SPStyle::stroke_miterlimit ) ) );
+ // _propmap.insert( std::make_pair( stroke_dasharray.name, reinterpret_cast<SPIBasePtr>(&SPStyle::stroke_dasharray ) ) );
+ // _propmap.insert( std::make_pair( stroke_dashoffset.name, reinterpret_cast<SPIBasePtr>(&SPStyle::stroke_dashoffset ) ) );
+ // _propmap.insert( std::make_pair( stroke_opacity.name, reinterpret_cast<SPIBasePtr>(&SPStyle::stroke_opacity ) ) );
- new (&style->release_connection) sigc::connection();
- new (&style->filter_modified_connection) sigc::connection();
- new (&style->fill_ps_modified_connection) sigc::connection();
- new (&style->stroke_ps_modified_connection) sigc::connection();
+ // _propmap.insert( std::make_pair( marker.name, reinterpret_cast<SPIBasePtr>(&SPStyle::marker ) ) );
+ // _propmap.insert( std::make_pair( marker_start.name, reinterpret_cast<SPIBasePtr>(&SPStyle::marker_start ) ) );
+ // _propmap.insert( std::make_pair( marker_mid.name, reinterpret_cast<SPIBasePtr>(&SPStyle::marker_mid ) ) );
+ // _propmap.insert( std::make_pair( marker_end.name, reinterpret_cast<SPIBasePtr>(&SPStyle::marker_end ) ) );
- return style;
+ // _propmap.insert( std::make_pair( paint_order.name, reinterpret_cast<SPIBasePtr>(&SPStyle::paint_order ) ) );
+
+ // _propmap.insert( std::make_pair( filter.name, reinterpret_cast<SPIBasePtr>(&SPStyle::filter ) ) );
+ // _propmap.insert( std::make_pair( filter_blend_mode.name, reinterpret_cast<SPIBasePtr>(&SPStyle::filter_blend_mode ) ) );
+ // _propmap.insert( std::make_pair( filter_gaussianBlur_deviation.name, reinterpret_cast<SPIBasePtr>(&SPStyle::filter_gaussianBlur_deviation ) ) );
+
+ // _propmap.insert( std::make_pair( color_rendering.name, reinterpret_cast<SPIBasePtr>(&SPStyle::color_rendering ) ) );
+ // _propmap.insert( std::make_pair( image_rendering.name, reinterpret_cast<SPIBasePtr>(&SPStyle::image_rendering ) ) );
+ // _propmap.insert( std::make_pair( shape_rendering.name, reinterpret_cast<SPIBasePtr>(&SPStyle::shape_rendering ) ) );
+ // _propmap.insert( std::make_pair( text_rendering.name, reinterpret_cast<SPIBasePtr>(&SPStyle::text_rendering ) ) );
+
+ // _propmap.insert( std::make_pair( enable_background.name, reinterpret_cast<SPIBasePtr>(&SPStyle::enable_background ) ) );
+
+ // }
}
+SPStyle::~SPStyle() {
-/**
- * Creates a new SPStyle object, and attaches it to the specified SPObject.
- */
-SPStyle *
-sp_style_new_from_object(SPObject *object)
-{
- g_return_val_if_fail(object != NULL, NULL);
- g_return_val_if_fail(SP_IS_OBJECT(object), NULL);
+ // std::cout << "SPStyle::~SPStyle" << std::endl;
+ --_count; // Poor man's memory leak detector.
- SPStyle *style = sp_style_new( object->document );
- style->object = object;
- style->release_connection = object->connectRelease(sigc::bind<1>(sigc::ptr_fun(&sp_style_object_release), style));
+ // Remove connections
+ release_connection.disconnect();
+ release_connection.~connection();
- if (object->cloned) {
- style->cloned = true;
+ // The following shoud be moved into SPIPaint and SPIFilter
+ if (fill.value.href) {
+ fill_ps_modified_connection.disconnect();
}
- return style;
-}
+ if (stroke.value.href) {
+ stroke_ps_modified_connection.disconnect();
+ }
+ if (filter.href) {
+ filter_modified_connection.disconnect();
+ }
-/**
- * Increase refcount of style.
- */
-SPStyle *
-sp_style_ref(SPStyle *style)
-{
- g_return_val_if_fail(style != NULL, NULL);
- g_return_val_if_fail(style->refcount > 0, NULL);
+ filter_modified_connection.~connection();
+ fill_ps_modified_connection.~connection();
+ stroke_ps_modified_connection.~connection();
- style->refcount += 1;
+ _properties.clear();
+ //_propmap.clear();
- return style;
+ // std::cout << "SPStyle::~SPstyle(): Exit\n" << std::endl;
}
+// Used in SPStyle::clear()
+void clear_property( SPIBase* p ) {
+ p->clear();
+}
-/**
- * Decrease refcount of style with possible destruction.
- */
-SPStyle *
-sp_style_unref(SPStyle *style)
-{
- g_return_val_if_fail(style != NULL, NULL);
- g_return_val_if_fail(style->refcount > 0, NULL);
-
- style->refcount -= 1;
-
- if (style->refcount < 1) {
- style->release_connection.disconnect();
- style->release_connection.~connection();
- if (style->text) sp_text_style_unref(style->text);
-
- if (style->fill.value.href) {
- style->fill_ps_modified_connection.disconnect();
- delete style->fill.value.href;
- style->fill.value.href = NULL;
- }
- if (style->stroke.value.href) {
- style->stroke_ps_modified_connection.disconnect();
- delete style->stroke.value.href;
- style->stroke.value.href = NULL;
- }
- if (style->filter.href) {
- style->filter_modified_connection.disconnect();
- delete style->filter.href;
- style->filter.href = NULL;
- }
-
- style->filter_modified_connection.~connection();
- style->fill_ps_modified_connection.~connection();
- style->stroke_ps_modified_connection.~connection();
-
- style->fill.clear();
- style->stroke.clear();
- sp_style_filter_clear(style);
-
- style->stroke_dasharray.values.clear();
-
- for (unsigned i = SP_MARKER_LOC; i < SP_MARKER_LOC_QTY; i++) {
- if (style->marker[i].value) {
- g_free(style->marker[i].value);
- style->marker[i].value = NULL;
- }
- }
- g_free(style);
- return NULL;
+// Matches void sp_style_clear();
+void
+SPStyle::clear() {
+
+ for_each( _properties.begin(), _properties.end(), clear_property );
+ // for(SPPropMap::iterator i = _propmap.begin(); i != _propmap.end(); ++i ) {
+ // (this->*(i->second)).clear();
+ // }
+
+ // Release connection to object, created in sp_style_new_from_object()
+ release_connection.disconnect();
+
+ // href->detach() called in fill->clear()...
+ fill_ps_modified_connection.disconnect();
+ if (fill.value.href) {
+ delete fill.value.href;
+ fill.value.href = NULL;
}
- return style;
+ stroke_ps_modified_connection.disconnect();
+ if (stroke.value.href) {
+ delete stroke.value.href;
+ stroke.value.href = NULL;
+ }
+ filter_modified_connection.disconnect();
+ if (filter.href) {
+ delete filter.href;
+ filter.href = NULL;
+ }
+
+ if (document) {
+ filter.href = new SPFilterReference(document);
+ filter.href->changedSignal().connect(sigc::bind(sigc::ptr_fun(sp_style_filter_ref_changed), this));
+
+ fill.value.href = new SPPaintServerReference(document);
+ fill.value.href->changedSignal().connect(sigc::bind(sigc::ptr_fun(sp_style_fill_paint_server_ref_changed), this));
+
+ stroke.value.href = new SPPaintServerReference(document);
+ stroke.value.href->changedSignal().connect(sigc::bind(sigc::ptr_fun(sp_style_stroke_paint_server_ref_changed), this));
+ }
+
+ cloned = false;
+
}
-/**
- * Reads the various style parameters for an object from repr.
- */
-static void
-sp_style_read(SPStyle *style, SPObject *object, Inkscape::XML::Node *repr)
-{
- g_assert(style != NULL);
+// Matches void sp_style_read(SPStyle *style, SPObject *object, Inkscape::XML::Node *repr)
+void
+SPStyle::read( SPObject *object, Inkscape::XML::Node *repr ) {
+
+ // std::cout << "SPstyle::read( SPObject, Inkscape::XML::Node ): Entrance: "
+ // << (object?(object->getId()?object->getId():"id null"):"object null") << " "
+ // << (repr?(repr->name()?repr->name():"no name"):"repr null")
+ // << std::endl;
g_assert(repr != NULL);
g_assert(!object || (object->getRepr() == repr));
- sp_style_clear(style);
+ // // Uncomment to verify that we don't need to call clear.
+ // std::cout << " Creating temp style for testing" << std::endl;
+ // SPStyle *temp = new SPStyle();
+ // if( !(*temp == *this ) ) std::cout << "SPStyle::read: Need to clear" << std::endl;
+ // delete temp;
+
+ clear(); // FIXME, If this isn't here, gradient editing stops working. Why?
if (object && object->cloned) {
- style->cloned = true;
+ cloned = true;
}
/* 1. Style attribute */
+ // std::cout << " MERGING STYLE ATTRIBUTE" << std::endl;
gchar const *val = repr->attribute("style");
- if (val != NULL && *val) {
- sp_style_merge_from_style_string(style, val);
+ if( val != NULL && *val ) {
+ _mergeString( val );
}
+ /* 2 Style sheet */
+ // std::cout << " MERGING OBJECT STYLESHEET" << std::endl;
if (object) {
- sp_style_merge_from_object_stylesheet(style, object);
+ _mergeObjectStylesheet( object );
} else {
- /** \todo No stylesheet information. Find out under what circumstances
- * this occurs, and handle accordingly. (If we really wanted to, we
- * could probably get stylesheets by going through repr->doc.)
- */
+ // std::cerr << "SPStyle::read: No object! Can not read style sheet" << std::endl;
}
- /* 2. Presentation attributes */
- /* Attributes are only read in if not already set in a style sheet or style attribute above. */
-
- /* CSS2 */
- SPS_READ_PENUM_IF_UNSET(&style->visibility, repr, "visibility", enum_visibility, true);
- SPS_READ_PENUM_IF_UNSET(&style->display, repr, "display", enum_display, true);
- SPS_READ_PENUM_IF_UNSET(&style->overflow, repr, "overflow", enum_overflow, true);
-
- /* CSS Compositing and Blending Level 1 */
- SPS_READ_PENUM_IF_UNSET(&style->isolation, repr, "isolation", enum_isolation, true);
- SPS_READ_PENUM_IF_UNSET(&style->blend_mode, repr, "mix_blend_mode", enum_blend_mode, true);
-
- /* Font */
- SPS_READ_PFONTSIZE_IF_UNSET(&style->font_size, repr, "font-size");
- SPS_READ_PENUM_IF_UNSET(&style->font_style, repr, "font-style", enum_font_style, true);
- SPS_READ_PENUM_IF_UNSET(&style->font_variant, repr, "font-variant", enum_font_variant, true);
- SPS_READ_PENUM_IF_UNSET(&style->font_weight, repr, "font-weight", enum_font_weight, true);
- SPS_READ_PENUM_IF_UNSET(&style->font_stretch, repr, "font-stretch", enum_font_stretch, true);
- /* Text (css2 chapter 16) */
- SPS_READ_PLENGTH_IF_UNSET(&style->text_indent, repr, "text-indent");
- SPS_READ_PENUM_IF_UNSET(&style->text_align, repr, "text-align", enum_text_align, true);
- if (!style->text_decoration_line.set) {
- // assume it uses either text-decoration or text-decoration-line, but not both
- if ((val = repr->attribute("text-decoration")) || (val = repr->attribute("text-decoration-line"))) {
- sp_style_read_itextdecoration(&style->text_decoration_line, &style->text_decoration_style, &style->text_decoration_color, val);
- }
- }
- if (!style->line_height.set) {
- val = repr->attribute("line-height");
- if (val) {
- sp_style_read_ilengthornormal(&style->line_height, val);
- }
- }
- if (!style->letter_spacing.set) {
- val = repr->attribute("letter-spacing");
- if (val) {
- sp_style_read_ilengthornormal(&style->letter_spacing, val);
- }
- }
- if (!style->word_spacing.set) {
- val = repr->attribute("word-spacing");
- if (val) {
- sp_style_read_ilengthornormal(&style->word_spacing, val);
- }
- }
- SPS_READ_PENUM_IF_UNSET(&style->text_transform, repr, "text-transform", enum_text_transform, true);
- SPS_READ_PENUM_IF_UNSET(&style->direction, repr, "direction", enum_direction, true);
- SPS_READ_PENUM_IF_UNSET(&style->block_progression, repr, "block_progression", enum_block_progression, true);
-
- /* SVG */
- SPS_READ_PENUM_IF_UNSET(&style->writing_mode, repr, "writing-mode",
- enum_writing_mode, true);
- SPS_READ_PENUM_IF_UNSET(&style->text_anchor, repr, "text-anchor",
- enum_text_anchor, true);
- SPS_READ_PBASELINE_SHIFT_IF_UNSET(&style->baseline_shift, repr, "baseline-shift");
-
- /* opacity */
- if (!style->opacity.set) {
- val = repr->attribute("opacity");
- if (val) {
- sp_style_read_iscale24(&style->opacity, val);
- }
- }
- /* color */
- if (!style->color.set) {
- val = repr->attribute("color");
- if (val) {
- sp_style_read_icolor(&style->color, val, style, ( object
- ? object->document
- : NULL ));
- }
- }
- /* color interpolation */
- SPS_READ_PENUM_IF_UNSET(&style->color_interpolation, repr, "color-interpolation", enum_color_interpolation, true);
- /* color interpolation filters*/
- SPS_READ_PENUM_IF_UNSET(&style->color_interpolation_filters, repr, "color-interpolation-filters", enum_color_interpolation, true);
- /* fill */
- if (!style->fill.set) {
- val = repr->attribute("fill");
- if (val) {
- style->fill.read( val, *style, (object) ? object->document : NULL );
- }
- }
- /* fill-opacity */
- if (!style->fill_opacity.set) {
- val = repr->attribute("fill-opacity");
- if (val) {
- sp_style_read_iscale24(&style->fill_opacity, val);
- }
- }
- /* fill-rule */
- SPS_READ_PENUM_IF_UNSET(&style->fill_rule, repr, "fill-rule", enum_fill_rule, true);
- /* stroke */
- if (!style->stroke.set) {
- val = repr->attribute("stroke");
- if (val) {
- style->stroke.read( val, *style, (object) ? object->document : NULL );
- }
- }
- SPS_READ_PLENGTH_IF_UNSET(&style->stroke_width, repr, "stroke-width");
- SPS_READ_PENUM_IF_UNSET(&style->stroke_linecap, repr, "stroke-linecap", enum_stroke_linecap, true);
- SPS_READ_PENUM_IF_UNSET(&style->stroke_linejoin, repr, "stroke-linejoin", enum_stroke_linejoin, true);
- SPS_READ_PFLOAT_IF_UNSET(&style->stroke_miterlimit, repr, "stroke-miterlimit");
-
- /* markers */
- if (!style->marker[SP_MARKER_LOC].set) {
- val = repr->attribute("marker");
- if (val) {
- sp_style_read_istring(&style->marker[SP_MARKER_LOC], val);
- }
- }
- if (!style->marker[SP_MARKER_LOC_START].set) {
- val = repr->attribute("marker-start");
- if (val) {
- sp_style_read_istring(&style->marker[SP_MARKER_LOC_START], val);
- }
- }
- if (!style->marker[SP_MARKER_LOC_MID].set) {
- val = repr->attribute("marker-mid");
- if (val) {
- sp_style_read_istring(&style->marker[SP_MARKER_LOC_MID], val);
- }
- }
- if (!style->marker[SP_MARKER_LOC_END].set) {
- val = repr->attribute("marker-end");
- if (val) {
- sp_style_read_istring(&style->marker[SP_MARKER_LOC_END], val);
- }
+ /* 3 Presentation attributes */
+ // std::cout << " MERGING PRESENTATION ATTRIBUTES" << std::endl;
+ for(std::vector<SPIBase*>::size_type i = 0; i != _properties.size(); ++i) {
+ _properties[i]->readAttribute( repr );
}
+ // for(SPPropMap::iterator i = _propmap.begin(); i != _propmap.end(); ++i ) {
+ // (this->*(i->second)).readAttribute( repr );
+ // }
- /* stroke-opacity */
- if (!style->stroke_opacity.set) {
- val = repr->attribute("stroke-opacity");
- if (val) {
- sp_style_read_iscale24(&style->stroke_opacity, val);
- }
- }
- if (!style->stroke_dasharray.set) {
- val = repr->attribute("stroke-dasharray");
- if (val) {
- sp_style_read_dash(style, val);
- }
- }
- SPS_READ_PLENGTH_IF_UNSET(&style->stroke_width, repr, "stroke-dashoffset");
-
- /* paint-order */
- if (!style->paint_order.set) {
- val = repr->attribute("paint-order");
- if (val) {
- sp_style_read_ipaintorder(&style->paint_order, val);
- } else {
- style->paint_order.layer[0] = SP_CSS_PAINT_ORDER_NORMAL;
- }
- }
-
- /* -inkscape-font-specification */
- if (!style->text_private || !style->text->font_specification.set) {
- val = repr->attribute("-inkscape-font-specification");
- if (val) {
- if (!style->text_private) sp_style_privatize_text(style);
- gchar *val_unquoted = attribute_unquote(val);
- sp_style_read_istring(&style->text->font_specification, val_unquoted);
- if (val_unquoted) g_free (val_unquoted);
- }
- }
-
- /* font-family */
- if (!style->text_private || !style->text->font_family.set) {
- val = repr->attribute("font-family");
- if (val) {
- if (!style->text_private) sp_style_privatize_text(style);
- gchar *val_unquoted = attribute_unquote(val);
- sp_style_read_istring(&style->text->font_family, val_unquoted);
- if (val_unquoted) g_free (val_unquoted);
- }
- }
-
- /* filter effects */
- if (!style->filter.set) {
- val = repr->attribute("filter");
- if (val) {
- sp_style_read_ifilter(val, style, (object) ? object->document : NULL);
- }
- }
- SPS_READ_PENUM_IF_UNSET(&style->enable_background, repr,
- "enable-background", enum_enable_background, true);
-
- /* clip-rule */
- SPS_READ_PENUM_IF_UNSET(&style->clip_rule, repr, "clip-rule", enum_clip_rule, true);
-
- /* color_rendering, image_rendering, shape_rendering, text_rendering */
- SPS_READ_PENUM_IF_UNSET(&style->color_rendering, repr, "color-rendering", enum_color_rendering, true);
- SPS_READ_PENUM_IF_UNSET(&style->image_rendering, repr, "image-rendering", enum_image_rendering, true);
- SPS_READ_PENUM_IF_UNSET(&style->shape_rendering, repr, "shape-rendering", enum_shape_rendering, true);
- SPS_READ_PENUM_IF_UNSET(&style->text_rendering, repr, "text-rendering", enum_text_rendering, true);
-
- /* 3. Merge from parent */
- if (object) {
- if (object->parent) {
- sp_style_merge_from_parent(style, object->parent->style);
+ /* 4 Cascade from parent */
+ // std::cout << " CASCADING FROM PARENT" << std::endl;
+ if( object ) {
+ if( object->parent ) {
+ cascade( object->parent->style );
}
} else {
- if (repr->parent()) {
- /// \todo fixme: This is not the prettiest thing (Lauris)
- SPStyle *parent = sp_style_new(NULL);
- sp_style_read(parent, NULL, repr->parent());
- sp_style_merge_from_parent(style, parent);
- sp_style_unref(parent);
+ // When does this happen?
+ // std::cout << "SPStyle::read(): reading via repr->parent()" << std::endl;
+ if( repr->parent() ) {
+ SPStyle *parent = new SPStyle();
+ parent->read( NULL, repr->parent() );
+ cascade( parent );
+ delete parent;
}
}
}
-
-/**
- * Read style properties from object's repr.
- *
- * 1. Reset existing object style
- * 2. Load current effective object style
- * 3. Load i attributes from immediate parent (which has to be up-to-date)
- */
+// Matches void sp_style_read_from_object(SPStyle *style, SPObject *object);
void
-sp_style_read_from_object(SPStyle *style, SPObject *object)
-{
- g_return_if_fail(style != NULL);
+SPStyle::readFromObject( SPObject *object ) {
+
+ // std::cout << "SPStyle::readFromObject: "<< (object->getId()?object->getId():"null")<< std::endl;
+
g_return_if_fail(object != NULL);
g_return_if_fail(SP_IS_OBJECT(object));
Inkscape::XML::Node *repr = object->getRepr();
g_return_if_fail(repr != NULL);
- sp_style_read(style, object, repr);
+ read( object, repr );
}
-
-/**
- * Read style properties from preferences.
- * @param style The style to write to
- * @param path Preferences directory from which the style should be read
- */
+// Matches sp_style_merge_property(SPStyle *style, gint id, gchar const *val)
void
-sp_style_read_from_prefs(SPStyle *style, Glib::ustring const &path)
-{
- g_return_if_fail(style != NULL);
- g_return_if_fail(path != "");
-
- Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-
- // not optimal: we reconstruct the node based on the prefs, then pass it to
- // sp_style_read for actual processing.
- Inkscape::XML::SimpleDocument *tempdoc = new Inkscape::XML::SimpleDocument;
- Inkscape::XML::Node *tempnode = tempdoc->createElement("temp");
-
- std::vector<Inkscape::Preferences::Entry> attrs = prefs->getAllEntries(path);
- for (std::vector<Inkscape::Preferences::Entry>::iterator i = attrs.begin(); i != attrs.end(); ++i) {
- tempnode->setAttribute(i->getEntryName().data(), i->getString().data());
- }
-
- sp_style_read(style, NULL, tempnode);
-
- Inkscape::GC::release(tempnode);
- Inkscape::GC::release(tempdoc);
- delete tempdoc;
-}
-
+SPStyle::readIfUnset( gint id, gchar const *val ) {
-
-/**
- *
- */
-static void
-sp_style_privatize_text(SPStyle *style)
-{
- SPTextStyle *text = style->text;
- style->text = sp_text_style_duplicate_unset(style->text);
- sp_text_style_unref(text);
- style->text_private = TRUE;
-}
-
-
-/**
- * Merge property into style.
- *
- * Should be called in order of highest to lowest precedence.
- * E.g. for a single style string, call from the last declaration to the first,
- * as CSS says that later declarations override earlier ones.
- *
- * \pre val != NULL.
- */
-static void
-sp_style_merge_property(SPStyle *style, gint id, gchar const *val)
-{
+ // std::cout << "SPStyle::readIfUnset: Entrance: " << (val?val:"null") << std::endl;
+ // To Do: If it is not too slow, use std::map instead of std::vector inorder to remove switch()
+ // (looking up SP_PROP_xxxx already uses a hash).
g_return_if_fail(val != NULL);
switch (id) {
case SP_PROP_INKSCAPE_FONT_SPEC:
- if (!style->text_private) sp_style_privatize_text(style);
- if (!style->text->font_specification.set) {
- gchar *val_unquoted = attribute_unquote(val);
- sp_style_read_istring(&style->text->font_specification, val_unquoted);
- if (val_unquoted) g_free (val_unquoted);
- }
+ font_specification.readIfUnset( val );
break;
- /* CSS2 */
- /* Font */
case SP_PROP_FONT_FAMILY:
- if (!style->text_private) sp_style_privatize_text(style);
- if (!style->text->font_family.set) {
- gchar *val_unquoted = attribute_unquote(val);
- sp_style_read_istring(&style->text->font_family, val_unquoted);
- if (val_unquoted) g_free (val_unquoted);
- }
+ font_family.readIfUnset( val );
break;
case SP_PROP_FONT_SIZE:
- SPS_READ_IFONTSIZE_IF_UNSET(&style->font_size, val);
+ font_size.readIfUnset( val );
break;
case SP_PROP_FONT_SIZE_ADJUST:
if (strcmp(val, "none") != 0) {
@@ -991,220 +609,71 @@ sp_style_merge_property(SPStyle *style, gint id, gchar const *val)
}
break;
case SP_PROP_FONT_STYLE:
- SPS_READ_IENUM_IF_UNSET(&style->font_style, val, enum_font_style, true);
+ font_style.readIfUnset( val );
break;
case SP_PROP_FONT_VARIANT:
- SPS_READ_IENUM_IF_UNSET(&style->font_variant, val, enum_font_variant, true);
+ font_variant.readIfUnset( val );
break;
case SP_PROP_FONT_WEIGHT:
- SPS_READ_IENUM_IF_UNSET(&style->font_weight, val, enum_font_weight, true);
+ font_weight.readIfUnset( val );
break;
case SP_PROP_FONT_STRETCH:
- SPS_READ_IENUM_IF_UNSET(&style->font_stretch, val, enum_font_stretch, true);
+ font_stretch.readIfUnset( val );
break;
case SP_PROP_FONT:
- if (!style->text_private) sp_style_privatize_text(style);
- if (!style->text->font.set) {
- g_free(style->text->font.value);
- style->text->font.value = g_strdup(val);
- style->text->font.set = TRUE;
- style->text->font.inherit = (val && !strcmp(val, "inherit"));
-
- // Break string into white space separated tokens
- std::stringstream os( val );
- Glib::ustring param;
-
- while (os >> param) {
-
- // CSS is case insensitive but we're comparing against lowercase strings
- Glib::ustring lparam = param.lowercase();
-
- if (lparam == "/") {
-
- os >> param;
- // Eat the line-height for the moment as it is not an SVG property.
- // lparam = param.lowercase();
- // sp_style_read_ilengthornormal(&style->line_height, lparam);
-
- } else {
-
- // Skip if "normal" as that is the default (and we don't know which attribute it applies to).
- if (lparam == "normal") continue;
-
- // Check each property in turn
-
- // font-style
- SPIEnum test_style;
- test_style.set = FALSE;
-
- // Read once to see if param is valid style. If valid, .set will be TRUE.
- sp_style_read_ienum(&test_style, lparam.c_str(), enum_font_style, true);
-
- // If valid style parameter
- if (test_style.set) {
-
- // If not previously set
- if (!style->font_style.set) {
- style->font_style.set = TRUE;
- style->font_style.inherit = test_style.inherit;
- style->font_style.value = test_style.value;
- style->font_style.computed = test_style.computed;
- }
- continue; // Next parameter.
- }
-
- // font-variant (small-caps)
- SPIEnum test_variant;
- test_variant.set = FALSE;
- sp_style_read_ienum(&test_variant, lparam.c_str(), enum_font_variant, true);
-
- // If valid variant parameter
- if (test_variant.set) {
-
- // If not previously set
- if (!style->font_variant.set) {
- style->font_variant.set = TRUE;
- style->font_variant.inherit = test_variant.inherit;
- style->font_variant.value = test_variant.value;
- style->font_variant.computed = test_variant.computed;
- }
- continue; // Next parameter.
- }
-
- // font-weight
- SPIEnum test_weight;
- test_weight.set = FALSE;
- sp_style_read_ienum(&test_weight, lparam.c_str(), enum_font_weight, true);
-
- // If valid weight parameter
- if (test_weight.set) {
-
- // If not previously set
- if (!style->font_weight.set) {
- style->font_weight.set = TRUE;
- style->font_weight.inherit = test_weight.inherit;
- style->font_weight.value = test_weight.value;
- style->font_weight.computed = test_weight.computed;
- }
- continue; // Next parameter
- }
-
- // Font-size
- SPIFontSize test_size;
- test_size.set = FALSE;
-
- // Read once to see if param is valid size.
- sp_style_read_ifontsize( &test_size, lparam.c_str() );
-
- // If valid size parameter
- if (test_size.set) {
-
- // If not previously set
- if (!style->font_size.set) {
- style->font_size.set = TRUE;
- style->font_size.inherit = test_size.inherit;
- style->font_size.unit = test_size.unit;
- style->font_size.value = test_size.value;
- style->font_size.computed = test_size.computed;
- style->font_size.type = test_size.type;
- style->font_size.literal = test_size.literal;
- }
- continue;
- }
-
- // No valid property value found.
- break;
- }
- } // params
-
- // The rest must be font-family...
- std::string val_s = val;
- std::string family = val_s.substr( val_s.find( param ) );
-
- if (!style->text_private) sp_style_privatize_text(style);
- if (!style->text->font_family.set) {
- gchar *val_unquoted = attribute_unquote( family.c_str() );
- sp_style_read_istring(&style->text->font_family, val_unquoted);
- if (val_unquoted) g_free (val_unquoted);
- }
-
- // Set all properties to their default values per CSS 2.1 spec if not already set
- SPS_READ_IFONTSIZE_IF_UNSET(&style->font_size, "medium" );
- SPS_READ_IENUM_IF_UNSET(&style->font_style, "normal", enum_font_style, true);
- SPS_READ_IENUM_IF_UNSET(&style->font_variant, "normal", enum_font_variant, true);
- SPS_READ_IENUM_IF_UNSET(&style->font_weight, "normal", enum_font_weight, true);
- // Line height is not an SVG property but Inkscape uses it for multi-line text.
- // sp_style_read_ilengthornormal(&style->line_height, "normal");
-
- }
-
+ font.readIfUnset( val );
break;
/* Text */
case SP_PROP_TEXT_INDENT:
- SPS_READ_ILENGTH_IF_UNSET(&style->text_indent, val);
+ text_indent.readIfUnset( val );
break;
case SP_PROP_TEXT_ALIGN:
- SPS_READ_IENUM_IF_UNSET(&style->text_align, val, enum_text_align, true);
+ text_align.readIfUnset( val );
break;
case SP_PROP_TEXT_DECORATION:
- if (!style->text_decoration_line.set) {
- sp_style_read_itextdecoration(&style->text_decoration_line, &style->text_decoration_style, &style->text_decoration_color, val);
- }
+ text_decoration.readIfUnset( val );
break;
case SP_PROP_TEXT_DECORATION_LINE:
- if (!style->text_decoration_line.set) {
- sp_style_read_itextdecorationLine(&style->text_decoration_line, val);
- }
+ text_decoration_line.readIfUnset( val );
break;
case SP_PROP_TEXT_DECORATION_STYLE:
- if (!style->text_decoration_style.set) {
- sp_style_read_itextdecorationStyle(&style->text_decoration_style, val);
- }
+ text_decoration_style.readIfUnset( val );
break;
case SP_PROP_TEXT_DECORATION_COLOR:
- if (!style->text_decoration_color.set) {
- sp_style_read_itextdecorationColor(&style->text_decoration_color, val);
- }
+ text_decoration_color.readIfUnset( val );
break;
case SP_PROP_LINE_HEIGHT:
- if (!style->line_height.set) {
- sp_style_read_ilengthornormal(&style->line_height, val);
- }
+ line_height.readIfUnset( val );
break;
case SP_PROP_LETTER_SPACING:
- if (!style->letter_spacing.set) {
- sp_style_read_ilengthornormal(&style->letter_spacing, val);
- }
+ letter_spacing.readIfUnset( val );
break;
case SP_PROP_WORD_SPACING:
- if (!style->word_spacing.set) {
- sp_style_read_ilengthornormal(&style->word_spacing, val);
- }
+ word_spacing.readIfUnset( val );
break;
case SP_PROP_TEXT_TRANSFORM:
- SPS_READ_IENUM_IF_UNSET(&style->text_transform, val, enum_text_transform, true);
+ text_transform.readIfUnset( val );
break;
/* Text (css3) */
case SP_PROP_DIRECTION:
- SPS_READ_IENUM_IF_UNSET(&style->direction, val, enum_direction, true);
+ direction.readIfUnset( val );
break;
case SP_PROP_BLOCK_PROGRESSION:
- SPS_READ_IENUM_IF_UNSET(&style->block_progression, val, enum_block_progression, true);
+ block_progression.readIfUnset( val );
break;
case SP_PROP_WRITING_MODE:
- SPS_READ_IENUM_IF_UNSET(&style->writing_mode, val, enum_writing_mode, true);
+ writing_mode.readIfUnset( val );
break;
case SP_PROP_TEXT_ANCHOR:
- SPS_READ_IENUM_IF_UNSET(&style->text_anchor, val, enum_text_anchor, true);
+ text_anchor.readIfUnset( val );
break;
case SP_PROP_BASELINE_SHIFT:
- SPS_READ_IBASELINE_SHIFT_IF_UNSET(&style->baseline_shift, val);
+ baseline_shift.readIfUnset( val );
break;
- case SP_PROP_TEXT_RENDERING: {
- SPS_READ_IENUM_IF_UNSET(&style->text_rendering, val, enum_text_rendering, true);
+ case SP_PROP_TEXT_RENDERING:
+ text_rendering.readIfUnset( val );
break;
- }
case SP_PROP_ALIGNMENT_BASELINE:
g_warning("Unimplemented style property SP_PROP_ALIGNMENT_BASELINE: value: %s", val);
break;
@@ -1225,31 +694,25 @@ sp_style_merge_property(SPStyle *style, gint id, gchar const *val)
g_warning("Unimplemented style property SP_PROP_CLIP: value: %s", val);
break;
case SP_PROP_COLOR:
- if (!style->color.set) {
- sp_style_read_icolor(&style->color, val, style, (style->object) ? style->object->document : NULL);
- }
+ color.readIfUnset( val );
break;
case SP_PROP_CURSOR:
g_warning("Unimplemented style property SP_PROP_CURSOR: value: %s", val);
break;
case SP_PROP_DISPLAY:
- SPS_READ_IENUM_IF_UNSET(&style->display, val, enum_display, true);
+ display.readIfUnset( val );
break;
case SP_PROP_OVERFLOW:
- /** \todo
- * FIXME: not supported properly yet, we just read and write it,
- * but act as if it is always "display".
- */
- SPS_READ_IENUM_IF_UNSET(&style->overflow, val, enum_overflow, true);
+ overflow.readIfUnset( val );
break;
case SP_PROP_VISIBILITY:
- SPS_READ_IENUM_IF_UNSET(&style->visibility, val, enum_visibility, true);
+ visibility.readIfUnset( val );
break;
case SP_PROP_ISOLATION:
- SPS_READ_IENUM_IF_UNSET(&style->isolation, val, enum_isolation, true);
+ isolation.readIfUnset( val );
break;
case SP_PROP_BLEND_MODE:
- SPS_READ_IENUM_IF_UNSET(&style->blend_mode, val, enum_blend_mode, true);
+ blend_mode.readIfUnset( val );
break;
/* SVG */
@@ -1264,12 +727,10 @@ sp_style_merge_property(SPStyle *style, gint id, gchar const *val)
g_warning("attribute 'clip-path' given as CSS");
//XML Tree being directly used here.
- style->object->getRepr()->setAttribute("clip-path", val);
+ this->object->getRepr()->setAttribute("clip-path", val);
break;
case SP_PROP_CLIP_RULE:
- if (!style->clip_rule.set) {
- sp_style_read_ienum(&style->clip_rule, val, enum_clip_rule, true);
- }
+ clip_rule.readIfUnset( val );
break;
case SP_PROP_MASK:
/** \todo
@@ -1278,22 +739,17 @@ sp_style_merge_property(SPStyle *style, gint id, gchar const *val)
g_warning("attribute 'mask' given as CSS");
//XML Tree being directly used here.
- style->object->getRepr()->setAttribute("mask", val);
+ this->object->getRepr()->setAttribute("mask", val);
break;
case SP_PROP_OPACITY:
- if (!style->opacity.set) {
- sp_style_read_iscale24(&style->opacity, val);
- }
+ opacity.readIfUnset( val );
break;
case SP_PROP_ENABLE_BACKGROUND:
- SPS_READ_IENUM_IF_UNSET(&style->enable_background, val,
- enum_enable_background, true);
+ enable_background.readIfUnset( val );
break;
/* Filter */
case SP_PROP_FILTER:
- if (!style->filter.set && !style->filter.inherit) {
- sp_style_read_ifilter(val, style, (style->object) ? style->object->document : NULL);
- }
+ if( !filter.inherit ) filter.readIfUnset( val );
break;
case SP_PROP_FLOOD_COLOR:
g_warning("Unimplemented style property SP_PROP_FLOOD_COLOR: value: %s", val);
@@ -1318,139 +774,186 @@ sp_style_merge_property(SPStyle *style, gint id, gchar const *val)
/* Paint */
case SP_PROP_COLOR_INTERPOLATION:
// We read it but issue warning
- SPS_READ_IENUM_IF_UNSET(&style->color_interpolation, val, enum_color_interpolation, true);
- if( style->color_interpolation.value != SP_CSS_COLOR_INTERPOLATION_SRGB ) {
+ color_interpolation.readIfUnset( val );
+ if( color_interpolation.value != SP_CSS_COLOR_INTERPOLATION_SRGB ) {
g_warning("Inkscape currently only supports color-interpolation = sRGB");
}
break;
case SP_PROP_COLOR_INTERPOLATION_FILTERS:
- SPS_READ_IENUM_IF_UNSET(&style->color_interpolation_filters, val, enum_color_interpolation, true);
+ color_interpolation_filters.readIfUnset( val );
break;
case SP_PROP_COLOR_PROFILE:
g_warning("Unimplemented style property SP_PROP_COLOR_PROFILE: value: %s", val);
break;
- case SP_PROP_COLOR_RENDERING: {
- SPS_READ_IENUM_IF_UNSET(&style->color_rendering, val, enum_color_rendering, true);
+ case SP_PROP_COLOR_RENDERING:
+ color_rendering.readIfUnset( val );
break;
- }
case SP_PROP_FILL:
- if (!style->fill.set) {
- style->fill.read( val, *style, (style->object) ? style->object->document : NULL );
- }
+ fill.readIfUnset( val );
break;
case SP_PROP_FILL_OPACITY:
- if (!style->fill_opacity.set) {
- sp_style_read_iscale24(&style->fill_opacity, val);
- }
+ fill_opacity.readIfUnset( val );
break;
case SP_PROP_FILL_RULE:
- if (!style->fill_rule.set) {
- sp_style_read_ienum(&style->fill_rule, val, enum_fill_rule, true);
- }
+ fill_rule.readIfUnset( val );
break;
- case SP_PROP_IMAGE_RENDERING: {
- SPS_READ_IENUM_IF_UNSET(&style->image_rendering, val, enum_image_rendering, true);
+ case SP_PROP_IMAGE_RENDERING:
+ image_rendering.readIfUnset( val );
break;
- }
case SP_PROP_MARKER:
- /* TODO: Call sp_uri_reference_resolve(SPDocument *document, guchar const *uri) */
- /* style->marker[SP_MARKER_LOC] = g_quark_from_string(val); */
- if (!style->marker[SP_MARKER_LOC].set) {
- g_free(style->marker[SP_MARKER_LOC].value);
- style->marker[SP_MARKER_LOC].value = g_strdup(val);
- style->marker[SP_MARKER_LOC].set = TRUE;
- style->marker[SP_MARKER_LOC].inherit = (val && !strcmp(val, "inherit"));
- }
+ /* TODO: Call sp_uri_reference_resolve(SPDocument *document, guchar const *uri) */
+ marker.readIfUnset( val );
break;
-
case SP_PROP_MARKER_START:
/* TODO: Call sp_uri_reference_resolve(SPDocument *document, guchar const *uri) */
- if (!style->marker[SP_MARKER_LOC_START].set) {
- g_free(style->marker[SP_MARKER_LOC_START].value);
- style->marker[SP_MARKER_LOC_START].value = g_strdup(val);
- style->marker[SP_MARKER_LOC_START].set = TRUE;
- style->marker[SP_MARKER_LOC_START].inherit = (val && !strcmp(val, "inherit"));
- }
+ marker_start.readIfUnset( val );
break;
case SP_PROP_MARKER_MID:
/* TODO: Call sp_uri_reference_resolve(SPDocument *document, guchar const *uri) */
- if (!style->marker[SP_MARKER_LOC_MID].set) {
- g_free(style->marker[SP_MARKER_LOC_MID].value);
- style->marker[SP_MARKER_LOC_MID].value = g_strdup(val);
- style->marker[SP_MARKER_LOC_MID].set = TRUE;
- style->marker[SP_MARKER_LOC_MID].inherit = (val && !strcmp(val, "inherit"));
- }
+ marker_mid.readIfUnset( val );
break;
case SP_PROP_MARKER_END:
/* TODO: Call sp_uri_reference_resolve(SPDocument *document, guchar const *uri) */
- if (!style->marker[SP_MARKER_LOC_END].set) {
- g_free(style->marker[SP_MARKER_LOC_END].value);
- style->marker[SP_MARKER_LOC_END].value = g_strdup(val);
- style->marker[SP_MARKER_LOC_END].set = TRUE;
- style->marker[SP_MARKER_LOC_END].inherit = (val && !strcmp(val, "inherit"));
- }
+ marker_end.readIfUnset( val );
break;
-
- case SP_PROP_SHAPE_RENDERING: {
- SPS_READ_IENUM_IF_UNSET(&style->shape_rendering, val, enum_shape_rendering, true);
+ case SP_PROP_SHAPE_RENDERING:
+ shape_rendering.readIfUnset( val );
break;
- }
-
case SP_PROP_STROKE:
- if (!style->stroke.set) {
- style->stroke.read( val, *style, (style->object) ? style->object->document : NULL );
- }
+ stroke.readIfUnset( val );
break;
case SP_PROP_STROKE_WIDTH:
- SPS_READ_ILENGTH_IF_UNSET(&style->stroke_width, val);
+ stroke_width.readIfUnset( val );
break;
case SP_PROP_STROKE_DASHARRAY:
- if (!style->stroke_dasharray.set) {
- sp_style_read_dash(style, val);
- }
+ stroke_dasharray.readIfUnset( val );
break;
case SP_PROP_STROKE_DASHOFFSET:
- SPS_READ_ILENGTH_IF_UNSET(&style->stroke_dashoffset, val);
+ stroke_dashoffset.readIfUnset( val );
break;
case SP_PROP_STROKE_LINECAP:
- if (!style->stroke_linecap.set) {
- sp_style_read_ienum(&style->stroke_linecap, val, enum_stroke_linecap, true);
- }
+ stroke_linecap.readIfUnset( val );
break;
case SP_PROP_STROKE_LINEJOIN:
- if (!style->stroke_linejoin.set) {
- sp_style_read_ienum(&style->stroke_linejoin, val, enum_stroke_linejoin, true);
- }
+ stroke_linejoin.readIfUnset( val );
break;
case SP_PROP_STROKE_MITERLIMIT:
- if (!style->stroke_miterlimit.set) {
- sp_style_read_ifloat(&style->stroke_miterlimit, val);
- }
+ stroke_miterlimit.readIfUnset( val );
break;
case SP_PROP_STROKE_OPACITY:
- if (!style->stroke_opacity.set) {
- sp_style_read_iscale24(&style->stroke_opacity, val);
- }
+ stroke_opacity.readIfUnset( val );
break;
case SP_PROP_PAINT_ORDER:
- if (!style->paint_order.set) {
- sp_style_read_ipaintorder(&style->paint_order, val);
- }
+ paint_order.readIfUnset( val );
break;
-
default:
- g_warning("Invalid style property id: %d value: %s", id, val);
+ g_warning("SPIStyle::readIfUnset(): Invalid style property id: %d value: %s", id, val);
break;
}
}
-static void
-sp_style_merge_style_from_decl(SPStyle *const style, CRDeclaration const *const decl)
-{
- /** \todo Ensure that property is lcased, as per
- * http://www.w3.org/TR/REC-CSS2/syndata.html#q4.
- * Should probably be done in libcroco.
- */
+Glib::ustring
+SPStyle::write( guint const flags, SPStyle const *const base ) const {
+
+ // std::cout << "SPStyle::write" << std::endl;
+
+ Glib::ustring style_string;
+ for(std::vector<SPIBase*>::size_type i = 0; i != _properties.size(); ++i) {
+ if( base != NULL ) {
+ style_string += _properties[i]->write( flags, base->_properties[i] );
+ } else {
+ style_string += _properties[i]->write( flags, NULL );
+ }
+ }
+ // for(SPPropMap::iterator i = _propmap.begin(); i != _propmap.end(); ++i ) {
+ // if( base != NULL ) {
+ // style_string += (this->*(i->second)).write( flags, &(base->*(i->second)) );
+ // } else {
+ // style_string += (this->*(i->second)).write( flags, NULL );
+ // }
+ // }
+
+ // Remove trailing ';'
+ if( style_string.size() > 0 ) {
+ style_string.erase( style_string.size() - 1 );
+ }
+ return style_string;
+}
+
+// Corresponds to sp_style_merge_from_parent()
+void
+SPStyle::cascade( SPStyle const *const parent ) {
+ // std::cout << "SPStyle::cascade" << std::endl;
+ for(std::vector<SPIBase*>::size_type i = 0; i != _properties.size(); ++i) {
+ _properties[i]->cascade( parent->_properties[i] );
+ }
+ // for(SPPropMap::iterator i = _propmap.begin(); i != _propmap.end(); ++i ) {
+ // (this->*(i->second)).cascade( &(parent->*(i->second)) );
+ // }
+}
+
+// Corresponds to sp_style_merge_from_dying_parent()
+void
+SPStyle::merge( SPStyle const *const parent ) {
+ // std::cout << "SPStyle::merge" << std::endl;
+ for(std::vector<SPIBase*>::size_type i = 0; i != _properties.size(); ++i) {
+ _properties[i]->merge( parent->_properties[i] );
+ }
+ // for(SPPropMap::iterator i = _propmap.begin(); i != _propmap.end(); ++i ) {
+ // (this->*(i->second)).cascade( &(parent->*(i->second)) );
+ // }
+}
+
+// Mostly for unit testing
+bool
+SPStyle::operator==(const SPStyle& rhs) {
+
+ // Uncomment for testing
+ // for(std::vector<SPIBase*>::size_type i = 0; i != _properties.size(); ++i) {
+ // if( *_properties[i] != *rhs._properties[i])
+ // std::cout << _properties[i]->name << ": "
+ // << _properties[i]->write(SP_STYLE_FLAG_ALWAYS,NULL) << " "
+ // << rhs._properties[i]->write(SP_STYLE_FLAG_ALWAYS,NULL)
+ // << (*_properties[i] == *rhs._properties[i]) << std::endl;
+ // }
+
+ for(std::vector<SPIBase*>::size_type i = 0; i != _properties.size(); ++i) {
+ if( *_properties[i] != *rhs._properties[i]) return false;
+ }
+ return true;
+}
+
+void
+SPStyle::_mergeString( gchar const *const p ) {
+
+ // std::cout << "SPStyle::_mergeString: " << (p?p:"null") << std::endl;
+ CRDeclaration *const decl_list
+ = cr_declaration_parse_list_from_buf(reinterpret_cast<guchar const *>(p), CR_UTF_8);
+ if (decl_list) {
+ _mergeDeclList( decl_list );
+ cr_declaration_destroy(decl_list);
+ }
+}
+
+void
+SPStyle::_mergeDeclList( CRDeclaration const *const decl_list ) {
+
+ // std::cout << "SPStyle::_mergeDeclList" << std::endl;
+
+ // In reverse order, as later declarations to take precedence over earlier ones.
+ // (Properties are only set if not previously set. See:
+ // Ref: http://www.w3.org/TR/REC-CSS2/cascade.html#cascading-order point 4.)
+ if (decl_list->next) {
+ _mergeDeclList( decl_list->next );
+ }
+ _mergeDecl( decl_list );
+}
+
+void
+SPStyle::_mergeDecl( CRDeclaration const *const decl ) {
+
+ // std::cout << "SPStyle::_mergeDecl" << std::endl;
+
unsigned const prop_idx = sp_attribute_lookup(decl->property->stryng->str);
if (prop_idx != SP_ATTR_INVALID) {
/** \todo
@@ -1460,71 +963,30 @@ sp_style_merge_style_from_decl(SPStyle *const style, CRDeclaration const *const
*/
guchar *const str_value_unsigned = cr_term_to_string(decl->value);
gchar *const str_value = reinterpret_cast<gchar *>(str_value_unsigned);
- sp_style_merge_property(style, prop_idx, str_value);
+ readIfUnset( prop_idx, str_value );
g_free(str_value);
}
}
-static void
-sp_style_merge_from_props(SPStyle *const style, CRPropList *const props)
-{
-#if 0 /* forwards */
- for (CRPropList const *cur = props; cur; cur = cr_prop_list_get_next(cur)) {
- CRDeclaration *decl = NULL;
- cr_prop_list_get_decl(cur, &decl);
- sp_style_merge_style_from_decl(style, decl);
- }
-#else /* in reverse order, as we need later declarations to take precedence over earlier ones. */
+void
+SPStyle::_mergeProps( CRPropList *const props ) {
+
+ // std::cout << "SPStyle::_mergeProps" << std::endl;
+
+ // In reverse order, as later declarations to take precedence over earlier ones.
if (props) {
- sp_style_merge_from_props(style, cr_prop_list_get_next(props));
+ _mergeProps( cr_prop_list_get_next( props ) );
CRDeclaration *decl = NULL;
cr_prop_list_get_decl(props, &decl);
- sp_style_merge_style_from_decl(style, decl);
+ _mergeDecl( decl );
}
-#endif
-}
-
-/**
- * \pre decl_list != NULL
- */
-static void
-sp_style_merge_from_decl_list(SPStyle *const style, CRDeclaration const *const decl_list)
-{
- // read the decls from end to start, using head recursion, so that latter declarations override
- // (Ref: http://www.w3.org/TR/REC-CSS2/cascade.html#cascading-order point 4.)
- // because sp_style_merge_style_from_decl only sets properties that are unset
- if (decl_list->next) {
- sp_style_merge_from_decl_list(style, decl_list->next);
- }
- sp_style_merge_style_from_decl(style, decl_list);
}
-static CRSelEng *
-sp_repr_sel_eng()
-{
- CRSelEng *const ret = cr_sel_eng_new();
- cr_sel_eng_set_node_iface(ret, &Inkscape::XML::croco_node_iface);
-
- /** \todo
- * Check whether we need to register any pseudo-class handlers.
- * libcroco has its own default handlers for first-child and lang.
- *
- * We probably want handlers for link and arguably visited (though
- * inkscape can't visit links at the time of writing). hover etc.
- * more useful in inkview than the editor inkscape.
- *
- * http://www.w3.org/TR/SVG11/styling.html#StylingWithCSS says that
- * the following should be honoured, at least by inkview:
- * :hover, :active, :focus, :visited, :link.
- */
+void
+SPStyle::_mergeObjectStylesheet( SPObject const *const object ) {
- g_assert(ret);
- return ret;
-}
+ // std::cout << "SPStyle::_mergeObjectStylesheet: " << (object->getId()?object->getId():"null") << std::endl;
-static void
-sp_style_merge_from_object_stylesheet(SPStyle *const style, SPObject const *const object)
-{
static CRSelEng *sel_eng = NULL;
if (!sel_eng) {
sel_eng = sp_repr_sel_eng();
@@ -1540,586 +1002,319 @@ sp_style_merge_from_object_stylesheet(SPStyle *const style, SPObject const *cons
g_return_if_fail(status == CR_OK);
/// \todo Check what errors can occur, and handle them properly.
if (props) {
- sp_style_merge_from_props(style, props);
+ _mergeProps(props);
cr_prop_list_destroy(props);
}
}
+// Internal
/**
- * Parses a style="..." string and merges it with an existing SPStyle.
+ * Release callback.
*/
-void
-sp_style_merge_from_style_string(SPStyle *const style, gchar const *const p)
-{
- /*
- * Reference: http://www.w3.org/TR/SVG11/styling.html#StyleAttribute:
- * ``When CSS styling is used, CSS inline style is specified by including
- * semicolon-separated property declarations of the form "name : value"
- * within the style attribute''.
- *
- * That's fairly ambiguous. Is a `value' allowed to contain semicolons?
- * Why does it say "including", what else is allowed in the style
- * attribute value?
- */
-
- CRDeclaration *const decl_list
- = cr_declaration_parse_list_from_buf(reinterpret_cast<guchar const *>(p), CR_UTF_8);
- if (decl_list) {
- sp_style_merge_from_decl_list(style, decl_list);
- cr_declaration_destroy(decl_list);
- }
-}
-
-/** Indexed by SP_CSS_FONT_SIZE_blah. */
-static float const font_size_table[] = {6.0, 8.0, 10.0, 12.0, 14.0, 18.0, 24.0};
-
static void
-sp_style_merge_font_size_from_parent(SPIFontSize &child, SPIFontSize const &parent)
+sp_style_object_release(SPObject *object, SPStyle *style)
{
- /* 'font-size' */
- if (!child.set || child.inherit) {
- /* Inherit the computed value. Reference: http://www.w3.org/TR/SVG11/styling.html#Inheritance */
- child.computed = parent.computed;
- } else if (child.type == SP_FONT_SIZE_LITERAL) {
- /** \todo
- * fixme: SVG and CSS do not specify clearly, whether we should use
- * user or screen coordinates (Lauris)
- */
- if (child.literal < SP_CSS_FONT_SIZE_SMALLER) {
- child.computed = font_size_table[child.literal];
- } else if (child.literal == SP_CSS_FONT_SIZE_SMALLER) {
- child.computed = parent.computed / 1.2;
- } else if (child.literal == SP_CSS_FONT_SIZE_LARGER) {
- child.computed = parent.computed * 1.2;
- } else {
- /* Illegal value */
- }
- } else if (child.type == SP_FONT_SIZE_PERCENTAGE) {
- /* Unlike most other lengths, percentage for font size is relative to parent computed value
- * rather than viewport. */
- child.computed = parent.computed * child.value;
- } else if (child.type == SP_FONT_SIZE_LENGTH) {
- switch (child.unit) {
- case SP_CSS_UNIT_EM:
- /* Relative to parent font size */
- child.computed = parent.computed * child.value;
- break;
- case SP_CSS_UNIT_EX:
- /* Relative to parent font size */
- child.computed = parent.computed * child.value * 0.5; /* Hack */
- break;
- default:
- /* No change */
- break;
- }
- }
+ (void)object; // TODO
+ style->object = NULL;
}
-// Some shifts are defined relative to parent.
+// Internal
+/**
+ * Emit style modified signal on style's object if the filter changed.
+ */
static void
-sp_style_merge_baseline_shift_from_parent(SPIBaselineShift &child, SPIBaselineShift const &parent,
- SPIFontSize const &pfont_size)
+sp_style_filter_ref_modified(SPObject *obj, guint flags, SPStyle *style)
{
- /* 'baseline-shift' */
- if (!child.set || child.inherit) {
- /* Inherit the computed value. Reference: http://www.w3.org/TR/SVG11/styling.html#Inheritance */
- child.computed = parent.computed; // Does this make sense (applying a shift a second time)?
- } else if (child.type == SP_BASELINE_SHIFT_LITERAL) {
- if( child.literal == SP_CSS_BASELINE_SHIFT_BASELINE ) {
- child.computed = 0; // No change
- } else if (child.literal == SP_CSS_BASELINE_SHIFT_SUB ) {
- // Should use subscript position from font relative to alphabetic baseline
- // OpenOffice, Adobe: -0.33, Word -0.14, LaTex about -0.2.
- child.computed = -0.2 * pfont_size.computed;
- } else if (child.literal == SP_CSS_BASELINE_SHIFT_SUPER ) {
- // Should use superscript position from font relative to alphabetic baseline
- // OpenOffice, Adobe: 0.33, Word 0.35, LaTex about 0.45.
- child.computed = 0.4 * pfont_size.computed;
- } else {
- /* Illegal value */
- }
- } else if (child.type == SP_BASELINE_SHIFT_PERCENTAGE) {
- // Percentage for baseline shift is relative to computed "line-height"
- // which is just font-size (see SVG1.1 'font').
- child.computed = pfont_size.computed * child.value;
- } else if (child.type == SP_BASELINE_SHIFT_LENGTH) {
- switch (child.unit) {
- case SP_CSS_UNIT_EM:
- child.computed = child.value * pfont_size.computed;
- break;
- case SP_CSS_UNIT_EX:
- child.computed = child.value * 0.5 * pfont_size.computed;
- break;
- default:
- /* No change */
- break;
+ (void)flags; // TODO
+ SPFilter *filter=static_cast<SPFilter *>(obj);
+ if (style->getFilter() == filter)
+ {
+ if (style->object) {
+ style->object->requestModified(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG);
}
}
- // baseline-shifts are relative to parent baseline
- child.computed += parent.computed;
}
+// Internal
/**
- * Sets computed values in \a style, which may involve inheriting from (or in some other way
- * calculating from) corresponding computed values of \a parent.
- *
- * References: http://www.w3.org/TR/SVG11/propidx.html shows what properties inherit by default.
- * http://www.w3.org/TR/SVG11/styling.html#Inheritance gives general rules as to what it means to
- * inherit a value. http://www.w3.org/TR/REC-CSS2/cascade.html#computed-value is more precise
- * about what the computed value is (not obvious for lengths).
- *
- * \pre \a parent's computed values are already up-to-date.
+ * Gets called when the filter is (re)attached to the style
*/
void
-sp_style_merge_from_parent(SPStyle *const style, SPStyle const *const parent)
+sp_style_filter_ref_changed(SPObject *old_ref, SPObject *ref, SPStyle *style)
{
- g_return_if_fail(style != NULL);
-
- /** \todo
- * fixme: Check for existing callers that might pass null parent.
- * This should probably be g_return_if_fail, or else we should make a
- * best attempt to set computed values correctly without having a parent
- * (i.e., by assuming parent has initial values).
- */
- if (!parent)
- return;
-
- /* CSS2 */
- /* Font */
- sp_style_merge_font_size_from_parent(style->font_size, parent->font_size);
-
- /* 'font-style' */
- if (!style->font_style.set || style->font_style.inherit) {
- style->font_style.computed = parent->font_style.computed;
- }
-
- /* 'font-variant' */
- if (!style->font_variant.set || style->font_variant.inherit) {
- style->font_variant.computed = parent->font_variant.computed;
- }
-
- /* 'font-weight' */
- if (!style->font_weight.set || style->font_weight.inherit) {
- style->font_weight.computed = parent->font_weight.computed;
- } else if (style->font_weight.value == SP_CSS_FONT_WEIGHT_NORMAL) {
- /** \todo
- * fixme: This is unconditional, i.e., happens even if parent not
- * present.
- */
- style->font_weight.computed = SP_CSS_FONT_WEIGHT_400;
- } else if (style->font_weight.value == SP_CSS_FONT_WEIGHT_BOLD) {
- style->font_weight.computed = SP_CSS_FONT_WEIGHT_700;
- } else if (style->font_weight.value == SP_CSS_FONT_WEIGHT_LIGHTER) {
- unsigned const parent_val = parent->font_weight.computed;
- g_assert(SP_CSS_FONT_WEIGHT_100 == 0);
- // strictly, 'bolder' and 'lighter' should go to the next weight
- // expressible in the current font family, but that's difficult to
- // find out, so jumping by 3 seems an appropriate approximation
- style->font_weight.computed = (parent_val <= SP_CSS_FONT_WEIGHT_100 + 3
- ? (unsigned)SP_CSS_FONT_WEIGHT_100
- : parent_val - 3);
- g_assert(style->font_weight.computed <= (unsigned) SP_CSS_FONT_WEIGHT_900);
- } else if (style->font_weight.value == SP_CSS_FONT_WEIGHT_BOLDER) {
- unsigned const parent_val = parent->font_weight.computed;
- g_assert(parent_val <= SP_CSS_FONT_WEIGHT_900);
- style->font_weight.computed = (parent_val >= SP_CSS_FONT_WEIGHT_900 - 3
- ? (unsigned)SP_CSS_FONT_WEIGHT_900
- : parent_val + 3);
- g_assert(style->font_weight.computed <= (unsigned) SP_CSS_FONT_WEIGHT_900);
- }
-
- /* 'font-stretch' */
- if (!style->font_stretch.set || style->font_stretch.inherit) {
- style->font_stretch.computed = parent->font_stretch.computed;
- } else if (style->font_stretch.value == SP_CSS_FONT_STRETCH_NARROWER) {
- unsigned const parent_val = parent->font_stretch.computed;
- style->font_stretch.computed = (parent_val == SP_CSS_FONT_STRETCH_ULTRA_CONDENSED
- ? parent_val
- : parent_val - 1);
- g_assert(style->font_stretch.computed <= (unsigned) SP_CSS_FONT_STRETCH_ULTRA_EXPANDED);
- } else if (style->font_stretch.value == SP_CSS_FONT_STRETCH_WIDER) {
- unsigned const parent_val = parent->font_stretch.computed;
- g_assert(parent_val <= SP_CSS_FONT_STRETCH_ULTRA_EXPANDED);
- style->font_stretch.computed = (parent_val == SP_CSS_FONT_STRETCH_ULTRA_EXPANDED
- ? parent_val
- : parent_val + 1);
- g_assert(style->font_stretch.computed <= (unsigned) SP_CSS_FONT_STRETCH_ULTRA_EXPANDED);
- }
-
- /* text (css2) */
- if (!style->text_indent.set || style->text_indent.inherit) {
- style->text_indent.computed = parent->text_indent.computed;
- }
-
- if (!style->text_align.set || style->text_align.inherit) {
- style->text_align.computed = parent->text_align.computed;
- }
-
- if (!style->text_decoration_line.set || style->text_decoration_line.inherit) {
- style->text_decoration_line.underline = parent->text_decoration_line.underline;
- style->text_decoration_line.overline = parent->text_decoration_line.overline;
- style->text_decoration_line.line_through = parent->text_decoration_line.line_through;
- style->text_decoration_line.blink = parent->text_decoration_line.blink;
- }
-
- if (!style->text_decoration_style.set || style->text_decoration_style.inherit) {
- style->text_decoration_style.solid = parent->text_decoration_style.solid;
- style->text_decoration_style.isdouble = parent->text_decoration_style.isdouble;
- style->text_decoration_style.dotted = parent->text_decoration_style.dotted;
- style->text_decoration_style.dashed = parent->text_decoration_style.dashed;
- style->text_decoration_style.wavy = parent->text_decoration_style.wavy;
+ if (old_ref) {
+ style->filter_modified_connection.disconnect();
}
-
- if (!style->text_decoration_color.set || style->text_decoration_color.inherit) {
- sp_style_merge_ipaint(style, &style->text_decoration_color, &parent->text_decoration_color);
+ if ( SP_IS_FILTER(ref))
+ {
+ style->filter_modified_connection =
+ ref->connectModified(sigc::bind(sigc::ptr_fun(&sp_style_filter_ref_modified), style));
}
- if (!style->line_height.set || style->line_height.inherit) {
- style->line_height.value = parent->line_height.value;
- style->line_height.computed = parent->line_height.computed;
- style->line_height.normal = parent->line_height.normal;
- }
+ sp_style_filter_ref_modified(ref, 0, style);
+}
- if (!style->letter_spacing.set || style->letter_spacing.inherit) {
- style->letter_spacing.value = parent->letter_spacing.value;
- style->letter_spacing.computed = parent->letter_spacing.computed;
- style->letter_spacing.normal = parent->letter_spacing.normal;
- }
+/**
+ * Emit style modified signal on style's object if server is style's fill
+ * or stroke paint server.
+ */
+static void
+sp_style_paint_server_ref_modified(SPObject *obj, guint flags, SPStyle *style)
+{
+ (void)flags; // TODO
+ SPPaintServer *server = static_cast<SPPaintServer *>(obj);
- if (!style->word_spacing.set || style->word_spacing.inherit) {
- style->word_spacing.value = parent->word_spacing.value;
- style->word_spacing.computed = parent->word_spacing.computed;
- style->word_spacing.normal = parent->word_spacing.normal;
+ if ((style->fill.isPaintserver())
+ && style->getFillPaintServer() == server)
+ {
+ if (style->object) {
+ /** \todo
+ * fixme: I do not know, whether it is optimal - we are
+ * forcing reread of everything (Lauris)
+ */
+ /** \todo
+ * fixme: We have to use object_modified flag, because parent
+ * flag is only available downstreams.
+ */
+ style->object->requestModified(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG);
+ }
+ } else if ((style->stroke.isPaintserver())
+ && style->getStrokePaintServer() == server)
+ {
+ if (style->object) {
+ /// \todo fixme:
+ style->object->requestModified(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG);
+ }
+ } else if (server) {
+ g_assert_not_reached();
}
+}
- if (!style->text_transform.set || style->text_transform.inherit) {
- style->text_transform.computed = parent->text_transform.computed;
+/**
+ * Gets called when the paintserver is (re)attached to the style
+ */
+void
+sp_style_fill_paint_server_ref_changed(SPObject *old_ref, SPObject *ref, SPStyle *style)
+{
+ if (old_ref) {
+ style->fill_ps_modified_connection.disconnect();
}
-
- if (!style->direction.set || style->direction.inherit) {
- style->direction.computed = parent->direction.computed;
+ if (SP_IS_PAINT_SERVER(ref)) {
+ style->fill_ps_modified_connection =
+ ref->connectModified(sigc::bind(sigc::ptr_fun(&sp_style_paint_server_ref_modified), style));
}
- if (!style->block_progression.set || style->block_progression.inherit) {
- style->block_progression.computed = parent->block_progression.computed;
- }
+ sp_style_paint_server_ref_modified(ref, 0, style);
+}
- if (!style->writing_mode.set || style->writing_mode.inherit) {
- style->writing_mode.computed = parent->writing_mode.computed;
+/**
+ * Gets called when the paintserver is (re)attached to the style
+ */
+void
+sp_style_stroke_paint_server_ref_changed(SPObject *old_ref, SPObject *ref, SPStyle *style)
+{
+ if (old_ref) {
+ style->stroke_ps_modified_connection.disconnect();
}
-
- if (!style->text_anchor.set || style->text_anchor.inherit) {
- style->text_anchor.computed = parent->text_anchor.computed;
+ if (SP_IS_PAINT_SERVER(ref)) {
+ style->stroke_ps_modified_connection =
+ ref->connectModified(sigc::bind(sigc::ptr_fun(&sp_style_paint_server_ref_modified), style));
}
- /* Baseline Shift... Some shifts are relative to parent. */
- sp_style_merge_baseline_shift_from_parent(style->baseline_shift, parent->baseline_shift,
- parent->font_size);
+ sp_style_paint_server_ref_modified(ref, 0, style);
+}
- if (style->opacity.inherit) {
- style->opacity.value = parent->opacity.value;
- }
+// Called in: desktop-style.cpp, gradient-chemistry.cpp, sp-object.cpp, sp-stop.cpp, style.cpp
+// text-editing.cpp, libnrtype/font-lister.cpp, widgets/dash-selector.cpp, widgets/fill-style.cpp,
+// widgets/stroke-style.cpp, widgets/text-toolbar.cpp, ui/dialog/glyphs.cpp, ui/dialog/swatches.cpp,
+// ui/dialog/swatches.cpp, ui/dialog/text-edit.cpp. ui/tools/freehand-base.cpp,
+// ui/widget/object-composite-settings.cpp, ui/widget/selected-style.cpp, ui/widget/style-swatch.cpp
+/**
+ * Returns a new SPStyle object with default settings.
+ */
+SPStyle *
+sp_style_new(SPDocument *document)
+{
+ SPStyle *const style = new SPStyle( document );
+ return style;
+}
- /* Color */
- if (!style->color.set || style->color.inherit) {
- sp_style_merge_ipaint(style, &style->color, &parent->color);
- }
- if (!style->color_interpolation.set || style->color_interpolation.inherit) {
- style->color_interpolation.computed = parent->color_interpolation.computed;
- }
- if (!style->color_interpolation_filters.set || style->color_interpolation_filters.inherit) {
- style->color_interpolation_filters.computed = parent->color_interpolation_filters.computed;
- }
+// Called in: sp-object.cpp
+/**
+ * Creates a new SPStyle object, and attaches it to the specified SPObject.
+ */
+SPStyle *
+sp_style_new_from_object(SPObject *object)
+{
+ g_return_val_if_fail(object != NULL, NULL);
+ g_return_val_if_fail(SP_IS_OBJECT(object), NULL);
+ SPStyle *const style = new SPStyle( NULL, object );
+ return style;
+}
- /* Fill */
- if (!style->fill.set || style->fill.inherit || style->fill.currentcolor) {
- sp_style_merge_ipaint(style, &style->fill, &parent->fill);
- }
+// Called in display/drawing-item.cpp, display/nr-filter-primitive.cpp, libnrtype/Layout-TNG-Input.cpp
+/**
+ * Increase refcount of style.
+ */
+SPStyle *
+sp_style_ref(SPStyle *style)
+{
+ g_return_val_if_fail(style != NULL, NULL);
- if (!style->fill_opacity.set || style->fill_opacity.inherit) {
- style->fill_opacity.value = parent->fill_opacity.value;
- }
+ style->ref(); // Increase ref count
- if (!style->fill_rule.set || style->fill_rule.inherit) {
- style->fill_rule.computed = parent->fill_rule.computed;
- }
+ return style;
+}
- /* Stroke */
- if (!style->stroke.set || style->stroke.inherit || style->stroke.currentcolor) {
- sp_style_merge_ipaint(style, &style->stroke, &parent->stroke);
+// Called in style.cpp, desktop-style.cpp, sp-object.cpp, sp-stop.cpp, text-editing.cpp
+// display/drawing-group.cpp, ...
+/**
+ * Decrease refcount of style with possible destruction.
+ */
+SPStyle *
+sp_style_unref(SPStyle *style)
+{
+ g_return_val_if_fail(style != NULL, NULL);
+ if (style->unref() < 1) {
+ delete style;
+ return NULL;
}
+ return style;
+}
- if (!style->stroke_width.set || style->stroke_width.inherit) {
- style->stroke_width.computed = parent->stroke_width.computed;
- } else {
- /* Update computed value for any change in font inherited from parent. */
- double const em = style->font_size.computed;
- if (style->stroke_width.unit == SP_CSS_UNIT_EM) {
- style->stroke_width.computed = style->stroke_width.value * em;
- } else if (style->stroke_width.unit == SP_CSS_UNIT_EX) {
- double const ex = em * 0.5; // fixme: Get x height from libnrtype or pango.
- style->stroke_width.computed = style->stroke_width.value * ex;
- }
- }
- if (!style->stroke_linecap.set || style->stroke_linecap.inherit) {
- style->stroke_linecap.computed = parent->stroke_linecap.computed;
- }
- if (!style->stroke_linejoin.set || style->stroke_linejoin.inherit) {
- style->stroke_linejoin.computed = parent->stroke_linejoin.computed;
- }
+// Called in: sp-clippath.cpp, sp-item.cpp (suspicious), sp-object.cpp, sp-style-elem.cpp
+/**
+ * Read style properties from object's repr.
+ *
+ * 1. Reset existing object style
+ * 2. Load current effective object style
+ * 3. Load i attributes from immediate parent (which has to be up-to-date)
+ */
+void
+sp_style_read_from_object(SPStyle *style, SPObject *object)
+{
+ // std::cout << "sp_style_read_from_object: " << (object->getId()?object->getId():"null") << std::endl;
+ g_return_if_fail(style != NULL);
+ g_return_if_fail(object != NULL);
+ g_return_if_fail(SP_IS_OBJECT(object));
- if (!style->stroke_miterlimit.set || style->stroke_miterlimit.inherit) {
- style->stroke_miterlimit.value = parent->stroke_miterlimit.value;
- }
+ Inkscape::XML::Node *repr = object->getRepr();
+ g_return_if_fail(repr != NULL);
- if (!style->stroke_dasharray.set || style->stroke_dasharray.inherit) {
- style->stroke_dasharray.values = parent->stroke_dasharray.values;
- }
+ style->read( object, repr );
+}
- if (!style->stroke_dashoffset.set || style->stroke_dashoffset.inherit) {
- style->stroke_dashoffset.value = parent->stroke_dashoffset.value;
- }
+// Called in: libnrtype/font-lister.cpp, widgets/dash-selector.cpp, widgets/text-toolbar.cpp,
+// ui/dialog/text-edit.cpp
+// Why is this called when draging a gradient handle?
+/**
+ * Read style properties from preferences.
+ * @param style The style to write to
+ * @param path Preferences directory from which the style should be read
+ */
+void
+sp_style_read_from_prefs(SPStyle *style, Glib::ustring const &path)
+{
+ g_return_if_fail(style != NULL);
+ g_return_if_fail(path != "");
- if (!style->stroke_opacity.set || style->stroke_opacity.inherit) {
- style->stroke_opacity.value = parent->stroke_opacity.value;
- }
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- if (!style->paint_order.set || style->paint_order.inherit) {
- g_free(style->paint_order.value);
- style->paint_order.value = g_strdup(parent->paint_order.value);
- for (unsigned i = 0; i < PAINT_ORDER_LAYERS; ++i) {
- style->paint_order.layer[i] = parent->paint_order.layer[i];
- style->paint_order.layer_set[i] = parent->paint_order.layer_set[i];
- }
- }
+ // not optimal: we reconstruct the node based on the prefs, then pass it to
+ // sp_style_read for actual processing.
+ Inkscape::XML::SimpleDocument *tempdoc = new Inkscape::XML::SimpleDocument;
+ Inkscape::XML::Node *tempnode = tempdoc->createElement("prefs");
- if (style->text && parent->text) {
- if (!style->text->font_family.set || style->text->font_family.inherit) {
- g_free(style->text->font_family.value);
- style->text->font_family.value = g_strdup(parent->text->font_family.value);
- }
+ std::vector<Inkscape::Preferences::Entry> attrs = prefs->getAllEntries(path);
+ for (std::vector<Inkscape::Preferences::Entry>::iterator i = attrs.begin(); i != attrs.end(); ++i) {
+ tempnode->setAttribute(i->getEntryName().data(), i->getString().data());
}
- if (style->text && parent->text) {
- if (!style->text->font_specification.set || style->text->font_specification.inherit) {
- g_free(style->text->font_specification.value);
- style->text->font_specification.value = g_strdup(parent->text->font_specification.value);
- }
- }
+ style->read( NULL, tempnode );
- /* Markers - Free the old value and make copy of the new */
- for (unsigned i = SP_MARKER_LOC; i < SP_MARKER_LOC_QTY; i++) {
- if (!style->marker[i].set || style->marker[i].inherit) {
- g_free(style->marker[i].value);
- style->marker[i].value = g_strdup(parent->marker[i].value);
- }
- }
+ Inkscape::GC::release(tempnode);
+ Inkscape::GC::release(tempdoc);
+ delete tempdoc;
+}
- /* Filter effects */
- if (style->filter.inherit) {
- sp_style_merge_ifilter(style, &parent->filter);
- }
- if(style->enable_background.inherit) {
- style->enable_background.value = parent->enable_background.value;
- }
+static CRSelEng *
+sp_repr_sel_eng()
+{
+ CRSelEng *const ret = cr_sel_eng_new();
+ cr_sel_eng_set_node_iface(ret, &Inkscape::XML::croco_node_iface);
- /* Clipping */
- if (!style->clip_rule.set || style->clip_rule.inherit) {
- style->clip_rule.computed = parent->clip_rule.computed;
- }
+ /** \todo
+ * Check whether we need to register any pseudo-class handlers.
+ * libcroco has its own default handlers for first-child and lang.
+ *
+ * We probably want handlers for link and arguably visited (though
+ * inkscape can't visit links at the time of writing). hover etc.
+ * more useful in inkview than the editor inkscape.
+ *
+ * http://www.w3.org/TR/SVG11/styling.html#StylingWithCSS says that
+ * the following should be honoured, at least by inkview:
+ * :hover, :active, :focus, :visited, :link.
+ */
- /* Rendering */
- if (!style->color_rendering.set || style->color_rendering.inherit) {
- style->color_rendering.computed = parent->color_rendering.computed;
- }
- if (!style->image_rendering.set || style->image_rendering.inherit) {
- style->image_rendering.computed = parent->image_rendering.computed;
- }
- if (!style->shape_rendering.set || style->shape_rendering.inherit) {
- style->shape_rendering.computed = parent->shape_rendering.computed;
- }
- if (!style->text_rendering.set || style->text_rendering.inherit) {
- style->text_rendering.computed = parent->text_rendering.computed;
- }
+ g_assert(ret);
+ return ret;
}
-template <typename T>
-static void
-sp_style_merge_prop_from_dying_parent(T &child, T const &parent)
-{
- if ( ( !(child.set) || child.inherit )
- && parent.set && !(parent.inherit) )
- {
- child = parent;
- }
-}
+// Called in text-editting.cpp, ui/tools/frehand-base.cpp, ui/widget/style-swatch.cpp
/**
- * Copy SPIString from parent to child.
+ * Parses a style="..." string and merges it with an existing SPStyle.
*/
-static void
-sp_style_merge_string_prop_from_dying_parent(SPIString &child, SPIString const &parent)
-{
- if ( ( !(child.set) || child.inherit )
- && parent.set && !(parent.inherit) )
- {
- g_free(child.value);
- child.value = g_strdup(parent.value);
- child.set = parent.set;
- child.inherit = parent.inherit;
- }
-}
-
-static void
-sp_style_merge_paint_prop_from_dying_parent(SPStyle *style,
- SPIPaint &child, SPIPaint const &parent)
+void
+sp_style_merge_from_style_string(SPStyle *const style, gchar const *const p)
{
- /** \todo
- * I haven't given this much attention. See comments below about
- * currentColor, colorProfile, and relative URIs.
+ // std::cout << "sp_style_merge_from_style_string: " << (p?p:"null") <<std::endl;
+ /*
+ * Reference: http://www.w3.org/TR/SVG11/styling.html#StyleAttribute:
+ * ``When CSS styling is used, CSS inline style is specified by including
+ * semicolon-separated property declarations of the form "name : value"
+ * within the style attribute''.
+ *
+ * That's fairly ambiguous. Is a `value' allowed to contain semicolons?
+ * Why does it say "including", what else is allowed in the style
+ * attribute value?
*/
- if (!child.set || child.inherit) {
- sp_style_merge_ipaint(style, &child, &parent);
- child.set = parent.set;
- child.inherit = parent.inherit;
- }
+ style->_mergeString( p );
}
-static void
-sp_style_merge_rel_enum_prop_from_dying_parent(SPIEnum &child, SPIEnum const &parent,
- unsigned const max_computed_val,
- unsigned const smaller_val)
-{
- /* We assume that min computed val is 0, contiguous up to max_computed_val,
- then zero or more other absolute values, then smaller_val then larger_val. */
- unsigned const min_computed_val = 0;
- unsigned const larger_val = smaller_val + 1;
- g_return_if_fail(min_computed_val < max_computed_val);
- g_return_if_fail(max_computed_val < smaller_val);
-
- if (parent.set && !parent.inherit) {
- if (!child.set || child.inherit) {
- child.value = parent.value;
- child.set = parent.set; // i.e. true
- child.inherit = parent.inherit; // i.e. false
- } else if (child.value < smaller_val) {
- /* Child has absolute value: leave as is. */
- } else if ( ( child.value == smaller_val
- && parent.value == larger_val )
- || ( parent.value == smaller_val
- && child.value == larger_val ) )
- {
- child.set = false;
- /*
- * Note that this can result in a change in computed value in the
- * rare case that the parent's setting was a no-op (i.e. if the
- * parent's parent's computed value was already ultra-condensed or
- * ultra-expanded). However, I'd guess that the change is for the
- * better: I'd guess that if the properties were specified
- * relatively, then the intent is to counteract parent's effect.
- * I.e. I believe this is the best code even in that case.
- */
- } else if (child.value == parent.value) {
- /* Leave as is. */
- /** \todo
- * It's unclear what to do if style and parent specify the same
- * relative directive (narrower or wider). We can either convert
- * to absolute specification or coalesce to a single relative
- * request (of half the strength of the original pair).
- *
- * Converting to a single level of relative specification is a
- * better choice if the newly-unlinked clone is itself cloned to
- * other contexts (inheriting different font stretchiness): it
- * would preserve the effect that it will be narrower than
- * the inherited context in each case. The disadvantage is that
- * it will ~certainly affect the computed value of the
- * newly-unlinked clone.
- */
- } else {
- unsigned const parent_val = parent.computed;
- child.value = ( child.value == smaller_val
- ? ( parent_val == min_computed_val
- ? parent_val
- : parent_val - 1 )
- : ( parent_val == max_computed_val
- ? parent_val
- : parent_val + 1 ) );
- g_assert(child.value <= max_computed_val);
- child.inherit = false;
- g_assert(child.set);
- }
- }
-}
-
-template <typename LengthT>
-static void
-sp_style_merge_length_prop_from_dying_parent(LengthT &child, LengthT const &parent,
- double const parent_child_em_ratio)
-{
- if ( ( !(child.set) || child.inherit )
- && parent.set && !(parent.inherit) )
- {
- child = parent;
- switch (parent.unit) {
- case SP_CSS_UNIT_EM:
- case SP_CSS_UNIT_EX:
- child.value *= parent_child_em_ratio;
- /** \todo
- * fixme: Have separate ex ratio parameter.
- * Get x height from libnrtype or pango.
- */
- if (!IS_FINITE(child.value)) {
- child.value = child.computed;
- child.unit = SP_CSS_UNIT_NONE;
- }
- break;
-
- default:
- break;
- }
- }
-}
+/** Indexed by SP_CSS_FONT_SIZE_blah. These seem a bit small */
+static float const font_size_table[] = {6.0, 8.0, 10.0, 12.0, 14.0, 18.0, 24.0};
-static double
-get_relative_font_size_frac(SPIFontSize const &font_size)
+// Called in sp-object.cpp, sp-tref.cpp, sp-use.cpp
+/**
+ * Sets computed values in \a style, which may involve inheriting from (or in some other way
+ * calculating from) corresponding computed values of \a parent.
+ *
+ * References: http://www.w3.org/TR/SVG11/propidx.html shows what properties inherit by default.
+ * http://www.w3.org/TR/SVG11/styling.html#Inheritance gives general rules as to what it means to
+ * inherit a value. http://www.w3.org/TR/REC-CSS2/cascade.html#computed-value is more precise
+ * about what the computed value is (not obvious for lengths).
+ *
+ * \pre \a parent's computed values are already up-to-date.
+ */
+void
+sp_style_merge_from_parent(SPStyle *const style, SPStyle const *const parent)
{
- switch (font_size.type) {
- case SP_FONT_SIZE_LITERAL: {
- switch (font_size.literal) {
- case SP_CSS_FONT_SIZE_SMALLER:
- return 5.0 / 6.0;
-
- case SP_CSS_FONT_SIZE_LARGER:
- return 6.0 / 5.0;
-
- default:
- g_assert_not_reached();
- }
- }
-
- case SP_FONT_SIZE_PERCENTAGE:
- return font_size.value;
-
- case SP_FONT_SIZE_LENGTH: {
- switch (font_size.unit ) {
- case SP_CSS_UNIT_EM:
- return font_size.value;
+ // std::cout << "sp_style_merge_from_parent" << std::endl;
+ g_return_if_fail(style != NULL);
- case SP_CSS_UNIT_EX:
- return font_size.value * 0.5;
+ if (!parent)
+ return;
- default:
- g_assert_not_reached();
- }
- }
- }
- g_assert_not_reached();
+ style->cascade( parent );
+ return;
}
+// Called in: sp-use.cpp, sp-tref.cpp, sp-item.cpp
/**
* Combine \a style and \a parent style specifications into a single style specification that
* preserves (as much as possible) the effect of the existing \a style being a child of \a parent.
@@ -2140,370 +1335,16 @@ get_relative_font_size_frac(SPIFontSize const &font_size)
void
sp_style_merge_from_dying_parent(SPStyle *const style, SPStyle const *const parent)
{
- /** \note
- * The general rule for each property is as follows:
- *
- * If style is set to an absolute value, then leave it as is.
- *
- * Otherwise (i.e. if style has a relative value):
- *
- * If parent is set to an absolute value, then set style to the computed value.
- *
- * Otherwise, calculate the combined relative value (e.g. multiplying the two percentages).
- */
-
- /* We do font-size first, to ensure that em size is up-to-date. */
- /** \todo
- * fixme: We'll need to have more font-related things up the top once
- * we're getting x-height from pango or libnrtype.
- */
-
- /* Some things that allow relative specifications. */
- {
- /* font-size. Note that we update the computed font-size of style,
- to assist in em calculations later in this function. */
-
- if (parent->font_size.set && !parent->font_size.inherit) {
- /* Parent has defined font-size */
-
- if (!style->font_size.set || style->font_size.inherit) {
- /* font_size inherits the computed value, so we can use the parent value
- * verbatim. */
- style->font_size = parent->font_size;
-
- } else if ( style->font_size.type == SP_FONT_SIZE_LENGTH &&
- style->font_size.unit != SP_CSS_UNIT_EM &&
- style->font_size.unit != SP_CSS_UNIT_EX ) {
-
- /* Child already has absolute size (stored in computed value), so do nothing. */
-
- } else if ( style->font_size.type == SP_FONT_SIZE_LITERAL
- && style->font_size.literal < SP_CSS_FONT_SIZE_SMALLER ) {
- /* Child already has absolute size, but we ensure that the computed value
- is up-to-date. */
- unsigned const ix = style->font_size.literal;
- g_assert(ix < G_N_ELEMENTS(font_size_table));
- style->font_size.computed = font_size_table[ix];
-
- } else {
- /* Child has relative size. */
- double const child_frac(get_relative_font_size_frac(style->font_size));
- style->font_size.set = true;
- style->font_size.inherit = false;
- style->font_size.computed = parent->font_size.computed * child_frac;
-
- if ( ( parent->font_size.type == SP_FONT_SIZE_LITERAL
- && parent->font_size.literal < SP_CSS_FONT_SIZE_SMALLER ) ||
- ( parent->font_size.type == SP_FONT_SIZE_LENGTH &&
- parent->font_size.unit != SP_CSS_UNIT_EM &&
- parent->font_size.unit != SP_CSS_UNIT_EX ) ) {
-
- /* Absolute value. */
- style->font_size.type = SP_FONT_SIZE_LENGTH;
- /* .value is unused for non ex/em SP_FONT_SIZE_LENGTH. */
-
- } else {
- /* Relative value. */
-
- double const parent_frac(get_relative_font_size_frac(parent->font_size));
- if( style->font_size.type == SP_FONT_SIZE_LENGTH ) {
- /* Value in terms of ex/em */
- style->font_size.value *= parent_frac;
- } else {
- style->font_size.value = parent_frac * child_frac;
- style->font_size.type = SP_FONT_SIZE_PERCENTAGE;
- }
- }
- }
- }
-
- /* 'font-stretch' */
- sp_style_merge_rel_enum_prop_from_dying_parent(style->font_stretch,
- parent->font_stretch,
- SP_CSS_FONT_STRETCH_ULTRA_EXPANDED,
- SP_CSS_FONT_STRETCH_NARROWER);
-
- /* font-weight */
- sp_style_merge_rel_enum_prop_from_dying_parent(style->font_weight,
- parent->font_weight,
- SP_CSS_FONT_WEIGHT_900,
- SP_CSS_FONT_WEIGHT_LIGHTER);
- }
-
-
- /* Enum values that don't have any relative settings (other than `inherit'). */
- {
- SPIEnum SPStyle::*const fields[] = {
- &SPStyle::blend_mode,
- &SPStyle::clip_rule,
- &SPStyle::color_interpolation,
- &SPStyle::color_interpolation_filters,
- &SPStyle::color_rendering,
- &SPStyle::direction,
- &SPStyle::fill_rule,
- &SPStyle::font_style,
- &SPStyle::font_variant,
- &SPStyle::image_rendering,
- &SPStyle::isolation,
- //nyi: SPStyle::pointer_events,
- &SPStyle::shape_rendering,
- &SPStyle::stroke_linecap,
- &SPStyle::stroke_linejoin,
- &SPStyle::text_anchor,
- &SPStyle::text_rendering,
- &SPStyle::visibility,
- &SPStyle::writing_mode
- };
-
- for (unsigned i = 0; i < G_N_ELEMENTS(fields); ++i) {
- SPIEnum SPStyle::*const fld = fields[i];
- sp_style_merge_prop_from_dying_parent<SPIEnum>(style->*fld, parent->*fld);
- }
- }
-
- /* A few other simple inheritance properties. */
- {
- sp_style_merge_prop_from_dying_parent<SPIScale24>(style->fill_opacity, parent->fill_opacity);
- sp_style_merge_prop_from_dying_parent<SPIScale24>(style->stroke_opacity, parent->stroke_opacity);
- sp_style_merge_prop_from_dying_parent<SPIFloat>(style->stroke_miterlimit, parent->stroke_miterlimit);
-
- /** \todo
- * We currently treat text-decoration as if it were a simple inherited
- * property (fixme). This code may need changing once we do the
- * special fill/stroke inheritance mentioned by the spec.
- */
- sp_style_merge_prop_from_dying_parent<SPITextDecorationLine>( style->text_decoration_line, parent->text_decoration_line);
- sp_style_merge_prop_from_dying_parent<SPITextDecorationStyle>(style->text_decoration_style, parent->text_decoration_style);
- sp_style_merge_paint_prop_from_dying_parent(style,style->text_decoration_color, parent->text_decoration_color);
-
- //nyi: font-size-adjust, // <number> | none | inherit
- //nyi: glyph-orientation-horizontal,
- //nyi: glyph-orientation-vertical,
- }
-
- /* Properties that involve length but are easy in other respects. */
- {
- /* The difficulty with lengths is that font-relative units need adjusting if the font
- * varies between parent & child.
- *
- * Lengths specified in the existing child can stay as they are: its computed font
- * specification should stay unchanged, so em & ex lengths should continue to mean the same
- * size.
- *
- * Lengths specified in the dying parent in em or ex need to be scaled according to the
- * ratio of em or ex size between parent & child.
- */
- double const parent_child_em_ratio = parent->font_size.computed / style->font_size.computed;
-
- SPILength SPStyle::*const lfields[] = {
- &SPStyle::stroke_width,
- &SPStyle::text_indent
- };
- for (unsigned i = 0; i < G_N_ELEMENTS(lfields); ++i) {
- SPILength SPStyle::*fld = lfields[i];
- sp_style_merge_length_prop_from_dying_parent<SPILength>(style->*fld,
- parent->*fld,
- parent_child_em_ratio);
- }
-
- SPILengthOrNormal SPStyle::*const nfields[] = {
- &SPStyle::letter_spacing,
- &SPStyle::line_height,
- &SPStyle::word_spacing
- };
- for (unsigned i = 0; i < G_N_ELEMENTS(nfields); ++i) {
- SPILengthOrNormal SPStyle::*fld = nfields[i];
- sp_style_merge_length_prop_from_dying_parent<SPILengthOrNormal>(style->*fld,
- parent->*fld,
- parent_child_em_ratio);
- }
-
- //nyi: &SPStyle::kerning: length or `auto'
-
- /* fixme: Move stroke-dash and stroke-dash-offset here once they
- can accept units. */
- }
-
- /* Properties that involve a URI but are easy in other respects. */
- {
- /** \todo
- * Could cause problems if original object was in another document
- * and it used a relative URL. (At the time of writing, we don't
- * allow hrefs to other documents, so this isn't a problem yet.)
- * Paint properties also allow URIs.
- */
- //nyi: cursor, // may involve change in effect, but we can't do much better
- //nyi: color-profile,
-
- // Markers (marker-start, marker-mid, marker-end).
- for (unsigned i = SP_MARKER_LOC; i < SP_MARKER_LOC_QTY; i++) {
- sp_style_merge_string_prop_from_dying_parent(style->marker[i], parent->marker[i]);
- }
- }
-
- /* CSS2 */
- /* Font */
-
- if (style->text && parent->text) {
- sp_style_merge_string_prop_from_dying_parent(style->text->font_specification,
- parent->text->font_specification);
-
- sp_style_merge_string_prop_from_dying_parent(style->text->font_family,
- parent->text->font_family);
- }
-
-
- /* Properties that don't inherit by default. Most of these need special handling. */
- {
- /*
- * opacity's effect is cumulative; we set the new value to the combined effect. The
- * default value for opacity is 1.0, not inherit. (Note that stroke-opacity and
- * fill-opacity are quite different from opacity, and don't need any special handling.)
- *
- * Cases:
- * - parent & child were each previously unset, in which case the effective
- * opacity value is 1.0, and style should remain unset.
- * - parent was previously unset (so computed opacity value of 1.0)
- * and child was set to inherit. The merged child should
- * get a value of 1.0, and shouldn't inherit (lest the new parent
- * has a different opacity value). Given that opacity's default
- * value is 1.0 (rather than inherit), we might as well have the
- * merged child's opacity be unset.
- * - parent was previously unset (so opacity 1.0), and child was set to a number.
- * The merged child should retain its existing settings (though it doesn't matter
- * if we make it unset if that number was 1.0).
- * - parent was inherit and child was unset. Merged child should be set to inherit.
- * - parent was inherit and child was inherit. (We can't in general reproduce this
- * effect (short of introducing a new group), but setting opacity to inherit is rare.)
- * If the inherited value was strictly between 0.0 and 1.0 (exclusive) then the merged
- * child's value should be set to the product of the two, i.e. the square of the
- * inherited value, and should not be marked as inherit. (This decision assumes that it
- * is more important to retain the effective opacity than to retain the inheriting
- * effect, and assumes that the inheriting effect either isn't important enough to create
- * a group or isn't common enough to bother maintaining the code to create a group.) If
- * the inherited value was 0.0 or 1.0, then marking the merged child as inherit comes
- * closer to maintaining the effect.
- * - parent was inherit and child was set to a numerical value. If the child's value
- * was 1.0, then the merged child should have the same settings as the parent.
- * If the child's value was 0, then the merged child should also be set to 0.
- * If the child's value was anything else, then we do the same as for the inherit/inherit
- * case above: have the merged child set to the product of the two opacities and not
- * marked as inherit, for the same reasons as for that case.
- * - parent was set to a value, and child was unset. The merged child should have
- * parent's settings.
- * - parent was set to a value, and child was inherit. The merged child should
- * be set to the product, i.e. the square of the parent's value.
- * - parent & child are each set to a value. The merged child should be set to the
- * product.
- */
- if ( !style->opacity.set
- || ( !style->opacity.inherit
- && style->opacity.value == SP_SCALE24_MAX ) )
- {
- style->opacity = parent->opacity;
- } else {
- /* Ensure that style's computed value is up-to-date. */
- if (style->opacity.inherit) {
- style->opacity.value = parent->opacity.value;
- }
-
- /* Multiplication of opacities occurs even if a child's opacity is set to inherit. */
- style->opacity.value = SP_SCALE24_MUL(style->opacity.value,
- parent->opacity.value);
-
- style->opacity.inherit = (parent->opacity.inherit
- && style->opacity.inherit
- && (parent->opacity.value == 0 ||
- parent->opacity.value == SP_SCALE24_MAX));
- style->opacity.set = ( style->opacity.inherit
- || style->opacity.value < SP_SCALE24_MAX );
- }
-
- /* display is in principle similar to opacity, but implementation is easier. */
- if ( parent->display.set && !parent->display.inherit
- && parent->display.value == SP_CSS_DISPLAY_NONE ) {
- style->display.value = SP_CSS_DISPLAY_NONE;
- style->display.set = true;
- style->display.inherit = false;
- } else if (style->display.inherit) {
- style->display.value = parent->display.value;
- style->display.set = parent->display.set;
- style->display.inherit = parent->display.inherit;
- } else {
- /* Leave as is. (display doesn't inherit by default.) */
- }
-
- /* enable-background - this is rather complicated, because
- * it is valid only when applied to container elements.
- * Let's check a simple case anyhow. */
- if (parent->enable_background.set
- && !parent->enable_background.inherit
- && style->enable_background.inherit)
- {
- style->enable_background.set = true;
- style->enable_background.inherit = false;
- style->enable_background.value = parent->enable_background.value;
- }
-
- if (!style->filter.set || style->filter.inherit)
- {
- sp_style_merge_ifilter(style, &parent->filter);
-
+ // std::cout << "sp_style_merge_from_dying_parent" << std::endl;
+ style->merge( parent );
}
- /** \todo
- * fixme: Check that we correctly handle all properties that don't
- * inherit by default (as shown in
- * http://www.w3.org/TR/SVG11/propidx.html for most SVG 1.1 properties).
- */
- }
-
- /* SPIPaint properties (including color). */
- {
- /** \todo
- * Think about the issues involved if specified as currentColor or
- * if specified relative to colorProfile, and if the currentColor or
- * colorProfile differs between parent \& child. See also comments
- * elsewhere in this function about URIs.
- */
- SPIPaint SPStyle::*const fields[] = {
- &SPStyle::color,
- &SPStyle::fill,
- &SPStyle::stroke
- };
- for (unsigned i = 0; i < G_N_ELEMENTS(fields); ++i) {
- SPIPaint SPStyle::*const fld = fields[i];
- sp_style_merge_paint_prop_from_dying_parent(style, style->*fld, parent->*fld);
- }
- }
-
- /* Things from SVG 1.2 or CSS3. */
- {
- /* Note: If we ever support setting string values for text-align then we'd need strdup
- * handling here. */
- sp_style_merge_prop_from_dying_parent<SPIEnum>(style->text_align, parent->text_align);
-
- sp_style_merge_prop_from_dying_parent<SPIEnum>(style->text_transform, parent->text_transform);
- sp_style_merge_prop_from_dying_parent<SPIEnum>(style->block_progression, parent->block_progression);
- }
-
- /* Note: this will need length handling once dasharray supports units. */
- if ( ( !style->stroke_dasharray.set || style->stroke_dasharray.inherit )
- && parent->stroke_dasharray.set && !parent->stroke_dasharray.inherit )
- {
- style->stroke_dasharray.values = parent->stroke_dasharray.values;
- style->stroke_dasharray.set = parent->stroke_dasharray.set;
- style->stroke_dasharray.inherit = parent->stroke_dasharray.inherit;
- }
- {
- sp_style_merge_prop_from_dying_parent<SPILength>(style->stroke_dashoffset, parent->stroke_dashoffset);
- }
-}
-
-
-static void
+// The following functions should be incorporated into SPIPaint. FIXME
+// Called in: style.cpp, style-internal.cpp
+void
sp_style_set_ipaint_to_uri(SPStyle *style, SPIPaint *paint, const Inkscape::URI *uri, SPDocument *document)
{
+ // std::cout << "sp_style_set_ipaint_to_uri: Entrance: " << uri << " " << (void*)document << std::endl;
// it may be that this style's SPIPaint has not yet created its URIReference;
// now that we have a document, we can create it here
if (!paint->value.href && document) {
@@ -2525,7 +1366,8 @@ sp_style_set_ipaint_to_uri(SPStyle *style, SPIPaint *paint, const Inkscape::URI
}
}
-static void
+// Called in: style.cpp, style-internal.cpp
+void
sp_style_set_ipaint_to_uri_string (SPStyle *style, SPIPaint *paint, const gchar *uri)
{
try {
@@ -2536,12 +1378,14 @@ sp_style_set_ipaint_to_uri_string (SPStyle *style, SPIPaint *paint, const gchar
}
}
+// Called in: desktop-style.cpp
void
sp_style_set_to_uri_string (SPStyle *style, bool isfill, const gchar *uri)
{
sp_style_set_ipaint_to_uri_string (style, isfill? &style->fill : &style->stroke, uri);
}
+// Called in: widgets/font-selector.cpp, widgets/text-toolbar.cpp, ui/dialog/text-edit.cpp
gchar const *
sp_style_get_css_unit_string(int unit)
{
@@ -2564,6 +1408,7 @@ sp_style_get_css_unit_string(int unit)
return "px";
}
+// Called in: style-internal.cpp, widgets/text-toolbar.cpp, ui/dialog/text-edit.cpp
/*
* Convert a size in pixels into another CSS unit size
*/
@@ -2592,6 +1437,7 @@ sp_style_css_size_px_to_units(double size, int unit)
return unit_size;
}
+// Called in: widgets/text-toolbar.cpp, ui/dialog/text-edit.cpp
/*
* Convert a size in a CSS unit size to pixels
*/
@@ -2604,82 +1450,8 @@ sp_style_css_size_units_to_px(double size, int unit)
//g_message("sp_style_css_size_units_to_px %f %d = %f px", size, unit, out);
return size * (size / sp_style_css_size_px_to_units(size, unit));;
}
-/**
- *
- */
-static void
-sp_style_merge_ipaint(SPStyle *style, SPIPaint *paint, SPIPaint const *parent)
-{
- if ((paint->set && paint->currentcolor) || parent->currentcolor) {
- bool isset = paint->set;
- paint->clear();
- paint->set = isset;
- paint->currentcolor = TRUE;
- paint->setColor(style->color.value.color);
- return;
- }
-
- paint->clear();
- if ( parent->isPaintserver() ) {
- if (parent->value.href) {
- sp_style_set_ipaint_to_uri(style, paint, parent->value.href->getURI(), parent->value.href->getOwnerDocument());
- } else {
- g_warning("Expected paint server not found.");
- }
- } else if ( parent->isColor() ) {
- paint->setColor( parent->value.color );
- } else if ( parent->isNoneSet() ) {
- paint->noneSet = TRUE;
- } else if ( parent->isNone() ) {
- //
- } else {
- g_assert_not_reached();
- }
-}
-
-
-/**
- * Merge filter style from parent.
- * Filter effects do not inherit by default
- */
-static void
-sp_style_merge_ifilter(SPStyle *style, SPIFilter const *parent)
-{
- // FIXME:
- // instead of just copying over, we need to _really merge_ the two filters by combining their
- // filter primitives
-
- sp_style_filter_clear(style);
- style->filter.set = parent->set;
- style->filter.inherit = parent->inherit;
-
- if (style->filter.href){
- if (style->filter.href->getObject()){
- style->filter.href->detach();
- }
- }
- else{
- // it may be that this style has not yet created its SPFilterReference
- if (style->object){
- if (style->object->document) {
- style->filter.href = new SPFilterReference(style->object->document);
- style->filter.href->changedSignal().connect(sigc::bind(sigc::ptr_fun(sp_style_filter_ref_changed), style));
- }
- }
- }
-
- if (style->filter.href && parent->href){
- if (parent->href->getObject()) {
- try {
- style->filter.href->attach(*parent->href->getURI());
- } catch (Inkscape::BadURIException &e) {
- g_warning("%s", e.what());
- style->filter.href->detach();
- }
- }
- }
-}
+// Called in style.cpp, text-editing.cpp
/**
* Dumps the style to a CSS string, with either SP_STYLE_FLAG_IFSET or
* SP_STYLE_FLAG_ALWAYS flags. Used with Always for copying an object's
@@ -2702,146 +1474,11 @@ sp_style_write_string(SPStyle const *const style, guint const flags)
(flags == SP_STYLE_FLAG_ALWAYS) ),
NULL);
- gchar c[BMAX];
- gchar *p = c;
- *p = '\0';
-
- p += sp_style_write_ifontsize(p, c + BMAX - p, "font-size", &style->font_size, NULL, flags);
- p += sp_style_write_ienum(p, c + BMAX - p, "font-style", enum_font_style, &style->font_style, NULL, flags);
- p += sp_style_write_ienum(p, c + BMAX - p, "font-variant", enum_font_variant, &style->font_variant, NULL, flags);
- p += sp_style_write_ienum(p, c + BMAX - p, "font-weight", enum_font_weight, &style->font_weight, NULL, flags);
- p += sp_style_write_ienum(p, c + BMAX - p, "font-stretch", enum_font_stretch, &style->font_stretch, NULL, flags);
-
- /* Text */
- p += sp_style_write_ilength(p, c + BMAX - p, "text-indent", &style->text_indent, NULL, flags);
- p += sp_style_write_ienum(p, c + BMAX - p, "text-align", enum_text_align, &style->text_align, NULL, flags);
- p += sp_style_write_itextdecoration(p, c + BMAX - p, "text-decoration",
- &style->text_decoration_line, &style->text_decoration_style, &style->text_decoration_color,
- NULL, NULL, NULL, flags);
- p += sp_style_write_ilengthornormal(p, c + BMAX - p, "line-height", &style->line_height, NULL, flags);
- p += sp_style_write_ilengthornormal(p, c + BMAX - p, "letter-spacing", &style->letter_spacing, NULL, flags);
- p += sp_style_write_ilengthornormal(p, c + BMAX - p, "word-spacing", &style->word_spacing, NULL, flags);
- p += sp_style_write_ienum(p, c + BMAX - p, "text-transform", enum_text_transform, &style->text_transform, NULL, flags);
- p += sp_style_write_ienum(p, c + BMAX - p, "direction", enum_direction, &style->direction, NULL, flags);
- p += sp_style_write_ienum(p, c + BMAX - p, "block-progression", enum_block_progression, &style->block_progression, NULL, flags);
- p += sp_style_write_ienum(p, c + BMAX - p, "writing-mode", enum_writing_mode, &style->writing_mode, NULL, flags);
-
- p += sp_style_write_ienum(p, c + BMAX - p, "text-anchor", enum_text_anchor, &style->text_anchor, NULL, flags);
- p += sp_style_write_ibaselineshift(p, c + BMAX - p, "baseline-shift", &style->baseline_shift, NULL, flags);
-
-
- /// \todo fixme: Per type methods need default flag too (lauris)
-
- if (style->opacity.value != SP_SCALE24_MAX) {
- p += sp_style_write_iscale24(p, c + BMAX - p, "opacity", &style->opacity, NULL, flags);
- }
-
- if (!style->color.noneSet) { // CSS does not permit "none" for color
- p += sp_style_write_ipaint(p, c + BMAX - p, "color", &style->color, NULL, flags);
- }
- p += sp_style_write_ienum(p, c + BMAX - p, "color-interpolation", enum_color_interpolation, &style->color_interpolation, NULL, flags);
- p += sp_style_write_ienum(p, c + BMAX - p, "color-interpolation-filters", enum_color_interpolation, &style->color_interpolation_filters, NULL, flags);
-
-
- p += sp_style_write_ipaint(p, c + BMAX - p, "fill", &style->fill, NULL, flags);
- // if fill:none, skip writing fill properties
- if (!style->fill.noneSet) {
- p += sp_style_write_iscale24(p, c + BMAX - p, "fill-opacity", &style->fill_opacity, NULL, flags);
- p += sp_style_write_ienum(p, c + BMAX - p, "fill-rule", enum_fill_rule, &style->fill_rule, NULL, flags);
- }
-
- p += sp_style_write_ipaint(p, c + BMAX - p, "stroke", &style->stroke, NULL, flags);
-
- // stroke width affects markers, so write it if there's stroke OR any markers
- if (!style->stroke.noneSet ||
- style->marker[SP_MARKER_LOC].set ||
- style->marker[SP_MARKER_LOC_START].set ||
- style->marker[SP_MARKER_LOC_MID].set ||
- style->marker[SP_MARKER_LOC_END].set) {
- p += sp_style_write_ilength(p, c + BMAX - p, "stroke-width", &style->stroke_width, NULL, flags);
- }
-
- // if stroke:none, skip writing stroke properties
- if (!style->stroke.noneSet) {
- p += sp_style_write_ienum(p, c + BMAX - p, "stroke-linecap", enum_stroke_linecap, &style->stroke_linecap, NULL, flags);
- p += sp_style_write_ienum(p, c + BMAX - p, "stroke-linejoin", enum_stroke_linejoin, &style->stroke_linejoin, NULL, flags);
- p += sp_style_write_ifloat(p, c + BMAX - p, "stroke-miterlimit", &style->stroke_miterlimit, NULL, flags);
- p += sp_style_write_iscale24(p, c + BMAX - p, "stroke-opacity", &style->stroke_opacity, NULL, flags);
- p += sp_style_write_idasharray(p, c + BMAX - p, "stroke-dasharray", &style->stroke_dasharray, NULL, flags);
- p += sp_style_write_ilength(p, c + BMAX - p, "stroke-dashoffset", &style->stroke_dashoffset, NULL, flags);
- }
-
- if (style->paint_order.set) {
- p += sp_style_write_ipaintorder(p, c + BMAX - p, "paint-order", &style->paint_order, NULL, flags);
- } else if (flags == SP_STYLE_FLAG_ALWAYS) {
- p += g_snprintf(p, c + BMAX - p, "paint-order:normal;");
- }
-
- bool marker_none = false;
- gchar *master = style->marker[SP_MARKER_LOC].value;
- if (style->marker[SP_MARKER_LOC].set) {
- p += g_snprintf(p, c + BMAX - p, "marker:%s;", style->marker[SP_MARKER_LOC].value);
- } else if (flags == SP_STYLE_FLAG_ALWAYS) {
- p += g_snprintf(p, c + BMAX - p, "marker:none;");
- marker_none = true;
- }
- if (style->marker[SP_MARKER_LOC_START].set
- && (!master || strcmp(master, style->marker[SP_MARKER_LOC_START].value))) {
- p += g_snprintf(p, c + BMAX - p, "marker-start:%s;", style->marker[SP_MARKER_LOC_START].value);
- } else if (flags == SP_STYLE_FLAG_ALWAYS && !marker_none) {
- p += g_snprintf(p, c + BMAX - p, "marker-start:none;");
- }
- if (style->marker[SP_MARKER_LOC_MID].set
- && (!master || strcmp(master, style->marker[SP_MARKER_LOC_MID].value))) {
- p += g_snprintf(p, c + BMAX - p, "marker-mid:%s;", style->marker[SP_MARKER_LOC_MID].value);
- } else if (flags == SP_STYLE_FLAG_ALWAYS && !marker_none) {
- p += g_snprintf(p, c + BMAX - p, "marker-mid:none;");
- }
- if (style->marker[SP_MARKER_LOC_END].set
- && (!master || strcmp(master, style->marker[SP_MARKER_LOC_END].value))) {
- p += g_snprintf(p, c + BMAX - p, "marker-end:%s;", style->marker[SP_MARKER_LOC_END].value);
- } else if (flags == SP_STYLE_FLAG_ALWAYS && !marker_none) {
- p += g_snprintf(p, c + BMAX - p, "marker-end:none;");
- }
-
- p += sp_style_write_ienum(p, c + BMAX - p, "visibility", enum_visibility, &style->visibility, NULL, flags);
- p += sp_style_write_ienum(p, c + BMAX - p, "display", enum_display, &style->display, NULL, flags);
- p += sp_style_write_ienum(p, c + BMAX - p, "overflow", enum_overflow, &style->overflow, NULL, flags);
- p += sp_style_write_ienum(p, c + BMAX - p, "isolation", enum_isolation, &style->isolation, NULL, flags);
- p += sp_style_write_ienum(p, c + BMAX - p, "mix-blend-mode", enum_blend_mode, &style->blend_mode, NULL, flags);
-
- /* filter: */
- p += sp_style_write_ifilter(p, c + BMAX - p, "filter", &style->filter, NULL, flags);
-
- p += sp_style_write_ienum(p, c + BMAX - p, "enable-background", enum_enable_background, &style->enable_background, NULL, flags);
-
- /* clipping */
- p += sp_style_write_ienum(p, c + BMAX - p, "clip-rule", enum_clip_rule, &style->clip_rule, NULL, flags);
-
- /* rendering */
- p += sp_style_write_ienum(p, c + BMAX - p, "color-rendering", enum_color_rendering, &style->color_rendering, NULL, flags);
- p += sp_style_write_ienum(p, c + BMAX - p, "image-rendering", enum_image_rendering, &style->image_rendering, NULL, flags);
- p += sp_style_write_ienum(p, c + BMAX - p, "shape-rendering", enum_shape_rendering, &style->shape_rendering, NULL, flags);
- p += sp_style_write_ienum(p, c + BMAX - p, "text-rendering", enum_text_rendering, &style->text_rendering, NULL, flags);
-
- /* fixme: */
- p += sp_text_style_write(p, c + BMAX - p, style->text, flags);
-
- /* Get rid of trailing `;'. */
- if (p != c) {
- --p;
- if (*p == ';') {
- *p = '\0';
- }
- }
-
- return g_strdup(c);
+ return g_strdup( style->write( flags ).c_str() );
}
-#define STYLE_BUF_MAX
-
-
+// Called in style.cpp, path-chemistry, NOT in text-editting.cpp (because of bug)
/**
* Dumps style to CSS string, see sp_style_write_string()
*
@@ -2855,2016 +1492,7 @@ sp_style_write_difference(SPStyle const *const from, SPStyle const *const to)
g_return_val_if_fail(from != NULL, NULL);
g_return_val_if_fail(to != NULL, NULL);
- gchar c[BMAX], *p = c;
- *p = '\0';
-
- p += sp_style_write_ifontsize(p, c + BMAX - p, "font-size", &from->font_size, &to->font_size, SP_STYLE_FLAG_IFDIFF);
- p += sp_style_write_ienum(p, c + BMAX - p, "font-style", enum_font_style, &from->font_style, &to->font_style, SP_STYLE_FLAG_IFDIFF);
- p += sp_style_write_ienum(p, c + BMAX - p, "font-variant", enum_font_variant, &from->font_variant, &to->font_variant, SP_STYLE_FLAG_IFDIFF);
- p += sp_style_write_ienum(p, c + BMAX - p, "font-weight", enum_font_weight, &from->font_weight, &to->font_weight, SP_STYLE_FLAG_IFDIFF);
- p += sp_style_write_ienum(p, c + BMAX - p, "font-stretch", enum_font_stretch, &from->font_stretch, &to->font_stretch, SP_STYLE_FLAG_IFDIFF);
-
- /* Text */
- p += sp_style_write_ilength(p, c + BMAX - p, "text-indent", &from->text_indent, &to->text_indent, SP_STYLE_FLAG_IFDIFF);
- p += sp_style_write_ienum(p, c + BMAX - p, "text-align", enum_text_align, &from->text_align, &to->text_align, SP_STYLE_FLAG_IFDIFF);
- p += sp_style_write_itextdecoration(p, c + BMAX - p, "text-decoration",
- &from->text_decoration_line, &from->text_decoration_style, &from->text_decoration_color,
- &to->text_decoration_line, &to->text_decoration_style, &to->text_decoration_color,
- SP_STYLE_FLAG_IFDIFF);
- p += sp_style_write_ilengthornormal(p, c + BMAX - p, "line-height", &from->line_height, &to->line_height, SP_STYLE_FLAG_IFDIFF);
- p += sp_style_write_ilengthornormal(p, c + BMAX - p, "letter-spacing", &from->letter_spacing, &to->letter_spacing, SP_STYLE_FLAG_IFDIFF);
- p += sp_style_write_ilengthornormal(p, c + BMAX - p, "word-spacing", &from->word_spacing, &to->word_spacing, SP_STYLE_FLAG_IFDIFF);
- p += sp_style_write_ienum(p, c + BMAX - p, "text-transform", enum_text_transform, &from->text_transform, &to->text_transform, SP_STYLE_FLAG_IFDIFF);
- p += sp_style_write_ienum(p, c + BMAX - p, "direction", enum_direction, &from->direction, &to->direction, SP_STYLE_FLAG_IFDIFF);
- p += sp_style_write_ienum(p, c + BMAX - p, "block-progression", enum_block_progression, &from->block_progression, &to->block_progression, SP_STYLE_FLAG_IFDIFF);
- p += sp_style_write_ienum(p, c + BMAX - p, "writing-mode", enum_writing_mode, &from->writing_mode, &to->writing_mode, SP_STYLE_FLAG_IFDIFF);
-
- p += sp_style_write_ienum(p, c + BMAX - p, "text-anchor", enum_text_anchor, &from->text_anchor, &to->text_anchor, SP_STYLE_FLAG_IFDIFF);
- p += sp_style_write_ibaselineshift(p, c + BMAX - p, "baseline-shift", &from->baseline_shift, &to->baseline_shift, SP_STYLE_FLAG_IFDIFF);
-
- /// \todo fixme: Per type methods need default flag too
- if (from->opacity.set && from->opacity.value != SP_SCALE24_MAX) {
- p += sp_style_write_iscale24(p, c + BMAX - p, "opacity", &from->opacity, &to->opacity, SP_STYLE_FLAG_IFSET);
- }
-
- if (!from->color.noneSet) { // CSS does not permit "none" for color
- p += sp_style_write_ipaint(p, c + BMAX - p, "color", &from->color, &to->color, SP_STYLE_FLAG_IFSET);
- }
- p += sp_style_write_ienum(p, c + BMAX - p, "color-interpolation", enum_color_interpolation, &from->color_interpolation, &to->color_interpolation, SP_STYLE_FLAG_IFDIFF);
- p += sp_style_write_ienum(p, c + BMAX - p, "color-interpolation-filters", enum_color_interpolation, &from->color_interpolation_filters, &to->color_interpolation_filters, SP_STYLE_FLAG_IFDIFF);
-
- p += sp_style_write_ipaint(p, c + BMAX - p, "fill", &from->fill, &to->fill, SP_STYLE_FLAG_IFDIFF);
- // if fill:none, skip writing fill properties
- if (!from->fill.noneSet) {
- p += sp_style_write_iscale24(p, c + BMAX - p, "fill-opacity", &from->fill_opacity, &to->fill_opacity, SP_STYLE_FLAG_IFDIFF);
- p += sp_style_write_ienum(p, c + BMAX - p, "fill-rule", enum_fill_rule, &from->fill_rule, &to->fill_rule, SP_STYLE_FLAG_IFDIFF);
- }
-
- p += sp_style_write_ipaint(p, c + BMAX - p, "stroke", &from->stroke, &to->stroke, SP_STYLE_FLAG_IFDIFF);
-
- // stroke width affects markers, so write it if there's stroke OR any markers
- if (!from->stroke.noneSet ||
- from->marker[SP_MARKER_LOC].set ||
- from->marker[SP_MARKER_LOC_START].set ||
- from->marker[SP_MARKER_LOC_MID].set ||
- from->marker[SP_MARKER_LOC_END].set) {
- p += sp_style_write_ilength(p, c + BMAX - p, "stroke-width", &from->stroke_width, &to->stroke_width, SP_STYLE_FLAG_IFDIFF);
- }
-
- // if stroke:none, skip writing stroke properties
- if (!from->stroke.noneSet) {
- p += sp_style_write_ienum(p, c + BMAX - p, "stroke-linecap", enum_stroke_linecap,
- &from->stroke_linecap, &to->stroke_linecap, SP_STYLE_FLAG_IFDIFF);
- p += sp_style_write_ienum(p, c + BMAX - p, "stroke-linejoin", enum_stroke_linejoin,
- &from->stroke_linejoin, &to->stroke_linejoin, SP_STYLE_FLAG_IFDIFF);
- p += sp_style_write_ifloat(p, c + BMAX - p, "stroke-miterlimit",
- &from->stroke_miterlimit, &to->stroke_miterlimit, SP_STYLE_FLAG_IFDIFF);
- p += sp_style_write_idasharray(p, c + BMAX - p, "stroke-dasharray",
- &from->stroke_dasharray, &to->stroke_dasharray, SP_STYLE_FLAG_IFDIFF);
- p += sp_style_write_ilength(p, c + BMAX - p, "stroke-dashoffset", &from->stroke_dashoffset, &to->stroke_dashoffset, SP_STYLE_FLAG_IFDIFF);
- p += sp_style_write_iscale24(p, c + BMAX - p, "stroke-opacity", &from->stroke_opacity, &to->stroke_opacity, SP_STYLE_FLAG_IFDIFF);
- }
-
- /* paint-order */
- if( from->paint_order.set) {
- p += sp_style_write_ipaintorder(p, c + BMAX - p, "paint-order", &from->paint_order, &to->paint_order, SP_STYLE_FLAG_IFDIFF);
- }
-
- /* markers */
- gchar *master = from->marker[SP_MARKER_LOC].value;
- if (master != NULL) {
- p += g_snprintf(p, c + BMAX - p, "marker:%s;", master);
- }
- if (from->marker[SP_MARKER_LOC_START].value != NULL && (!master || strcmp(master, from->marker[SP_MARKER_LOC_START].value))) {
- p += g_snprintf(p, c + BMAX - p, "marker-start:%s;", from->marker[SP_MARKER_LOC_START].value);
- }
- if (from->marker[SP_MARKER_LOC_MID].value != NULL && (!master || strcmp(master, from->marker[SP_MARKER_LOC_MID].value))) {
- p += g_snprintf(p, c + BMAX - p, "marker-mid:%s;", from->marker[SP_MARKER_LOC_MID].value);
- }
- if (from->marker[SP_MARKER_LOC_END].value != NULL && (!master || strcmp(master, from->marker[SP_MARKER_LOC_END].value))) {
- p += g_snprintf(p, c + BMAX - p, "marker-end:%s;", from->marker[SP_MARKER_LOC_END].value);
- }
-
- p += sp_style_write_ienum(p, c + BMAX - p, "visibility", enum_visibility, &from->visibility, &to->visibility, SP_STYLE_FLAG_IFSET);
- p += sp_style_write_ienum(p, c + BMAX - p, "display", enum_display, &from->display, &to->display, SP_STYLE_FLAG_IFSET);
- p += sp_style_write_ienum(p, c + BMAX - p, "overflow", enum_overflow, &from->overflow, &to->overflow, SP_STYLE_FLAG_IFSET);
- p += sp_style_write_ienum(p, c + BMAX - p, "isolation", enum_isolation, &from->isolation, &to->isolation, SP_STYLE_FLAG_IFSET);
- p += sp_style_write_ienum(p, c + BMAX - p, "mix-blend-mode", enum_blend_mode, &from->blend_mode, &to->blend_mode, SP_STYLE_FLAG_IFSET);
-
- /* filter: */
- p += sp_style_write_ifilter(p, c + BMAX - p, "filter", &from->filter, &to->filter, SP_STYLE_FLAG_IFDIFF);
-
- p += sp_style_write_ienum(p, c + BMAX - p, "enable-background", enum_enable_background, &from->enable_background, &to->enable_background, SP_STYLE_FLAG_IFSET);
-
- p += sp_text_style_write(p, c + BMAX - p, from->text, SP_STYLE_FLAG_IFDIFF);
-
- p += sp_style_write_ienum(p, c + BMAX - p, "clip-rule", enum_clip_rule, &from->clip_rule, &to->clip_rule, SP_STYLE_FLAG_IFDIFF);
-
- /* rendering */
- p += sp_style_write_ienum(p, c + BMAX - p, "color-rendering", enum_color_rendering, &from->color_rendering, &to->color_rendering, SP_STYLE_FLAG_IFDIFF);
- p += sp_style_write_ienum(p, c + BMAX - p, "image-rendering", enum_image_rendering, &from->image_rendering, &to->image_rendering, SP_STYLE_FLAG_IFDIFF);
- p += sp_style_write_ienum(p, c + BMAX - p, "shape-rendering", enum_shape_rendering, &from->shape_rendering, &to->shape_rendering, SP_STYLE_FLAG_IFDIFF);
- p += sp_style_write_ienum(p, c + BMAX - p, "text-rendering", enum_text_rendering, &from->text_rendering, &to->text_rendering, SP_STYLE_FLAG_IFDIFF);
-
- /** \todo
- * The reason we use IFSET rather than IFDIFF is the belief that the IFDIFF
- * flag is mainly only for attributes that don't handle explicit unset well.
- * We may need to revisit the behaviour of this routine.
- */
-
- /* Get rid of trailing `;'. */
- if (p != c) {
- --p;
- if (*p == ';') {
- *p = '\0';
- }
- }
-
- return g_strdup(c);
-}
-
-
-
-/**
- * Reset all style properties.
- */
-static void
-sp_style_clear(SPStyle *style)
-{
- g_return_if_fail(style != NULL);
-
- style->fill.clear();
- style->stroke.clear();
- sp_style_filter_clear(style);
-
- style->release_connection.disconnect();
-
- style->fill_ps_modified_connection.disconnect();
- if (style->fill.value.href) {
- delete style->fill.value.href;
- style->fill.value.href = NULL;
- }
- style->stroke_ps_modified_connection.disconnect();
- if (style->stroke.value.href) {
- delete style->stroke.value.href;
- style->stroke.value.href = NULL;
- }
- style->filter_modified_connection.disconnect();
- if (style->filter.href) {
- delete style->filter.href;
- style->filter.href = NULL;
- }
-
- style->stroke_dasharray.values.clear();
- style->stroke_dasharray.inherit = FALSE;
- style->stroke_dashoffset.inherit = FALSE;
-
- /** \todo fixme: Do that text manipulation via parents */
- SPObject *object = style->object;
- SPDocument *document = style->document;
- gint const refcount = style->refcount;
- SPTextStyle *text = style->text;
- unsigned const text_private = style->text_private;
-
-
- style->refcount = refcount;
- style->object = object;
- style->document = document;
-
- if (document) {
- style->filter.href = new SPFilterReference(document);
- style->filter.href->changedSignal().connect(sigc::bind(sigc::ptr_fun(sp_style_filter_ref_changed), style));
-
- style->fill.value.href = new SPPaintServerReference(document);
- style->fill.value.href->changedSignal().connect(sigc::bind(sigc::ptr_fun(sp_style_fill_paint_server_ref_changed), style));
-
- style->stroke.value.href = new SPPaintServerReference(document);
- style->stroke.value.href->changedSignal().connect(sigc::bind(sigc::ptr_fun(sp_style_stroke_paint_server_ref_changed), style));
- }
-
- style->text = text;
- style->text_private = text_private;
-
- style->text->font_specification.set = FALSE;
- style->text->font.set = FALSE;
- style->text->font_family.set = FALSE;
-
- style->font_size.set = FALSE;
- style->font_size.inherit = FALSE;
- style->font_size.type = SP_FONT_SIZE_LITERAL;
- style->font_size.unit = 0;
- style->font_size.literal = SP_CSS_FONT_SIZE_MEDIUM;
- style->font_size.value = 12.0;
- style->font_size.computed = 12.0;
- style->font_style.set = FALSE;
- style->font_style.inherit = FALSE;
- style->font_style.value = style->font_style.computed = SP_CSS_FONT_STYLE_NORMAL;
- style->font_variant.set = FALSE;
- style->font_variant.inherit = FALSE;
- style->font_variant.value = style->font_variant.computed = SP_CSS_FONT_VARIANT_NORMAL;
- style->font_weight.set = FALSE;
- style->font_weight.inherit = FALSE;
- style->font_weight.value = SP_CSS_FONT_WEIGHT_NORMAL;
- style->font_weight.computed = SP_CSS_FONT_WEIGHT_400;
- style->font_stretch.set = FALSE;
- style->font_stretch.inherit = FALSE;
- style->font_stretch.value = style->font_stretch.computed = SP_CSS_FONT_STRETCH_NORMAL;
-
- /* text */
- style->text_indent.set = FALSE;
- style->text_indent.inherit = FALSE;
- style->text_indent.unit = SP_CSS_UNIT_NONE;
- style->text_indent.computed = 0.0;
-
- style->text_align.set = FALSE;
- style->text_align.inherit = FALSE;
- style->text_align.value = style->text_align.computed = SP_CSS_TEXT_ALIGN_START;
-
- style->text_decoration_line.set = FALSE;
- style->text_decoration_line.inherit = FALSE;
- style->text_decoration_line.underline = FALSE;
- style->text_decoration_line.overline = FALSE;
- style->text_decoration_line.line_through = FALSE;
- style->text_decoration_line.blink = FALSE;
-
- style->text_decoration_style.set = FALSE;
- style->text_decoration_style.inherit = FALSE;
- style->text_decoration_style.solid = FALSE;
- style->text_decoration_style.isdouble = FALSE;
- style->text_decoration_style.dotted = FALSE;
- style->text_decoration_style.dashed = FALSE;
- style->text_decoration_style.wavy = FALSE;
-
- style->text_decoration_color.clear();
-
- style->line_height.set = FALSE;
- style->line_height.inherit = FALSE;
- style->line_height.unit = SP_CSS_UNIT_PERCENT;
- style->line_height.normal = TRUE;
- style->line_height.value = style->line_height.computed = 1.0;
-
- style->letter_spacing.set = FALSE;
- style->letter_spacing.inherit = FALSE;
- style->letter_spacing.unit = SP_CSS_UNIT_NONE;
- style->letter_spacing.normal = TRUE;
- style->letter_spacing.value = style->letter_spacing.computed = 0.0;
-
- style->word_spacing.set = FALSE;
- style->word_spacing.inherit = FALSE;
- style->word_spacing.unit = SP_CSS_UNIT_NONE;
- style->word_spacing.normal = TRUE;
- style->word_spacing.value = style->word_spacing.computed = 0.0;
-
- style->baseline_shift.set = FALSE;
- style->baseline_shift.inherit = FALSE;
- style->baseline_shift.type = SP_BASELINE_SHIFT_LITERAL;
- style->baseline_shift.unit = SP_CSS_UNIT_NONE;
- style->baseline_shift.literal = SP_CSS_BASELINE_SHIFT_BASELINE;
- style->baseline_shift.value = 0.0;
- style->baseline_shift.computed = 0.0;
-
- style->text_transform.set = FALSE;
- style->text_transform.inherit = FALSE;
- style->text_transform.value = style->text_transform.computed = SP_CSS_TEXT_TRANSFORM_NONE;
-
- style->direction.set = FALSE;
- style->direction.inherit = FALSE;
- style->direction.value = style->direction.computed = SP_CSS_DIRECTION_LTR;
-
- style->block_progression.set = FALSE;
- style->block_progression.inherit = FALSE;
- style->block_progression.value = style->block_progression.computed = SP_CSS_BLOCK_PROGRESSION_TB;
-
- style->writing_mode.set = FALSE;
- style->writing_mode.inherit = FALSE;
- style->writing_mode.value = style->writing_mode.computed = SP_CSS_WRITING_MODE_LR_TB;
-
- style->text_anchor.set = FALSE;
- style->text_anchor.inherit = FALSE;
- style->text_anchor.value = style->text_anchor.computed = SP_CSS_TEXT_ANCHOR_START;
-
- style->clip_set = FALSE;
- style->color_set = FALSE;
- style->cursor_set = FALSE;
- style->overflow_set = FALSE;
- style->clip_path_set = FALSE;
- style->mask_set = FALSE;
-
- style->clip_rule.set = FALSE;
- style->clip_rule.inherit = FALSE;
- style->clip_rule.value = style->clip_rule.computed = SP_WIND_RULE_NONZERO;
-
- style->opacity.set = FALSE;
- style->opacity.inherit = FALSE;
- style->opacity.value = SP_SCALE24_MAX;
- style->visibility.set = FALSE;
- style->visibility.inherit = FALSE;
- style->visibility.value = style->visibility.computed = SP_CSS_VISIBILITY_VISIBLE;
- style->display.set = FALSE;
- style->display.inherit = FALSE;
- style->display.value = style->display.computed = SP_CSS_DISPLAY_INLINE;
- style->overflow.set = FALSE;
- style->overflow.inherit = FALSE;
- style->overflow.value = style->overflow.computed = SP_CSS_OVERFLOW_VISIBLE;
- style->isolation.set = FALSE;
- style->isolation.inherit = FALSE;
- style->isolation.value = style->isolation.computed = SP_CSS_ISOLATION_AUTO;
- style->blend_mode.set = FALSE;
- style->blend_mode.inherit = FALSE;
- style->blend_mode.value = style->blend_mode.computed = SP_CSS_BLEND_NORMAL;
-
- style->color.clear();
- style->color.setColor(0.0, 0.0, 0.0);
- style->color_interpolation.set = FALSE;
- style->color_interpolation.inherit = FALSE;
- style->color_interpolation.value = style->color_interpolation.computed = SP_CSS_COLOR_INTERPOLATION_SRGB;
- style->color_interpolation_filters.set = FALSE;
- style->color_interpolation_filters.inherit = FALSE;
- style->color_interpolation_filters.value = style->color_interpolation_filters.computed = SP_CSS_COLOR_INTERPOLATION_LINEARRGB;
-
-
- style->fill.clear();
- style->fill.setColor(0.0, 0.0, 0.0);
- style->fill_opacity.set = FALSE;
- style->fill_opacity.inherit = FALSE;
- style->fill_opacity.value = SP_SCALE24_MAX;
- style->fill_rule.set = FALSE;
- style->fill_rule.inherit = FALSE;
- style->fill_rule.value = style->fill_rule.computed = SP_WIND_RULE_NONZERO;
-
- style->stroke.clear();
- style->stroke_opacity.set = FALSE;
- style->stroke_opacity.inherit = FALSE;
- style->stroke_opacity.value = SP_SCALE24_MAX;
-
- style->stroke_width.set = FALSE;
- style->stroke_width.inherit = FALSE;
- style->stroke_width.unit = SP_CSS_UNIT_NONE;
- style->stroke_width.value = style->stroke_width.computed = 1.0;
-
- style->stroke_linecap.set = FALSE;
- style->stroke_linecap.inherit = FALSE;
- style->stroke_linecap.value = style->stroke_linecap.computed = SP_STROKE_LINECAP_BUTT;
- style->stroke_linejoin.set = FALSE;
- style->stroke_linejoin.inherit = FALSE;
- style->stroke_linejoin.value = style->stroke_linejoin.computed = SP_STROKE_LINEJOIN_MITER;
-
- style->stroke_miterlimit.set = FALSE;
- style->stroke_miterlimit.inherit = FALSE;
- style->stroke_miterlimit.value = 4.0;
-
- style->stroke_dasharray.values.clear();
- style->stroke_dasharray.set = FALSE;
- style->stroke_dasharray.inherit = FALSE;
-
- style->stroke_dashoffset.value = style->stroke_dashoffset.computed = 0.0;
- style->stroke_dashoffset.set = FALSE;
- style->stroke_dashoffset.inherit = FALSE;
-
- for (unsigned i = SP_MARKER_LOC; i < SP_MARKER_LOC_QTY; i++) {
- g_free(style->marker[i].value);
- style->marker[i].set = FALSE;
- style->marker[i].inherit = FALSE;
- style->marker[i].data = 0;
- style->marker[i].value = NULL;
- }
-
- /* SVG 2 */
- style->paint_order.set = FALSE;
- style->paint_order.inherit = FALSE; // For now
- for (unsigned i = 0; i < PAINT_ORDER_LAYERS; ++i) {
- style->paint_order.layer[i] = SP_CSS_PAINT_ORDER_NORMAL;
- style->paint_order.layer_set[i] = false;
- }
- style->paint_order.value = NULL;
-
- style->filter.set = FALSE;
- style->filter.inherit = FALSE;
- style->filter.href = NULL;
-
- style->enable_background.value = SP_CSS_BACKGROUND_ACCUMULATE;
- style->enable_background.set = false;
- style->enable_background.inherit = false;
-
- style->filter_blend_mode.set = style->filter_blend_mode.inherit = false;
- style->filter_blend_mode.value = style->filter_blend_mode.computed = 0;
- style->filter_gaussianBlur_deviation.set = style->filter_gaussianBlur_deviation.inherit = false;
- style->filter_gaussianBlur_deviation.value = style->filter_gaussianBlur_deviation.computed = 0;
-
- style->color_rendering.set = style->color_rendering.inherit = false;
- style->color_rendering.value = style->color_rendering.computed = SP_CSS_COLOR_RENDERING_AUTO;
- style->image_rendering.set = style->image_rendering.inherit = false;
- style->image_rendering.value = style->image_rendering.computed = SP_CSS_IMAGE_RENDERING_AUTO;
- style->shape_rendering.set = style->shape_rendering.inherit = false;
- style->shape_rendering.value = style->shape_rendering.computed = SP_CSS_SHAPE_RENDERING_AUTO;
- style->text_rendering.set = style->text_rendering.inherit = false;
- style->text_rendering.value = style->text_rendering.computed = SP_CSS_TEXT_RENDERING_AUTO;
-
- style->cloned = false;
-}
-
-
-
-/**
- *
- */
-static void
-sp_style_read_dash(SPStyle *style, gchar const *str)
-{
- /* Ref: http://www.w3.org/TR/SVG11/painting.html#StrokeDasharrayProperty */
- style->stroke_dasharray.set = TRUE;
-
- if (strcmp(str, "inherit") == 0) {
- style->stroke_dasharray.inherit = true;
- return;
- }
- style->stroke_dasharray.inherit = false;
-
- style->stroke_dasharray.values.clear();
-
- if (strcmp(str, "none") == 0) {
- return;
- }
-
- gchar *e = NULL;
- bool LineSolid = true;
- while (e != str) {
- /* TODO: Should allow <length> rather than just a unitless (px) number. */
- double number = g_ascii_strtod(str, (char **) &e);
- style->stroke_dasharray.values.push_back( number );
- if (number > 0.00000001)
- LineSolid = false;
- if (e != str) {
- str = e;
- }
- while (str && *str && !isalnum(*str)) str += 1;
- }
-
- if (LineSolid) {
- style->stroke_dasharray.values.clear();
- }
-}
-
-
-/*#########################
-## SPTextStyle operations
-#########################*/
-
-
-/**
- * Return new SPTextStyle object with default settings.
- */
-static SPTextStyle *
-sp_text_style_new()
-{
- SPTextStyle *ts = g_new0(SPTextStyle, 1);
- ts->refcount = 1;
- sp_text_style_clear(ts);
-
- ts->font_specification.value = g_strdup("sans-serif");
- ts->font.value = g_strdup("sans-serif");
- ts->font_family.value = g_strdup("sans-serif");
-
- return ts;
-}
-
-
-/**
- * Clear text style settings.
- */
-static void
-sp_text_style_clear(SPTextStyle *ts)
-{
- ts->font_specification.set = FALSE;
- ts->font.set = FALSE;
- ts->font_family.set = FALSE;
-}
-
-
-
-/**
- * Reduce refcount of text style and possibly free it.
- */
-static SPTextStyle *
-sp_text_style_unref(SPTextStyle *st)
-{
- st->refcount -= 1;
-
- if (st->refcount < 1) {
- g_free(st->font_specification.value);
- g_free(st->font.value);
- g_free(st->font_family.value);
- g_free(st);
- }
-
- return NULL;
-}
-
-
-
-/**
- * Return duplicate of text style.
- */
-static SPTextStyle *
-sp_text_style_duplicate_unset(SPTextStyle *st)
-{
- SPTextStyle *nt = g_new0(SPTextStyle, 1);
- nt->refcount = 1;
-
- nt->font_specification.value = g_strdup(st->font_specification.value);
- nt->font.value = g_strdup(st->font.value);
- nt->font_family.value = g_strdup(st->font_family.value);
-
- return nt;
-}
-
-
-
-/**
- * Write SPTextStyle object into string.
- */
-static guint
-sp_text_style_write(gchar *p, guint const len, SPTextStyle const *const st, guint flags)
-{
- gint d = 0;
-
- // We do not do diffing for text style
- if (flags == SP_STYLE_FLAG_IFDIFF)
- flags = SP_STYLE_FLAG_IFSET;
-
- d += sp_style_write_istring(p + d, len - d, "font-family", &st->font_family, NULL, flags);
- d += sp_style_write_istring(p + d, len - d, "-inkscape-font-specification", &st->font_specification, NULL, flags);
- return d;
-}
-
-
-
-/* The following sp_tyle_read_* functions ignore invalid values, as per
- * http://www.w3.org/TR/REC-CSS2/syndata.html#parsing-errors.
- *
- * [However, the SVG spec is somewhat unclear as to whether the style attribute should
- * be handled as per CSS2 rules or whether it must simply be a set of PROPERTY:VALUE
- * pairs, in which case SVG's error-handling rules
- * http://www.w3.org/TR/SVG11/implnote.html#ErrorProcessing should instead be applied.]
- */
-
-
-/**
- * Set SPIFloat object from string.
- */
-static void
-sp_style_read_ifloat(SPIFloat *val, gchar const *str)
-{
- if (!strcmp(str, "inherit")) {
- val->set = TRUE;
- val->inherit = TRUE;
- } else {
- gfloat value;
- if (sp_svg_number_read_f(str, &value)) {
- val->set = TRUE;
- val->inherit = FALSE;
- val->value = value;
- }
- }
-}
-
-
-
-/**
- * Set SPIScale24 object from string.
- */
-static void
-sp_style_read_iscale24(SPIScale24 *val, gchar const *str)
-{
- if (!strcmp(str, "inherit")) {
- val->set = TRUE;
- val->inherit = TRUE;
- } else {
- gfloat value;
- if (sp_svg_number_read_f(str, &value)) {
- val->set = TRUE;
- val->inherit = FALSE;
- value = CLAMP(value, 0.0, 1.0);
- val->value = SP_SCALE24_FROM_FLOAT(value);
- }
- }
-}
-
-/**
- * Reads a style value and performs lookup based on the given style value enumerations.
- */
-static void
-sp_style_read_ienum(SPIEnum *val, gchar const *str, SPStyleEnum const *dict,
- bool const can_explicitly_inherit)
-{
- if ( can_explicitly_inherit && !strcmp(str, "inherit") ) {
- val->set = TRUE;
- val->inherit = TRUE;
- } else {
- for (unsigned i = 0; dict[i].key; i++) {
- if (!strcmp(str, dict[i].key)) {
- val->set = TRUE;
- val->inherit = FALSE;
- val->value = dict[i].value;
- /* Save copying for values not needing it */
- val->computed = val->value;
- break;
- }
- }
- }
- return;
-}
-
-
-
-/**
- * Set SPIString object from string.
- */
-static void
-sp_style_read_istring(SPIString *val, gchar const *str)
-{
- g_free(val->value);
-
- if (!strcmp(str, "inherit")) {
- val->set = TRUE;
- val->inherit = TRUE;
- val->value = NULL;
- } else {
- val->set = TRUE;
- val->inherit = FALSE;
- val->value = g_strdup(str);
- }
-}
-
-
-
-/**
- * Set SPILength object from string.
- */
-static void
-sp_style_read_ilength(SPILength *val, gchar const *str)
-{
- if (!strcmp(str, "inherit")) {
- val->set = TRUE;
- val->inherit = TRUE;
- } else {
- gdouble value;
- gchar *e;
- /** \todo fixme: Move this to standard place (Lauris) */
- value = g_ascii_strtod(str, &e);
- if ( !IS_FINITE(value) ) { // fix for bug lp:935157
- return;
- }
- if ((gchar const *) e != str) {
- /** \todo
- * Allow the number of px per inch to vary (document preferences,
- * X server or whatever). E.g. don't fill in computed here, do
- * it at the same time as percentage units are done.
- */
- val->value = value;
- if (!*e) {
- /* Userspace */
- val->unit = SP_CSS_UNIT_NONE;
- val->computed = value;
- } else if (!strcmp(e, "px")) {
- /* Userspace */
- val->unit = SP_CSS_UNIT_PX;
- val->computed = value;
- } else if (!strcmp(e, "pt")) {
- /* Userspace / DEVICESCALE */
- val->unit = SP_CSS_UNIT_PT;
- val->computed = Inkscape::Util::Quantity::convert(value, "pt", "px");
- } else if (!strcmp(e, "pc")) {
- val->unit = SP_CSS_UNIT_PC;
- val->computed = Inkscape::Util::Quantity::convert(value, "pc", "px");
- } else if (!strcmp(e, "mm")) {
- val->unit = SP_CSS_UNIT_MM;
- val->computed = Inkscape::Util::Quantity::convert(value, "mm", "px");
- } else if (!strcmp(e, "cm")) {
- val->unit = SP_CSS_UNIT_CM;
- val->computed = Inkscape::Util::Quantity::convert(value, "cm", "px");
- } else if (!strcmp(e, "in")) {
- val->unit = SP_CSS_UNIT_IN;
- val->computed = Inkscape::Util::Quantity::convert(value, "in", "px");
- } else if (!strcmp(e, "em")) {
- /* EM square */
- val->unit = SP_CSS_UNIT_EM;
- val->computed = value * SP_CSS_FONT_SIZE_DEFAULT;
- } else if (!strcmp(e, "ex")) {
- /* ex square */
- val->unit = SP_CSS_UNIT_EX;
- val->computed = value * 0.5 * SP_CSS_FONT_SIZE_DEFAULT;
- } else if (!strcmp(e, "%")) {
- /* Percentage */
- val->unit = SP_CSS_UNIT_PERCENT;
- val->value = value * 0.01;
- } else {
- /* Invalid */
- return;
- }
- val->set = TRUE;
- val->inherit = FALSE;
- }
- }
-}
-
-/**
- * Set SPILengthOrNormal object from string.
- */
-static void
-sp_style_read_ilengthornormal(SPILengthOrNormal *val, gchar const *str)
-{
- if (!strcmp(str, "normal")) {
- val->set = TRUE;
- val->inherit = FALSE;
- val->normal = TRUE;
- val->unit = SP_CSS_UNIT_NONE;
- val->value = val->computed = 0.0;
- } else {
- SPILength length;
- sp_style_read_ilength(&length, str);
- val->set = length.set;
- val->inherit = length.inherit;
- val->normal = FALSE;
- val->unit = length.unit;
- val->value = length.value;
- val->computed = length.computed;
- }
-}
-
-/**
- * Set SPIPaintOrder object from string.
- */
-static void
-sp_style_read_ipaintorder(SPIPaintOrder *val, gchar const *str)
-{
- g_free(val->value);
-
- if (!strcmp(str, "inherit")) {
- // NEED TO CHECK FINAL SPEC
- val->set = TRUE;
- val->inherit = TRUE;
- val->value = NULL;
- } else {
- val->set = TRUE;
- val->inherit = FALSE;
- val->value = g_strdup(str);
-
- if (!strcmp(str, "normal")) {
- val->layer[0] = SP_CSS_PAINT_ORDER_NORMAL;
- val->layer_set[0] = true;
- } else {
- // This certainly can be done more efficiently
- gchar** c = g_strsplit(str, " ", PAINT_ORDER_LAYERS + 1);
- bool used[3] = {false, false, false};
- unsigned int i = 0;
- for( ; i < PAINT_ORDER_LAYERS; ++i ) {
- if( c[i] ) {
- val->layer_set[i] = false;
- if( !strcmp( c[i], "fill")) {
- val->layer[i] = SP_CSS_PAINT_ORDER_FILL;
- val->layer_set[i] = true;
- used[0] = true;
- } else if( !strcmp( c[i], "stroke")) {
- val->layer[i] = SP_CSS_PAINT_ORDER_STROKE;
- val->layer_set[i] = true;
- used[1] = true;
- } else if( !strcmp( c[i], "markers")) {
- val->layer[i] = SP_CSS_PAINT_ORDER_MARKER;
- val->layer_set[i] = true;
- used[2] = true;
- } else {
- break;
- }
- } else {
- break;
- }
- }
- g_strfreev(c);
-
- // Fill out rest of the layers using the default order
- if( !used[0] && i < PAINT_ORDER_LAYERS ) {
- val->layer[i] = SP_CSS_PAINT_ORDER_FILL;
- val->layer_set[i] = false;
- ++i;
- }
- if( !used[1] && i < PAINT_ORDER_LAYERS ) {
- val->layer[i] = SP_CSS_PAINT_ORDER_STROKE;
- val->layer_set[i] = false;
- ++i;
- }
- if( !used[2] && i < PAINT_ORDER_LAYERS ) {
- val->layer[i] = SP_CSS_PAINT_ORDER_MARKER;
- val->layer_set[i] = false;
- }
- }
- }
-}
-
-
-
-/**
- * Set SPITextDecoration object from string.
- */
-static void
-sp_style_read_itextdecoration(SPITextDecorationLine *line, SPITextDecorationStyle *style, SPIPaint *color, gchar const *str){
- sp_style_read_itextdecorationLine(line, str); // scans all tokens for line types
- sp_style_read_itextdecorationStyle(style, str); // scans all tokens for style types
- // the color routine must be fed one token at a time - if multiple colors are found the LAST one is used
- const gchar *hstr = str;
- while (1) {
- if (*str == ' ' || *str == ',' || *str == '\0'){
- int slen = str - hstr;
- gchar *frag = g_strndup(hstr,slen+1); // only send one piece at a time, since keywords may be intermixed
- sp_style_read_itextdecorationColor(color, frag);
- g_free(frag);
- if(color->set)break;
- if(*str == '\0')break;
- hstr = str + 1;
- }
- str++;
- }
-}
-
-/**
- * Set SPITextDecorationLine object from string.
- * returns true if there was a match, false otherwise
- */
-static void
-sp_style_read_itextdecorationLine(SPITextDecorationLine *line, gchar const *str){
- if (!strcmp(str, "inherit")) {
- line->set = true;
- line->inherit = true;
- } else if (!strcmp(str, "none")) {
- line->set = true;
- line->inherit = false;
- line->underline = false;
- line->overline = false;
- line->line_through = false;
- line->blink = false;
- } else {
- bool found_one = false;
- bool hit_one = false;
-
- // CSS 2 keywords
- bool found_underline = false;
- bool found_overline = false;
- bool found_line_through = false;
- bool found_blink = false;
-
- // this method ignores inlineid keys and extra delimiters, so " ,,, blink hello" will set blink and ignore hello
- const gchar *hstr = str;
- while (1) {
- if (*str == ' ' || *str == ',' || *str == '\0'){
- int slen = str - hstr;
- // CSS 2 keywords
- while(1){ // not really a loop, used to avoid a goto
- hit_one = true; // most likely we will
- if ((slen == 9) && strneq(hstr, "underline", slen)){ found_underline = true; break; }
- if ((slen == 8) && strneq(hstr, "overline", slen)){ found_overline = true; break; }
- if ((slen == 12) && strneq(hstr, "line-through", slen)){ found_line_through = true; break; }
- if ((slen == 5) && strneq(hstr, "blink", slen)){ found_blink = true; break; }
- if ((slen == 4) && strneq(hstr, "none", slen)){ break; }
-
- hit_one = false; // whatever this thing is, we do not recognize it
- break;
- }
- found_one |= hit_one;
- if(*str == '\0')break;
- hstr = str + 1;
- }
- str++;
- }
- if (found_one) {
- line->set = true;
- line->inherit = false;
- line->underline = found_underline;
- line->overline = found_overline;
- line->line_through = found_line_through;
- line->blink = found_blink;
- }
- else {
- line->set = false;
- line->inherit = false;
- }
- }
-}
-
-/**
- * Set SPITextDecorationStyle object from string.
- * returns true if there was a match, false otherwise
-*/
-static void
-sp_style_read_itextdecorationStyle(SPITextDecorationStyle *style, gchar const *str){
- if (!strcmp(str, "inherit")) {
- style->set = true;
- style->inherit = true;
- } else if (!strcmp(str, "none")) {
- style->set = true;
- style->inherit = false;
- style->solid = false;
- style->isdouble = false;
- style->dotted = false;
- style->dashed = false;
- style->wavy = false;
- } else {
- // note, these are CSS 3 keywords
- bool found_solid = false;
- bool found_double = false;
- bool found_dotted = false;
- bool found_dashed = false;
- bool found_wavy = false;
- bool found_one = false;
-
- // this method ignores inlineid keys and extra delimiters, so " ,,, style hello" will set style and ignore hello
- // if more than one style is present, the first is used
- const gchar *hstr = str;
- while (1) {
- if (*str == ' ' || *str == ',' || *str == '\0'){
- int slen = str - hstr;
- if ( (slen == 5) && strneq(hstr, "solid", slen)){ found_solid = true; found_one = true; break; }
- else if ((slen == 6) && strneq(hstr, "double", slen)){ found_double = true; found_one = true; break; }
- else if ((slen == 6) && strneq(hstr, "dotted", slen)){ found_dotted = true; found_one = true; break; }
- else if ((slen == 6) && strneq(hstr, "dashed", slen)){ found_dashed = true; found_one = true; break; }
- else if ((slen == 4) && strneq(hstr, "wavy", slen)){ found_wavy = true; found_one = true; break; }
- if(*str == '\0')break; // nothing more to test
- hstr = str + 1;
- }
- str++;
- }
- if(found_one){
- style->set = true;
- style->inherit = false;
- style->solid = found_solid;
- style->isdouble = found_double;
- style->dotted = found_dotted;
- style->dashed = found_dashed;
- style->wavy = found_wavy;
- }
- else {
- style->set = false;
- style->inherit = false;
- }
- }
-}
-
-/**
- * Set SPIPaint object from string.
- */
-static void
-sp_style_read_itextdecorationColor(SPIPaint *color, gchar const *str){
- sp_style_read_icolor(color, str, NULL,NULL);
-}
-
-
-/**
- * Set SPIPaint object from string containing an integer value.
- * \param document Ignored
- */
-static void
-sp_style_read_icolor(SPIPaint *paint, gchar const *str, SPStyle *style, SPDocument *document)
-{
- (void)style; // TODO
- (void)document; // TODO
- paint->currentcolor = FALSE; /* currentColor not a valid <color>. */
- if (!strcmp(str, "inherit")) {
- paint->set = TRUE;
- paint->inherit = TRUE;
- } else {
- paint->inherit = FALSE;
- guint32 const rgb0 = sp_svg_read_color(str, 0xff);
- if (rgb0 != 0xff) {
- paint->setColor(rgb0);
- paint->set = TRUE;
- }
- }
-}
-
-
-/**
- * Set SPIPaint object from string.
- *
- * \pre paint == \&style.fill || paint == \&style.stroke.
- */
-void SPIPaint::read( gchar const *str, SPStyle &style, SPDocument *document )
-{
- while (g_ascii_isspace(*str)) {
- ++str;
- }
-
- clear();
-
- if (streq(str, "inherit")) {
- set = TRUE;
- inherit = TRUE;
- } else {
- if ( strneq(str, "url", 3) ) {
- gchar *uri = extract_uri( str, &str );
- while ( g_ascii_isspace(*str) ) {
- ++str;
- }
- // TODO check on and comment the comparrison "paint != &style->color".
- if ( uri && *uri && (this != &style.color) ) {
- set = TRUE;
-
- // it may be that this style's SPIPaint has not yet created its URIReference;
- // now that we have a document, we can create it here
- if (!value.href && document) {
- value.href = new SPPaintServerReference(document);
- value.href->changedSignal().connect(sigc::bind(sigc::ptr_fun((this == &style.fill)? sp_style_fill_paint_server_ref_changed : sp_style_stroke_paint_server_ref_changed), &style));
- }
-
- // TODO check what this does in light of move away from union
- sp_style_set_ipaint_to_uri_string (&style, this, uri);
- }
- g_free( uri );
- }
-
- if (streq(str, "currentColor") && (this != &style.color)) {
- set = TRUE;
- currentcolor = TRUE;
- } else if (streq(str, "none") && (this != &style.color)) {
- set = TRUE;
- noneSet = TRUE;
- } else {
- guint32 const rgb0 = sp_svg_read_color(str, &str, 0xff);
- if (rgb0 != 0xff) {
- setColor( rgb0 );
- set = TRUE;
-
- while (g_ascii_isspace(*str)) {
- ++str;
- }
- if (strneq(str, "icc-color(", 10)) {
- SVGICCColor* tmp = new SVGICCColor();
- if ( ! sp_svg_read_icc_color( str, &str, tmp ) ) {
- delete tmp;
- tmp = 0;
- }
- value.color.icc = tmp;
- }
- }
- }
- }
-}
-
-
-
-/**
- * Set SPIFontSize object from string.
- */
-static void
-sp_style_read_ifontsize(SPIFontSize *val, gchar const *str)
-{
- if (!strcmp(str, "inherit")) {
- val->set = TRUE;
- val->inherit = TRUE;
- } else if ((*str == 'x') || (*str == 's') || (*str == 'm') || (*str == 'l')) {
- // xx-small, x-small, etc.
- for (unsigned i = 0; enum_font_size[i].key; i++) {
- if (!strcmp(str, enum_font_size[i].key)) {
- val->set = TRUE;
- val->inherit = FALSE;
- val->type = SP_FONT_SIZE_LITERAL;
- val->literal = enum_font_size[i].value;
- return;
- }
- }
- /* Invalid */
- return;
- } else {
- SPILength length;
- length.set = FALSE;
- sp_style_read_ilength(&length, str);
- if( length.set ) {
- val->set = TRUE;
- val->inherit = length.inherit;
- val->unit = length.unit;
- val->value = length.value;
- val->computed = length.computed;
- if( val->unit == SP_CSS_UNIT_PERCENT ) {
- val->type = SP_FONT_SIZE_PERCENTAGE;
- } else {
- val->type = SP_FONT_SIZE_LENGTH;
- }
- }
- return;
- }
-}
-
-
-/**
- * Set SPIBaselineShift object from string.
- */
-static void
-sp_style_read_ibaselineshift(SPIBaselineShift *val, gchar const *str)
-{
- if (!strcmp(str, "inherit")) {
- val->set = TRUE;
- val->inherit = TRUE;
- } else if ((*str == 'b') || (*str == 's')) {
- // baseline or sub or super
- for (unsigned i = 0; enum_baseline_shift[i].key; i++) {
- if (!strcmp(str, enum_baseline_shift[i].key)) {
- val->set = TRUE;
- val->inherit = FALSE;
- val->type = SP_BASELINE_SHIFT_LITERAL;
- val->literal = enum_baseline_shift[i].value;
- return;
- }
- }
- /* Invalid */
- return;
- } else {
- SPILength length;
- sp_style_read_ilength(&length, str);
- val->set = length.set;
- val->inherit = length.inherit;
- val->unit = length.unit;
- val->value = length.value;
- val->computed = length.computed;
- if( val->unit == SP_CSS_UNIT_PERCENT ) {
- val->type = SP_BASELINE_SHIFT_PERCENTAGE;
- } else {
- val->type = SP_BASELINE_SHIFT_LENGTH;
- }
- return;
- }
-}
-
-
-/**
- * Set SPIFilter object from string.
- */
-static void
-sp_style_read_ifilter(gchar const *str, SPStyle * style, SPDocument *document)
-{
- SPIFilter *f = &(style->filter);
- /* Try all possible values: inherit, none, uri */
- if (streq(str, "inherit")) {
- f->set = TRUE;
- f->inherit = TRUE;
- if (f->href){
- if (f->href->getObject()){
- f->href->detach();
- }
- }
- } else if(streq(str, "none")) {
- f->set = TRUE;
- f->inherit = FALSE;
- if (f->href){
- if (f->href->getObject()){
- f->href->detach();
- }
- }
- } else if (strneq(str, "url", 3)) {
- char *uri = extract_uri(str);
- if(uri == NULL || uri[0] == '\0') {
- g_warning("Specified filter url is empty");
- f->set = TRUE;
- f->inherit = FALSE;
- return;
- }
- f->set = TRUE;
- f->inherit = FALSE;
- if (f->href){
- if (f->href->getObject()){
- f->href->detach();
- }
- }
-
- // it may be that this style has not yet created its SPFilterReference;
- // now that we have a document, we can create it here
- if (!f->href && document) {
- f->href = new SPFilterReference(document);
- f->href->changedSignal().connect(sigc::bind(sigc::ptr_fun(sp_style_filter_ref_changed), style));
- }
-
- try {
- f->href->attach(Inkscape::URI(uri));
- } catch (Inkscape::BadURIException &e) {
- g_warning("%s", e.what());
- f->href->detach();
- }
- g_free (uri);
-
- } else {
- /* We shouldn't reach this if SVG input is well-formed */
- f->set = FALSE;
- f->inherit = FALSE;
- if (f->href){
- if (f->href->getObject()){
- f->href->detach();
- }
- }
- }
-}
-
-/**
- * Set SPIEnum object from repr attribute.
- */
-static void
-sp_style_read_penum(SPIEnum *val, Inkscape::XML::Node *repr,
- gchar const *key, SPStyleEnum const *dict,
- bool const can_explicitly_inherit)
-{
- gchar const *str = repr->attribute(key);
- if (str) {
- sp_style_read_ienum(val, str, dict, can_explicitly_inherit);
- }
-}
-
-
-
-/**
- * Set SPILength object from repr attribute.
- */
-static void
-sp_style_read_plength(SPILength *val, Inkscape::XML::Node *repr, gchar const *key)
-{
- gchar const *str = repr->attribute(key);
- if (str) {
- sp_style_read_ilength(val, str);
- }
-}
-
-/**
- * Set SPIFontSize object from repr attribute.
- */
-static void
-sp_style_read_pfontsize(SPIFontSize *val, Inkscape::XML::Node *repr, gchar const *key)
-{
- gchar const *str = repr->attribute(key);
- if (str) {
- sp_style_read_ifontsize(val, str);
- }
-}
-
-
-/**
- * Set SPIBaselineShift object from repr attribute.
- */
-static void
-sp_style_read_pbaselineshift(SPIBaselineShift *val, Inkscape::XML::Node *repr, gchar const *key)
-{
- gchar const *str = repr->attribute(key);
- if (str) {
- sp_style_read_ibaselineshift(val, str);
- }
-}
-
-
-/**
- * Set SPIFloat object from repr attribute.
- */
-static void
-sp_style_read_pfloat(SPIFloat *val, Inkscape::XML::Node *repr, gchar const *key)
-{
- gchar const *str = repr->attribute(key);
- if (str) {
- sp_style_read_ifloat(val, str);
- }
-}
-
-
-/**
- * Write SPIFloat object into string.
- */
-static gint
-sp_style_write_ifloat(gchar *p, gint const len, gchar const *const key,
- SPIFloat const *const val, SPIFloat const *const base, guint const flags)
-{
- Inkscape::CSSOStringStream os;
-
- if ((flags & SP_STYLE_FLAG_ALWAYS)
- || ((flags & SP_STYLE_FLAG_IFSET) && val->set)
- || ((flags & SP_STYLE_FLAG_IFDIFF) && val->set
- && (!base->set || (val->value != base->value))))
- {
- if (val->inherit) {
- return g_snprintf(p, len, "%s:inherit;", key);
- } else {
- os << key << ":" << val->value << ";";
- return g_strlcpy(p, os.str().c_str(), len);
- }
- }
- return 0;
-}
-
-
-/**
- * Write SPIScale24 object into string.
- */
-static gint
-sp_style_write_iscale24(gchar *p, gint const len, gchar const *const key,
- SPIScale24 const *const val, SPIScale24 const *const base,
- guint const flags)
-{
- Inkscape::CSSOStringStream os;
-
- if ((flags & SP_STYLE_FLAG_ALWAYS)
- || ((flags & SP_STYLE_FLAG_IFSET) && val->set)
- || ((flags & SP_STYLE_FLAG_IFDIFF) && val->set
- && (!base->set || (val->value != base->value))))
- {
- if (val->inherit) {
- return g_snprintf(p, len, "%s:inherit;", key);
- } else {
- os << key << ":" << SP_SCALE24_TO_FLOAT(val->value) << ";";
- return g_strlcpy(p, os.str().c_str(), len);
- }
- }
- return 0;
-}
-
-
-/**
- * Write SPIEnum object into string.
- */
-static gint
-sp_style_write_ienum(gchar *p, gint const len, gchar const *const key,
- SPStyleEnum const *const dict,
- SPIEnum const *const val, SPIEnum const *const base, guint const flags)
-{
- if ((flags & SP_STYLE_FLAG_ALWAYS)
- || ((flags & SP_STYLE_FLAG_IFSET) && val->set)
- || ((flags & SP_STYLE_FLAG_IFDIFF) && val->set
- && (!base->set || (val->computed != base->computed))))
- {
- if (val->inherit) {
- return g_snprintf(p, len, "%s:inherit;", key);
- }
- for (unsigned i = 0; dict[i].key; i++) {
- if (dict[i].value == static_cast< gint > (val->value) ) {
- return g_snprintf(p, len, "%s:%s;", key, dict[i].key);
- }
- }
- }
- return 0;
-}
-
-
-
-/**
- * Write SPIString object into string.
- */
-static gint
-sp_style_write_istring(gchar *p, gint const len, gchar const *const key,
- SPIString const *const val, SPIString const *const base, guint const flags)
-{
- gint res = 0;
- if ((flags & SP_STYLE_FLAG_ALWAYS)
- || ((flags & SP_STYLE_FLAG_IFSET) && val->set)
- || ((flags & SP_STYLE_FLAG_IFDIFF) && val->set
- && (!base->set || strcmp(val->value, base->value))))
- {
- if (val->inherit) {
- res = g_snprintf(p, len, "%s:inherit;", key);
- } else {
- Glib::ustring val_quoted = css2_escape_quote(val->value);
- if (~val_quoted.empty()) {
- res = g_snprintf(p, len, "%s:%s;", key, val_quoted.c_str());
- }
- }
- }
- return res;
-}
-
-
-/**
- *
- */
-static bool
-sp_length_differ(SPILength const *const a, SPILength const *const b)
-{
- if (a->unit != b->unit) {
- if (a->unit == SP_CSS_UNIT_EM) return true;
- if (a->unit == SP_CSS_UNIT_EX) return true;
- if (a->unit == SP_CSS_UNIT_PERCENT) return true;
- if (b->unit == SP_CSS_UNIT_EM) return true;
- if (b->unit == SP_CSS_UNIT_EX) return true;
- if (b->unit == SP_CSS_UNIT_PERCENT) return true;
- }
-
- return (a->computed != b->computed);
-}
-
-
-
-/**
- * Write SPILength object into string.
- */
-static gint
-sp_style_write_ilength(gchar *p, gint const len, gchar const *const key,
- SPILength const *const val, SPILength const *const base, guint const flags)
-{
- Inkscape::CSSOStringStream os;
-
- if ((flags & SP_STYLE_FLAG_ALWAYS)
- || ((flags & SP_STYLE_FLAG_IFSET) && val->set)
- || ((flags & SP_STYLE_FLAG_IFDIFF) && val->set
- && (!base->set || sp_length_differ(val, base))))
- {
- if (val->inherit) {
- return g_snprintf(p, len, "%s:inherit;", key);
- } else {
- switch (val->unit) {
- case SP_CSS_UNIT_NONE:
- os << key << ":" << val->computed << ";";
- return g_strlcpy(p, os.str().c_str(), len);
- break;
- case SP_CSS_UNIT_PX:
- os << key << ":" << val->computed << "px;";
- return g_strlcpy(p, os.str().c_str(), len);
- break;
- case SP_CSS_UNIT_PT:
- os << key << ":" << Inkscape::Util::Quantity::convert(val->computed, "px", "pt") << "pt;";
- return g_strlcpy(p, os.str().c_str(), len);
- break;
- case SP_CSS_UNIT_PC:
- os << key << ":" << Inkscape::Util::Quantity::convert(val->computed, "px", "pc") << "pc;";
- return g_strlcpy(p, os.str().c_str(), len);
- break;
- case SP_CSS_UNIT_MM:
- os << key << ":" << Inkscape::Util::Quantity::convert(val->computed, "px", "mm") << "mm;";
- return g_strlcpy(p, os.str().c_str(), len);
- break;
- case SP_CSS_UNIT_CM:
- os << key << ":" << Inkscape::Util::Quantity::convert(val->computed, "px", "cm") << "cm;";
- return g_strlcpy(p, os.str().c_str(), len);
- break;
- case SP_CSS_UNIT_IN:
- os << key << ":" << Inkscape::Util::Quantity::convert(val->computed, "px", "in") << "in;";
- return g_strlcpy(p, os.str().c_str(), len);
- break;
- case SP_CSS_UNIT_EM:
- os << key << ":" << val->value << "em;";
- return g_strlcpy(p, os.str().c_str(), len);
- break;
- case SP_CSS_UNIT_EX:
- os << key << ":" << val->value << "ex;";
- return g_strlcpy(p, os.str().c_str(), len);
- break;
- case SP_CSS_UNIT_PERCENT:
- os << key << ":" << (val->value * 100.0) << "%;";
- return g_strlcpy(p, os.str().c_str(), len);
- break;
- default:
- /* Invalid */
- break;
- }
- }
- }
- return 0;
-}
-
-
-/**
- *
- */
-static bool
-sp_lengthornormal_differ(SPILengthOrNormal const *const a, SPILengthOrNormal const *const b)
-{
- if (a->normal != b->normal) return true;
- if (a->normal) return false;
-
- if (a->unit != b->unit) {
- if (a->unit == SP_CSS_UNIT_EM) return true;
- if (a->unit == SP_CSS_UNIT_EX) return true;
- if (a->unit == SP_CSS_UNIT_PERCENT) return true;
- if (b->unit == SP_CSS_UNIT_EM) return true;
- if (b->unit == SP_CSS_UNIT_EX) return true;
- if (b->unit == SP_CSS_UNIT_PERCENT) return true;
- }
-
- return (a->computed != b->computed);
-}
-
-/**
- * Write SPILengthOrNormal object into string.
- */
-static gint
-sp_style_write_ilengthornormal(gchar *p, gint const len, gchar const *const key,
- SPILengthOrNormal const *const val,
- SPILengthOrNormal const *const base,
- guint const flags)
-{
- if ((flags & SP_STYLE_FLAG_ALWAYS)
- || ((flags & SP_STYLE_FLAG_IFSET) && val->set)
- || ((flags & SP_STYLE_FLAG_IFDIFF) && val->set
- && (!base->set || sp_lengthornormal_differ(val, base))))
- {
- if (val->normal) {
- return g_snprintf(p, len, "%s:normal;", key);
- } else {
- SPILength length;
- length.set = val->set;
- length.inherit = val->inherit;
- length.unit = val->unit;
- length.value = val->value;
- length.computed = val->computed;
- return sp_style_write_ilength(p, len, key, &length, NULL, SP_STYLE_FLAG_ALWAYS);
- }
- }
- return 0;
-}
-
-/**
- * Write SPIDashArray object into string.
- */
-static gint
-sp_style_write_idasharray(gchar *p, gint const len, gchar const *const /*key*/,
- SPIDashArray const *const val, SPIDashArray const *const base, guint const flags)
-{
- if ((flags & SP_STYLE_FLAG_ALWAYS)
- || ((flags & SP_STYLE_FLAG_IFSET) && val->set)
- || ((flags & SP_STYLE_FLAG_IFDIFF) && val->set
- && (!base->set || (val->values != base->values))))
- {
- if (val->inherit) {
- return g_snprintf(p, len, "stroke-dasharray:inherit;");
- } else if ( !val->values.empty() ) {
- Inkscape::CSSOStringStream os;
- os << "stroke-dasharray:";
- for (unsigned i = 0; i < val->values.size(); i++) {
- if (i) {
- os << ", ";
- }
- os << val->values[i];
- }
- os << ";";
- return g_strlcpy(p, os.str().c_str(), len);
- } else {
- return g_snprintf(p, len, "stroke-dasharray:none;");
- }
- }
- return 0;
-}
-
-
-/**
- *
- */
-static bool
-sp_textdecorationLine_differ(SPITextDecorationLine const *const a, SPITextDecorationLine const *const b)
-{
- return( (a->underline != b->underline )
- || (a->overline != b->overline )
- || (a->line_through != b->line_through)
- || (a->blink != b->blink )
- );
-}
-
-/**
- *
- */
-static bool
-sp_textdecorationStyle_differ(SPITextDecorationStyle const *const a, SPITextDecorationStyle const *const b)
-{
- return( (a->solid != b->solid )
- || (a->isdouble != b->isdouble )
- || (a->dotted != b->dotted )
- || (a->dashed != b->dashed )
- || (a->wavy != b->wavy )
- );
-}
-
-/**
- *
- */
-static bool
-sp_textdecorationColor_differ(SPIPaint const *const a, SPIPaint const *const b)
-{
- bool status = (a->isPaintserver() == b->isPaintserver()) &&
- (a->colorSet == b->colorSet) &&
- (a->currentcolor == b->currentcolor);
- return(status);
-}
-
-/**
- * Write SPITextDecoration object into string.
- */
-static gint
-sp_style_write_itextdecoration(gchar *p, gint const len, gchar const *const key,
- SPITextDecorationLine const *const line,
- SPITextDecorationStyle const *const style,
- SPIPaint const *const color,
- SPITextDecorationLine const *const baseLine,
- SPITextDecorationStyle const *const baseStyle,
- SPIPaint const *const baseColor,
- guint const flags)
-{
- Inkscape::CSSOStringStream os;
-
- if ( (flags & SP_STYLE_FLAG_ALWAYS)
- || ((flags & SP_STYLE_FLAG_IFSET) && line->set)
- || ((flags & SP_STYLE_FLAG_IFDIFF) && line->set
- && ( !baseLine->set || sp_textdecorationLine_differ(line, baseLine)))
- || ((flags & SP_STYLE_FLAG_IFSET) && style->set)
- || ((flags & SP_STYLE_FLAG_IFDIFF) && style->set
- && ( !baseStyle->set || sp_textdecorationStyle_differ(style, baseStyle)))
- || ((flags & SP_STYLE_FLAG_IFSET) && color->set)
- || ((flags & SP_STYLE_FLAG_IFDIFF) && color->set
- && ( !baseColor->set || sp_textdecorationColor_differ(color, baseColor)))
- ){
- os << key << ":";
- if (line->inherit || style->inherit || color->inherit) {
- os << " inherit";
- }
- else if (line->underline || line->overline || line->line_through || line->blink) {
- if (line->underline) os << " underline";
- if (line->overline) os << " overline";
- if (line->line_through) os << " line-through";
- if (line->blink) os << " blink";
-
- if ( style->solid) os << " solid";
- else if (style->isdouble) os << " double";
- else if (style->dotted) os << " dotted";
- else if (style->dashed) os << " dashed";
- else if (style->wavy) os << " wavy";
- // color, if it is set, otherwise omit it
- if(color->set){
- char color_buf[8];
- sp_svg_write_color(color_buf, sizeof(color_buf), color->value.color.toRGBA32( 0 ));
- os << " ";
- os << color_buf;
- }
- }
- else {
- os << "none";
- }
- os << ";";
- return g_strlcpy(p, os.str().c_str(), len);
- }
- return 0;
-}
-
-/**
- *
- */
-static bool
-sp_paint_differ(SPIPaint const *const a, SPIPaint const *const b)
-{
- if ( (a->isColor() != b->isColor())
- || (a->isPaintserver() != b->isPaintserver())
- || (a->set != b->set)
- || (a->currentcolor != b->currentcolor)
- || (a->inherit!= b->inherit) ) {
- return true;
- }
-
- // TODO refactor to allow for mixed paints (rgb() *and* url(), etc)
-
- if ( a->isPaintserver() ) {
- return (a->value.href == NULL || b->value.href == NULL || a->value.href->getObject() != b->value.href->getObject());
- }
-
- if ( a->isColor() ) {
- return !( (a->value.color == b->value.color)
- && ((a->value.color.icc == b->value.color.icc)
- || (a->value.color.icc && b->value.color.icc
- && (a->value.color.icc->colorProfile == b->value.color.icc->colorProfile)
- && (a->value.color.icc->colors == b->value.color.icc->colors))));
- /* todo: Allow for epsilon differences in iccColor->colors, e.g. changes small enough not to show up
- * in the string representation. */
- }
-
- return false;
-}
-
-
-
-/**
- * Write SPIPaint object into string.
- */
-static gint
-sp_style_write_ipaint(gchar *b, gint const len, gchar const *const key,
- SPIPaint const *const paint, SPIPaint const *const base, guint const flags)
-{
- int retval = 0;
-
- if ((flags & SP_STYLE_FLAG_ALWAYS)
- || ((flags & SP_STYLE_FLAG_IFSET) && paint->set)
- || ((flags & SP_STYLE_FLAG_IFDIFF) && paint->set
- && (!base->set || sp_paint_differ(paint, base))))
- {
- CSSOStringStream css;
-
- if (paint->inherit) {
- css << "inherit";
- } else {
- if ( paint->value.href && paint->value.href->getURI() ) {
- const gchar* uri = paint->value.href->getURI()->toString();
- css << "url(" << uri << ")";
- g_free((void *)uri);
- }
-
- if ( paint->noneSet ) {
- if ( !css.str().empty() ) {
- css << " ";
- }
- css << "none";
- }
-
- if ( paint->currentcolor ) {
- if ( !css.str().empty() ) {
- css << " ";
- }
- css << "currentColor";
- }
-
- if ( paint->colorSet && !paint->currentcolor ) {
- if ( !css.str().empty() ) {
- css << " ";
- }
- char color_buf[8];
- sp_svg_write_color(color_buf, sizeof(color_buf), paint->value.color.toRGBA32( 0 ));
- css << color_buf;
- }
-
- if (paint->value.color.icc && !paint->currentcolor) {
- if ( !css.str().empty() ) {
- css << " ";
- }
- css << "icc-color(" << paint->value.color.icc->colorProfile;
- for (vector<double>::const_iterator i(paint->value.color.icc->colors.begin()),
- iEnd(paint->value.color.icc->colors.end());
- i != iEnd; ++i) {
- css << ", " << *i;
- }
- css << ')';
- }
- }
-
- if ( !css.str().empty() ) {
- retval = g_snprintf( b, len, "%s:%s;", key, css.str().c_str() );
- }
- }
-
- return retval;
-}
-
-
-/**
- *
- */
-static bool
-sp_paint_order_differ(SPIPaintOrder const *const a, SPIPaintOrder const *const b)
-{
- if( (a->set != b->set) ||
- (a->inherit!= b->inherit) ) {
- return true;
- }
-
- // Check this works when paint-order value is 'normal'
- for (unsigned i = 0; i < PAINT_ORDER_LAYERS; ++i ) {
- if( (a->layer[i] != b->layer[i]) ||
- (a->layer_set[i] != b->layer_set[i]) ) {
- return true;
- }
- }
- return false;
-}
-
-
-
-/**
- * Write SPIPaintOrder object into string.
- */
-static gint
-sp_style_write_ipaintorder(gchar *p, gint len, gchar const *key, SPIPaintOrder const *paint_order, SPIPaintOrder const *base, guint flags)
-{
- int retval = 0;
-
- if ((flags & SP_STYLE_FLAG_ALWAYS)
- || ((flags & SP_STYLE_FLAG_IFSET) && paint_order->set)
- || ((flags & SP_STYLE_FLAG_IFDIFF) && paint_order->set
- && (!base->set || sp_paint_order_differ(paint_order, base))))
- {
- CSSOStringStream css;
-
- if (paint_order->inherit) {
- css << "inherit";
- } else {
- for( unsigned i = 0; i < PAINT_ORDER_LAYERS; ++i ) {
- if( paint_order->layer_set[i] == true ) {
- switch (paint_order->layer[i]) {
- case SP_CSS_PAINT_ORDER_NORMAL:
- css << "normal";
- assert( i == 0 );
- break;
- case SP_CSS_PAINT_ORDER_FILL:
- if (i!=0) css << " ";
- css << "fill";
- break;
- case SP_CSS_PAINT_ORDER_STROKE:
- if (i!=0) css << " ";
- css << "stroke";
- break;
- case SP_CSS_PAINT_ORDER_MARKER:
- if (i!=0) css << " ";
- css << "markers";
- break;
- }
- } else {
- break;
- }
- }
- }
-
- if ( !css.str().empty() ) {
- retval = g_snprintf( p, len, "%s:%s;", key, css.str().c_str() );
- }
- }
-
- return retval;
-}
-
-/**
- *
- */
-static bool
-sp_fontsize_differ(SPIFontSize const *const a, SPIFontSize const *const b)
-{
- if (a->type != b->type)
- return true;
- if (a->type == SP_FONT_SIZE_LENGTH) {
- if (a->computed != b->computed)
- return true;
- } else {
- if (a->value != b->value)
- return true;
- }
- return false;
-}
-
-
-/**
- * Write SPIFontSize object into string.
- */
-static gint
-sp_style_write_ifontsize(gchar *p, gint const len, gchar const *key,
- SPIFontSize const *const val, SPIFontSize const *const base,
- guint const flags)
-{
- if ((flags & SP_STYLE_FLAG_ALWAYS)
- || ((flags & SP_STYLE_FLAG_IFSET) && val->set)
- || ((flags & SP_STYLE_FLAG_IFDIFF) && val->set
- && (!base->set || sp_fontsize_differ(val, base))))
- {
- if (val->inherit) {
- return g_snprintf(p, len, "%s:inherit;", key);
- } else if (val->type == SP_FONT_SIZE_LITERAL) {
- for (unsigned i = 0; enum_font_size[i].key; i++) {
- if (enum_font_size[i].value == static_cast< gint > (val->literal) ) {
- return g_snprintf(p, len, "%s:%s;", key, enum_font_size[i].key);
- }
- }
- } else if (val->type == SP_FONT_SIZE_LENGTH) {
- Inkscape::CSSOStringStream os;
- Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- int unit = prefs->getInt("/options/font/unitType", SP_CSS_UNIT_PT);
- if (prefs->getBool("/options/font/textOutputPx", true)) {
- unit = SP_CSS_UNIT_PX;
- }
- os << key << ":" << sp_style_css_size_px_to_units(val->computed, unit) << sp_style_get_css_unit_string(unit) << ";";
- return g_strlcpy(p, os.str().c_str(), len);
- } else if (val->type == SP_FONT_SIZE_PERCENTAGE) {
- Inkscape::CSSOStringStream os;
- os << key << ":" << (val->value * 100.0) << "%;";
- return g_strlcpy(p, os.str().c_str(), len);
- }
- }
- return 0;
-}
-
-
-/*
- * baseline-shift is relative to parent. The only time it should
- * not be written out is if it is zero (or not set).
- */
-static bool
-sp_baseline_shift_notzero(SPIBaselineShift const *const a )
-{
- if( a->type == SP_BASELINE_SHIFT_LITERAL ) {
- if( a->literal == SP_CSS_BASELINE_SHIFT_BASELINE ) {
- return false;
- }
- } else {
- if( a->value == 0.0 ) {
- return false;
- }
- }
- return true;
-}
-
-/**
- * Write SPIBaselineShift object into string.
- */
-static gint
-sp_style_write_ibaselineshift(gchar *p, gint const len, gchar const *key,
- SPIBaselineShift const *const val, SPIBaselineShift const *const base,
- guint const flags)
-{
- if ((flags & SP_STYLE_FLAG_ALWAYS)
- || ((flags & SP_STYLE_FLAG_IFSET) && val->set)
- || ((flags & SP_STYLE_FLAG_IFDIFF) && val->set
- && (!base->set || sp_baseline_shift_notzero(val) )))
- {
- if (val->inherit) {
- return g_snprintf(p, len, "%s:inherit;", key);
- } else if (val->type == SP_BASELINE_SHIFT_LITERAL) {
- for (unsigned i = 0; enum_baseline_shift[i].key; i++) {
- if (enum_baseline_shift[i].value == static_cast< gint > (val->literal) ) {
- return g_snprintf(p, len, "%s:%s;", key, enum_baseline_shift[i].key);
- }
- }
- } else if (val->type == SP_BASELINE_SHIFT_LENGTH) {
- if( val->unit == SP_CSS_UNIT_EM || val->unit == SP_CSS_UNIT_EX ) {
- Inkscape::CSSOStringStream os;
- os << key << ":" << val->value << (val->unit == SP_CSS_UNIT_EM ? "em;" : "ex;");
- return g_strlcpy(p, os.str().c_str(), len);
- } else {
- Inkscape::CSSOStringStream os;
- os << key << ":" << val->computed << "px;"; // must specify px, see inkscape bug 1221626, mozilla bug 234789
- return g_strlcpy(p, os.str().c_str(), len);
- }
- } else if (val->type == SP_BASELINE_SHIFT_PERCENTAGE) {
- Inkscape::CSSOStringStream os;
- os << key << ":" << (val->value * 100.0) << "%;";
- return g_strlcpy(p, os.str().c_str(), len);
- }
- }
- return 0;
-}
-
-
-
-/**
- * Write SPIFilter object into string.
- */
-static gint
-sp_style_write_ifilter(gchar *p, gint const len, gchar const *key,
- SPIFilter const *const val, SPIFilter const *const base,
- guint const flags)
-{
- (void)base; // TODO
- if ((flags & SP_STYLE_FLAG_ALWAYS)
- || ((flags & SP_STYLE_FLAG_IFSET) && val->set)
- || ((flags & SP_STYLE_FLAG_IFDIFF) && val->set))
- {
- if (val->inherit) {
- return g_snprintf(p, len, "%s:inherit;", key);
- } else if (val->href && val->href->getURI()) {
- gchar *uri = val->href->getURI()->toString();
- gint ret = g_snprintf(p, len, "%s:url(%s);", key, uri);
- g_free(uri);
- return ret;
- }
- }
-
-
- return 0;
-}
-
-SPIPaint::SPIPaint() :
- set(false),
- inherit(0),
- currentcolor(0),
- colorSet(0),
- noneSet(0),
- value()
-{
- value.color.set( 0 );
- value.href = 0;
-}
-
-void SPIPaint::clear()
-{
- set = false;
- inherit = false;
- currentcolor = false;
- colorSet = false;
- noneSet = false;
- value.color.set( 0 );
- if (value.href){
- if (value.href->getObject()){
- value.href->detach();
- }
- }
-}
-
-/**
- * Clear filter object, and disconnect style from paintserver (if present).
- */
-static void
-sp_style_filter_clear(SPStyle *style)
-{
- if (style->filter.href){
- if (style->filter.href->getObject()){
- style->filter.href->detach();
- }
- }
+ return g_strdup( from->write( SP_STYLE_FLAG_IFDIFF, to ).c_str() );
}
@@ -4894,7 +1522,7 @@ sp_style_set_property_url (SPObject *item, gchar const *property, SPObject *link
sp_repr_css_attr_unref(css);
}
-
+// Called in sp-object.cpp
/**
* Clear all style property attributes in object.
*/
@@ -4948,16 +1576,16 @@ sp_style_unset_property_attrs(SPObject *o)
if (style->stroke_linejoin.set) {
repr->setAttribute("stroke-linejoin", NULL);
}
- if (style->marker[SP_MARKER_LOC].set) {
+ if (style->marker.set) {
repr->setAttribute("marker", NULL);
}
- if (style->marker[SP_MARKER_LOC_START].set) {
+ if (style->marker_start.set) {
repr->setAttribute("marker-start", NULL);
}
- if (style->marker[SP_MARKER_LOC_MID].set) {
+ if (style->marker_mid.set) {
repr->setAttribute("marker-mid", NULL);
}
- if (style->marker[SP_MARKER_LOC_END].set) {
+ if (style->marker_end.set) {
repr->setAttribute("marker-end", NULL);
}
if (style->stroke_opacity.set) {
@@ -4972,10 +1600,10 @@ sp_style_unset_property_attrs(SPObject *o)
if (style->paint_order.set) {
repr->setAttribute("paint-order", NULL);
}
- if (style->text_private && style->text->font_specification.set) {
+ if (style->font_specification.set) {
repr->setAttribute("-inkscape-font-specification", NULL);
}
- if (style->text_private && style->text->font_family.set) {
+ if (style->font_family.set) {
repr->setAttribute("font-family", NULL);
}
if (style->text_anchor.set) {
@@ -5025,7 +1653,8 @@ sp_css_attr_from_style(SPStyle const *const style, guint const flags)
return css;
}
-
+// Called in: selection-chemistry.cpp, widgets/stroke-marker-selector.cpp, widgets/stroke-style.cpp,
+// ui/tools/freehand-base.cpp
/**
* \pre object != NULL
* \pre flags in {IFSET, ALWAYS}.
@@ -5042,13 +1671,14 @@ SPCSSAttr *sp_css_attr_from_object(SPObject *object, guint const flags)
return result;
}
+// Called in: selection-chemistry.cpp, ui/dialog/inkscape-preferences.cpp
/**
* Unset any text-related properties
*/
SPCSSAttr *
sp_css_attr_unset_text(SPCSSAttr *css)
{
- sp_repr_css_set_property(css, "font", NULL); // not implemented yet
+ sp_repr_css_set_property(css, "font", NULL);
sp_repr_css_set_property(css, "-inkscape-font-specification", NULL);
sp_repr_css_set_property(css, "font-size", NULL);
sp_repr_css_set_property(css, "font-size-adjust", NULL); // not implemented yet
@@ -5076,6 +1706,7 @@ sp_css_attr_unset_text(SPCSSAttr *css)
return css;
}
+// Called in style.cpp
static bool
is_url(char const *p)
{
@@ -5088,6 +1719,7 @@ is_url(char const *p)
return (g_ascii_strncasecmp(p, "url(", 4) == 0);
}
+// Called in: ui/dialog/inkscape-preferences.cpp, ui/tools/tweek-tool.cpp
/**
* Unset any properties that contain URI values.
*
@@ -5113,6 +1745,7 @@ sp_css_attr_unset_uris(SPCSSAttr *css)
return css;
}
+// Called in style.cpp
/**
* Scale a single-value property.
*/
@@ -5137,6 +1770,7 @@ sp_css_attr_scale_property_single(SPCSSAttr *css, gchar const *property,
}
}
+// Called in style.cpp for stroke-dasharray
/**
* Scale a list-of-values property.
*/
@@ -5169,6 +1803,7 @@ sp_css_attr_scale_property_list(SPCSSAttr *css, gchar const *property, double ex
}
}
+// Called in: text-editing.cpp,
/**
* Scale any properties that may hold <length> by ex.
*/
@@ -5189,6 +1824,7 @@ sp_css_attr_scale(SPCSSAttr *css, double ex)
}
+// Called in style.cpp, xml/repr-css.cpp
/**
* Remove quotes and escapes from a string. Returned value must be g_free'd.
* Note: in CSS (in style= and in stylesheets), unquoting and unescaping is done
@@ -5215,6 +1851,7 @@ attribute_unquote(gchar const *val)
return (val? g_strdup (val) : NULL);
}
+// Called in style.cpp, xml/repr-css.cpp
/**
* Quote and/or escape string for writing to CSS (style=). Returned value must be g_free'd.
*/
diff --git a/src/style.h b/src/style.h
index 939ace0d3..9e592b78f 100644
--- a/src/style.h
+++ b/src/style.h
@@ -7,7 +7,9 @@
/* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
* Jon A. Cruz <jon@joncruz.org>
+ * Tavmjong Bah <tavmjong@free.fr>
*
+ * Copyright (C) 2014 Tavmjong Bah
* Copyright (C) 2010 Jon A. Cruz
* Copyright (C) 2001-2002 Lauris Kaplinski
* Copyright (C) 2001 Ximian, Inc.
@@ -20,6 +22,15 @@
#include <stddef.h>
#include <sigc++/connection.h>
+#include <iostream>
+#include <vector>
+// #include <map>
+
+// Define SPIBasePtr, a Pointer to a data member of SPStyle of type SPIBase;
+typedef SPIBase SPStyle::*SPIBasePtr;
+
+// Define SPPropMap, a map linking property name to property data
+// typedef std::map<std::string, SPIBasePtr> SPPropMap;
namespace Inkscape {
namespace XML {
@@ -27,24 +38,63 @@ class Node;
}
}
+#include "libcroco/cr-declaration.h"
+#include "libcroco/cr-prop-list.h"
+//struct CRDeclaration;
+//struct CRPropList;
+
+
/// An SVG style object.
-struct SPStyle {
- int refcount;
+class SPStyle {
+public:
+
+ SPStyle(SPDocument *document = NULL, SPObject *object = NULL);// document is ignored if valid object given
+ ~SPStyle();
+ void clear();
+ void read(SPObject *object, Inkscape::XML::Node *repr);
+ void readFromObject(SPObject *object);
+ void readFromPrefs(Glib::ustring const &path);
+ void readIfUnset( gint id, gchar const *val );
+ Glib::ustring write( guint const flags, SPStyle const *const base = NULL ) const;
+ void cascade( SPStyle const *const parent );
+ void merge( SPStyle const *const parent );
+ bool operator==(const SPStyle& rhs);
+
+ int ref() { ++_refcount; return _refcount; }
+ int unref() { --_refcount; return _refcount; }
+
+//FIXME: Make private
+public:
+ void _mergeString( gchar const *const p ); // Rename to readFromString?
+private:
+ void _mergeDeclList( CRDeclaration const *const decl_list );
+ void _mergeDecl( CRDeclaration const *const decl );
+ void _mergeProps( CRPropList *const props );
+ void _mergeObjectStylesheet( SPObject const *const object );
+
+private:
+ int _refcount;
+ static int _count; // Poor man's leak detector
+
+// FIXME: Make private
+public:
/** Object we are attached to */
SPObject *object;
/** Document we are associated with */
SPDocument *document;
- /** Our text style component */
- SPTextStyle *text;
- unsigned text_private : 1;
+private:
+ /// Pointers to all the properties (for looping through them)
+ std::vector<SPIBase *> _properties;
+ // static SPPropMap _propmap;
+
+public:
+
+ /* ----------------------- THE PROPERTIES ------------------------- */
- /* CSS2 */
/* Font */
- /** Size of the font */
- SPIFontSize font_size;
- /** Style of the font */
+ /** Font style */
SPIEnum font_style;
/** Which substyle of the font */
SPIEnum font_variant;
@@ -52,26 +102,34 @@ struct SPStyle {
SPIEnum font_weight;
/** Stretch of the font */
SPIEnum font_stretch;
+ /** Size of the font */
+ SPIFontSize font_size;
+ /** Line height (css2 10.8.1) */
+ SPILengthOrNormal line_height;
+ /** Font family */
+ SPIString font_family;
+ /** Font shorthand */
+ SPIFont font;
+ /** Full font name, as font_factory::ConstructFontSpecification would give, for internal use. */
+ SPIString font_specification;
/** First line indent of paragraphs (css2 16.1) */
SPILength text_indent;
/** text alignment (css2 16.2) (not to be confused with text-anchor) */
SPIEnum text_align;
- /** text decoration (css2 16.3.1) is now handled as a subset of css3 2.4 */
- // SPITextDecoration text_decoration;
-
+
+ /** text decoration (css2 16.3.1) */
+ SPITextDecoration text_decoration;
/** CSS 3 2.1, 2.2, 2.3 */
/** Not done yet, test_decoration3 = css3 2.4*/
SPITextDecorationLine text_decoration_line;
- SPIPaint text_decoration_color;
- SPITextDecorationStyle text_decoration_style;
-
+ SPITextDecorationStyle text_decoration_style; // SPIEnum? Only one can be set at time.
+ SPIColor text_decoration_color;
// used to implement text_decoration, not saved to or read from SVG file
SPITextDecorationData text_decoration_data;
// 16.3.2 is text-shadow. That's complicated.
- /** Line spacing (css2 10.8.1) */
- SPILengthOrNormal line_height;
+
/** letter spacing (css2 16.4) */
SPILengthOrNormal letter_spacing;
/** word spacing (also css2 16.4) */
@@ -93,14 +151,6 @@ struct SPStyle {
/** Anchor of the text (svg1.1 10.9.1) */
SPIEnum text_anchor;
- /* Misc attributes */
- unsigned clip_set : 1;
- unsigned color_set : 1;
- unsigned cursor_set : 1;
- unsigned overflow_set : 1;
- unsigned clip_path_set : 1;
- unsigned mask_set : 1;
-
/** clip-rule: 0 nonzero, 1 evenodd */
SPIEnum clip_rule;
@@ -121,8 +171,10 @@ struct SPStyle {
// Could be shared with Filter blending mode
SPIEnum blend_mode;
+ SPIPaintOrder paint_order;
+
/** color */
- SPIPaint color;
+ SPIColor color;
/** color-interpolation */
SPIEnum color_interpolation;
/** color-interpolation-filters */
@@ -153,18 +205,22 @@ struct SPStyle {
SPIScale24 stroke_opacity;
/** Marker list */
- SPIString marker[SP_MARKER_LOC_QTY];
-
- SPIPaintOrder paint_order;
+ SPIString marker;
+ SPIString marker_start;
+ SPIString marker_mid;
+ SPIString marker_end;
+ SPIString* marker_ptrs[SP_MARKER_LOC_QTY];
/** Filter effect */
SPIFilter filter;
-
+ /** Filter blend mode */
SPIEnum filter_blend_mode;
-
- /** normally not used, but duplicates the Gaussian blur deviation (if any) from the attached
+ /** normally not used, but duplicates the Gaussian blur deviation (if any) from the attached
filter when the style is used for querying */
SPILength filter_gaussianBlur_deviation;
+ /** enable-background, used for defining where filter effects get their background image */
+ SPIEnum enable_background;
+
/** hints on how to render: e.g. speed vs. accuracy.
* As of April, 2013, only image_rendering used. */
@@ -173,9 +229,7 @@ struct SPStyle {
SPIEnum shape_rendering;
SPIEnum text_rendering;
- /** enable-background, used for defining where filter effects get
- * their background image */
- SPIEnum enable_background;
+ /* ----------------------- END PROPERTIES ------------------------- */
/// style belongs to a cloned object
bool cloned;
@@ -186,46 +240,46 @@ struct SPStyle {
sigc::connection fill_ps_modified_connection;
sigc::connection stroke_ps_modified_connection;
- SPObject *getFilter() { return (filter.href) ? filter.href->getObject() : NULL; }
- SPObject const *getFilter() const { return (filter.href) ? filter.href->getObject() : NULL; }
- gchar const *getFilterURI() const { return (filter.href) ? filter.href->getURI()->toString() : NULL; }
+ SPObject *getFilter() { return (filter.href) ? filter.href->getObject() : NULL; }
+ SPObject const *getFilter() const { return (filter.href) ? filter.href->getObject() : NULL; }
+ gchar const *getFilterURI() const { return (filter.href) ? filter.href->getURI()->toString() : NULL; }
- SPPaintServer *getFillPaintServer() { return (fill.value.href) ? fill.value.href->getObject() : NULL; }
- SPPaintServer const *getFillPaintServer() const { return (fill.value.href) ? fill.value.href->getObject() : NULL; }
- gchar const *getFillURI() const { return (fill.value.href) ? fill.value.href->getURI()->toString() : NULL; }
+ SPPaintServer *getFillPaintServer() { return (fill.value.href) ? fill.value.href->getObject() : NULL; }
+ SPPaintServer const *getFillPaintServer() const { return (fill.value.href) ? fill.value.href->getObject() : NULL; }
+ gchar const *getFillURI() const { return (fill.value.href) ? fill.value.href->getURI()->toString() : NULL; }
- SPPaintServer *getStrokePaintServer() { return (stroke.value.href) ? stroke.value.href->getObject() : NULL; }
+ SPPaintServer *getStrokePaintServer() { return (stroke.value.href) ? stroke.value.href->getObject() : NULL; }
SPPaintServer const *getStrokePaintServer() const { return (stroke.value.href) ? stroke.value.href->getObject() : NULL; }
- gchar const *getStrokeURI() const { return (stroke.value.href) ? stroke.value.href->getURI()->toString() : NULL; }
+ gchar const *getStrokeURI() const { return (stroke.value.href) ? stroke.value.href->getURI()->toString() : NULL; }
};
-SPStyle *sp_style_new(SPDocument *document);
+SPStyle *sp_style_new(SPDocument *document); // SPStyle::SPStyle( SPDocument *document = NULL );
-SPStyle *sp_style_new_from_object(SPObject *object);
+SPStyle *sp_style_new_from_object(SPObject *object); // SPStyle::SPStyle( SPObject *object );
-SPStyle *sp_style_ref(SPStyle *style);
+SPStyle *sp_style_ref(SPStyle *style); // SPStyle::ref();
-SPStyle *sp_style_unref(SPStyle *style);
+SPStyle *sp_style_unref(SPStyle *style); // SPStyle::unref();
-void sp_style_read_from_object(SPStyle *style, SPObject *object);
+void sp_style_read_from_object(SPStyle *style, SPObject *object); //SPStyle::read( SPObject * object);
-void sp_style_read_from_prefs(SPStyle *style, Glib::ustring const &path);
+void sp_style_read_from_prefs(SPStyle *style, Glib::ustring const &path); // SPStyle::read( ... );
-void sp_style_merge_from_style_string(SPStyle *style, gchar const *p);
+void sp_style_merge_from_style_string(SPStyle *style, gchar const *p); // SPStyle::merge( ... );?
-void sp_style_merge_from_parent(SPStyle *style, SPStyle const *parent);
+void sp_style_merge_from_parent(SPStyle *style, SPStyle const *parent); // SPStyle::cascade( ... );
-void sp_style_merge_from_dying_parent(SPStyle *style, SPStyle const *parent);
+void sp_style_merge_from_dying_parent(SPStyle *style, SPStyle const *parent); // SPStyle::merge( ... )
-gchar *sp_style_write_string(SPStyle const *style, guint flags = SP_STYLE_FLAG_IFSET);
+gchar *sp_style_write_string(SPStyle const *style, guint flags = SP_STYLE_FLAG_IFSET);//SPStyle::write
-gchar *sp_style_write_difference(SPStyle const *from, SPStyle const *to);
+gchar *sp_style_write_difference(SPStyle const *from, SPStyle const *to); // SPStyle::write
-void sp_style_set_to_uri_string (SPStyle *style, bool isfill, const gchar *uri);
+void sp_style_set_to_uri_string (SPStyle *style, bool isfill, const gchar *uri); // ?
-gchar const *sp_style_get_css_unit_string(int unit);
-double sp_style_css_size_px_to_units(double size, int unit);
-double sp_style_css_size_units_to_px(double size, int unit);
+gchar const *sp_style_get_css_unit_string(int unit); // No change?
+double sp_style_css_size_px_to_units(double size, int unit); // No change?
+double sp_style_css_size_units_to_px(double size, int unit); // No change?
SPCSSAttr *sp_css_attr_from_style (SPStyle const *const style, guint flags);
@@ -254,3 +308,4 @@ Glib::ustring css2_escape_quote(gchar const *val);
End:
*/
// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
+
diff --git a/src/text-editing.h b/src/text-editing.h
index 04ef6461d..290a39194 100644
--- a/src/text-editing.h
+++ b/src/text-editing.h
@@ -18,11 +18,11 @@
#include "libnrtype/Layout-TNG.h"
#include "text-tag-attributes.h"
-class SPCSSAttr;
-class SPDesktop;
-class SPItem;
-class SPObject;
-struct SPStyle;
+class SPCSSAttr;
+class SPDesktop;
+class SPItem;
+class SPObject;
+class SPStyle;
typedef std::pair<Inkscape::Text::Layout::iterator, Inkscape::Text::Layout::iterator> iterator_pair;
diff --git a/src/ui/dialog/font-substitution.cpp b/src/ui/dialog/font-substitution.cpp
index bf9133086..6e9ecc3c8 100644
--- a/src/ui/dialog/font-substitution.cpp
+++ b/src/ui/dialog/font-substitution.cpp
@@ -200,16 +200,16 @@ GSList * FontSubstitution::getFontReplacedItems(SPDocument* doc, Glib::ustring *
}
}
- if (style && style->text) {
+ if (style) {
gchar const *style_font = NULL;
- if (style->text->font_family.set)
- style_font = style->text->font_family.value;
- else if (style->text->font_specification.set)
- style_font = style->text->font_specification.value;
- else if (style->text->font_family.value)
- style_font = style->text->font_family.value;
- else if (style->text->font_specification.value)
- style_font = style->text->font_specification.value;
+ if (style->font_family.set)
+ style_font = style->font_family.value;
+ else if (style->font_specification.set)
+ style_font = style->font_specification.value;
+ else if (style->font_family.value)
+ style_font = style->font_family.value;
+ else if (style->font_specification.value)
+ style_font = style->font_specification.value;
if (style_font) {
if (has_visible_text(item)) {
diff --git a/src/ui/dialog/livepatheffect-add.cpp b/src/ui/dialog/livepatheffect-add.cpp
index b5f51d81d..c558eddaf 100644
--- a/src/ui/dialog/livepatheffect-add.cpp
+++ b/src/ui/dialog/livepatheffect-add.cpp
@@ -38,6 +38,7 @@ LivePathEffectAdd::LivePathEffectAdd() :
scrolled_window.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
scrolled_window.set_shadow_type(Gtk::SHADOW_IN);
scrolled_window.set_size_request(250, 200);
+ scrolled_window.set_can_focus();
/**
* Effect Store and Tree
@@ -83,10 +84,12 @@ LivePathEffectAdd::LivePathEffectAdd() :
add_action_widget(close_button, Gtk::RESPONSE_CLOSE);
add_action_widget(add_button, Gtk::RESPONSE_APPLY);
+
/**
* Signal handlers
*/
effectlist_treeview.signal_button_press_event().connect_notify( sigc::mem_fun(*this, &LivePathEffectAdd::onButtonEvent) );
+ effectlist_treeview.signal_key_press_event().connect_notify(sigc::mem_fun(*this, &LivePathEffectAdd::onKeyEvent));
close_button.signal_clicked().connect(sigc::mem_fun(*this, &LivePathEffectAdd::onClose));
add_button.signal_clicked().connect(sigc::mem_fun(*this, &LivePathEffectAdd::onAdd));
signal_delete_event().connect( sigc::bind_return(sigc::hide(sigc::mem_fun(*this, &LivePathEffectAdd::onClose)), true ) );
@@ -107,6 +110,16 @@ void LivePathEffectAdd::onClose()
hide();
}
+void LivePathEffectAdd::onKeyEvent(GdkEventKey* evt)
+{
+ if (evt->keyval == GDK_KEY_Return) {
+ onAdd();
+ }
+ if (evt->keyval == GDK_KEY_Escape) {
+ onClose();
+ }
+}
+
void LivePathEffectAdd::onButtonEvent(GdkEventButton* evt)
{
// Double click on tree is same as clicking the add button
@@ -135,6 +148,7 @@ void LivePathEffectAdd::show(SPDesktop *desktop)
dial.set_modal(true);
desktop->setWindowTransient (dial.gobj());
dial.property_destroy_with_parent() = true;
+ dial.effectlist_treeview.grab_focus();
dial.run();
}
diff --git a/src/ui/dialog/livepatheffect-add.h b/src/ui/dialog/livepatheffect-add.h
index 7fa766272..99ead878c 100644
--- a/src/ui/dialog/livepatheffect-add.h
+++ b/src/ui/dialog/livepatheffect-add.h
@@ -74,6 +74,10 @@ protected:
*/
void onButtonEvent(GdkEventButton* evt);
+ /**
+ * Key event
+ */
+ void onKeyEvent(GdkEventKey* evt);
private:
Gtk::TreeView effectlist_treeview;
diff --git a/src/ui/widget/style-subject.h b/src/ui/widget/style-subject.h
index c2941d995..47da91732 100644
--- a/src/ui/widget/style-subject.h
+++ b/src/ui/widget/style-subject.h
@@ -20,7 +20,7 @@
class SPDesktop;
class SPObject;
class SPCSSAttr;
-struct SPStyle;
+class SPStyle;
namespace Inkscape {
class Selection;
diff --git a/src/ui/widget/style-swatch.h b/src/ui/widget/style-swatch.h
index 23ecbdfda..557ca82e2 100644
--- a/src/ui/widget/style-swatch.h
+++ b/src/ui/widget/style-swatch.h
@@ -29,7 +29,7 @@
#include "desktop.h"
#include "preferences.h"
-struct SPStyle;
+class SPStyle;
class SPCSSAttr;
namespace Gtk {
diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt
index 924cab355..732e01b0c 100644
--- a/src/util/CMakeLists.txt
+++ b/src/util/CMakeLists.txt
@@ -35,10 +35,12 @@ set(util_SRC
reference.h
reverse-list.h
share.h
+ signal-blocker.h
tuple.h
ucompose.hpp
units.h
unordered-containers.h
+ ziptool.h
)
# add_inkscape_lib(util_LIB "${util_SRC}")
diff --git a/src/widgets/paint-selector.h b/src/widgets/paint-selector.h
index d3b3f4116..d6ad3f50c 100644
--- a/src/widgets/paint-selector.h
+++ b/src/widgets/paint-selector.h
@@ -23,7 +23,7 @@
class SPGradient;
class SPDesktop;
class SPPattern;
-struct SPStyle;
+class SPStyle;
#define SP_TYPE_PAINT_SELECTOR (sp_paint_selector_get_type ())
#define SP_PAINT_SELECTOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_PAINT_SELECTOR, SPPaintSelector))
diff --git a/src/widgets/stroke-style.cpp b/src/widgets/stroke-style.cpp
index a4cca9472..0e0a4fd72 100644
--- a/src/widgets/stroke-style.cpp
+++ b/src/widgets/stroke-style.cpp
@@ -581,7 +581,8 @@ StrokeStyle::forkMarker(SPObject *marker, int loc, SPItem *item)
Glib::ustring urlId = Glib::ustring::format("url(#", marker->getRepr()->attribute("id"), ")");
unsigned int refs = 0;
for (int i = SP_MARKER_LOC_START; i < SP_MARKER_LOC_QTY; i++) {
- if (item->style->marker[i].set && !strcmp(urlId.c_str(), item->style->marker[i].value)) {
+ if (item->style->marker_ptrs[i]->set &&
+ !strcmp(urlId.c_str(), item->style->marker_ptrs[i]->value)) {
refs++;
}
}
@@ -1176,11 +1177,11 @@ StrokeStyle::updateAllMarkers(GSList const *objects)
combo->setDesktop(desktop);
- if (object->style->marker[keyloc[i].loc].value != NULL && !all_texts) {
+ if (object->style->marker_ptrs[keyloc[i].loc]->value != NULL && !all_texts) {
// If the object has this type of markers,
// Extract the name of the marker that the object uses
- SPObject *marker = getMarkerObj(object->style->marker[keyloc[i].loc].value, object->document);
+ SPObject *marker = getMarkerObj(object->style->marker_ptrs[keyloc[i].loc]->value, object->document);
// Scroll the combobox to that marker
combo->set_current(marker);
diff --git a/src/widgets/text-toolbar.cpp b/src/widgets/text-toolbar.cpp
index 349fefa12..3a4f315da 100644
--- a/src/widgets/text-toolbar.cpp
+++ b/src/widgets/text-toolbar.cpp
@@ -72,20 +72,20 @@ using Inkscape::UI::PrefPusher;
static void sp_print_font( SPStyle *query ) {
- bool family_set = query->text->font_family.set;
+ bool family_set = query->font_family.set;
bool style_set = query->font_style.set;
- bool fontspec_set = query->text->font_specification.set;
+ bool fontspec_set = query->font_specification.set;
std::cout << " Family set? " << family_set
<< " Style set? " << style_set
<< " FontSpec set? " << fontspec_set
<< std::endl;
std::cout << " Family: "
- << (query->text->font_family.value ? query->text->font_family.value : "No value")
+ << (query->font_family.value ? query->font_family.value : "No value")
<< " Style: " << query->font_style.computed
<< " Weight: " << query->font_weight.computed
<< " FontSpec: "
- << (query->text->font_specification.value ? query->text->font_specification.value : "No value")
+ << (query->font_specification.value ? query->font_specification.value : "No value")
<< std::endl;
std::cout << " LineHeight: " << query->line_height.computed
<< " WordSpacing: " << query->word_spacing.computed
@@ -146,6 +146,13 @@ static void sp_text_fontfamily_value_changed( Ink_ComboBoxEntry_Action *act, GOb
std::cout << " New active: " << act->active << std::endl;
#endif
if( new_family.compare( fontlister->get_font_family() ) != 0 ) {
+ // Changed font-family
+
+ if( act->active == -1 ) {
+ // New font-family, not in document, not on system (could be fallback list)
+ fontlister->insert_font_family( new_family );
+ act->active = 0; // New family is always at top of list.
+ }
std::pair<Glib::ustring,Glib::ustring> ui = fontlister->set_font_family( act->active );
// active text set in sp_text_toolbox_selection_changed()
@@ -923,7 +930,6 @@ static void sp_text_toolbox_selection_changed(Inkscape::Selection */*selection*/
}
// If we have valid query data for text (font-family, font-specification) set toolbar accordingly.
- if (query->text)
{
// Size (average of text selected)
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
@@ -1051,11 +1057,11 @@ static void sp_text_toolbox_selection_changed(Inkscape::Selection */*selection*/
ege_select_one_action_set_active( textOrientationAction, activeButton2 );
- } // if( query->text )
+ }
#ifdef DEBUG_TEXT
std::cout << " GUI: fontfamily.value: "
- << (query->text->font_family.value ? query->text->font_family.value : "No value")
+ << (query->font_family.value ? query->font_family.value : "No value")
<< std::endl;
std::cout << " GUI: font_size.computed: " << query->font_size.computed << std::endl;
std::cout << " GUI: font_weight.computed: " << query->font_weight.computed << std::endl;
@@ -1167,15 +1173,15 @@ static void sp_text_toolbox_select_cb( GtkEntry* entry, GtkEntryIconPosition /*p
SPItem *item = SP_ITEM(i->data);
SPStyle *style = item->style;
- if (style && style->text) {
+ if (style) {
Glib::ustring family_style;
- if (style->text->font_family.set) {
- family_style = style->text->font_family.value;
+ if (style->font_family.set) {
+ family_style = style->font_family.value;
//std::cout << " family style from font_family: " << family_style << std::endl;
}
- else if (style->text->font_specification.set) {
- family_style = style->text->font_specification.value;
+ else if (style->font_specification.set) {
+ family_style = style->font_specification.value;
//std::cout << " family style from font_spec: " << family_style << std::endl;
}