diff options
| author | Liam P. White <inkscapebronyat-signgmaildotcom> | 2014-04-29 01:00:39 +0000 |
|---|---|---|
| committer | Liam P. White <inkscapebronyat-signgmaildotcom> | 2014-04-29 01:00:39 +0000 |
| commit | eca72e61451c8deae7f2f5fbaa9885aec946c790 (patch) | |
| tree | 76d436abbbe469e0bc3b4a254e0ab6e5b4525e3b | |
| parent | Update to trunk (diff) | |
| parent | when removing LPE, with 'flattening' option, don't recalculate/rewrite ellips... (diff) | |
| download | inkscape-eca72e61451c8deae7f2f5fbaa9885aec946c790.tar.gz inkscape-eca72e61451c8deae7f2f5fbaa9885aec946c790.zip | |
Update to trunk and fix issues
(bzr r13090.1.67)
68 files changed, 11828 insertions, 11871 deletions
@@ -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 <" "defs>)" 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°; 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°; 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 × %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°, 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°, 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°, 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°, 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°, 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 × %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 <" "defs> 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 "" @@ -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° CCW" -msgstr "Обернути на 90° проти годинникової стрілки" +#: ../src/selection-chemistry.cpp:1750 +msgid "Rotate 90° CCW" +msgstr "Обернути на 90° проти годинникової стрілки" -#: ../src/selection-chemistry.cpp:1704 -msgid "Rotate 90° CW" -msgstr "Обернути на 90° за годинниковою стрілкою" +#: ../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 <" "defs>)" @@ -13143,135 +12593,132 @@ msgstr "" "Об'єкт, який ви намагаєтесь позначити, є <b>невидимим</b> (знаходиться у <" "defs>)" -#: ../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°; with <b>Ctrl</b> to snap angle" msgstr "<b>Нахил</b>: %0.2f°; з <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°; with <b>Ctrl</b> to snap angle" msgstr "<b>Обертання</b>: %0.2f°; з <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 × %d: %s" msgstr "%d × %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 × %s (constrained to ratio %d:%d); with <b>Shift</b> " @@ -22863,7 +22541,7 @@ msgstr "" "<b>Еліпс</b>: %s × %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 × %s; with <b>Ctrl</b> to make square or integer-" @@ -22872,117 +22550,117 @@ msgstr "" "<b>Еліпс</b>: %s × %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°, distance %s; with <b>Ctrl</b> to " @@ -23383,7 +23032,7 @@ msgstr "" "<b>Сегмент кривої</b>: кут %3.2f°, відстань %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°, distance %s; with <b>Ctrl</b> to " @@ -23392,7 +23041,7 @@ msgstr "" "<b>Сегмент лінії</b>: кут %3.2f°, відстань %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°, length %s; with <b>Ctrl</b> to snap " @@ -23400,7 +23049,7 @@ msgid "" msgstr "" "<b>Вус вузла кривої</b>: кут %3.2f°, довжина %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°, length %s; with <b>Ctrl</" @@ -23409,7 +23058,7 @@ msgstr "" "<b>Вус кривої, симетричний</b>: кут %3.2f°, довжина %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°, length %s; with <b>Ctrl</b> to snap " @@ -23418,11 +23067,40 @@ msgstr "" "<b>Вус кривої</b>: кут %3.2f°, довжина %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 × %s (constrained to ratio %d:%d); with <b>Shift</" @@ -23439,7 +23117,7 @@ msgstr "" "<b>Прямокутник</b>: %s × %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 × %s (constrained to golden ratio 1.618 : 1); with " @@ -23448,7 +23126,7 @@ msgstr "" "<b>Прямокутник</b>: %s × %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 × %s (constrained to golden ratio 1 : 1.618); with " @@ -23457,7 +23135,7 @@ msgstr "" "<b>Прямокутник</b>: %s × %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 × %s; with <b>Ctrl</b> to make square or integer-" @@ -23466,15 +23144,15 @@ msgstr "" "<b>Прямокутник</b>: %s × %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°; with <b>Ctrl</b> to snap angle" msgstr "<b>Спіраль</b>: радіус %s, кут %5g°; з <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°; with <b>Ctrl</b> to snap angle" msgstr "" "<b>Багатокутник</b>: радіус %s, кут %5g°; з <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°; with <b>Ctrl</b> to snap angle" msgstr "<b>Зірка</b>: радіус %s, кут %5g°; з <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 × %s" msgstr "<b>Текст у рамці</b>: %s × %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 <" "defs> of the document" @@ -25005,152 +24560,152 @@ msgstr "" "Прибрати непотрібні визначення (наприклад, градієнти чи вирізання) з <" "defs> документа" -#: ../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° 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° 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 & 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 & 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_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; } |
