From dde6a13b810749721dfe535c9f5c7548f07e1f65 Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Wed, 21 Jun 2017 20:39:48 -0400 Subject: add Munsell palette --- share/palettes/MunsellChart.gpl | 3204 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 3204 insertions(+) create mode 100644 share/palettes/MunsellChart.gpl diff --git a/share/palettes/MunsellChart.gpl b/share/palettes/MunsellChart.gpl new file mode 100644 index 000000000..9e09596b3 --- /dev/null +++ b/share/palettes/MunsellChart.gpl @@ -0,0 +1,3204 @@ +GIMP Palette +Name: MunsellChart +# + 0 0 0 #000000 + 29 29 29 #1d1d1d + 49 49 49 #313131 + 72 72 72 #484848 + 97 97 97 #616161 + 122 122 122 #7a7a7a + 148 148 148 #949494 + 174 174 174 #aeaeae + 200 200 200 #c8c8c8 + 227 227 227 #e3e3e3 + 255 255 255 #ffffff + 29 29 29 #1d1d1d + 44 22 32 #2c1620 + 53 15 35 #350f23 + 61 5 38 #3d0526 + 69 0 41 #450029 + 76 0 44 #4c002c + 83 0 48 #530030 + 90 0 52 #5a0034 + 49 49 49 #313131 + 65 44 50 #412c32 + 76 38 51 #4c2633 + 86 30 52 #561e34 + 96 17 54 #601136 + 105 0 56 #690038 + 115 0 59 #73003b + 124 0 61 #7c003d + 133 0 64 #850040 + 72 72 72 #484848 + 91 66 71 #5b4247 + 105 60 69 #693c45 + 117 52 68 #753444 + 128 40 67 #802843 + 139 24 67 #8b1843 + 150 0 67 #960043 + 159 0 67 #9f0043 + 170 0 68 #aa0044 + 179 0 68 #b30044 + 97 97 97 #616161 + 115 92 95 #735c5f + 130 86 93 #82565d + 143 78 91 #8f4e5b + 155 70 89 #9b4659 + 166 60 88 #a63c58 + 177 46 87 #b12e57 + 188 23 86 #bc1756 + 198 0 86 #c60056 + 209 0 86 #d10056 + 219 0 86 #db0056 + 227 0 87 #e30057 + 122 122 122 #7a7a7a + 139 118 121 #8b7679 + 155 112 118 #9b7076 + 169 105 115 #a96973 + 183 97 113 #b76171 + 195 89 111 #c3596f + 208 77 109 #d04d6d + 218 65 108 #da416c + 230 45 107 #e62d6b + 240 3 106 #f0036a + 252 0 105 #fc0069 + 255 0 105 #ff0069 + 148 148 148 #949494 + 165 145 147 #a59193 + 181 139 143 #b58b8f + 196 132 140 #c4848c + 209 126 138 #d17e8a + 222 117 135 #de7587 + 235 108 133 #eb6c85 + 247 97 131 #f76183 + 255 82 129 #ff5281 + 255 65 127 #ff417f + 255 39 127 #ff277f + 174 174 174 #aeaeae + 190 171 173 #beabad + 207 166 170 #cfa6aa + 223 159 166 #df9fa6 + 238 152 163 #ee98a3 + 252 144 160 #fc90a0 + 255 134 157 #ff869d + 255 123 154 #ff7b9a + 255 110 152 #ff6e98 + 255 96 149 #ff6095 + 200 200 200 #c8c8c8 + 215 199 200 #d7c7c8 + 234 192 196 #eac0c4 + 251 186 192 #fbbac0 + 255 178 188 #ffb2bc + 255 169 185 #ffa9b9 + 255 157 181 #ff9db5 + 227 227 227 #e3e3e3 + 242 226 227 #f2e2e3 + 255 219 222 #ffdbde + 255 211 218 #ffd3da + 255 204 214 #ffccd6 + 29 29 29 #1d1d1d + 45 22 30 #2d161e + 54 15 31 #360f1f + 63 3 33 #3f0321 + 71 0 35 #470023 + 78 0 37 #4e0025 + 49 49 49 #313131 + 66 44 48 #422c30 + 77 38 47 #4d262f + 87 30 47 #571e2f + 98 15 47 #620f2f + 108 0 47 #6c002f + 118 0 48 #760030 + 128 0 49 #800031 + 72 72 72 #484848 + 92 66 68 #5c4244 + 106 60 65 #6a3c41 + 118 52 61 #76343d + 130 40 58 #82283a + 141 23 56 #8d1738 + 152 0 54 #980036 + 161 0 52 #a10034 + 171 0 51 #ab0033 + 181 0 50 #b50032 + 97 97 97 #616161 + 116 92 93 #745c5d + 131 86 89 #835659 + 144 78 85 #904e55 + 157 70 81 #9d4651 + 168 60 78 #a83c4e + 179 46 75 #b32e4b + 190 21 72 #be1548 + 200 0 70 #c80046 + 211 0 68 #d30044 + 221 0 65 #dd0041 + 230 0 65 #e60041 + 122 122 122 #7a7a7a + 140 118 119 #8c7677 + 156 112 114 #9c7072 + 171 105 109 #ab696d + 184 97 105 #b86169 + 197 88 100 #c55864 + 210 76 96 #d24c60 + 220 65 93 #dc415d + 232 45 90 #e82d5a + 243 0 87 #f30057 + 255 0 85 #ff0055 + 255 0 84 #ff0054 + 255 0 83 #ff0053 + 255 0 82 #ff0052 + 148 148 148 #949494 + 165 145 145 #a59191 + 182 139 140 #b68b8c + 198 132 134 #c68486 + 211 125 129 #d37d81 + 225 117 125 #e1757d + 238 107 120 #ee6b78 + 249 97 116 #f96174 + 255 82 112 #ff5270 + 255 65 108 #ff416c + 255 42 105 #ff2a69 + 255 0 103 #ff0067 + 174 174 174 #aeaeae + 191 171 171 #bfabab + 208 165 166 #d0a5a6 + 224 159 160 #e09fa0 + 240 152 155 #f0989b + 254 144 149 #fe9095 + 255 134 143 #ff868f + 255 123 139 #ff7b8b + 255 110 134 #ff6e86 + 200 200 200 #c8c8c8 + 216 199 199 #d8c7c7 + 236 192 192 #ecc0c0 + 253 185 186 #fdb9ba + 255 177 179 #ffb1b3 + 255 169 173 #ffa9ad + 227 227 227 #e3e3e3 + 243 226 225 #f3e2e2 + 255 219 218 #ffdbda + 255 211 211 #ffd3d3 + 255 204 205 #ffcccd + 29 29 29 #1d1d1d + 46 22 28 #2e161c + 55 15 27 #370f1b + 64 2 28 #40021c + 72 0 28 #48001c + 80 0 29 #50001d + 49 49 49 #313131 + 66 44 46 #422c2e + 78 38 43 #4e262b + 88 29 41 #581d29 + 99 14 38 #630e26 + 110 0 37 #6e0025 + 119 0 36 #770024 + 129 0 36 #810024 + 72 72 72 #484848 + 92 67 66 #5c4342 + 107 60 60 #6b3c3c + 118 52 55 #763437 + 130 42 49 #822a31 + 141 25 44 #8d192c + 152 0 40 #980028 + 161 0 37 #a10025 + 171 0 33 #ab0021 + 182 0 31 #b6001f + 97 97 97 #616161 + 116 92 91 #745c5b + 132 85 84 #845554 + 145 79 77 #914f4d + 158 70 71 #9e4647 + 169 60 65 #a93c41 + 179 48 59 #b3303b + 190 26 52 #be1a34 + 200 0 47 #c8002f + 211 0 41 #d30029 + 220 0 37 #dc0025 + 228 0 33 #e40021 + 122 122 122 #7a7a7a + 140 118 117 #8c7675 + 157 112 110 #9d706e + 172 105 102 #ac6966 + 186 98 95 #ba625f + 198 88 88 #c65858 + 211 77 81 #d34d51 + 221 66 75 #dd424b + 233 47 68 #e92f44 + 244 8 62 #f4083e + 253 0 57 #fd0039 + 255 0 52 #ff0034 + 148 148 148 #949494 + 166 145 143 #a6918f + 183 139 136 #b78b88 + 199 132 128 #c78480 + 212 125 121 #d47d79 + 226 117 114 #e27572 + 239 108 107 #ef6c6b + 251 98 100 #fb6264 + 255 84 92 #ff545c + 255 68 85 #ff4455 + 255 49 80 #ff3150 + 255 10 75 #ff0a4b + 174 174 174 #aeaeae + 192 171 170 #c0abaa + 210 165 162 #d2a5a2 + 226 159 154 #e29f9a + 242 152 146 #f29892 + 255 144 139 #ff908b + 255 134 130 #ff8682 + 255 124 123 #ff7c7b + 255 112 115 #ff7073 + 200 200 200 #c8c8c8 + 217 199 197 #d9c7c5 + 237 192 188 #edc0bc + 255 185 179 #ffb9b3 + 255 177 170 #ffb1aa + 255 169 162 #ffa9a2 + 227 227 227 #e3e3e3 + 244 226 224 #f4e2e0 + 255 219 213 #ffdbd5 + 255 211 203 #ffd3cb + 29 29 29 #1d1d1d + 46 22 26 #2e161a + 56 15 24 #380f18 + 65 2 22 #410216 + 73 0 22 #490016 + 81 0 22 #510016 + 49 49 49 #313131 + 67 44 44 #432c2c + 79 38 39 #4f2627 + 89 30 34 #591e22 + 99 17 29 #63111d + 110 0 25 #6e0019 + 119 0 22 #770016 + 129 0 20 #810014 + 72 72 72 #484848 + 92 67 64 #5c4340 + 106 60 56 #6a3c38 + 118 53 48 #763530 + 129 43 40 #812b28 + 140 29 31 #8c1d1f + 151 0 23 #970017 + 160 0 16 #a00010 + 169 0 8 #a90008 + 180 0 0 #b40000 + 97 97 97 #616161 + 116 92 89 #745c59 + 132 86 80 #845650 + 145 79 71 #914f47 + 158 71 62 #9e473e + 168 62 53 #a83e35 + 178 51 44 #b2332c + 188 34 34 #bc2222 + 198 0 24 #c60018 + 207 0 11 #cf000b + 217 0 0 #d90000 + 224 0 0 #e00000 + 122 122 122 #7a7a7a + 141 118 115 #8d7673 + 158 112 106 #9e706a + 172 106 96 #ac6a60 + 186 98 86 #ba6256 + 198 90 75 #c65a4b + 210 80 65 #d25041 + 220 69 55 #dc4537 + 231 54 43 #e7362b + 240 32 31 #f0201f + 249 0 16 #f90010 + 148 148 148 #949494 + 167 144 141 #a7908d + 184 139 131 #b88b83 + 199 133 122 #c7857a + 213 126 111 #d57e6f + 227 118 100 #e37664 + 239 110 90 #ef6e5a + 250 100 78 #fa644e + 255 89 66 #ff5942 + 255 76 52 #ff4c34 + 255 62 41 #ff3e29 + 255 41 20 #ff2914 + 255 13 0 #ff0d00 + 174 174 174 #aeaeae + 193 171 167 #c1aba7 + 211 165 157 #d3a59d + 227 159 147 #e39f93 + 243 152 135 #f39887 + 255 145 125 #ff917d + 255 136 113 #ff8871 + 255 127 101 #ff7f65 + 255 117 88 #ff7558 + 255 107 79 #ff6b4f + 200 200 200 #c8c8c8 + 217 199 195 #d9c7c3 + 239 192 183 #efc0b7 + 255 185 171 #ffb9ab + 255 178 159 #ffb29f + 255 170 147 #ffaa93 + 255 161 133 #ffa185 + 227 227 227 #e3e3e3 + 245 226 222 #f5e2de + 255 218 208 #ffdad0 + 255 212 194 #ffd4c2 + 29 29 29 #1d1d1d + 46 23 23 #2e1717 + 57 14 19 #390e13 + 65 3 16 #410310 + 74 0 13 #4a000d + 82 0 11 #52000b + 49 49 49 #313131 + 66 45 42 #422d2a + 78 38 34 #4e2622 + 88 31 27 #581f1b + 99 19 19 #631313 + 108 0 11 #6c000b + 118 0 4 #760004 + 128 0 0 #800000 + 72 72 72 #484848 + 92 67 62 #5c433e + 106 61 52 #6a3d34 + 117 54 42 #75362a + 128 46 31 #802e1f + 138 34 18 #8a2212 + 147 14 0 #930e00 + 156 0 0 #9c0000 + 165 0 0 #a50000 + 174 0 0 #ae0000 + 97 97 97 #616161 + 117 92 87 #755c57 + 132 86 75 #84564b + 144 80 64 #905040 + 156 73 51 #9c4933 + 166 65 37 #a64125 + 175 57 19 #af3913 + 183 46 0 #b72e00 + 190 34 0 #be2200 + 198 6 0 #c60600 + 204 0 0 #cc0000 + 212 0 0 #d40000 + 122 122 122 #7a7a7a + 141 119 113 #8d7771 + 158 113 100 #9e7164 + 172 107 87 #ac6b57 + 185 100 73 #b96449 + 197 93 58 #c55d3a + 207 85 41 #cf5529 + 215 77 20 #d74d14 + 223 69 0 #df4500 + 230 58 0 #e63a00 + 238 44 0 #ee2c00 + 245 20 0 #f51400 + 252 0 0 #fc0000 + 148 148 148 #949494 + 168 145 138 #a8918a + 185 139 125 #b98b7d + 199 134 113 #c78671 + 212 127 99 #d47f63 + 225 120 84 #e17854 + 236 113 68 #ec7144 + 247 105 49 #f76931 + 255 98 22 #ff6216 + 255 89 0 #ff5900 + 255 79 0 #ff4f00 + 255 69 0 #ff4500 + 255 59 0 #ff3b00 + 174 174 174 #aeaeae + 193 171 165 #c1aba5 + 211 166 151 #d3a697 + 227 160 138 #e3a08a + 242 154 123 #f29a7b + 254 147 110 #fe936e + 255 140 92 #ff8c5c + 255 132 74 #ff844a + 255 124 51 #ff7c33 + 255 118 29 #ff761d + 200 200 200 #c8c8c8 + 218 199 193 #dac7c1 + 240 192 177 #f0c0b1 + 255 186 162 #ffbaa2 + 255 180 147 #ffb493 + 255 173 132 #ffad84 + 255 165 114 #ffa572 + 227 227 227 #e3e3e3 + 246 226 219 #f6e2db + 255 219 201 #ffdbc9 + 255 213 186 #ffd5ba + 29 29 29 #1d1d1d + 46 23 20 #2e1714 + 57 15 11 #390f0b + 65 5 5 #410505 + 73 0 0 #490000 + 49 49 49 #313131 + 66 45 40 #422d28 + 78 39 30 #4e271e + 87 33 18 #572112 + 97 24 1 #611801 + 72 72 72 #484848 + 91 68 60 #5b443c + 104 62 47 #683e2f + 114 57 33 #723921 + 123 51 15 #7b330f + 130 45 0 #822d00 + 97 97 97 #616161 + 116 93 84 #745d54 + 131 87 70 #835746 + 142 82 56 #8e5238 + 152 77 39 #984d27 + 160 71 17 #a04711 + 166 67 0 #a64300 + 122 122 122 #7a7a7a + 141 119 110 #8d776e + 156 114 95 #9c725f + 170 108 80 #aa6c50 + 182 103 62 #b6673e + 192 97 43 #c0612b + 199 92 17 #c75c11 + 205 88 0 #cd5800 + 209 85 0 #d15500 + 148 148 148 #949494 + 168 145 135 #a89187 + 183 140 120 #b78c78 + 198 135 104 #c68768 + 210 130 89 #d28259 + 221 124 70 #dd7c46 + 230 119 48 #e67730 + 238 114 13 #ee720d + 244 110 0 #f46e00 + 248 106 0 #f86a00 + 174 174 174 #aeaeae + 194 171 162 #c2aba2 + 210 167 146 #d2a792 + 226 161 129 #e2a181 + 239 156 113 #ef9c71 + 250 151 96 #fa9760 + 255 145 74 #ff914a + 255 139 45 #ff8b2d + 255 135 0 #ff8700 + 255 131 0 #ff8300 + 200 200 200 #c8c8c8 + 219 199 189 #dbc7bd + 239 193 170 #efc1aa + 254 188 154 #febc9a + 255 182 135 #ffb687 + 255 177 117 #ffb175 + 255 171 96 #ffab60 + 227 227 227 #e3e3e3 + 247 226 216 #f7e2d8 + 255 220 195 #ffdcc3 + 255 215 176 #ffd7b0 + 29 29 29 #1d1d1d + 45 24 16 #2d1810 + 56 17 1 #381101 + 49 49 49 #313131 + 65 46 38 #412e26 + 75 41 24 #4b2918 + 84 36 4 #542404 + 72 72 72 #484848 + 90 68 58 #5a443a + 101 64 43 #65402b + 110 60 25 #6e3c19 + 117 56 0 #753800 + 97 97 97 #616161 + 115 93 81 #735d51 + 129 89 64 #815940 + 138 85 48 #8a5530 + 147 81 28 #93511c + 153 77 0 #994d00 + 158 74 0 #9e4a00 + 122 122 122 #7a7a7a + 140 119 107 #8c776b + 154 115 90 #9a735a + 167 111 71 #a76f47 + 177 106 51 #b16a33 + 184 102 27 #b8661b + 190 99 0 #be6300 + 195 97 0 #c36100 + 148 148 148 #949494 + 167 145 132 #a79184 + 181 141 115 #b58d73 + 194 137 96 #c28960 + 205 133 76 #cd854c + 214 129 54 #d68136 + 222 125 23 #de7d17 + 227 122 0 #e37a00 + 231 120 0 #e77800 + 234 118 0 #ea7600 + 174 174 174 #aeaeae + 194 172 158 #c2ac9e + 209 168 140 #d1a88c + 222 164 121 #dea479 + 233 160 102 #e9a066 + 243 155 80 #f39b50 + 253 151 53 #fd9735 + 255 148 4 #ff9404 + 255 145 0 #ff9100 + 255 143 0 #ff8f00 + 255 142 0 #ff8e00 + 200 200 200 #c8c8c8 + 219 199 185 #dbc7b9 + 236 195 165 #ecc3a5 + 250 190 146 #fabe92 + 255 186 124 #ffba7c + 255 182 103 #ffb667 + 255 178 78 #ffb24e + 255 174 46 #ffae2e + 255 170 0 #ffaa00 + 255 168 0 #ffa800 + 255 166 0 #ffa600 + 255 165 0 #ffa500 + 227 227 227 #e3e3e3 + 247 226 211 #f7e2d3 + 255 222 188 #ffdebc + 255 217 168 #ffd9a8 + 255 213 147 #ffd593 + 29 29 29 #1d1d1d + 43 25 13 #2b190d + 49 49 49 #313131 + 63 47 36 #3f2f24 + 72 43 18 #482b12 + 80 40 0 #502800 + 72 72 72 #484848 + 88 69 56 #584538 + 98 66 39 #624227 + 106 63 18 #6a3f12 + 111 60 0 #6f3c00 + 97 97 97 #616161 + 114 94 79 #725e4f + 126 90 59 #7e5a3b + 134 87 41 #865729 + 141 85 15 #8d550f + 146 82 0 #925200 + 122 122 122 #7a7a7a + 139 120 105 #8b7869 + 152 116 85 #987455 + 163 113 64 #a37140 + 171 110 40 #ab6e28 + 177 108 3 #b16c03 + 181 106 0 #b56a00 + 184 104 0 #b86800 + 148 148 148 #949494 + 166 146 130 #a69282 + 179 143 110 #b38f6e + 190 139 89 #be8b59 + 200 136 66 #c88842 + 207 133 38 #cf8526 + 212 131 0 #d48300 + 216 129 0 #d88100 + 219 128 0 #db8000 + 174 174 174 #aeaeae + 192 173 155 #c0ad9b + 206 169 135 #cea987 + 218 166 114 #daa672 + 228 163 92 #e4a35c + 236 160 67 #eca043 + 243 157 31 #f39d1f + 248 155 0 #f89b00 + 252 153 0 #fc9900 + 254 152 0 #fe9800 + 200 200 200 #c8c8c8 + 219 200 181 #dbc8b5 + 233 196 160 #e9c4a0 + 246 193 139 #f6c18b + 255 189 115 #ffbd73 + 255 187 91 #ffbb5b + 255 184 62 #ffb83e + 255 181 9 #ffb509 + 255 179 0 #ffb300 + 255 178 0 #ffb200 + 255 177 0 #ffb100 + 227 227 227 #e3e3e3 + 247 227 207 #f7e3cf + 255 223 183 #ffdfb7 + 255 220 160 #ffdca0 + 255 217 137 #ffd989 + 255 214 113 #ffd671 + 29 29 29 #1d1d1d + 41 26 10 #291a0a + 49 49 49 #313131 + 61 47 34 #3d2f22 + 69 45 14 #452d0e + 76 43 0 #4c2b00 + 72 72 72 #484848 + 86 70 54 #564636 + 94 68 35 #5e4423 + 101 66 9 #654209 + 105 64 0 #694000 + 97 97 97 #616161 + 112 95 76 #705f4c + 122 92 55 #7a5c37 + 129 90 34 #815a22 + 134 88 0 #865800 + 138 87 0 #8a5700 + 122 122 122 #7a7a7a + 137 121 102 #897966 + 148 118 80 #947650 + 158 116 56 #9e7438 + 164 114 28 #a4721c + 168 112 0 #a87000 + 171 111 0 #ab6f00 + 174 110 0 #ae6e00 + 148 148 148 #949494 + 164 147 127 #a4937f + 175 145 105 #af9169 + 185 142 81 #b98e51 + 192 140 56 #c08c38 + 198 138 19 #c68a13 + 202 137 0 #ca8900 + 205 136 0 #cd8800 + 207 135 0 #cf8700 + 174 174 174 #aeaeae + 190 174 152 #beae98 + 202 171 129 #caab81 + 212 169 106 #d4a96a + 220 167 82 #dca752 + 227 165 53 #e3a535 + 233 163 0 #e9a300 + 237 161 0 #eda100 + 239 161 0 #efa100 + 241 160 0 #f1a000 + 200 200 200 #c8c8c8 + 217 200 178 #d9c8b2 + 229 198 155 #e5c69b + 239 196 131 #efc483 + 249 194 105 #f9c269 + 255 192 79 #ffc04f + 255 190 43 #ffbe2b + 255 188 0 #ffbc00 + 255 187 0 #ffbb00 + 255 186 0 #ffba00 + 227 227 227 #e3e3e3 + 245 228 203 #f5e4cb + 255 226 177 #ffe2b1 + 255 223 153 #ffdf99 + 255 221 127 #ffdd7f + 255 219 99 #ffdb63 + 29 29 29 #1d1d1d + 39 27 8 #271b08 + 49 49 49 #313131 + 59 49 33 #3b3121 + 66 47 8 #422f08 + 72 72 72 #484848 + 83 71 53 #534735 + 90 70 32 #5a4620 + 96 68 1 #604401 + 97 97 97 #616161 + 109 96 75 #6d604b + 117 95 52 #755f34 + 123 93 27 #7b5d1b + 127 92 0 #7f5c00 + 130 91 0 #825b00 + 122 122 122 #7a7a7a + 135 122 100 #877a64 + 144 120 76 #90784c + 151 119 49 #977731 + 156 118 16 #9c7610 + 159 117 0 #9f7500 + 162 116 0 #a27400 + 148 148 148 #949494 + 161 148 124 #a1947c + 170 147 101 #aa9365 + 178 145 75 #b2914b + 184 144 46 #b8902e + 189 143 0 #bd8f00 + 192 142 0 #c08e00 + 194 141 0 #c28d00 + 174 174 174 #aeaeae + 187 175 150 #bbaf96 + 197 173 125 #c5ad7d + 206 172 100 #ceac64 + 212 170 73 #d4aa49 + 218 169 38 #daa926 + 222 168 0 #dea800 + 225 167 0 #e1a700 + 227 167 0 #e3a700 + 228 166 0 #e4a600 + 200 200 200 #c8c8c8 + 214 202 175 #d6caaf + 224 200 151 #e0c897 + 232 199 125 #e8c77d + 240 198 98 #f0c662 + 246 196 68 #f6c444 + 251 195 18 #fbc312 + 255 194 0 #ffc200 + 255 193 0 #ffc100 + 227 227 227 #e3e3e3 + 242 229 200 #f2e5c8 + 252 228 173 #fce4ad + 255 227 147 #ffe393 + 255 225 120 #ffe178 + 255 224 92 #ffe05c + 29 29 29 #1d1d1d + 36 28 8 #241c08 + 49 49 49 #313131 + 57 49 32 #393120 + 62 48 5 #3e3005 + 72 72 72 #484848 + 80 72 53 #504835 + 86 72 30 #56481e + 90 71 0 #5a4700 + 97 97 97 #616161 + 106 97 74 #6a614a + 112 97 49 #706131 + 117 96 22 #756016 + 120 95 0 #785f00 + 122 95 0 #7a5f00 + 122 122 122 #7a7a7a + 131 123 99 #837b63 + 138 123 73 #8a7b49 + 144 122 45 #907a2d + 148 121 2 #947902 + 150 121 0 #967900 + 152 120 0 #987800 + 148 148 148 #949494 + 158 149 123 #9e957b + 164 149 98 #a49562 + 171 148 70 #ab9446 + 175 148 37 #af9425 + 178 147 0 #b29300 + 181 147 0 #b59300 + 182 146 0 #b69200 + 174 174 174 #aeaeae + 184 176 148 #b8b094 + 191 176 122 #bfb07a + 197 175 95 #c5af5f + 202 175 67 #caaf43 + 206 174 20 #ceae14 + 209 173 0 #d1ad00 + 211 173 0 #d3ad00 + 212 173 0 #d4ad00 + 200 200 200 #c8c8c8 + 211 203 173 #d3cbad + 217 203 147 #d9cb93 + 223 202 120 #dfca78 + 229 202 91 #e5ca5b + 233 201 56 #e9c938 + 237 201 0 #edc900 + 239 200 0 #efc800 + 241 200 0 #f1c800 + 242 200 0 #f2c800 + 227 227 227 #e3e3e3 + 239 230 198 #efe6c6 + 245 230 170 #f5e6aa + 251 230 143 #fbe68f + 255 230 114 #ffe672 + 255 229 82 #ffe552 + 255 229 34 #ffe522 + 255 229 0 #ffe500 + 29 29 29 #1d1d1d + 34 29 10 #221d0a + 49 49 49 #313131 + 54 50 33 #363221 + 58 50 4 #3a3204 + 72 72 72 #484848 + 78 73 53 #4e4935 + 81 73 30 #51491e + 84 73 0 #544900 + 97 97 97 #616161 + 103 98 74 #67624a + 107 98 49 #6b6231 + 110 98 19 #6e6213 + 112 98 0 #706200 + 114 98 0 #726200 + 122 122 122 #7a7a7a + 129 124 99 #817c63 + 134 124 73 #867c49 + 137 124 42 #897c2a + 139 124 0 #8b7c00 + 141 124 0 #8d7c00 + 142 124 0 #8e7c00 + 148 148 148 #949494 + 155 150 123 #9b967b + 160 151 97 #a09761 + 164 151 68 #a49744 + 167 151 32 #a79720 + 169 151 0 #a99700 + 170 151 0 #aa9700 + 171 151 0 #ab9700 + 174 174 174 #aeaeae + 182 177 148 #b6b194 + 186 177 121 #bab179 + 190 178 94 #beb25e + 193 178 63 #c1b23f + 196 178 5 #c4b205 + 198 178 0 #c6b200 + 199 178 0 #c7b200 + 200 200 200 #c8c8c8 + 209 204 172 #d1ccac + 213 204 146 #d5cc92 + 217 205 118 #d9cd76 + 220 205 88 #dccd58 + 223 205 51 #dfcd33 + 226 205 0 #e2cd00 + 227 205 0 #e3cd00 + 228 205 0 #e4cd00 + 229 205 0 #e5cd00 + 227 227 227 #e3e3e3 + 236 231 197 #ece7c5 + 241 232 169 #f1e8a9 + 245 232 141 #f5e88d + 248 233 111 #f8e96f + 251 233 78 #fbe94e + 254 233 21 #fee915 + 255 233 0 #ffe900 + 29 29 29 #1d1d1d + 31 30 13 #1f1e0d + 49 49 49 #313131 + 52 51 34 #343322 + 53 52 6 #353406 + 72 72 72 #484848 + 75 74 53 #4b4a35 + 77 75 30 #4d4b1e + 78 75 0 #4e4b00 + 97 97 97 #616161 + 100 99 75 #64634b + 102 100 49 #666431 + 104 101 19 #686513 + 104 101 0 #686500 + 122 122 122 #7a7a7a + 126 125 99 #7e7d63 + 128 126 73 #807e49 + 130 127 43 #827f2b + 131 127 0 #837f00 + 132 127 0 #847f00 + 132 128 0 #848000 + 148 148 148 #949494 + 152 151 123 #98977b + 155 152 98 #9b9862 + 157 153 69 #9d9945 + 158 154 32 #9e9a20 + 159 154 0 #9f9a00 + 160 154 0 #a09a00 + 174 174 174 #aeaeae + 179 178 148 #b3b294 + 182 179 122 #b6b37a + 184 180 95 #b8b45f + 185 180 63 #b9b43f + 187 181 0 #bbb500 + 188 181 0 #bcb500 + 200 200 200 #c8c8c8 + 206 204 172 #ceccac + 209 206 146 #d1ce92 + 211 207 118 #d3cf76 + 213 207 88 #d5cf58 + 214 208 50 #d6d032 + 215 209 0 #d7d100 + 216 209 0 #d8d100 + 227 227 227 #e3e3e3 + 234 232 197 #eae8c5 + 236 233 169 #ece9a9 + 239 234 141 #efea8d + 241 235 110 #f1eb6e + 242 236 77 #f2ec4d + 243 236 15 #f3ec0f + 244 237 0 #f4ed00 + 245 237 0 #f5ed00 + 29 29 29 #1d1d1d + 28 31 16 #1c1f10 + 49 49 49 #313131 + 49 52 36 #313424 + 47 53 13 #2f350d + 72 72 72 #484848 + 72 75 55 #484b37 + 71 76 33 #474c21 + 69 78 0 #454e00 + 97 97 97 #616161 + 96 100 77 #60644d + 96 102 52 #606634 + 94 103 25 #5e6719 + 93 104 0 #5d6800 + 92 105 0 #5c6900 + 122 122 122 #7a7a7a + 122 126 101 #7a7e65 + 122 128 77 #7a804d + 121 129 49 #798131 + 120 130 4 #788204 + 119 131 0 #778300 + 118 132 0 #768400 + 148 148 148 #949494 + 149 152 124 #95987c + 148 154 100 #949a64 + 147 156 73 #939c49 + 146 157 38 #929d26 + 145 158 0 #919e00 + 145 159 0 #919f00 + 174 174 174 #aeaeae + 176 178 149 #b0b295 + 175 181 124 #afb57c + 174 182 99 #aeb663 + 173 184 68 #adb844 + 172 185 17 #acb911 + 172 186 0 #acba00 + 171 186 0 #abba00 + 171 187 0 #abbb00 + 200 200 200 #c8c8c8 + 203 205 173 #cbcdad + 202 207 148 #cacf94 + 202 209 122 #cad17a + 201 211 93 #c9d35d + 200 212 56 #c8d438 + 199 213 0 #c7d500 + 198 214 0 #c6d600 + 198 215 0 #c6d700 + 227 227 227 #e3e3e3 + 231 233 198 #e7e9c6 + 230 235 170 #e6ebaa + 230 237 143 #e6ed8f + 229 239 113 #e5ef71 + 228 240 81 #e4f051 + 227 241 23 #e3f117 + 226 242 0 #e2f200 + 225 243 0 #e1f300 + 29 29 29 #1d1d1d + 26 31 18 #1a1f12 + 17 34 0 #112200 + 49 49 49 #313131 + 47 52 38 #2f3426 + 42 54 20 #2a3614 + 35 56 0 #233800 + 28 58 0 #1c3a00 + 72 72 72 #484848 + 69 75 57 #454b39 + 64 78 38 #404e26 + 60 80 12 #3c500c + 55 81 0 #375100 + 49 83 0 #315300 + 97 97 97 #616161 + 94 101 79 #5e654f + 89 103 57 #596739 + 85 105 34 #556922 + 80 107 0 #506b00 + 76 108 0 #4c6c00 + 74 109 0 #4a6d00 + 122 122 122 #7a7a7a + 119 126 103 #777e67 + 116 129 82 #748152 + 111 132 57 #6f8439 + 106 133 25 #6a8519 + 103 135 0 #678700 + 99 136 0 #638800 + 97 137 0 #618900 + 148 148 148 #949494 + 145 153 126 #91997e + 142 155 104 #8e9b68 + 138 158 81 #8a9e51 + 133 160 51 #85a033 + 129 162 0 #81a200 + 125 163 0 #7da300 + 123 164 0 #7ba400 + 122 164 0 #7aa400 + 174 174 174 #aeaeae + 172 179 151 #acb397 + 168 182 128 #a8b680 + 165 185 105 #a5b969 + 161 187 79 #a1bb4f + 156 189 41 #9cbd29 + 152 190 0 #98be00 + 149 192 0 #95c000 + 147 192 0 #93c000 + 146 193 0 #92c100 + 200 200 200 #c8c8c8 + 200 206 175 #c8ceaf + 197 209 151 #c5d197 + 193 211 127 #c1d37f + 188 214 101 #bcd665 + 184 216 70 #b8d846 + 180 218 8 #b4da08 + 177 219 0 #b1db00 + 174 220 0 #aedc00 + 172 221 0 #acdd00 + 171 221 0 #abdd00 + 227 227 227 #e3e3e3 + 227 234 199 #e3eac7 + 224 237 173 #e0edad + 220 239 147 #dcef93 + 216 242 119 #d8f277 + 213 244 89 #d5f459 + 208 246 45 #d0f62d + 205 247 0 #cdf700 + 201 249 0 #c9f900 + 199 250 0 #c7fa00 + 198 250 0 #c6fa00 + 29 29 29 #1d1d1d + 23 32 21 #172015 + 7 35 4 #072304 + 0 37 0 #002500 + 49 49 49 #313131 + 44 52 41 #2c3429 + 35 55 27 #23371b + 22 58 9 #163a09 + 0 60 0 #003c00 + 0 62 0 #003e00 + 0 64 0 #004000 + 72 72 72 #484848 + 65 76 61 #414c3d + 56 79 45 #384f2d + 46 82 28 #2e521c + 33 84 0 #215400 + 6 86 0 #065600 + 0 88 0 #005800 + 97 97 97 #616161 + 89 101 83 #596553 + 80 105 65 #506941 + 70 108 47 #466c2f + 58 110 21 #3a6e15 + 44 113 0 #2c7100 + 23 115 0 #177300 + 0 116 0 #007400 + 0 118 0 #007600 + 122 122 122 #7a7a7a + 115 127 107 #737f6b + 106 131 90 #6a835a + 97 134 70 #618646 + 86 137 49 #568931 + 75 139 14 #4b8b0e + 61 141 0 #3d8d00 + 47 143 0 #2f8f00 + 32 144 0 #209000 + 6 145 0 #069100 + 148 148 148 #949494 + 140 154 130 #8c9a82 + 132 157 112 #849d70 + 123 161 93 #7ba15d + 113 164 71 #71a447 + 102 166 45 #66a62d + 91 169 0 #5ba900 + 79 171 0 #4fab00 + 69 172 0 #45ac00 + 60 173 0 #3cad00 + 51 174 0 #33ae00 + 174 174 174 #aeaeae + 166 181 155 #a6b59b + 158 184 137 #9eb889 + 150 188 118 #96bc76 + 140 191 97 #8cbf61 + 130 194 72 #82c248 + 119 196 40 #77c428 + 108 198 0 #6cc600 + 99 200 0 #63c800 + 90 201 0 #5ac900 + 84 202 0 #54ca00 + 76 203 0 #4ccb00 + 200 200 200 #c8c8c8 + 193 208 180 #c1d0b4 + 184 212 160 #b8d4a0 + 175 215 140 #afd78c + 167 218 119 #a7da77 + 157 221 95 #9ddd5f + 147 224 66 #93e042 + 136 226 10 #88e20a + 126 228 0 #7ee400 + 116 230 0 #74e600 + 110 231 0 #6ee700 + 101 232 0 #65e800 + 94 233 0 #5ee900 + 87 234 0 #57ea00 + 227 227 227 #e3e3e3 + 220 235 204 #dcebcc + 211 240 183 #d3f0b7 + 201 243 160 #c9f3a0 + 192 247 138 #c0f78a + 182 250 113 #b6fa71 + 173 253 85 #adfd55 + 162 255 48 #a2ff30 + 151 255 0 #97ff00 + 141 255 0 #8dff00 + 132 255 0 #84ff00 + 29 29 29 #1d1d1d + 21 32 23 #152017 + 0 35 12 #00230c + 0 38 2 #002602 + 49 49 49 #313131 + 42 53 43 #2a352b + 28 56 33 #1c3821 + 6 59 22 #063b16 + 0 61 9 #003d09 + 0 63 0 #003f00 + 0 65 0 #004100 + 72 72 72 #484848 + 63 77 63 #3f4d3f + 49 80 51 #315033 + 33 83 39 #215327 + 0 86 25 #005619 + 0 88 6 #005806 + 0 90 0 #005a00 + 97 97 97 #616161 + 87 102 86 #576656 + 73 106 72 #496a48 + 57 109 58 #396d3a + 35 112 42 #23702a + 0 115 23 #007317 + 0 118 0 #007600 + 0 120 0 #007800 + 0 121 0 #007900 + 122 122 122 #7a7a7a + 111 128 110 #6f806e + 99 132 97 #638461 + 85 136 82 #558852 + 67 139 66 #438b42 + 43 142 49 #2b8e31 + 0 145 25 #009119 + 0 147 0 #009300 + 0 149 0 #009500 + 0 151 0 #009700 + 148 148 148 #949494 + 136 155 134 #889b86 + 124 159 120 #7c9f78 + 110 163 105 #6ea369 + 94 166 89 #5ea659 + 75 169 73 #4ba949 + 48 172 54 #30ac36 + 0 175 26 #00af1a + 0 177 0 #00b100 + 0 180 0 #00b400 + 0 182 0 #00b600 + 174 174 174 #aeaeae + 162 181 159 #a2b59f + 149 186 144 #95ba90 + 137 189 130 #89bd82 + 122 193 114 #7ac172 + 105 197 97 #69c561 + 83 200 79 #53c84f + 53 203 58 #35cb3a + 0 206 27 #00ce1b + 0 208 0 #00d000 + 0 210 0 #00d200 + 0 212 0 #00d400 + 200 200 200 #c8c8c8 + 188 209 184 #bcd1b8 + 175 213 168 #afd5a8 + 161 217 152 #a1d998 + 147 221 137 #93dd89 + 130 225 120 #82e178 + 111 228 101 #6fe465 + 87 231 81 #57e751 + 50 234 57 #32ea39 + 0 237 12 #00ed0c + 0 239 0 #00ef00 + 227 227 227 #e3e3e3 + 214 237 209 #d6edd1 + 200 241 192 #c8f1c0 + 184 246 173 #b8f6ad + 170 250 157 #aafa9d + 153 254 139 #99fe8b + 135 255 121 #87ff79 + 113 255 101 #71ff65 + 82 255 77 #52ff4d + 25 255 46 #19ff2e + 29 29 29 #1d1d1d + 19 32 25 #132019 + 0 36 18 #002412 + 0 39 12 #00270c + 49 49 49 #313131 + 40 53 45 #28352d + 22 57 39 #163927 + 0 60 33 #003c21 + 0 62 28 #003e1c + 0 64 22 #004016 + 0 66 17 #004211 + 72 72 72 #484848 + 60 77 66 #3c4d42 + 42 81 58 #2a513a + 8 84 52 #085434 + 0 87 46 #00572e + 0 89 40 #005928 + 0 92 34 #005c22 + 97 97 97 #616161 + 83 102 89 #536659 + 65 107 81 #416b51 + 37 111 72 #256f48 + 0 114 65 #007241 + 0 117 57 #007539 + 0 120 50 #007832 + 0 122 44 #007a2c + 0 124 39 #007c27 + 122 122 122 #7a7a7a + 108 129 114 #6c8172 + 91 133 105 #5b8569 + 70 137 96 #468960 + 35 141 87 #238d57 + 0 144 79 #00904f + 0 147 71 #009347 + 0 150 63 #00963f + 0 152 56 #009838 + 0 155 49 #009b31 + 148 148 148 #949494 + 132 155 138 #849b8a + 115 160 129 #73a081 + 95 164 119 #5fa477 + 70 168 110 #46a86e + 24 171 101 #18ab65 + 0 175 92 #00af5c + 0 178 83 #00b253 + 0 180 75 #00b44b + 0 183 67 #00b743 + 0 185 59 #00b93b + 174 174 174 #aeaeae + 158 182 164 #9eb6a4 + 141 187 154 #8dbb9a + 123 191 144 #7bbf90 + 100 195 133 #64c385 + 69 199 123 #45c77b + 0 203 114 #00cb72 + 0 206 104 #00ce68 + 0 209 95 #00d15f + 0 211 86 #00d356 + 0 214 77 #00d64d + 0 217 68 #00d944 + 200 200 200 #c8c8c8 + 183 209 189 #b7d1bd + 166 214 178 #a6d6b2 + 146 219 167 #92dba7 + 125 223 157 #7ddf9d + 99 227 146 #63e392 + 56 231 135 #38e787 + 0 234 126 #00ea7e + 0 238 115 #00ee73 + 0 241 104 #00f168 + 0 243 94 #00f35e + 0 246 85 #00f655 + 0 248 76 #00f84c + 0 250 69 #00fa45 + 227 227 227 #e3e3e3 + 209 237 215 #d1edd7 + 191 243 203 #bff3cb + 168 248 189 #a8f8bd + 146 253 178 #92fdb2 + 120 255 167 #78ffa7 + 87 255 156 #57ff9c + 0 255 145 #00ff91 + 0 255 133 #00ff85 + 29 29 29 #1d1d1d + 18 32 26 #12201a + 0 36 22 #002416 + 0 39 19 #002713 + 0 42 17 #002a11 + 49 49 49 #313131 + 39 53 46 #27352e + 18 57 42 #12392a + 0 60 39 #003c27 + 0 62 36 #003e24 + 0 64 34 #004022 + 0 66 32 #004220 + 0 68 31 #00441f + 0 69 30 #00451e + 72 72 72 #484848 + 59 77 68 #3b4d44 + 37 81 63 #25513f + 0 85 58 #00553a + 0 87 55 #005737 + 0 90 52 #005a34 + 0 92 50 #005c32 + 0 94 49 #005e31 + 0 95 47 #005f2f + 0 96 46 #00602e + 0 98 46 #00622e + 0 99 45 #00632d + 97 97 97 #616161 + 82 103 92 #52675c + 60 107 86 #3c6b56 + 25 111 80 #196f50 + 0 115 76 #00734c + 0 118 73 #007649 + 0 121 70 #007946 + 0 123 67 #007b43 + 0 124 66 #007c42 + 0 126 64 #007e40 + 0 127 63 #007f3f + 0 128 62 #00803e + 0 130 62 #00823e + 0 131 61 #00833d + 122 122 122 #7a7a7a + 106 129 117 #6a8175 + 86 133 110 #56856e + 60 138 105 #3c8a69 + 0 142 100 #008e64 + 0 145 95 #00915f + 0 148 91 #00945b + 0 151 89 #009759 + 0 153 86 #009956 + 0 155 84 #009b54 + 0 157 82 #009d52 + 0 159 81 #009f51 + 0 160 80 #00a050 + 0 162 79 #00a24f + 148 148 148 #949494 + 130 155 142 #829b8e + 109 161 135 #6da187 + 86 165 129 #56a581 + 51 169 124 #33a97c + 0 172 119 #00ac77 + 0 176 115 #00b073 + 0 179 111 #00b36f + 0 181 108 #00b56c + 0 184 105 #00b869 + 0 186 103 #00ba67 + 0 188 101 #00bc65 + 0 190 99 #00be63 + 0 192 97 #00c061 + 174 174 174 #aeaeae + 156 182 167 #9cb6a7 + 136 187 160 #88bba0 + 114 192 154 #72c09a + 85 196 148 #55c494 + 29 200 143 #1dc88f + 0 204 138 #00cc8a + 0 207 133 #00cf85 + 0 210 130 #00d282 + 0 213 127 #00d57f + 0 216 124 #00d87c + 0 218 121 #00da79 + 0 220 119 #00dc77 + 0 222 118 #00de76 + 200 200 200 #c8c8c8 + 181 210 193 #b5d2c1 + 161 215 186 #a1d7ba + 136 220 178 #88dcb2 + 109 224 172 #6de0ac + 69 228 166 #45e4a6 + 0 232 161 #00e8a1 + 0 236 156 #00ec9c + 0 239 152 #00ef98 + 0 242 148 #00f294 + 0 245 145 #00f591 + 0 248 142 #00f88e + 227 227 227 #e3e3e3 + 207 237 219 #cfeddb + 185 243 211 #b9f3d3 + 157 249 203 #9df9cb + 128 254 196 #80fec4 + 91 255 190 #5bffbe + 0 255 184 #00ffb8 + 0 255 179 #00ffb3 + 29 29 29 #1d1d1d + 17 32 27 #11201b + 0 36 25 #002419 + 0 39 24 #002718 + 0 42 23 #002a17 + 49 49 49 #313131 + 38 53 48 #263530 + 14 57 45 #0e392d + 0 60 43 #003c2b + 0 62 42 #003e2a + 0 64 41 #004029 + 0 66 40 #004228 + 0 68 40 #004428 + 0 69 40 #004528 + 72 72 72 #484848 + 58 77 70 #3a4d46 + 33 81 66 #215142 + 0 85 64 #005540 + 0 87 62 #00573e + 0 90 61 #005a3d + 0 92 60 #005c3c + 0 94 59 #005e3b + 0 95 59 #005f3b + 0 97 58 #00613a + 0 98 58 #00623a + 0 99 58 #00633a + 97 97 97 #616161 + 81 103 94 #51675e + 57 107 90 #396b5a + 9 111 87 #096f57 + 0 115 84 #007354 + 0 118 82 #007652 + 0 121 81 #007951 + 0 123 80 #007b50 + 0 124 79 #007c4f + 0 126 78 #007e4e + 0 127 78 #007f4e + 0 128 77 #00804d + 0 130 77 #00824d + 0 131 77 #00834d + 122 122 122 #7a7a7a + 105 129 119 #698177 + 83 134 114 #538672 + 54 138 111 #368a6f + 0 142 108 #008e6c + 0 145 105 #009169 + 0 149 103 #009567 + 0 151 102 #009766 + 0 153 100 #009964 + 0 156 99 #009c63 + 0 157 98 #009d62 + 0 159 97 #009f61 + 0 160 97 #00a061 + 0 162 96 #00a260 + 148 148 148 #949494 + 129 155 144 #819b90 + 106 161 139 #6aa18b + 80 165 136 #50a588 + 37 169 132 #25a984 + 0 172 129 #00ac81 + 0 176 126 #00b07e + 0 179 124 #00b37c + 0 182 122 #00b67a + 0 184 121 #00b879 + 0 187 119 #00bb77 + 0 189 118 #00bd76 + 0 191 117 #00bf75 + 0 192 116 #00c074 + 174 174 174 #aeaeae + 154 182 170 #9ab6aa + 133 187 165 #85bba5 + 109 192 161 #6dc0a1 + 76 196 157 #4cc49d + 0 200 153 #00c899 + 0 204 150 #00cc96 + 0 208 147 #00d093 + 0 211 145 #00d391 + 0 213 143 #00d58f + 0 216 141 #00d88d + 0 218 140 #00da8c + 0 220 138 #00dc8a + 0 222 138 #00de8a + 200 200 200 #c8c8c8 + 179 210 196 #b3d2c4 + 158 215 190 #9ed7be + 131 220 185 #83dcb9 + 101 224 181 #65e0b5 + 50 229 177 #32e5b1 + 0 233 174 #00e9ae + 0 236 171 #00ecab + 0 239 168 #00efa8 + 0 243 165 #00f3a5 + 0 245 163 #00f5a3 + 0 248 162 #00f8a2 + 227 227 227 #e3e3e3 + 205 238 222 #cdeede + 181 244 216 #b5f4d8 + 151 249 210 #97f9d2 + 118 254 205 #76fecd + 74 255 201 #4affc9 + 0 255 197 #00ffc5 + 29 29 29 #1d1d1d + 16 32 28 #10201c + 0 36 28 #00241c + 0 39 28 #00271c + 0 42 30 #002a1e + 49 49 49 #313131 + 37 53 49 #253531 + 8 57 48 #083930 + 0 60 48 #003c30 + 0 62 48 #003e30 + 0 65 48 #004130 + 0 67 48 #004330 + 0 68 49 #004431 + 0 69 50 #004532 + 72 72 72 #484848 + 56 77 71 #384d47 + 28 82 70 #1c5246 + 0 85 69 #005545 + 0 88 69 #005845 + 0 90 68 #005a44 + 0 92 69 #005c45 + 0 94 69 #005e45 + 0 96 69 #006045 + 0 97 70 #006146 + 0 98 70 #006246 + 0 99 71 #006347 + 97 97 97 #616161 + 79 103 95 #4f675f + 53 107 94 #356b5e + 0 111 92 #006f5c + 0 115 91 #00735b + 0 118 91 #00765b + 0 121 91 #00795b + 0 123 90 #007b5a + 0 124 91 #007c5b + 0 126 91 #007e5b + 0 128 91 #00805b + 0 129 91 #00815b + 0 130 92 #00825c + 0 131 92 #00835c + 122 122 122 #7a7a7a + 104 129 121 #688179 + 80 134 119 #508677 + 48 138 117 #308a75 + 0 142 115 #008e73 + 0 145 114 #009172 + 0 149 113 #009571 + 0 151 113 #009771 + 0 154 113 #009a71 + 0 156 113 #009c71 + 0 157 113 #009d71 + 0 159 113 #009f71 + 0 161 113 #00a171 + 0 162 113 #00a271 + 148 148 148 #949494 + 128 155 146 #809b92 + 103 161 144 #67a190 + 75 165 142 #4ba58e + 16 169 140 #10a98c + 0 173 138 #00ad8a + 0 176 137 #00b089 + 0 179 136 #00b388 + 0 182 135 #00b687 + 0 184 135 #00b887 + 0 187 134 #00bb86 + 0 189 134 #00bd86 + 0 191 134 #00bf86 + 0 192 134 #00c086 + 174 174 174 #aeaeae + 153 182 172 #99b6ac + 131 187 169 #83bba9 + 104 192 167 #68c0a7 + 66 196 165 #42c4a5 + 0 200 163 #00c8a3 + 0 204 161 #00cca1 + 0 208 160 #00d0a0 + 0 211 159 #00d39f + 0 213 158 #00d59e + 0 216 158 #00d89e + 0 219 157 #00db9d + 0 220 157 #00dc9d + 0 222 156 #00de9c + 200 200 200 #c8c8c8 + 179 210 198 #b3d2c6 + 155 215 195 #9bd7c3 + 127 220 192 #7fdcc0 + 94 224 190 #5ee0be + 26 229 188 #1ae5bc + 0 233 186 #00e9ba + 0 236 185 #00ecb9 + 0 240 183 #00f0b7 + 0 243 182 #00f3b6 + 0 246 181 #00f6b5 + 0 248 181 #00f8b5 + 227 227 227 #e3e3e3 + 204 238 225 #cceee1 + 179 244 221 #b3f4dd + 147 249 218 #93f9da + 109 254 215 #6dfed7 + 55 255 213 #37ffd5 + 0 255 211 #00ffd3 + 29 29 29 #1d1d1d + 14 32 30 #0e201e + 0 36 32 #002420 + 0 39 35 #002723 + 0 42 37 #002a25 + 49 49 49 #313131 + 36 53 51 #243533 + 4 57 52 #043934 + 0 60 53 #003c35 + 0 62 55 #003e37 + 0 65 56 #004138 + 0 67 58 #00433a + 0 68 59 #00443b + 72 72 72 #484848 + 56 77 73 #384d49 + 24 82 74 #18524a + 0 85 75 #00554b + 0 88 76 #00584c + 0 90 78 #005a4e + 0 92 79 #005c4f + 0 94 81 #005e51 + 0 96 82 #006052 + 0 97 83 #006153 + 0 98 84 #006254 + 97 97 97 #616161 + 78 103 98 #4e6762 + 50 107 98 #326b62 + 0 111 99 #006f63 + 0 115 100 #007364 + 0 118 101 #007665 + 0 121 103 #007967 + 0 123 104 #007b68 + 0 125 105 #007d69 + 0 126 106 #007e6a + 0 128 107 #00806b + 0 129 108 #00816c + 0 130 109 #00826d + 122 122 122 #7a7a7a + 103 129 123 #67817b + 78 134 123 #4e867b + 43 138 123 #2b8a7b + 0 142 123 #008e7b + 0 145 124 #00917c + 0 149 126 #00957e + 0 151 127 #00977f + 0 154 128 #009a80 + 0 156 130 #009c82 + 0 158 131 #009e83 + 0 159 132 #009f84 + 0 161 133 #00a185 + 0 162 134 #00a286 + 148 148 148 #949494 + 127 155 148 #7f9b94 + 101 161 148 #65a194 + 71 165 148 #47a594 + 0 169 148 #00a994 + 0 173 149 #00ad95 + 0 176 149 #00b095 + 0 179 150 #00b396 + 0 182 151 #00b697 + 0 185 152 #00b998 + 0 187 153 #00bb99 + 0 189 155 #00bd9b + 0 191 156 #00bf9c + 0 193 157 #00c19d + 174 174 174 #aeaeae + 153 182 174 #99b6ae + 129 187 173 #81bbad + 101 192 173 #65c0ad + 56 196 173 #38c4ad + 0 200 173 #00c8ad + 0 204 173 #00ccad + 0 208 174 #00d0ae + 0 210 175 #00d2af + 0 213 176 #00d5b0 + 0 216 177 #00d8b1 + 0 218 177 #00dab1 + 0 220 178 #00dcb2 + 200 200 200 #c8c8c8 + 178 209 200 #b2d1c8 + 153 215 199 #99d7c7 + 125 220 198 #7ddcc6 + 87 224 198 #57e0c6 + 0 229 198 #00e5c6 + 0 233 198 #00e9c6 + 0 236 198 #00ecc6 + 0 239 199 #00efc7 + 0 243 200 #00f3c8 + 227 227 227 #e3e3e3 + 203 237 227 #cbede3 + 177 243 226 #b1f3e2 + 143 249 225 #8ff9e1 + 102 254 224 #66fee0 + 25 255 223 #19ffdf + 29 29 29 #1d1d1d + 12 32 32 #0c2020 + 0 36 37 #002425 + 0 39 42 #00272a + 49 49 49 #313131 + 35 53 53 #233535 + 0 57 56 #003938 + 0 60 60 #003c3c + 0 62 64 #003e40 + 0 65 67 #004143 + 0 67 70 #004346 + 0 68 73 #004449 + 72 72 72 #484848 + 54 77 76 #364d4c + 19 81 79 #13514f + 0 85 83 #005553 + 0 87 86 #005756 + 0 90 90 #005a5a + 0 92 93 #005c5d + 0 94 96 #005e60 + 0 96 98 #006062 + 0 97 101 #006165 + 97 97 97 #616161 + 78 103 100 #4e6764 + 48 107 103 #306b67 + 0 111 107 #006f6b + 0 115 110 #00736e + 0 118 114 #007672 + 0 120 117 #007875 + 0 123 120 #007b78 + 0 125 123 #007d7b + 0 126 125 #007e7d + 0 128 128 #008080 + 0 129 130 #008182 + 122 122 122 #7a7a7a + 102 129 126 #66817e + 76 133 128 #4c8580 + 36 137 131 #248983 + 0 141 134 #008d86 + 0 145 138 #00918a + 0 148 141 #00948d + 0 151 143 #00978f + 0 154 147 #009a93 + 0 156 150 #009c96 + 0 158 152 #009e98 + 0 160 154 #00a09a + 0 161 156 #00a19c + 148 148 148 #949494 + 127 155 151 #7f9b97 + 100 160 153 #64a099 + 65 165 156 #41a59c + 0 169 159 #00a99f + 0 172 161 #00aca1 + 0 176 164 #00b0a4 + 0 179 167 #00b3a7 + 0 182 170 #00b6aa + 0 184 172 #00b8ac + 0 187 175 #00bbaf + 0 189 178 #00bdb2 + 0 191 180 #00bfb4 + 174 174 174 #aeaeae + 152 182 177 #98b6b1 + 127 187 179 #7fbbb3 + 98 192 181 #62c0b5 + 44 196 183 #2cc4b7 + 0 200 186 #00c8ba + 0 204 188 #00ccbc + 0 207 190 #00cfbe + 0 210 193 #00d2c1 + 0 213 196 #00d5c4 + 0 216 198 #00d8c6 + 0 219 201 #00dbc9 + 200 200 200 #c8c8c8 + 178 209 203 #b2d1cb + 152 215 204 #98d7cc + 122 220 206 #7adcce + 77 224 208 #4de0d0 + 0 228 210 #00e4d2 + 0 232 212 #00e8d4 + 0 236 214 #00ecd6 + 0 239 216 #00efd8 + 227 227 227 #e3e3e3 + 203 237 230 #cbede6 + 175 243 231 #aff3e7 + 140 249 232 #8cf9e8 + 92 254 234 #5cfeea + 0 255 236 #00ffec + 29 29 29 #1d1d1d + 11 32 34 #0b2022 + 0 36 41 #002429 + 0 39 47 #00272f + 49 49 49 #313131 + 34 53 54 #223536 + 0 57 60 #00393c + 0 59 65 #003b41 + 0 62 71 #003e47 + 0 65 75 #00414b + 0 67 79 #00434f + 72 72 72 #484848 + 54 77 78 #364d4e + 15 81 84 #0f5154 + 0 84 89 #005459 + 0 87 94 #00575e + 0 90 99 #005a63 + 0 92 103 #005c67 + 0 94 107 #005e6b + 0 96 110 #00606e + 97 97 97 #616161 + 77 102 103 #4d6667 + 47 107 108 #2f6b6c + 0 111 113 #006f71 + 0 114 119 #007277 + 0 117 124 #00757c + 0 120 129 #007881 + 0 123 134 #007b86 + 0 125 138 #007d8a + 0 126 141 #007e8d + 0 128 144 #008090 + 122 122 122 #7a7a7a + 102 129 128 #668180 + 76 133 133 #4c8585 + 29 137 137 #1d8989 + 0 141 143 #008d8f + 0 145 148 #009194 + 0 148 154 #00949a + 0 150 158 #00969e + 0 153 163 #0099a3 + 0 156 167 #009ca7 + 0 158 171 #009eab + 0 160 174 #00a0ae + 148 148 148 #949494 + 127 155 154 #7f9b9a + 99 160 158 #63a09e + 62 164 163 #3ea4a3 + 0 168 168 #00a8a8 + 0 172 172 #00acac + 0 175 177 #00afb1 + 0 178 181 #00b2b5 + 0 181 186 #00b5ba + 0 184 190 #00b8be + 0 187 194 #00bbc2 + 0 189 199 #00bdc7 + 174 174 174 #aeaeae + 152 182 180 #98b6b4 + 126 187 184 #7ebbb8 + 96 191 188 #60bfbc + 37 195 192 #25c3c0 + 0 200 197 #00c8c5 + 0 203 201 #00cbc9 + 0 207 206 #00cfce + 0 210 210 #00d2d2 + 0 213 214 #00d5d6 + 0 215 218 #00d7da + 200 200 200 #c8c8c8 + 178 209 206 #b2d1ce + 152 214 210 #98d6d2 + 118 219 215 #76dbd7 + 71 224 219 #47e0db + 0 228 223 #00e4df + 0 232 227 #00e8e3 + 0 235 231 #00ebe7 + 0 239 235 #00efeb + 227 227 227 #e3e3e3 + 204 237 234 #ccedea + 174 243 237 #aef3ed + 137 249 242 #89f9f2 + 82 254 246 #52fef6 + 0 255 250 #00fffa + 29 29 29 #1d1d1d + 10 32 36 #0a2024 + 0 35 45 #00232d + 0 38 53 #002635 + 49 49 49 #313131 + 34 53 56 #223538 + 0 56 64 #003840 + 0 59 71 #003b47 + 0 62 79 #003e4f + 0 64 87 #004057 + 0 66 94 #00425e + 72 72 72 #484848 + 53 77 80 #354d50 + 14 81 88 #0e5158 + 0 84 96 #005460 + 0 86 103 #005667 + 0 89 110 #00596e + 0 92 117 #005c75 + 0 94 123 #005e7b + 0 96 128 #006080 + 97 97 97 #616161 + 77 102 105 #4d6669 + 47 106 112 #2f6a70 + 0 110 120 #006e78 + 0 113 128 #007180 + 0 116 136 #007488 + 0 119 143 #00778f + 0 122 150 #007a96 + 0 124 155 #007c9b + 0 126 160 #007ea0 + 0 128 165 #0080a5 + 122 122 122 #7a7a7a + 102 128 130 #668082 + 76 132 137 #4c8489 + 28 136 145 #1c8891 + 0 140 153 #008c99 + 0 143 160 #008fa0 + 0 147 168 #0093a8 + 0 149 174 #0095ae + 0 152 181 #0098b5 + 0 155 188 #009bbc + 0 158 194 #009ec2 + 0 160 198 #00a0c6 + 148 148 148 #949494 + 127 155 156 #7f9b9c + 101 159 163 #659fa3 + 62 163 170 #3ea3aa + 0 167 177 #00a7b1 + 0 171 184 #00abb8 + 0 174 192 #00aec0 + 0 177 198 #00b1c6 + 0 180 205 #00b4cd + 0 183 212 #00b7d4 + 0 186 218 #00bada + 0 189 225 #00bde1 + 174 174 174 #aeaeae + 153 181 182 #99b5b6 + 127 186 189 #7fbabd + 97 190 195 #61bec3 + 33 194 202 #21c2ca + 0 198 210 #00c6d2 + 0 202 217 #00cad9 + 0 205 224 #00cde0 + 0 209 231 #00d1e7 + 0 212 237 #00d4ed + 0 215 242 #00d7f2 + 200 200 200 #c8c8c8 + 179 208 208 #b3d0d0 + 152 214 215 #98d6d7 + 119 218 222 #77dade + 68 223 228 #44dfe4 + 0 227 235 #00e3eb + 0 231 242 #00e7f2 + 0 235 248 #00ebf8 + 0 239 255 #00efff + 227 227 227 #e3e3e3 + 205 236 236 #cdecec + 175 242 243 #aff2f3 + 137 248 250 #89f8fa + 81 253 255 #51fdff + 29 29 29 #1d1d1d + 10 32 38 #0a2026 + 0 35 48 #002330 + 0 37 57 #002539 + 49 49 49 #313131 + 34 53 58 #22353a + 0 56 67 #003843 + 0 58 77 #003a4d + 0 61 86 #003d56 + 0 64 96 #004060 + 72 72 72 #484848 + 54 77 82 #364d52 + 16 80 92 #10505c + 0 83 102 #005366 + 0 86 111 #00566f + 0 88 120 #005878 + 0 91 129 #005b81 + 0 93 137 #005d89 + 97 97 97 #616161 + 78 102 106 #4e666a + 49 106 116 #316a74 + 0 109 126 #006d7e + 0 112 136 #007088 + 0 115 146 #007392 + 0 118 155 #00769b + 0 121 164 #0079a4 + 0 123 170 #007baa + 122 122 122 #7a7a7a + 104 128 132 #688084 + 78 132 141 #4e848d + 34 135 151 #228797 + 0 139 160 #008ba0 + 0 142 170 #008eaa + 0 145 180 #0091b4 + 0 148 189 #0094bd + 0 151 198 #0097c6 + 0 154 207 #009acf + 148 148 148 #949494 + 129 154 158 #819a9e + 104 158 167 #689ea7 + 66 162 177 #42a2b1 + 0 166 186 #00a6ba + 0 169 195 #00a9c3 + 0 173 205 #00adcd + 0 176 214 #00b0d6 + 0 179 224 #00b3e0 + 0 182 232 #00b6e8 + 174 174 174 #aeaeae + 155 181 184 #9bb5b8 + 129 185 193 #81b9c1 + 99 189 202 #63bdca + 43 193 211 #2bc1d3 + 0 197 221 #00c5dd + 0 201 231 #00c9e7 + 0 204 240 #00ccf0 + 0 208 251 #00d0fb + 200 200 200 #c8c8c8 + 182 208 210 #b6d0d2 + 154 213 219 #9ad5db + 121 217 228 #79d9e4 + 71 221 238 #47ddee + 0 226 248 #00e2f8 + 0 230 255 #00e6ff + 0 233 255 #00e9ff + 227 227 227 #e3e3e3 + 208 235 238 #d0ebee + 176 241 248 #b0f1f8 + 138 247 255 #8af7ff + 29 29 29 #1d1d1d + 11 32 39 #0b2027 + 0 34 50 #002232 + 0 36 61 #00243d + 0 38 72 #002648 + 49 49 49 #313131 + 34 53 59 #22353b + 0 55 70 #003746 + 0 57 82 #003952 + 0 60 94 #003c5e + 0 62 105 #003e69 + 72 72 72 #484848 + 54 76 84 #364c54 + 22 79 96 #164f60 + 0 82 107 #00526b + 0 84 118 #005476 + 0 86 130 #005682 + 0 89 141 #00598d + 0 91 152 #005b98 + 97 97 97 #616161 + 79 101 108 #4f656c + 54 105 120 #366978 + 0 107 131 #006b83 + 0 110 143 #006e8f + 0 112 155 #00709b + 0 115 166 #0073a6 + 0 118 178 #0076b2 + 0 120 190 #0078be + 122 122 122 #7a7a7a + 105 127 133 #697f85 + 82 131 144 #528390 + 46 134 156 #2e869c + 0 136 168 #0088a8 + 0 139 180 #008bb4 + 0 142 192 #008ec0 + 0 145 204 #0091cc + 0 148 217 #0094d9 + 0 150 229 #0096e5 + 148 148 148 #949494 + 131 153 159 #83999f + 108 157 170 #6c9daa + 76 161 182 #4ca1b6 + 0 164 194 #00a4c2 + 0 166 206 #00a6ce + 0 169 218 #00a9da + 0 172 230 #00ace6 + 0 175 243 #00aff3 + 0 178 255 #00b2ff + 174 174 174 #aeaeae + 158 180 185 #9eb4b9 + 134 184 197 #86b8c5 + 105 188 208 #69bcd0 + 62 191 220 #3ebfdc + 0 194 233 #00c2e9 + 0 198 247 #00c6f7 + 0 200 255 #00c8ff + 200 200 200 #c8c8c8 + 185 207 212 #b9cfd4 + 159 211 224 #9fd3e0 + 129 215 236 #81d7ec + 82 219 249 #52dbf9 + 0 223 255 #00dfff + 227 227 227 #e3e3e3 + 211 234 239 #d3eaef + 181 240 253 #b5f0fd + 29 29 29 #1d1d1d + 13 31 41 #0d1f29 + 0 33 52 #002134 + 0 34 63 #00223f + 0 36 75 #00244b + 49 49 49 #313131 + 35 52 61 #23343d + 6 54 73 #063649 + 0 56 85 #003855 + 0 58 98 #003a62 + 0 60 110 #003c6e + 0 62 120 #003e78 + 72 72 72 #484848 + 56 76 86 #384c56 + 30 78 98 #1e4e62 + 0 80 110 #00506e + 0 82 123 #00527b + 0 84 135 #005487 + 0 86 147 #005693 + 0 88 160 #0058a0 + 97 97 97 #616161 + 82 101 109 #52656d + 60 103 122 #3c677a + 26 105 134 #1a6986 + 0 108 147 #006c93 + 0 109 160 #006da0 + 0 112 172 #0070ac + 0 114 185 #0072b9 + 0 117 199 #0075c7 + 122 122 122 #7a7a7a + 108 126 135 #6c7e87 + 88 129 147 #588193 + 60 132 160 #3c84a0 + 0 134 172 #0086ac + 0 136 185 #0088b9 + 0 139 199 #008bc7 + 0 141 212 #008dd4 + 0 143 226 #008fe2 + 0 146 240 #0092f0 + 148 148 148 #949494 + 134 153 160 #8699a0 + 114 156 172 #729cac + 88 158 186 #589eba + 48 161 199 #30a1c7 + 0 163 212 #00a3d4 + 0 166 226 #00a6e2 + 0 168 240 #00a8f0 + 0 171 255 #00abff + 0 174 255 #00aeff + 174 174 174 #aeaeae + 160 179 186 #a0b3ba + 139 183 199 #8bb7c7 + 115 186 211 #73bad3 + 80 188 225 #50bce1 + 0 191 240 #00bff0 + 0 194 255 #00c2ff + 200 200 200 #c8c8c8 + 188 206 212 #bcced4 + 164 210 226 #a4d2e2 + 138 213 240 #8ad5f0 + 98 217 255 #62d9ff + 227 227 227 #e3e3e3 + 214 233 240 #d6e9f0 + 186 238 255 #baeeff + 29 29 29 #1d1d1d + 15 31 42 #0f1f2a + 0 32 53 #002035 + 0 33 64 #002140 + 0 34 77 #00224d + 49 49 49 #313131 + 38 52 62 #26343e + 16 53 75 #10354b + 0 55 87 #003757 + 0 56 101 #003865 + 0 58 113 #003a71 + 0 59 125 #003b7d + 72 72 72 #484848 + 59 75 87 #3b4b57 + 39 77 100 #274d64 + 0 78 113 #004e71 + 0 80 125 #00507d + 0 81 138 #00518a + 0 83 151 #005397 + 0 85 164 #0055a4 + 97 97 97 #616161 + 84 100 110 #54646e + 67 102 124 #43667c + 43 104 136 #2b6888 + 0 105 150 #006996 + 0 107 162 #006ba2 + 0 109 175 #006daf + 0 110 189 #006ebd + 0 112 203 #0070cb + 122 122 122 #7a7a7a + 110 126 136 #6e7e88 + 94 128 149 #5e8095 + 73 130 162 #4982a2 + 37 132 175 #2584af + 0 133 189 #0085bd + 0 135 203 #0087cb + 0 137 216 #0089d8 + 0 139 231 #008be7 + 0 141 244 #008df4 + 148 148 148 #949494 + 137 152 161 #8998a1 + 121 154 174 #799aae + 100 156 188 #649cbc + 72 158 202 #489eca + 6 160 215 #06a0d7 + 0 162 231 #00a2e7 + 0 164 246 #00a4f6 + 0 167 255 #00a7ff + 0 169 255 #00a9ff + 174 174 174 #aeaeae + 163 178 187 #a3b2bb + 146 181 200 #92b5c8 + 126 183 214 #7eb7d6 + 101 185 229 #65b9e5 + 55 188 245 #37bcf5 + 0 190 255 #00beff + 200 200 200 #c8c8c8 + 190 205 213 #becdd5 + 172 208 228 #acd0e4 + 150 211 243 #96d3f3 + 118 214 255 #76d6ff + 227 227 227 #e3e3e3 + 217 233 240 #d9e9f0 + 193 236 255 #c1ecff + 29 29 29 #1d1d1d + 19 30 43 #131e2b + 1 31 54 #011f36 + 0 31 66 #001f42 + 0 31 78 #001f4e + 49 49 49 #313131 + 40 51 63 #28333f + 26 52 76 #1a344c + 0 52 89 #003459 + 0 53 102 #003566 + 0 54 115 #003673 + 0 54 128 #003680 + 72 72 72 #484848 + 62 74 88 #3e4a58 + 48 75 101 #304b65 + 25 76 114 #194c72 + 0 77 127 #004d7f + 0 77 140 #004d8c + 0 78 154 #004e9a + 0 79 167 #004fa7 + 97 97 97 #616161 + 88 99 111 #58636f + 75 100 125 #4b647d + 59 101 138 #3b658a + 30 102 152 #1e6698 + 0 103 164 #0067a4 + 0 104 177 #0068b1 + 0 105 192 #0069c0 + 0 105 206 #0069ce + 122 122 122 #7a7a7a + 114 125 136 #727d88 + 101 126 150 #657e96 + 86 127 164 #567fa4 + 66 128 177 #4280b1 + 30 129 191 #1e81bf + 0 130 205 #0082cd + 0 131 219 #0083db + 0 132 235 #0084eb + 0 134 250 #0086fa + 148 148 148 #949494 + 140 151 161 #8c97a1 + 128 152 175 #8098af + 113 154 189 #719abd + 95 155 204 #5f9bcc + 70 156 218 #469cda + 0 157 234 #009dea + 0 159 250 #009ffa + 0 160 255 #00a0ff + 174 174 174 #aeaeae + 167 177 187 #a7b1bb + 154 179 202 #9ab3ca + 139 180 216 #8bb4d8 + 121 182 231 #79b6e7 + 95 183 248 #5fb7f8 + 51 185 255 #33b9ff + 200 200 200 #c8c8c8 + 194 204 213 #c2ccd5 + 180 206 229 #b4cee5 + 162 208 245 #a2d0f5 + 141 210 255 #8dd2ff + 227 227 227 #e3e3e3 + 221 231 240 #dde7f0 + 203 234 255 #cbeaff + 29 29 29 #1d1d1d + 22 29 43 #161d2b + 12 29 54 #0c1d36 + 0 29 66 #001d42 + 0 28 78 #001c4e + 0 27 91 #001b5b + 0 25 103 #001967 + 0 23 112 #001770 + 0 20 123 #00147b + 0 17 131 #001183 + 0 13 141 #000d8d + 0 8 149 #000895 + 0 2 158 #00029e + 0 0 167 #0000a7 + 49 49 49 #313131 + 44 50 64 #2c3240 + 34 50 76 #22324c + 18 50 90 #12325a + 0 50 103 #003267 + 0 49 116 #003174 + 0 49 128 #003180 + 0 47 142 #002f8e + 0 45 156 #002d9c + 0 44 168 #002ca8 + 0 42 176 #002ab0 + 0 40 186 #0028ba + 0 37 198 #0025c6 + 0 35 207 #0023cf + 72 72 72 #484848 + 65 73 88 #414958 + 56 73 102 #384966 + 43 74 115 #2b4a73 + 22 74 128 #164a80 + 0 74 141 #004a8d + 0 73 155 #00499b + 0 73 168 #0049a8 + 0 72 182 #0048b6 + 0 71 196 #0047c4 + 0 70 208 #0046d0 + 0 68 220 #0044dc + 0 67 234 #0043ea + 0 65 243 #0041f3 + 97 97 97 #616161 + 91 98 112 #5b6270 + 83 98 125 #53627d + 72 99 139 #48638b + 56 99 153 #386399 + 33 99 166 #2163a6 + 0 99 178 #0063b2 + 0 99 192 #0063c0 + 0 99 207 #0063cf + 0 99 222 #0063de + 0 98 239 #0062ef + 0 97 253 #0061fd + 0 95 255 #005fff + 0 94 255 #005eff + 122 122 122 #7a7a7a + 117 124 137 #757c89 + 109 124 150 #6d7c96 + 98 125 164 #627da4 + 85 125 178 #557db2 + 68 125 192 #447dc0 + 39 126 206 #277ece + 0 126 220 #007edc + 0 126 236 #007eec + 0 126 252 #007efc + 0 126 255 #007eff + 148 148 148 #949494 + 143 150 162 #8f96a2 + 135 151 175 #8797af + 124 151 191 #7c97bf + 113 151 205 #7197cd + 97 152 219 #6198db + 73 153 235 #4999eb + 26 153 252 #1a99fc + 174 174 174 #aeaeae + 169 176 187 #a9b0bb + 160 177 202 #a0b1ca + 150 178 217 #96b2d9 + 137 178 232 #89b2e8 + 121 179 249 #79b3f9 + 95 180 255 #5fb4ff + 200 200 200 #c8c8c8 + 196 203 213 #c4cbd5 + 186 204 229 #bacce5 + 174 205 247 #aecdf7 + 158 206 255 #9eceff + 227 227 227 #e3e3e3 + 224 231 240 #e0e7f0 + 212 231 255 #d4e7ff + 29 29 29 #1d1d1d + 27 28 44 #1b1c2c + 25 26 54 #191a36 + 23 24 65 #171841 + 23 20 76 #17144c + 25 15 84 #190f54 + 28 7 93 #1c075d + 32 0 101 #200065 + 37 0 110 #25006e + 40 0 117 #280075 + 44 0 125 #2c007d + 48 0 133 #300085 + 52 0 141 #34008d + 57 0 151 #390097 + 49 49 49 #313131 + 48 49 64 #303140 + 45 48 77 #2d304d + 42 46 89 #2a2e59 + 38 44 101 #262c65 + 37 41 112 #252970 + 37 37 122 #25257a + 39 31 132 #271f84 + 42 24 141 #2a188d + 45 11 151 #2d0b97 + 49 0 159 #31009f + 53 0 169 #3500a9 + 56 0 177 #3800b1 + 60 0 185 #3c00b9 + 72 72 72 #484848 + 70 72 89 #464859 + 66 71 102 #424766 + 63 69 115 #3f4573 + 59 68 127 #3b447f + 55 66 140 #37428c + 52 63 151 #343f97 + 50 59 164 #323ba4 + 50 54 176 #3236b0 + 52 49 185 #3431b9 + 54 43 194 #362bc2 + 57 33 205 #3921cd + 60 18 215 #3c12d7 + 63 0 224 #3f00e0 + 97 97 97 #616161 + 95 97 112 #5f6170 + 92 96 125 #5c607d + 88 95 138 #585f8a + 83 94 152 #535e98 + 78 92 165 #4e5ca5 + 73 91 177 #495bb1 + 68 88 189 #4458bd + 65 85 202 #4155ca + 63 81 215 #3f51d7 + 62 76 229 #3e4ce5 + 62 71 239 #3e47ef + 63 65 250 #3f41fa + 65 57 255 #4139ff + 122 122 122 #7a7a7a + 120 123 137 #787b89 + 117 122 150 #757a96 + 112 121 164 #7079a4 + 108 120 178 #6c78b2 + 103 119 190 #6777be + 98 117 204 #6275cc + 91 116 218 #5b74da + 84 114 232 #5472e8 + 78 111 247 #4e6ff7 + 73 107 255 #496bff + 70 103 255 #4667ff + 67 97 255 #4361ff + 148 148 148 #949494 + 147 149 162 #9395a2 + 143 148 175 #8f94af + 138 147 190 #8a93be + 134 147 203 #8693cb + 129 146 217 #8192d9 + 122 144 233 #7a90e9 + 114 143 249 #728ff9 + 102 141 255 #668dff + 96 139 255 #608bff + 174 174 174 #aeaeae + 173 175 187 #adafbb + 168 175 202 #a8afca + 164 174 217 #a4aed9 + 158 173 233 #9eade9 + 152 172 249 #98acf9 + 145 171 255 #91abff + 200 200 200 #c8c8c8 + 200 202 213 #c8cad5 + 194 202 229 #c2cae5 + 188 201 246 #bcc9f6 + 181 200 255 #b5c8ff + 227 227 227 #e3e3e3 + 227 230 240 #e3e6f0 + 221 229 255 #dde5ff + 29 29 29 #1d1d1d + 31 27 44 #1f1b2c + 33 24 53 #211835 + 35 20 63 #23143f + 38 15 71 #260f47 + 41 8 79 #29084f + 45 0 87 #2d0057 + 49 0 95 #31005f + 53 0 103 #350067 + 57 0 110 #39006e + 62 0 118 #3e0076 + 66 0 126 #42007e + 71 0 134 #470086 + 77 0 145 #4d0091 + 49 49 49 #313131 + 51 48 64 #333040 + 53 45 75 #352d4b + 54 43 85 #362b55 + 56 39 96 #382760 + 59 34 106 #3b226a + 62 28 115 #3e1c73 + 65 19 124 #41137c + 69 4 133 #450485 + 74 0 142 #4a008e + 78 0 151 #4e0097 + 83 0 160 #5300a0 + 87 0 168 #5700a8 + 92 0 177 #5c00b1 + 72 72 72 #484848 + 74 71 88 #4a4758 + 75 68 101 #4b4465 + 76 66 113 #4c4271 + 77 63 124 #4d3f7c + 79 59 135 #4f3b87 + 81 55 145 #513791 + 84 49 156 #54319c + 88 42 166 #582aa6 + 92 33 175 #5c21af + 96 19 184 #6013b8 + 100 0 193 #6400c1 + 104 0 203 #6800cb + 108 0 212 #6c00d4 + 97 97 97 #616161 + 98 96 112 #626070 + 99 94 124 #635e7c + 99 92 137 #635c89 + 100 89 149 #645995 + 101 86 160 #6556a0 + 102 83 172 #6653ac + 104 79 183 #684fb7 + 107 74 194 #6b4ac2 + 110 69 204 #6e45cc + 113 61 216 #713dd8 + 116 54 224 #7436e0 + 120 44 234 #782cea + 125 27 245 #7d1bf5 + 122 122 122 #7a7a7a + 124 122 136 #7c7a88 + 124 120 149 #7c7895 + 124 118 163 #7c76a3 + 124 116 175 #7c74af + 125 113 187 #7d71bb + 125 110 199 #7d6ec7 + 126 107 212 #7e6bd4 + 127 103 224 #7f67e0 + 129 99 235 #8163eb + 132 94 247 #845ef7 + 135 87 255 #8757ff + 138 80 255 #8a50ff + 148 148 148 #949494 + 149 148 161 #9594a1 + 149 147 174 #9593ae + 149 145 188 #9591bc + 149 143 201 #958fc9 + 149 140 214 #958cd6 + 149 138 228 #958ae4 + 149 134 242 #9586f2 + 150 130 255 #9682ff + 151 127 255 #977fff + 174 174 174 #aeaeae + 175 175 187 #afafbb + 175 173 201 #afadc9 + 174 171 215 #aeabd7 + 174 169 230 #aea9e6 + 173 167 245 #ada7f5 + 174 164 255 #aea4ff + 200 200 200 #c8c8c8 + 202 202 212 #cacad4 + 201 200 228 #c9c8e4 + 200 198 244 #c8c6f4 + 200 195 255 #c8c3ff + 227 227 227 #e3e3e3 + 230 229 239 #e6e5ef + 228 227 255 #e4e3ff + 29 29 29 #1d1d1d + 34 26 43 #221a2b + 38 22 51 #261633 + 42 17 59 #2a113b + 47 10 67 #2f0a43 + 51 1 74 #33014a + 56 0 82 #380052 + 60 0 89 #3c0059 + 65 0 97 #410061 + 69 0 103 #450067 + 74 0 110 #4a006e + 79 0 118 #4f0076 + 85 0 126 #55007e + 92 0 137 #5c0089 + 49 49 49 #313131 + 54 47 63 #362f3f + 58 44 73 #3a2c49 + 62 40 81 #3e2851 + 67 35 91 #43235b + 71 28 100 #471c64 + 76 19 109 #4c136d + 81 3 117 #510375 + 85 0 125 #55007d + 91 0 133 #5b0085 + 96 0 142 #60008e + 101 0 150 #650096 + 107 0 160 #6b00a0 + 113 0 169 #7100a9 + 72 72 72 #484848 + 77 70 87 #4d4657 + 81 66 99 #514263 + 85 63 109 #553f6d + 89 59 119 #593b77 + 94 53 129 #5e3581 + 99 47 138 #632f8a + 104 39 148 #682794 + 109 28 157 #6d1c9d + 113 8 165 #7108a5 + 118 0 173 #7600ad + 124 0 182 #7c00b6 + 129 0 192 #8100c0 + 134 0 200 #8600c8 + 97 97 97 #616161 + 101 95 111 #655f6f + 105 92 123 #695c7b + 108 89 133 #6c5985 + 112 86 144 #705690 + 116 81 154 #74519a + 121 77 164 #794da4 + 125 71 174 #7d47ae + 130 64 184 #8240b8 + 135 56 193 #8738c1 + 140 45 204 #8c2dcc + 145 33 211 #9121d3 + 150 5 220 #9605dc + 155 0 230 #9b00e6 + 122 122 122 #7a7a7a + 126 121 135 #7e7987 + 129 119 147 #817793 + 132 116 159 #84749f + 136 112 171 #8870ab + 140 109 181 #8c6db5 + 144 104 192 #9068c0 + 149 100 202 #9564ca + 153 94 213 #995ed5 + 158 89 222 #9e59de + 163 81 233 #a351e9 + 168 72 244 #a848f4 + 173 61 254 #ad3dfe + 148 148 148 #949494 + 152 147 161 #9893a1 + 155 145 172 #9b91ac + 158 142 185 #9e8eb9 + 161 139 197 #a18bc5 + 165 136 209 #a588d1 + 169 132 220 #a984dc + 173 127 232 #ad7fe8 + 179 121 244 #b379f4 + 183 117 254 #b775fe + 174 174 174 #aeaeae + 178 174 186 #b2aeba + 181 172 199 #b5acc7 + 183 169 212 #b7a9d4 + 187 166 225 #bba6e1 + 190 162 238 #bea2ee + 195 158 252 #c39efc + 200 200 200 #c8c8c8 + 204 201 212 #ccc9d4 + 207 198 226 #cfc6e2 + 210 196 240 #d2c4f0 + 213 192 255 #d5c0ff + 227 227 227 #e3e3e3 + 231 228 239 #e7e4ef + 234 226 255 #eae2ff + 29 29 29 #1d1d1d + 37 25 42 #25192a + 42 20 49 #2a1431 + 47 15 56 #2f0f38 + 52 6 63 #34063f + 57 0 70 #390046 + 62 0 77 #3e004d + 67 0 84 #430054 + 73 0 91 #49005b + 77 0 97 #4d0061 + 83 0 104 #530068 + 89 0 112 #590070 + 94 0 118 #5e0076 + 49 49 49 #313131 + 57 46 62 #392e3e + 62 43 70 #3e2b46 + 67 38 78 #43264e + 73 32 87 #492057 + 79 24 95 #4f185f + 84 10 103 #540a67 + 90 0 111 #5a006f + 95 0 118 #5f0076 + 101 0 126 #65007e + 107 0 134 #6b0086 + 113 0 142 #71008e + 120 0 151 #780097 + 127 0 160 #7f00a0 + 72 72 72 #484848 + 80 69 86 #504556 + 86 65 96 #564160 + 92 61 105 #5c3d69 + 98 55 114 #623772 + 103 49 124 #67317c + 110 41 132 #6e2984 + 115 30 140 #731e8c + 121 11 149 #790b95 + 126 0 157 #7e009d + 132 0 164 #8400a4 + 138 0 172 #8a00ac + 145 0 181 #9100b5 + 151 0 189 #9700bd + 97 97 97 #616161 + 104 94 110 #685e6e + 110 91 120 #6e5b78 + 115 87 130 #735782 + 120 83 139 #78538b + 126 78 148 #7e4e94 + 132 72 157 #84489d + 138 65 166 #8a41a6 + 145 56 176 #9138b0 + 150 45 184 #962db8 + 156 28 193 #9c1cc1 + 162 0 200 #a200c8 + 168 0 209 #a800d1 + 174 0 217 #ae00d9 + 122 122 122 #7a7a7a + 129 121 134 #817986 + 134 117 145 #867591 + 140 113 155 #8c719b + 146 109 166 #926da6 + 151 105 175 #9769af + 157 100 185 #9d64b9 + 163 94 194 #a35ec2 + 169 88 203 #a958cb + 175 80 212 #af50d4 + 181 71 221 #b547dd + 187 59 231 #bb3be7 + 194 42 241 #c22af1 + 200 11 249 #c80bf9 + 148 148 148 #949494 + 154 147 160 #9a93a0 + 160 144 170 #a090aa + 165 140 181 #a58cb5 + 171 136 192 #ab88c0 + 176 132 202 #b084ca + 182 127 212 #b67fd4 + 189 122 223 #bd7adf + 195 116 233 #c374e9 + 201 109 243 #c96df3 + 207 101 254 #cf65fe + 216 88 255 #d858ff + 223 76 255 #df4cff + 231 56 255 #e738ff + 174 174 174 #aeaeae + 180 174 185 #b4aeb9 + 185 170 197 #b9aac5 + 191 167 208 #bfa7d0 + 196 163 219 #c4a3db + 202 159 231 #ca9fe7 + 209 154 243 #d19af3 + 215 149 253 #d795fd + 222 142 255 #de8eff + 229 136 255 #e588ff + 236 127 255 #ec7fff + 200 200 200 #c8c8c8 + 206 201 211 #cec9d3 + 211 197 224 #d3c5e0 + 217 194 236 #d9c2ec + 223 189 250 #dfbdfa + 230 185 255 #e6b9ff + 236 180 255 #ecb4ff + 227 227 227 #e3e3e3 + 233 228 238 #e9e4ee + 238 224 254 #eee0fe + 245 220 255 #f5dcff + 29 29 29 #1d1d1d + 38 24 41 #261829 + 44 19 48 #2c1330 + 49 13 54 #310d36 + 55 3 61 #37033d + 60 0 67 #3c0043 + 66 0 73 #420049 + 72 0 81 #480051 + 77 0 87 #4d0057 + 82 0 93 #52005d + 88 0 99 #580063 + 94 0 106 #5e006a + 49 49 49 #313131 + 59 46 60 #3b2e3c + 65 41 68 #412944 + 71 37 75 #47254b + 78 29 83 #4e1d53 + 85 19 91 #55135b + 91 1 98 #5b0162 + 97 0 105 #610069 + 103 0 112 #670070 + 109 0 119 #6d0077 + 115 0 126 #73007e + 122 0 135 #7a0087 + 129 0 143 #81008f + 137 0 151 #890097 + 72 72 72 #484848 + 83 68 84 #534454 + 91 63 93 #5b3f5d + 98 58 101 #623a65 + 105 52 109 #69346d + 112 44 117 #702c75 + 119 34 125 #77227d + 125 17 133 #7d1185 + 131 0 140 #83008c + 138 0 148 #8a0094 + 144 0 154 #90009a + 150 0 162 #9600a2 + 158 0 170 #9e00aa + 164 0 177 #a400b1 + 97 97 97 #616161 + 107 93 108 #6b5d6c + 115 89 116 #735974 + 122 85 124 #7a557c + 129 80 133 #815085 + 136 74 140 #884a8c + 143 67 148 #8f4394 + 150 58 157 #963a9d + 158 46 165 #9e2ea5 + 165 28 173 #a51cad + 172 0 181 #ac00b5 + 178 0 188 #b200bc + 184 0 195 #b800c3 + 192 0 203 #c000cb + 122 122 122 #7a7a7a + 131 120 131 #837883 + 140 116 140 #8c748c + 148 111 149 #946f95 + 156 106 158 #9c6a9e + 163 101 166 #a365a6 + 171 94 175 #ab5eaf + 178 87 182 #b257b6 + 185 79 190 #b94fbe + 193 69 199 #c145c7 + 200 56 207 #c838cf + 208 34 216 #d022d8 + 214 0 223 #d600df + 222 0 231 #de00e7 + 148 148 148 #949494 + 158 146 157 #9e929d + 166 142 165 #a68ea5 + 174 137 175 #ae89af + 182 133 183 #b685b7 + 190 127 192 #be7fc0 + 198 122 200 #c67ac8 + 206 115 209 #ce73d1 + 214 108 218 #d66cda + 221 99 226 #dd63e2 + 230 87 236 #e657ec + 239 73 246 #ef49f6 + 247 54 254 #f736fe + 174 174 174 #aeaeae + 183 173 183 #b7adb7 + 192 169 191 #c0a9bf + 201 164 200 #c9a4c8 + 209 159 210 #d19fd2 + 219 154 219 #db9adb + 226 148 228 #e294e4 + 235 141 237 #eb8ded + 244 134 246 #f486f6 + 253 125 255 #fd7dff + 255 115 255 #ff73ff + 255 102 255 #ff66ff + 255 86 255 #ff56ff + 200 200 200 #c8c8c8 + 209 200 208 #d1c8d0 + 219 195 218 #dbc3da + 228 191 227 #e4bfe3 + 239 185 238 #efb9ee + 248 179 247 #f8b3f7 + 255 173 255 #ffadff + 255 166 255 #ffa6ff + 227 227 227 #e3e3e3 + 236 227 235 #ece3eb + 248 222 246 #f8def6 + 255 217 255 #ffd9ff + 29 29 29 #1d1d1d + 40 24 39 #281827 + 46 19 46 #2e132e + 52 11 52 #340b34 + 58 1 58 #3a013a + 63 0 64 #3f0040 + 69 0 70 #450046 + 75 0 77 #4b004d + 81 0 83 #510053 + 86 0 88 #560058 + 92 0 95 #5c005f + 98 0 101 #620065 + 49 49 49 #313131 + 61 45 59 #3d2d3b + 68 41 65 #442941 + 75 35 71 #4b2347 + 83 26 79 #531a4f + 89 14 85 #590e55 + 96 0 92 #60005c + 103 0 99 #670063 + 110 0 106 #6e006a + 117 0 112 #750070 + 123 0 119 #7b0077 + 131 0 126 #83007e + 139 0 135 #8b0087 + 147 0 143 #93008f + 72 72 72 #484848 + 85 68 82 #554452 + 94 62 89 #5e3e59 + 102 57 96 #663960 + 111 49 103 #6f3167 + 119 40 110 #77286e + 127 25 118 #7f1976 + 134 0 124 #86007c + 141 0 130 #8d0082 + 148 0 138 #94008a + 155 0 143 #9b008f + 162 0 150 #a20096 + 169 0 157 #a9009d + 176 0 164 #b000a4 + 97 97 97 #616161 + 109 93 105 #6d5d69 + 119 88 112 #775870 + 128 83 119 #805377 + 136 77 126 #884d7e + 144 70 132 #904684 + 153 61 139 #993d8b + 161 51 146 #a13392 + 168 37 152 #a82598 + 177 0 160 #b100a0 + 186 0 168 #ba00a8 + 192 0 173 #c000ad + 199 0 179 #c700b3 + 207 0 186 #cf00ba + 122 122 122 #7a7a7a + 133 119 130 #857782 + 144 115 136 #907388 + 154 109 143 #9a6d8f + 164 103 151 #a46797 + 172 97 157 #ac619d + 181 89 164 #b559a4 + 190 81 171 #be51ab + 198 71 177 #c647b1 + 206 58 184 #ce3ab8 + 215 38 191 #d726bf + 223 0 197 #df00c5 + 230 0 204 #e600cc + 240 0 212 #f000d4 + 148 148 148 #949494 + 160 146 155 #a0929b + 169 141 162 #a98da2 + 180 136 169 #b488a9 + 190 130 176 #be82b0 + 199 124 183 #c77cb7 + 209 117 189 #d175bd + 218 109 197 #da6dc5 + 227 101 203 #e365cb + 235 91 210 #eb5bd2 + 245 77 218 #f54dda + 254 59 225 #fe3be1 + 255 31 233 #ff1fe9 + 255 0 241 #ff00f1 + 174 174 174 #aeaeae + 185 172 181 #b9acb5 + 196 168 188 #c4a8bc + 207 162 195 #cfa2c3 + 218 157 202 #da9dca + 228 150 209 #e496d1 + 238 144 216 #ee90d8 + 248 137 223 #f889df + 255 127 231 #ff7fe7 + 255 117 239 #ff75ef + 255 105 246 #ff69f6 + 255 89 255 #ff59ff + 255 70 255 #ff46ff + 200 200 200 #c8c8c8 + 210 200 207 #d2c8cf + 223 195 214 #dfc3d6 + 235 189 221 #ebbddd + 247 183 229 #f7b7e5 + 255 176 237 #ffb0ed + 255 169 244 #ffa9f4 + 255 160 253 #ffa0fd + 227 227 227 #e3e3e3 + 238 227 234 #eee3ea + 252 221 242 #fcddf2 + 255 215 249 #ffd7f9 + 29 29 29 #1d1d1d + 41 23 38 #291726 + 48 18 44 #30122c + 54 10 49 #360a31 + 61 0 55 #3d0037 + 67 0 61 #43003d + 72 0 66 #480042 + 79 0 72 #4f0048 + 85 0 78 #55004e + 90 0 83 #5a0053 + 49 49 49 #313131 + 63 44 56 #3f2c38 + 71 40 61 #47283d + 79 33 66 #4f2142 + 88 23 72 #581748 + 95 5 78 #5f054e + 103 0 83 #670053 + 111 0 89 #6f0059 + 119 0 95 #77005f + 126 0 101 #7e0065 + 133 0 106 #85006a + 72 72 72 #484848 + 87 67 79 #57434f + 98 61 84 #623d54 + 108 55 89 #6c3759 + 117 46 94 #752e5e + 126 34 100 #7e2264 + 135 15 105 #870f69 + 143 0 110 #8f006e + 152 0 115 #980073 + 160 0 121 #a00079 + 167 0 125 #a7007d + 176 0 131 #b00083 + 184 0 136 #b80088 + 97 97 97 #616161 + 111 93 103 #6f5d67 + 122 87 108 #7a576c + 133 81 113 #855171 + 143 74 117 #8f4a75 + 152 66 122 #98427a + 162 56 127 #a2387f + 170 43 132 #aa2b84 + 179 22 137 #b31689 + 188 0 142 #bc008e + 198 0 148 #c60094 + 206 0 153 #ce0099 + 214 0 158 #d6009e + 221 0 163 #dd00a3 + 122 122 122 #7a7a7a + 135 119 127 #87777f + 147 114 132 #937284 + 159 108 137 #9f6c89 + 171 100 142 #ab648e + 180 94 147 #b45e93 + 191 85 152 #bf5598 + 200 75 157 #c84b9d + 209 62 161 #d13ea1 + 218 45 166 #da2da6 + 227 10 171 #e30aab + 237 0 177 #ed00b1 + 244 0 181 #f400b5 + 253 0 186 #fd00ba + 148 148 148 #949494 + 161 145 153 #a19199 + 173 140 157 #ad8c9d + 186 134 162 #ba86a2 + 196 128 166 #c480a6 + 207 122 171 #cf7aab + 218 114 176 #da72b0 + 229 105 181 #e569b5 + 239 94 186 #ef5eba + 249 82 191 #f952bf + 255 64 197 #ff40c5 + 255 42 201 #ff2ac9 + 255 0 207 #ff00cf + 255 0 212 #ff00d4 + 174 174 174 #aeaeae + 187 172 179 #bbacb3 + 200 167 183 #c8a7b7 + 213 161 188 #d5a1bc + 225 154 192 #e19ac0 + 237 148 197 #ed94c5 + 248 140 202 #f88cca + 255 132 207 #ff84cf + 255 121 213 #ff79d5 + 255 108 218 #ff6cda + 255 92 224 #ff5ce0 + 255 75 230 #ff4be6 + 200 200 200 #c8c8c8 + 212 199 205 #d4c7cd + 226 194 209 #e2c2d1 + 241 187 213 #f1bbd5 + 255 181 218 #ffb5da + 255 174 223 #ffaedf + 255 165 229 #ffa5e5 + 255 155 234 #ff9bea + 227 227 227 #e3e3e3 + 239 227 232 #efe3e8 + 255 221 237 #ffdded + 255 214 241 #ffd6f1 + 29 29 29 #1d1d1d + 43 23 36 #2b1724 + 50 17 41 #321129 + 57 8 46 #39082e + 64 0 51 #400033 + 70 0 55 #460037 + 77 0 60 #4d003c + 83 0 65 #530041 + 49 49 49 #313131 + 64 44 54 #402c36 + 73 39 58 #49273a + 82 32 61 #52203d + 91 20 66 #5b1442 + 100 0 70 #640046 + 108 0 75 #6c004b + 116 0 80 #740050 + 125 0 84 #7d0054 + 132 0 88 #840058 + 72 72 72 #484848 + 89 67 76 #59434c + 101 60 79 #653c4f + 112 53 82 #703552 + 122 43 85 #7a2b55 + 132 30 89 #841e59 + 141 4 92 #8d045c + 150 0 97 #960061 + 159 0 101 #9f0065 + 167 0 105 #a70069 + 175 0 108 #af006c + 97 97 97 #616161 + 113 92 100 #715c64 + 126 86 102 #7e5666 + 138 79 104 #8a4f68 + 149 71 107 #95476b + 159 63 109 #9f3f6d + 169 51 112 #a93370 + 179 35 115 #b32373 + 188 0 118 #bc0076 + 198 0 122 #c6007a + 208 0 126 #d0007e + 216 0 129 #d80081 + 226 0 133 #e20085 + 122 122 122 #7a7a7a + 137 119 125 #89777d + 151 113 126 #97717e + 164 106 128 #a46a80 + 177 99 130 #b16382 + 188 91 132 #bc5b84 + 200 80 135 #c85087 + 210 69 137 #d24589 + 220 53 140 #dc358c + 230 29 143 #e61d8f + 240 0 145 #f00091 + 249 0 148 #f90094 + 255 0 152 #ff0098 + 255 0 155 #ff009b + 148 148 148 #949494 + 163 145 150 #a39196 + 177 140 152 #b18c98 + 191 133 153 #bf8599 + 203 127 155 #cb7f9b + 214 120 157 #d6789d + 227 111 159 #e36f9f + 238 100 162 #ee64a2 + 249 88 164 #f958a4 + 255 74 167 #ff4aa7 + 255 48 170 #ff30aa + 255 7 172 #ff07ac + 255 0 175 #ff00af + 174 174 174 #aeaeae + 188 172 177 #bcacb1 + 203 166 178 #cba6b2 + 218 160 179 #daa0b3 + 232 153 181 #e899b5 + 244 146 182 #f492b6 + 255 137 184 #ff89b8 + 255 127 187 #ff7fbb + 255 115 189 #ff73bd + 255 101 192 #ff65c0 + 255 87 195 #ff57c3 + 200 200 200 #c8c8c8 + 213 199 203 #d5c7cb + 230 193 204 #e6c1cc + 246 186 205 #f6bacd + 255 179 207 #ffb3cf + 255 171 208 #ffabd0 + 255 161 211 #ffa1d3 + 227 227 227 #e3e3e3 + 241 226 230 #f1e2e6 + 255 220 231 #ffdce7 + 255 212 232 #ffd4e8 + 29 29 29 #1d1d1d + 44 23 34 #2c1722 + 52 16 38 #341026 + 59 6 42 #3b062a + 66 0 46 #42002e + 74 0 50 #4a0032 + 81 0 54 #510036 + 87 0 58 #57003a + 49 49 49 #313131 + 65 44 52 #412c34 + 75 38 55 #4b2637 + 84 31 57 #541f39 + 94 19 60 #5e133c + 103 0 63 #67003f + 112 0 67 #700043 + 120 0 71 #780047 + 128 0 74 #80004a + 72 72 72 #484848 + 90 67 73 #5a4349 + 103 60 74 #673c4a + 115 52 75 #73344b + 126 42 77 #7e2a4d + 136 27 78 #881b4e + 146 0 80 #920050 + 156 0 83 #9c0053 + 165 0 85 #a50055 + 174 0 88 #ae0058 + 97 97 97 #616161 + 114 92 97 #725c61 + 128 86 97 #805661 + 141 79 97 #8d4f61 + 153 70 98 #994662 + 163 61 98 #a33d62 + 174 48 100 #ae3064 + 184 29 101 #b81d65 + 194 0 103 #c20067 + 204 0 105 #cc0069 + 215 0 107 #d7006b + 223 0 109 #df006d + 122 122 122 #7a7a7a + 138 119 123 #8a777b + 153 113 122 #99717a + 167 106 122 #a76a7a + 181 98 122 #b5627a + 192 89 122 #c0597a + 204 78 122 #cc4e7a + 214 66 123 #d6427b + 225 49 124 #e1317c + 235 18 125 #eb127d + 246 0 127 #f6007f + 255 0 128 #ff0080 + 255 0 130 #ff0082 + 255 0 132 #ff0084 + 148 148 148 #949494 + 164 145 149 #a49195 + 179 139 148 #b38b94 + 194 132 147 #c28493 + 206 126 146 #ce7e92 + 219 118 146 #db7692 + 231 109 146 #e76d92 + 243 98 147 #f36293 + 255 84 148 #ff5494 + 255 69 149 #ff4595 + 255 41 150 #ff2996 + 255 0 151 #ff0097 + 174 174 174 #aeaeae + 189 172 175 #bdacaf + 205 166 174 #cda6ae + 221 159 173 #dd9fad + 235 152 172 #eb98ac + 248 145 172 #f891ac + 255 135 172 #ff87ac + 255 124 172 #ff7cac + 255 112 172 #ff70ac + 255 97 174 #ff61ae + 200 200 200 #c8c8c8 + 214 199 202 #d6c7ca + 232 193 200 #e8c1c8 + 249 186 199 #f9bac7 + 255 178 198 #ffb2c6 + 255 170 197 #ffaac5 + 255 159 197 #ff9fc5 + 227 227 227 #e3e3e3 + 242 226 229 #f2e2e5 + 255 219 227 #ffdbe3 + 255 212 225 #ffd4e1 -- cgit v1.2.3 From 5cad2f9f246c14073644a3471117460b2521a23f Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Fri, 23 Jun 2017 09:12:37 -0400 Subject: Revert "add Munsell palette" This reverts commit 9692e3ea5b5a576e50eec1f398e10f06571ebfb2. --- share/palettes/MunsellChart.gpl | 3204 --------------------------------------- 1 file changed, 3204 deletions(-) delete mode 100644 share/palettes/MunsellChart.gpl diff --git a/share/palettes/MunsellChart.gpl b/share/palettes/MunsellChart.gpl deleted file mode 100644 index 9e09596b3..000000000 --- a/share/palettes/MunsellChart.gpl +++ /dev/null @@ -1,3204 +0,0 @@ -GIMP Palette -Name: MunsellChart -# - 0 0 0 #000000 - 29 29 29 #1d1d1d - 49 49 49 #313131 - 72 72 72 #484848 - 97 97 97 #616161 - 122 122 122 #7a7a7a - 148 148 148 #949494 - 174 174 174 #aeaeae - 200 200 200 #c8c8c8 - 227 227 227 #e3e3e3 - 255 255 255 #ffffff - 29 29 29 #1d1d1d - 44 22 32 #2c1620 - 53 15 35 #350f23 - 61 5 38 #3d0526 - 69 0 41 #450029 - 76 0 44 #4c002c - 83 0 48 #530030 - 90 0 52 #5a0034 - 49 49 49 #313131 - 65 44 50 #412c32 - 76 38 51 #4c2633 - 86 30 52 #561e34 - 96 17 54 #601136 - 105 0 56 #690038 - 115 0 59 #73003b - 124 0 61 #7c003d - 133 0 64 #850040 - 72 72 72 #484848 - 91 66 71 #5b4247 - 105 60 69 #693c45 - 117 52 68 #753444 - 128 40 67 #802843 - 139 24 67 #8b1843 - 150 0 67 #960043 - 159 0 67 #9f0043 - 170 0 68 #aa0044 - 179 0 68 #b30044 - 97 97 97 #616161 - 115 92 95 #735c5f - 130 86 93 #82565d - 143 78 91 #8f4e5b - 155 70 89 #9b4659 - 166 60 88 #a63c58 - 177 46 87 #b12e57 - 188 23 86 #bc1756 - 198 0 86 #c60056 - 209 0 86 #d10056 - 219 0 86 #db0056 - 227 0 87 #e30057 - 122 122 122 #7a7a7a - 139 118 121 #8b7679 - 155 112 118 #9b7076 - 169 105 115 #a96973 - 183 97 113 #b76171 - 195 89 111 #c3596f - 208 77 109 #d04d6d - 218 65 108 #da416c - 230 45 107 #e62d6b - 240 3 106 #f0036a - 252 0 105 #fc0069 - 255 0 105 #ff0069 - 148 148 148 #949494 - 165 145 147 #a59193 - 181 139 143 #b58b8f - 196 132 140 #c4848c - 209 126 138 #d17e8a - 222 117 135 #de7587 - 235 108 133 #eb6c85 - 247 97 131 #f76183 - 255 82 129 #ff5281 - 255 65 127 #ff417f - 255 39 127 #ff277f - 174 174 174 #aeaeae - 190 171 173 #beabad - 207 166 170 #cfa6aa - 223 159 166 #df9fa6 - 238 152 163 #ee98a3 - 252 144 160 #fc90a0 - 255 134 157 #ff869d - 255 123 154 #ff7b9a - 255 110 152 #ff6e98 - 255 96 149 #ff6095 - 200 200 200 #c8c8c8 - 215 199 200 #d7c7c8 - 234 192 196 #eac0c4 - 251 186 192 #fbbac0 - 255 178 188 #ffb2bc - 255 169 185 #ffa9b9 - 255 157 181 #ff9db5 - 227 227 227 #e3e3e3 - 242 226 227 #f2e2e3 - 255 219 222 #ffdbde - 255 211 218 #ffd3da - 255 204 214 #ffccd6 - 29 29 29 #1d1d1d - 45 22 30 #2d161e - 54 15 31 #360f1f - 63 3 33 #3f0321 - 71 0 35 #470023 - 78 0 37 #4e0025 - 49 49 49 #313131 - 66 44 48 #422c30 - 77 38 47 #4d262f - 87 30 47 #571e2f - 98 15 47 #620f2f - 108 0 47 #6c002f - 118 0 48 #760030 - 128 0 49 #800031 - 72 72 72 #484848 - 92 66 68 #5c4244 - 106 60 65 #6a3c41 - 118 52 61 #76343d - 130 40 58 #82283a - 141 23 56 #8d1738 - 152 0 54 #980036 - 161 0 52 #a10034 - 171 0 51 #ab0033 - 181 0 50 #b50032 - 97 97 97 #616161 - 116 92 93 #745c5d - 131 86 89 #835659 - 144 78 85 #904e55 - 157 70 81 #9d4651 - 168 60 78 #a83c4e - 179 46 75 #b32e4b - 190 21 72 #be1548 - 200 0 70 #c80046 - 211 0 68 #d30044 - 221 0 65 #dd0041 - 230 0 65 #e60041 - 122 122 122 #7a7a7a - 140 118 119 #8c7677 - 156 112 114 #9c7072 - 171 105 109 #ab696d - 184 97 105 #b86169 - 197 88 100 #c55864 - 210 76 96 #d24c60 - 220 65 93 #dc415d - 232 45 90 #e82d5a - 243 0 87 #f30057 - 255 0 85 #ff0055 - 255 0 84 #ff0054 - 255 0 83 #ff0053 - 255 0 82 #ff0052 - 148 148 148 #949494 - 165 145 145 #a59191 - 182 139 140 #b68b8c - 198 132 134 #c68486 - 211 125 129 #d37d81 - 225 117 125 #e1757d - 238 107 120 #ee6b78 - 249 97 116 #f96174 - 255 82 112 #ff5270 - 255 65 108 #ff416c - 255 42 105 #ff2a69 - 255 0 103 #ff0067 - 174 174 174 #aeaeae - 191 171 171 #bfabab - 208 165 166 #d0a5a6 - 224 159 160 #e09fa0 - 240 152 155 #f0989b - 254 144 149 #fe9095 - 255 134 143 #ff868f - 255 123 139 #ff7b8b - 255 110 134 #ff6e86 - 200 200 200 #c8c8c8 - 216 199 199 #d8c7c7 - 236 192 192 #ecc0c0 - 253 185 186 #fdb9ba - 255 177 179 #ffb1b3 - 255 169 173 #ffa9ad - 227 227 227 #e3e3e3 - 243 226 225 #f3e2e2 - 255 219 218 #ffdbda - 255 211 211 #ffd3d3 - 255 204 205 #ffcccd - 29 29 29 #1d1d1d - 46 22 28 #2e161c - 55 15 27 #370f1b - 64 2 28 #40021c - 72 0 28 #48001c - 80 0 29 #50001d - 49 49 49 #313131 - 66 44 46 #422c2e - 78 38 43 #4e262b - 88 29 41 #581d29 - 99 14 38 #630e26 - 110 0 37 #6e0025 - 119 0 36 #770024 - 129 0 36 #810024 - 72 72 72 #484848 - 92 67 66 #5c4342 - 107 60 60 #6b3c3c - 118 52 55 #763437 - 130 42 49 #822a31 - 141 25 44 #8d192c - 152 0 40 #980028 - 161 0 37 #a10025 - 171 0 33 #ab0021 - 182 0 31 #b6001f - 97 97 97 #616161 - 116 92 91 #745c5b - 132 85 84 #845554 - 145 79 77 #914f4d - 158 70 71 #9e4647 - 169 60 65 #a93c41 - 179 48 59 #b3303b - 190 26 52 #be1a34 - 200 0 47 #c8002f - 211 0 41 #d30029 - 220 0 37 #dc0025 - 228 0 33 #e40021 - 122 122 122 #7a7a7a - 140 118 117 #8c7675 - 157 112 110 #9d706e - 172 105 102 #ac6966 - 186 98 95 #ba625f - 198 88 88 #c65858 - 211 77 81 #d34d51 - 221 66 75 #dd424b - 233 47 68 #e92f44 - 244 8 62 #f4083e - 253 0 57 #fd0039 - 255 0 52 #ff0034 - 148 148 148 #949494 - 166 145 143 #a6918f - 183 139 136 #b78b88 - 199 132 128 #c78480 - 212 125 121 #d47d79 - 226 117 114 #e27572 - 239 108 107 #ef6c6b - 251 98 100 #fb6264 - 255 84 92 #ff545c - 255 68 85 #ff4455 - 255 49 80 #ff3150 - 255 10 75 #ff0a4b - 174 174 174 #aeaeae - 192 171 170 #c0abaa - 210 165 162 #d2a5a2 - 226 159 154 #e29f9a - 242 152 146 #f29892 - 255 144 139 #ff908b - 255 134 130 #ff8682 - 255 124 123 #ff7c7b - 255 112 115 #ff7073 - 200 200 200 #c8c8c8 - 217 199 197 #d9c7c5 - 237 192 188 #edc0bc - 255 185 179 #ffb9b3 - 255 177 170 #ffb1aa - 255 169 162 #ffa9a2 - 227 227 227 #e3e3e3 - 244 226 224 #f4e2e0 - 255 219 213 #ffdbd5 - 255 211 203 #ffd3cb - 29 29 29 #1d1d1d - 46 22 26 #2e161a - 56 15 24 #380f18 - 65 2 22 #410216 - 73 0 22 #490016 - 81 0 22 #510016 - 49 49 49 #313131 - 67 44 44 #432c2c - 79 38 39 #4f2627 - 89 30 34 #591e22 - 99 17 29 #63111d - 110 0 25 #6e0019 - 119 0 22 #770016 - 129 0 20 #810014 - 72 72 72 #484848 - 92 67 64 #5c4340 - 106 60 56 #6a3c38 - 118 53 48 #763530 - 129 43 40 #812b28 - 140 29 31 #8c1d1f - 151 0 23 #970017 - 160 0 16 #a00010 - 169 0 8 #a90008 - 180 0 0 #b40000 - 97 97 97 #616161 - 116 92 89 #745c59 - 132 86 80 #845650 - 145 79 71 #914f47 - 158 71 62 #9e473e - 168 62 53 #a83e35 - 178 51 44 #b2332c - 188 34 34 #bc2222 - 198 0 24 #c60018 - 207 0 11 #cf000b - 217 0 0 #d90000 - 224 0 0 #e00000 - 122 122 122 #7a7a7a - 141 118 115 #8d7673 - 158 112 106 #9e706a - 172 106 96 #ac6a60 - 186 98 86 #ba6256 - 198 90 75 #c65a4b - 210 80 65 #d25041 - 220 69 55 #dc4537 - 231 54 43 #e7362b - 240 32 31 #f0201f - 249 0 16 #f90010 - 148 148 148 #949494 - 167 144 141 #a7908d - 184 139 131 #b88b83 - 199 133 122 #c7857a - 213 126 111 #d57e6f - 227 118 100 #e37664 - 239 110 90 #ef6e5a - 250 100 78 #fa644e - 255 89 66 #ff5942 - 255 76 52 #ff4c34 - 255 62 41 #ff3e29 - 255 41 20 #ff2914 - 255 13 0 #ff0d00 - 174 174 174 #aeaeae - 193 171 167 #c1aba7 - 211 165 157 #d3a59d - 227 159 147 #e39f93 - 243 152 135 #f39887 - 255 145 125 #ff917d - 255 136 113 #ff8871 - 255 127 101 #ff7f65 - 255 117 88 #ff7558 - 255 107 79 #ff6b4f - 200 200 200 #c8c8c8 - 217 199 195 #d9c7c3 - 239 192 183 #efc0b7 - 255 185 171 #ffb9ab - 255 178 159 #ffb29f - 255 170 147 #ffaa93 - 255 161 133 #ffa185 - 227 227 227 #e3e3e3 - 245 226 222 #f5e2de - 255 218 208 #ffdad0 - 255 212 194 #ffd4c2 - 29 29 29 #1d1d1d - 46 23 23 #2e1717 - 57 14 19 #390e13 - 65 3 16 #410310 - 74 0 13 #4a000d - 82 0 11 #52000b - 49 49 49 #313131 - 66 45 42 #422d2a - 78 38 34 #4e2622 - 88 31 27 #581f1b - 99 19 19 #631313 - 108 0 11 #6c000b - 118 0 4 #760004 - 128 0 0 #800000 - 72 72 72 #484848 - 92 67 62 #5c433e - 106 61 52 #6a3d34 - 117 54 42 #75362a - 128 46 31 #802e1f - 138 34 18 #8a2212 - 147 14 0 #930e00 - 156 0 0 #9c0000 - 165 0 0 #a50000 - 174 0 0 #ae0000 - 97 97 97 #616161 - 117 92 87 #755c57 - 132 86 75 #84564b - 144 80 64 #905040 - 156 73 51 #9c4933 - 166 65 37 #a64125 - 175 57 19 #af3913 - 183 46 0 #b72e00 - 190 34 0 #be2200 - 198 6 0 #c60600 - 204 0 0 #cc0000 - 212 0 0 #d40000 - 122 122 122 #7a7a7a - 141 119 113 #8d7771 - 158 113 100 #9e7164 - 172 107 87 #ac6b57 - 185 100 73 #b96449 - 197 93 58 #c55d3a - 207 85 41 #cf5529 - 215 77 20 #d74d14 - 223 69 0 #df4500 - 230 58 0 #e63a00 - 238 44 0 #ee2c00 - 245 20 0 #f51400 - 252 0 0 #fc0000 - 148 148 148 #949494 - 168 145 138 #a8918a - 185 139 125 #b98b7d - 199 134 113 #c78671 - 212 127 99 #d47f63 - 225 120 84 #e17854 - 236 113 68 #ec7144 - 247 105 49 #f76931 - 255 98 22 #ff6216 - 255 89 0 #ff5900 - 255 79 0 #ff4f00 - 255 69 0 #ff4500 - 255 59 0 #ff3b00 - 174 174 174 #aeaeae - 193 171 165 #c1aba5 - 211 166 151 #d3a697 - 227 160 138 #e3a08a - 242 154 123 #f29a7b - 254 147 110 #fe936e - 255 140 92 #ff8c5c - 255 132 74 #ff844a - 255 124 51 #ff7c33 - 255 118 29 #ff761d - 200 200 200 #c8c8c8 - 218 199 193 #dac7c1 - 240 192 177 #f0c0b1 - 255 186 162 #ffbaa2 - 255 180 147 #ffb493 - 255 173 132 #ffad84 - 255 165 114 #ffa572 - 227 227 227 #e3e3e3 - 246 226 219 #f6e2db - 255 219 201 #ffdbc9 - 255 213 186 #ffd5ba - 29 29 29 #1d1d1d - 46 23 20 #2e1714 - 57 15 11 #390f0b - 65 5 5 #410505 - 73 0 0 #490000 - 49 49 49 #313131 - 66 45 40 #422d28 - 78 39 30 #4e271e - 87 33 18 #572112 - 97 24 1 #611801 - 72 72 72 #484848 - 91 68 60 #5b443c - 104 62 47 #683e2f - 114 57 33 #723921 - 123 51 15 #7b330f - 130 45 0 #822d00 - 97 97 97 #616161 - 116 93 84 #745d54 - 131 87 70 #835746 - 142 82 56 #8e5238 - 152 77 39 #984d27 - 160 71 17 #a04711 - 166 67 0 #a64300 - 122 122 122 #7a7a7a - 141 119 110 #8d776e - 156 114 95 #9c725f - 170 108 80 #aa6c50 - 182 103 62 #b6673e - 192 97 43 #c0612b - 199 92 17 #c75c11 - 205 88 0 #cd5800 - 209 85 0 #d15500 - 148 148 148 #949494 - 168 145 135 #a89187 - 183 140 120 #b78c78 - 198 135 104 #c68768 - 210 130 89 #d28259 - 221 124 70 #dd7c46 - 230 119 48 #e67730 - 238 114 13 #ee720d - 244 110 0 #f46e00 - 248 106 0 #f86a00 - 174 174 174 #aeaeae - 194 171 162 #c2aba2 - 210 167 146 #d2a792 - 226 161 129 #e2a181 - 239 156 113 #ef9c71 - 250 151 96 #fa9760 - 255 145 74 #ff914a - 255 139 45 #ff8b2d - 255 135 0 #ff8700 - 255 131 0 #ff8300 - 200 200 200 #c8c8c8 - 219 199 189 #dbc7bd - 239 193 170 #efc1aa - 254 188 154 #febc9a - 255 182 135 #ffb687 - 255 177 117 #ffb175 - 255 171 96 #ffab60 - 227 227 227 #e3e3e3 - 247 226 216 #f7e2d8 - 255 220 195 #ffdcc3 - 255 215 176 #ffd7b0 - 29 29 29 #1d1d1d - 45 24 16 #2d1810 - 56 17 1 #381101 - 49 49 49 #313131 - 65 46 38 #412e26 - 75 41 24 #4b2918 - 84 36 4 #542404 - 72 72 72 #484848 - 90 68 58 #5a443a - 101 64 43 #65402b - 110 60 25 #6e3c19 - 117 56 0 #753800 - 97 97 97 #616161 - 115 93 81 #735d51 - 129 89 64 #815940 - 138 85 48 #8a5530 - 147 81 28 #93511c - 153 77 0 #994d00 - 158 74 0 #9e4a00 - 122 122 122 #7a7a7a - 140 119 107 #8c776b - 154 115 90 #9a735a - 167 111 71 #a76f47 - 177 106 51 #b16a33 - 184 102 27 #b8661b - 190 99 0 #be6300 - 195 97 0 #c36100 - 148 148 148 #949494 - 167 145 132 #a79184 - 181 141 115 #b58d73 - 194 137 96 #c28960 - 205 133 76 #cd854c - 214 129 54 #d68136 - 222 125 23 #de7d17 - 227 122 0 #e37a00 - 231 120 0 #e77800 - 234 118 0 #ea7600 - 174 174 174 #aeaeae - 194 172 158 #c2ac9e - 209 168 140 #d1a88c - 222 164 121 #dea479 - 233 160 102 #e9a066 - 243 155 80 #f39b50 - 253 151 53 #fd9735 - 255 148 4 #ff9404 - 255 145 0 #ff9100 - 255 143 0 #ff8f00 - 255 142 0 #ff8e00 - 200 200 200 #c8c8c8 - 219 199 185 #dbc7b9 - 236 195 165 #ecc3a5 - 250 190 146 #fabe92 - 255 186 124 #ffba7c - 255 182 103 #ffb667 - 255 178 78 #ffb24e - 255 174 46 #ffae2e - 255 170 0 #ffaa00 - 255 168 0 #ffa800 - 255 166 0 #ffa600 - 255 165 0 #ffa500 - 227 227 227 #e3e3e3 - 247 226 211 #f7e2d3 - 255 222 188 #ffdebc - 255 217 168 #ffd9a8 - 255 213 147 #ffd593 - 29 29 29 #1d1d1d - 43 25 13 #2b190d - 49 49 49 #313131 - 63 47 36 #3f2f24 - 72 43 18 #482b12 - 80 40 0 #502800 - 72 72 72 #484848 - 88 69 56 #584538 - 98 66 39 #624227 - 106 63 18 #6a3f12 - 111 60 0 #6f3c00 - 97 97 97 #616161 - 114 94 79 #725e4f - 126 90 59 #7e5a3b - 134 87 41 #865729 - 141 85 15 #8d550f - 146 82 0 #925200 - 122 122 122 #7a7a7a - 139 120 105 #8b7869 - 152 116 85 #987455 - 163 113 64 #a37140 - 171 110 40 #ab6e28 - 177 108 3 #b16c03 - 181 106 0 #b56a00 - 184 104 0 #b86800 - 148 148 148 #949494 - 166 146 130 #a69282 - 179 143 110 #b38f6e - 190 139 89 #be8b59 - 200 136 66 #c88842 - 207 133 38 #cf8526 - 212 131 0 #d48300 - 216 129 0 #d88100 - 219 128 0 #db8000 - 174 174 174 #aeaeae - 192 173 155 #c0ad9b - 206 169 135 #cea987 - 218 166 114 #daa672 - 228 163 92 #e4a35c - 236 160 67 #eca043 - 243 157 31 #f39d1f - 248 155 0 #f89b00 - 252 153 0 #fc9900 - 254 152 0 #fe9800 - 200 200 200 #c8c8c8 - 219 200 181 #dbc8b5 - 233 196 160 #e9c4a0 - 246 193 139 #f6c18b - 255 189 115 #ffbd73 - 255 187 91 #ffbb5b - 255 184 62 #ffb83e - 255 181 9 #ffb509 - 255 179 0 #ffb300 - 255 178 0 #ffb200 - 255 177 0 #ffb100 - 227 227 227 #e3e3e3 - 247 227 207 #f7e3cf - 255 223 183 #ffdfb7 - 255 220 160 #ffdca0 - 255 217 137 #ffd989 - 255 214 113 #ffd671 - 29 29 29 #1d1d1d - 41 26 10 #291a0a - 49 49 49 #313131 - 61 47 34 #3d2f22 - 69 45 14 #452d0e - 76 43 0 #4c2b00 - 72 72 72 #484848 - 86 70 54 #564636 - 94 68 35 #5e4423 - 101 66 9 #654209 - 105 64 0 #694000 - 97 97 97 #616161 - 112 95 76 #705f4c - 122 92 55 #7a5c37 - 129 90 34 #815a22 - 134 88 0 #865800 - 138 87 0 #8a5700 - 122 122 122 #7a7a7a - 137 121 102 #897966 - 148 118 80 #947650 - 158 116 56 #9e7438 - 164 114 28 #a4721c - 168 112 0 #a87000 - 171 111 0 #ab6f00 - 174 110 0 #ae6e00 - 148 148 148 #949494 - 164 147 127 #a4937f - 175 145 105 #af9169 - 185 142 81 #b98e51 - 192 140 56 #c08c38 - 198 138 19 #c68a13 - 202 137 0 #ca8900 - 205 136 0 #cd8800 - 207 135 0 #cf8700 - 174 174 174 #aeaeae - 190 174 152 #beae98 - 202 171 129 #caab81 - 212 169 106 #d4a96a - 220 167 82 #dca752 - 227 165 53 #e3a535 - 233 163 0 #e9a300 - 237 161 0 #eda100 - 239 161 0 #efa100 - 241 160 0 #f1a000 - 200 200 200 #c8c8c8 - 217 200 178 #d9c8b2 - 229 198 155 #e5c69b - 239 196 131 #efc483 - 249 194 105 #f9c269 - 255 192 79 #ffc04f - 255 190 43 #ffbe2b - 255 188 0 #ffbc00 - 255 187 0 #ffbb00 - 255 186 0 #ffba00 - 227 227 227 #e3e3e3 - 245 228 203 #f5e4cb - 255 226 177 #ffe2b1 - 255 223 153 #ffdf99 - 255 221 127 #ffdd7f - 255 219 99 #ffdb63 - 29 29 29 #1d1d1d - 39 27 8 #271b08 - 49 49 49 #313131 - 59 49 33 #3b3121 - 66 47 8 #422f08 - 72 72 72 #484848 - 83 71 53 #534735 - 90 70 32 #5a4620 - 96 68 1 #604401 - 97 97 97 #616161 - 109 96 75 #6d604b - 117 95 52 #755f34 - 123 93 27 #7b5d1b - 127 92 0 #7f5c00 - 130 91 0 #825b00 - 122 122 122 #7a7a7a - 135 122 100 #877a64 - 144 120 76 #90784c - 151 119 49 #977731 - 156 118 16 #9c7610 - 159 117 0 #9f7500 - 162 116 0 #a27400 - 148 148 148 #949494 - 161 148 124 #a1947c - 170 147 101 #aa9365 - 178 145 75 #b2914b - 184 144 46 #b8902e - 189 143 0 #bd8f00 - 192 142 0 #c08e00 - 194 141 0 #c28d00 - 174 174 174 #aeaeae - 187 175 150 #bbaf96 - 197 173 125 #c5ad7d - 206 172 100 #ceac64 - 212 170 73 #d4aa49 - 218 169 38 #daa926 - 222 168 0 #dea800 - 225 167 0 #e1a700 - 227 167 0 #e3a700 - 228 166 0 #e4a600 - 200 200 200 #c8c8c8 - 214 202 175 #d6caaf - 224 200 151 #e0c897 - 232 199 125 #e8c77d - 240 198 98 #f0c662 - 246 196 68 #f6c444 - 251 195 18 #fbc312 - 255 194 0 #ffc200 - 255 193 0 #ffc100 - 227 227 227 #e3e3e3 - 242 229 200 #f2e5c8 - 252 228 173 #fce4ad - 255 227 147 #ffe393 - 255 225 120 #ffe178 - 255 224 92 #ffe05c - 29 29 29 #1d1d1d - 36 28 8 #241c08 - 49 49 49 #313131 - 57 49 32 #393120 - 62 48 5 #3e3005 - 72 72 72 #484848 - 80 72 53 #504835 - 86 72 30 #56481e - 90 71 0 #5a4700 - 97 97 97 #616161 - 106 97 74 #6a614a - 112 97 49 #706131 - 117 96 22 #756016 - 120 95 0 #785f00 - 122 95 0 #7a5f00 - 122 122 122 #7a7a7a - 131 123 99 #837b63 - 138 123 73 #8a7b49 - 144 122 45 #907a2d - 148 121 2 #947902 - 150 121 0 #967900 - 152 120 0 #987800 - 148 148 148 #949494 - 158 149 123 #9e957b - 164 149 98 #a49562 - 171 148 70 #ab9446 - 175 148 37 #af9425 - 178 147 0 #b29300 - 181 147 0 #b59300 - 182 146 0 #b69200 - 174 174 174 #aeaeae - 184 176 148 #b8b094 - 191 176 122 #bfb07a - 197 175 95 #c5af5f - 202 175 67 #caaf43 - 206 174 20 #ceae14 - 209 173 0 #d1ad00 - 211 173 0 #d3ad00 - 212 173 0 #d4ad00 - 200 200 200 #c8c8c8 - 211 203 173 #d3cbad - 217 203 147 #d9cb93 - 223 202 120 #dfca78 - 229 202 91 #e5ca5b - 233 201 56 #e9c938 - 237 201 0 #edc900 - 239 200 0 #efc800 - 241 200 0 #f1c800 - 242 200 0 #f2c800 - 227 227 227 #e3e3e3 - 239 230 198 #efe6c6 - 245 230 170 #f5e6aa - 251 230 143 #fbe68f - 255 230 114 #ffe672 - 255 229 82 #ffe552 - 255 229 34 #ffe522 - 255 229 0 #ffe500 - 29 29 29 #1d1d1d - 34 29 10 #221d0a - 49 49 49 #313131 - 54 50 33 #363221 - 58 50 4 #3a3204 - 72 72 72 #484848 - 78 73 53 #4e4935 - 81 73 30 #51491e - 84 73 0 #544900 - 97 97 97 #616161 - 103 98 74 #67624a - 107 98 49 #6b6231 - 110 98 19 #6e6213 - 112 98 0 #706200 - 114 98 0 #726200 - 122 122 122 #7a7a7a - 129 124 99 #817c63 - 134 124 73 #867c49 - 137 124 42 #897c2a - 139 124 0 #8b7c00 - 141 124 0 #8d7c00 - 142 124 0 #8e7c00 - 148 148 148 #949494 - 155 150 123 #9b967b - 160 151 97 #a09761 - 164 151 68 #a49744 - 167 151 32 #a79720 - 169 151 0 #a99700 - 170 151 0 #aa9700 - 171 151 0 #ab9700 - 174 174 174 #aeaeae - 182 177 148 #b6b194 - 186 177 121 #bab179 - 190 178 94 #beb25e - 193 178 63 #c1b23f - 196 178 5 #c4b205 - 198 178 0 #c6b200 - 199 178 0 #c7b200 - 200 200 200 #c8c8c8 - 209 204 172 #d1ccac - 213 204 146 #d5cc92 - 217 205 118 #d9cd76 - 220 205 88 #dccd58 - 223 205 51 #dfcd33 - 226 205 0 #e2cd00 - 227 205 0 #e3cd00 - 228 205 0 #e4cd00 - 229 205 0 #e5cd00 - 227 227 227 #e3e3e3 - 236 231 197 #ece7c5 - 241 232 169 #f1e8a9 - 245 232 141 #f5e88d - 248 233 111 #f8e96f - 251 233 78 #fbe94e - 254 233 21 #fee915 - 255 233 0 #ffe900 - 29 29 29 #1d1d1d - 31 30 13 #1f1e0d - 49 49 49 #313131 - 52 51 34 #343322 - 53 52 6 #353406 - 72 72 72 #484848 - 75 74 53 #4b4a35 - 77 75 30 #4d4b1e - 78 75 0 #4e4b00 - 97 97 97 #616161 - 100 99 75 #64634b - 102 100 49 #666431 - 104 101 19 #686513 - 104 101 0 #686500 - 122 122 122 #7a7a7a - 126 125 99 #7e7d63 - 128 126 73 #807e49 - 130 127 43 #827f2b - 131 127 0 #837f00 - 132 127 0 #847f00 - 132 128 0 #848000 - 148 148 148 #949494 - 152 151 123 #98977b - 155 152 98 #9b9862 - 157 153 69 #9d9945 - 158 154 32 #9e9a20 - 159 154 0 #9f9a00 - 160 154 0 #a09a00 - 174 174 174 #aeaeae - 179 178 148 #b3b294 - 182 179 122 #b6b37a - 184 180 95 #b8b45f - 185 180 63 #b9b43f - 187 181 0 #bbb500 - 188 181 0 #bcb500 - 200 200 200 #c8c8c8 - 206 204 172 #ceccac - 209 206 146 #d1ce92 - 211 207 118 #d3cf76 - 213 207 88 #d5cf58 - 214 208 50 #d6d032 - 215 209 0 #d7d100 - 216 209 0 #d8d100 - 227 227 227 #e3e3e3 - 234 232 197 #eae8c5 - 236 233 169 #ece9a9 - 239 234 141 #efea8d - 241 235 110 #f1eb6e - 242 236 77 #f2ec4d - 243 236 15 #f3ec0f - 244 237 0 #f4ed00 - 245 237 0 #f5ed00 - 29 29 29 #1d1d1d - 28 31 16 #1c1f10 - 49 49 49 #313131 - 49 52 36 #313424 - 47 53 13 #2f350d - 72 72 72 #484848 - 72 75 55 #484b37 - 71 76 33 #474c21 - 69 78 0 #454e00 - 97 97 97 #616161 - 96 100 77 #60644d - 96 102 52 #606634 - 94 103 25 #5e6719 - 93 104 0 #5d6800 - 92 105 0 #5c6900 - 122 122 122 #7a7a7a - 122 126 101 #7a7e65 - 122 128 77 #7a804d - 121 129 49 #798131 - 120 130 4 #788204 - 119 131 0 #778300 - 118 132 0 #768400 - 148 148 148 #949494 - 149 152 124 #95987c - 148 154 100 #949a64 - 147 156 73 #939c49 - 146 157 38 #929d26 - 145 158 0 #919e00 - 145 159 0 #919f00 - 174 174 174 #aeaeae - 176 178 149 #b0b295 - 175 181 124 #afb57c - 174 182 99 #aeb663 - 173 184 68 #adb844 - 172 185 17 #acb911 - 172 186 0 #acba00 - 171 186 0 #abba00 - 171 187 0 #abbb00 - 200 200 200 #c8c8c8 - 203 205 173 #cbcdad - 202 207 148 #cacf94 - 202 209 122 #cad17a - 201 211 93 #c9d35d - 200 212 56 #c8d438 - 199 213 0 #c7d500 - 198 214 0 #c6d600 - 198 215 0 #c6d700 - 227 227 227 #e3e3e3 - 231 233 198 #e7e9c6 - 230 235 170 #e6ebaa - 230 237 143 #e6ed8f - 229 239 113 #e5ef71 - 228 240 81 #e4f051 - 227 241 23 #e3f117 - 226 242 0 #e2f200 - 225 243 0 #e1f300 - 29 29 29 #1d1d1d - 26 31 18 #1a1f12 - 17 34 0 #112200 - 49 49 49 #313131 - 47 52 38 #2f3426 - 42 54 20 #2a3614 - 35 56 0 #233800 - 28 58 0 #1c3a00 - 72 72 72 #484848 - 69 75 57 #454b39 - 64 78 38 #404e26 - 60 80 12 #3c500c - 55 81 0 #375100 - 49 83 0 #315300 - 97 97 97 #616161 - 94 101 79 #5e654f - 89 103 57 #596739 - 85 105 34 #556922 - 80 107 0 #506b00 - 76 108 0 #4c6c00 - 74 109 0 #4a6d00 - 122 122 122 #7a7a7a - 119 126 103 #777e67 - 116 129 82 #748152 - 111 132 57 #6f8439 - 106 133 25 #6a8519 - 103 135 0 #678700 - 99 136 0 #638800 - 97 137 0 #618900 - 148 148 148 #949494 - 145 153 126 #91997e - 142 155 104 #8e9b68 - 138 158 81 #8a9e51 - 133 160 51 #85a033 - 129 162 0 #81a200 - 125 163 0 #7da300 - 123 164 0 #7ba400 - 122 164 0 #7aa400 - 174 174 174 #aeaeae - 172 179 151 #acb397 - 168 182 128 #a8b680 - 165 185 105 #a5b969 - 161 187 79 #a1bb4f - 156 189 41 #9cbd29 - 152 190 0 #98be00 - 149 192 0 #95c000 - 147 192 0 #93c000 - 146 193 0 #92c100 - 200 200 200 #c8c8c8 - 200 206 175 #c8ceaf - 197 209 151 #c5d197 - 193 211 127 #c1d37f - 188 214 101 #bcd665 - 184 216 70 #b8d846 - 180 218 8 #b4da08 - 177 219 0 #b1db00 - 174 220 0 #aedc00 - 172 221 0 #acdd00 - 171 221 0 #abdd00 - 227 227 227 #e3e3e3 - 227 234 199 #e3eac7 - 224 237 173 #e0edad - 220 239 147 #dcef93 - 216 242 119 #d8f277 - 213 244 89 #d5f459 - 208 246 45 #d0f62d - 205 247 0 #cdf700 - 201 249 0 #c9f900 - 199 250 0 #c7fa00 - 198 250 0 #c6fa00 - 29 29 29 #1d1d1d - 23 32 21 #172015 - 7 35 4 #072304 - 0 37 0 #002500 - 49 49 49 #313131 - 44 52 41 #2c3429 - 35 55 27 #23371b - 22 58 9 #163a09 - 0 60 0 #003c00 - 0 62 0 #003e00 - 0 64 0 #004000 - 72 72 72 #484848 - 65 76 61 #414c3d - 56 79 45 #384f2d - 46 82 28 #2e521c - 33 84 0 #215400 - 6 86 0 #065600 - 0 88 0 #005800 - 97 97 97 #616161 - 89 101 83 #596553 - 80 105 65 #506941 - 70 108 47 #466c2f - 58 110 21 #3a6e15 - 44 113 0 #2c7100 - 23 115 0 #177300 - 0 116 0 #007400 - 0 118 0 #007600 - 122 122 122 #7a7a7a - 115 127 107 #737f6b - 106 131 90 #6a835a - 97 134 70 #618646 - 86 137 49 #568931 - 75 139 14 #4b8b0e - 61 141 0 #3d8d00 - 47 143 0 #2f8f00 - 32 144 0 #209000 - 6 145 0 #069100 - 148 148 148 #949494 - 140 154 130 #8c9a82 - 132 157 112 #849d70 - 123 161 93 #7ba15d - 113 164 71 #71a447 - 102 166 45 #66a62d - 91 169 0 #5ba900 - 79 171 0 #4fab00 - 69 172 0 #45ac00 - 60 173 0 #3cad00 - 51 174 0 #33ae00 - 174 174 174 #aeaeae - 166 181 155 #a6b59b - 158 184 137 #9eb889 - 150 188 118 #96bc76 - 140 191 97 #8cbf61 - 130 194 72 #82c248 - 119 196 40 #77c428 - 108 198 0 #6cc600 - 99 200 0 #63c800 - 90 201 0 #5ac900 - 84 202 0 #54ca00 - 76 203 0 #4ccb00 - 200 200 200 #c8c8c8 - 193 208 180 #c1d0b4 - 184 212 160 #b8d4a0 - 175 215 140 #afd78c - 167 218 119 #a7da77 - 157 221 95 #9ddd5f - 147 224 66 #93e042 - 136 226 10 #88e20a - 126 228 0 #7ee400 - 116 230 0 #74e600 - 110 231 0 #6ee700 - 101 232 0 #65e800 - 94 233 0 #5ee900 - 87 234 0 #57ea00 - 227 227 227 #e3e3e3 - 220 235 204 #dcebcc - 211 240 183 #d3f0b7 - 201 243 160 #c9f3a0 - 192 247 138 #c0f78a - 182 250 113 #b6fa71 - 173 253 85 #adfd55 - 162 255 48 #a2ff30 - 151 255 0 #97ff00 - 141 255 0 #8dff00 - 132 255 0 #84ff00 - 29 29 29 #1d1d1d - 21 32 23 #152017 - 0 35 12 #00230c - 0 38 2 #002602 - 49 49 49 #313131 - 42 53 43 #2a352b - 28 56 33 #1c3821 - 6 59 22 #063b16 - 0 61 9 #003d09 - 0 63 0 #003f00 - 0 65 0 #004100 - 72 72 72 #484848 - 63 77 63 #3f4d3f - 49 80 51 #315033 - 33 83 39 #215327 - 0 86 25 #005619 - 0 88 6 #005806 - 0 90 0 #005a00 - 97 97 97 #616161 - 87 102 86 #576656 - 73 106 72 #496a48 - 57 109 58 #396d3a - 35 112 42 #23702a - 0 115 23 #007317 - 0 118 0 #007600 - 0 120 0 #007800 - 0 121 0 #007900 - 122 122 122 #7a7a7a - 111 128 110 #6f806e - 99 132 97 #638461 - 85 136 82 #558852 - 67 139 66 #438b42 - 43 142 49 #2b8e31 - 0 145 25 #009119 - 0 147 0 #009300 - 0 149 0 #009500 - 0 151 0 #009700 - 148 148 148 #949494 - 136 155 134 #889b86 - 124 159 120 #7c9f78 - 110 163 105 #6ea369 - 94 166 89 #5ea659 - 75 169 73 #4ba949 - 48 172 54 #30ac36 - 0 175 26 #00af1a - 0 177 0 #00b100 - 0 180 0 #00b400 - 0 182 0 #00b600 - 174 174 174 #aeaeae - 162 181 159 #a2b59f - 149 186 144 #95ba90 - 137 189 130 #89bd82 - 122 193 114 #7ac172 - 105 197 97 #69c561 - 83 200 79 #53c84f - 53 203 58 #35cb3a - 0 206 27 #00ce1b - 0 208 0 #00d000 - 0 210 0 #00d200 - 0 212 0 #00d400 - 200 200 200 #c8c8c8 - 188 209 184 #bcd1b8 - 175 213 168 #afd5a8 - 161 217 152 #a1d998 - 147 221 137 #93dd89 - 130 225 120 #82e178 - 111 228 101 #6fe465 - 87 231 81 #57e751 - 50 234 57 #32ea39 - 0 237 12 #00ed0c - 0 239 0 #00ef00 - 227 227 227 #e3e3e3 - 214 237 209 #d6edd1 - 200 241 192 #c8f1c0 - 184 246 173 #b8f6ad - 170 250 157 #aafa9d - 153 254 139 #99fe8b - 135 255 121 #87ff79 - 113 255 101 #71ff65 - 82 255 77 #52ff4d - 25 255 46 #19ff2e - 29 29 29 #1d1d1d - 19 32 25 #132019 - 0 36 18 #002412 - 0 39 12 #00270c - 49 49 49 #313131 - 40 53 45 #28352d - 22 57 39 #163927 - 0 60 33 #003c21 - 0 62 28 #003e1c - 0 64 22 #004016 - 0 66 17 #004211 - 72 72 72 #484848 - 60 77 66 #3c4d42 - 42 81 58 #2a513a - 8 84 52 #085434 - 0 87 46 #00572e - 0 89 40 #005928 - 0 92 34 #005c22 - 97 97 97 #616161 - 83 102 89 #536659 - 65 107 81 #416b51 - 37 111 72 #256f48 - 0 114 65 #007241 - 0 117 57 #007539 - 0 120 50 #007832 - 0 122 44 #007a2c - 0 124 39 #007c27 - 122 122 122 #7a7a7a - 108 129 114 #6c8172 - 91 133 105 #5b8569 - 70 137 96 #468960 - 35 141 87 #238d57 - 0 144 79 #00904f - 0 147 71 #009347 - 0 150 63 #00963f - 0 152 56 #009838 - 0 155 49 #009b31 - 148 148 148 #949494 - 132 155 138 #849b8a - 115 160 129 #73a081 - 95 164 119 #5fa477 - 70 168 110 #46a86e - 24 171 101 #18ab65 - 0 175 92 #00af5c - 0 178 83 #00b253 - 0 180 75 #00b44b - 0 183 67 #00b743 - 0 185 59 #00b93b - 174 174 174 #aeaeae - 158 182 164 #9eb6a4 - 141 187 154 #8dbb9a - 123 191 144 #7bbf90 - 100 195 133 #64c385 - 69 199 123 #45c77b - 0 203 114 #00cb72 - 0 206 104 #00ce68 - 0 209 95 #00d15f - 0 211 86 #00d356 - 0 214 77 #00d64d - 0 217 68 #00d944 - 200 200 200 #c8c8c8 - 183 209 189 #b7d1bd - 166 214 178 #a6d6b2 - 146 219 167 #92dba7 - 125 223 157 #7ddf9d - 99 227 146 #63e392 - 56 231 135 #38e787 - 0 234 126 #00ea7e - 0 238 115 #00ee73 - 0 241 104 #00f168 - 0 243 94 #00f35e - 0 246 85 #00f655 - 0 248 76 #00f84c - 0 250 69 #00fa45 - 227 227 227 #e3e3e3 - 209 237 215 #d1edd7 - 191 243 203 #bff3cb - 168 248 189 #a8f8bd - 146 253 178 #92fdb2 - 120 255 167 #78ffa7 - 87 255 156 #57ff9c - 0 255 145 #00ff91 - 0 255 133 #00ff85 - 29 29 29 #1d1d1d - 18 32 26 #12201a - 0 36 22 #002416 - 0 39 19 #002713 - 0 42 17 #002a11 - 49 49 49 #313131 - 39 53 46 #27352e - 18 57 42 #12392a - 0 60 39 #003c27 - 0 62 36 #003e24 - 0 64 34 #004022 - 0 66 32 #004220 - 0 68 31 #00441f - 0 69 30 #00451e - 72 72 72 #484848 - 59 77 68 #3b4d44 - 37 81 63 #25513f - 0 85 58 #00553a - 0 87 55 #005737 - 0 90 52 #005a34 - 0 92 50 #005c32 - 0 94 49 #005e31 - 0 95 47 #005f2f - 0 96 46 #00602e - 0 98 46 #00622e - 0 99 45 #00632d - 97 97 97 #616161 - 82 103 92 #52675c - 60 107 86 #3c6b56 - 25 111 80 #196f50 - 0 115 76 #00734c - 0 118 73 #007649 - 0 121 70 #007946 - 0 123 67 #007b43 - 0 124 66 #007c42 - 0 126 64 #007e40 - 0 127 63 #007f3f - 0 128 62 #00803e - 0 130 62 #00823e - 0 131 61 #00833d - 122 122 122 #7a7a7a - 106 129 117 #6a8175 - 86 133 110 #56856e - 60 138 105 #3c8a69 - 0 142 100 #008e64 - 0 145 95 #00915f - 0 148 91 #00945b - 0 151 89 #009759 - 0 153 86 #009956 - 0 155 84 #009b54 - 0 157 82 #009d52 - 0 159 81 #009f51 - 0 160 80 #00a050 - 0 162 79 #00a24f - 148 148 148 #949494 - 130 155 142 #829b8e - 109 161 135 #6da187 - 86 165 129 #56a581 - 51 169 124 #33a97c - 0 172 119 #00ac77 - 0 176 115 #00b073 - 0 179 111 #00b36f - 0 181 108 #00b56c - 0 184 105 #00b869 - 0 186 103 #00ba67 - 0 188 101 #00bc65 - 0 190 99 #00be63 - 0 192 97 #00c061 - 174 174 174 #aeaeae - 156 182 167 #9cb6a7 - 136 187 160 #88bba0 - 114 192 154 #72c09a - 85 196 148 #55c494 - 29 200 143 #1dc88f - 0 204 138 #00cc8a - 0 207 133 #00cf85 - 0 210 130 #00d282 - 0 213 127 #00d57f - 0 216 124 #00d87c - 0 218 121 #00da79 - 0 220 119 #00dc77 - 0 222 118 #00de76 - 200 200 200 #c8c8c8 - 181 210 193 #b5d2c1 - 161 215 186 #a1d7ba - 136 220 178 #88dcb2 - 109 224 172 #6de0ac - 69 228 166 #45e4a6 - 0 232 161 #00e8a1 - 0 236 156 #00ec9c - 0 239 152 #00ef98 - 0 242 148 #00f294 - 0 245 145 #00f591 - 0 248 142 #00f88e - 227 227 227 #e3e3e3 - 207 237 219 #cfeddb - 185 243 211 #b9f3d3 - 157 249 203 #9df9cb - 128 254 196 #80fec4 - 91 255 190 #5bffbe - 0 255 184 #00ffb8 - 0 255 179 #00ffb3 - 29 29 29 #1d1d1d - 17 32 27 #11201b - 0 36 25 #002419 - 0 39 24 #002718 - 0 42 23 #002a17 - 49 49 49 #313131 - 38 53 48 #263530 - 14 57 45 #0e392d - 0 60 43 #003c2b - 0 62 42 #003e2a - 0 64 41 #004029 - 0 66 40 #004228 - 0 68 40 #004428 - 0 69 40 #004528 - 72 72 72 #484848 - 58 77 70 #3a4d46 - 33 81 66 #215142 - 0 85 64 #005540 - 0 87 62 #00573e - 0 90 61 #005a3d - 0 92 60 #005c3c - 0 94 59 #005e3b - 0 95 59 #005f3b - 0 97 58 #00613a - 0 98 58 #00623a - 0 99 58 #00633a - 97 97 97 #616161 - 81 103 94 #51675e - 57 107 90 #396b5a - 9 111 87 #096f57 - 0 115 84 #007354 - 0 118 82 #007652 - 0 121 81 #007951 - 0 123 80 #007b50 - 0 124 79 #007c4f - 0 126 78 #007e4e - 0 127 78 #007f4e - 0 128 77 #00804d - 0 130 77 #00824d - 0 131 77 #00834d - 122 122 122 #7a7a7a - 105 129 119 #698177 - 83 134 114 #538672 - 54 138 111 #368a6f - 0 142 108 #008e6c - 0 145 105 #009169 - 0 149 103 #009567 - 0 151 102 #009766 - 0 153 100 #009964 - 0 156 99 #009c63 - 0 157 98 #009d62 - 0 159 97 #009f61 - 0 160 97 #00a061 - 0 162 96 #00a260 - 148 148 148 #949494 - 129 155 144 #819b90 - 106 161 139 #6aa18b - 80 165 136 #50a588 - 37 169 132 #25a984 - 0 172 129 #00ac81 - 0 176 126 #00b07e - 0 179 124 #00b37c - 0 182 122 #00b67a - 0 184 121 #00b879 - 0 187 119 #00bb77 - 0 189 118 #00bd76 - 0 191 117 #00bf75 - 0 192 116 #00c074 - 174 174 174 #aeaeae - 154 182 170 #9ab6aa - 133 187 165 #85bba5 - 109 192 161 #6dc0a1 - 76 196 157 #4cc49d - 0 200 153 #00c899 - 0 204 150 #00cc96 - 0 208 147 #00d093 - 0 211 145 #00d391 - 0 213 143 #00d58f - 0 216 141 #00d88d - 0 218 140 #00da8c - 0 220 138 #00dc8a - 0 222 138 #00de8a - 200 200 200 #c8c8c8 - 179 210 196 #b3d2c4 - 158 215 190 #9ed7be - 131 220 185 #83dcb9 - 101 224 181 #65e0b5 - 50 229 177 #32e5b1 - 0 233 174 #00e9ae - 0 236 171 #00ecab - 0 239 168 #00efa8 - 0 243 165 #00f3a5 - 0 245 163 #00f5a3 - 0 248 162 #00f8a2 - 227 227 227 #e3e3e3 - 205 238 222 #cdeede - 181 244 216 #b5f4d8 - 151 249 210 #97f9d2 - 118 254 205 #76fecd - 74 255 201 #4affc9 - 0 255 197 #00ffc5 - 29 29 29 #1d1d1d - 16 32 28 #10201c - 0 36 28 #00241c - 0 39 28 #00271c - 0 42 30 #002a1e - 49 49 49 #313131 - 37 53 49 #253531 - 8 57 48 #083930 - 0 60 48 #003c30 - 0 62 48 #003e30 - 0 65 48 #004130 - 0 67 48 #004330 - 0 68 49 #004431 - 0 69 50 #004532 - 72 72 72 #484848 - 56 77 71 #384d47 - 28 82 70 #1c5246 - 0 85 69 #005545 - 0 88 69 #005845 - 0 90 68 #005a44 - 0 92 69 #005c45 - 0 94 69 #005e45 - 0 96 69 #006045 - 0 97 70 #006146 - 0 98 70 #006246 - 0 99 71 #006347 - 97 97 97 #616161 - 79 103 95 #4f675f - 53 107 94 #356b5e - 0 111 92 #006f5c - 0 115 91 #00735b - 0 118 91 #00765b - 0 121 91 #00795b - 0 123 90 #007b5a - 0 124 91 #007c5b - 0 126 91 #007e5b - 0 128 91 #00805b - 0 129 91 #00815b - 0 130 92 #00825c - 0 131 92 #00835c - 122 122 122 #7a7a7a - 104 129 121 #688179 - 80 134 119 #508677 - 48 138 117 #308a75 - 0 142 115 #008e73 - 0 145 114 #009172 - 0 149 113 #009571 - 0 151 113 #009771 - 0 154 113 #009a71 - 0 156 113 #009c71 - 0 157 113 #009d71 - 0 159 113 #009f71 - 0 161 113 #00a171 - 0 162 113 #00a271 - 148 148 148 #949494 - 128 155 146 #809b92 - 103 161 144 #67a190 - 75 165 142 #4ba58e - 16 169 140 #10a98c - 0 173 138 #00ad8a - 0 176 137 #00b089 - 0 179 136 #00b388 - 0 182 135 #00b687 - 0 184 135 #00b887 - 0 187 134 #00bb86 - 0 189 134 #00bd86 - 0 191 134 #00bf86 - 0 192 134 #00c086 - 174 174 174 #aeaeae - 153 182 172 #99b6ac - 131 187 169 #83bba9 - 104 192 167 #68c0a7 - 66 196 165 #42c4a5 - 0 200 163 #00c8a3 - 0 204 161 #00cca1 - 0 208 160 #00d0a0 - 0 211 159 #00d39f - 0 213 158 #00d59e - 0 216 158 #00d89e - 0 219 157 #00db9d - 0 220 157 #00dc9d - 0 222 156 #00de9c - 200 200 200 #c8c8c8 - 179 210 198 #b3d2c6 - 155 215 195 #9bd7c3 - 127 220 192 #7fdcc0 - 94 224 190 #5ee0be - 26 229 188 #1ae5bc - 0 233 186 #00e9ba - 0 236 185 #00ecb9 - 0 240 183 #00f0b7 - 0 243 182 #00f3b6 - 0 246 181 #00f6b5 - 0 248 181 #00f8b5 - 227 227 227 #e3e3e3 - 204 238 225 #cceee1 - 179 244 221 #b3f4dd - 147 249 218 #93f9da - 109 254 215 #6dfed7 - 55 255 213 #37ffd5 - 0 255 211 #00ffd3 - 29 29 29 #1d1d1d - 14 32 30 #0e201e - 0 36 32 #002420 - 0 39 35 #002723 - 0 42 37 #002a25 - 49 49 49 #313131 - 36 53 51 #243533 - 4 57 52 #043934 - 0 60 53 #003c35 - 0 62 55 #003e37 - 0 65 56 #004138 - 0 67 58 #00433a - 0 68 59 #00443b - 72 72 72 #484848 - 56 77 73 #384d49 - 24 82 74 #18524a - 0 85 75 #00554b - 0 88 76 #00584c - 0 90 78 #005a4e - 0 92 79 #005c4f - 0 94 81 #005e51 - 0 96 82 #006052 - 0 97 83 #006153 - 0 98 84 #006254 - 97 97 97 #616161 - 78 103 98 #4e6762 - 50 107 98 #326b62 - 0 111 99 #006f63 - 0 115 100 #007364 - 0 118 101 #007665 - 0 121 103 #007967 - 0 123 104 #007b68 - 0 125 105 #007d69 - 0 126 106 #007e6a - 0 128 107 #00806b - 0 129 108 #00816c - 0 130 109 #00826d - 122 122 122 #7a7a7a - 103 129 123 #67817b - 78 134 123 #4e867b - 43 138 123 #2b8a7b - 0 142 123 #008e7b - 0 145 124 #00917c - 0 149 126 #00957e - 0 151 127 #00977f - 0 154 128 #009a80 - 0 156 130 #009c82 - 0 158 131 #009e83 - 0 159 132 #009f84 - 0 161 133 #00a185 - 0 162 134 #00a286 - 148 148 148 #949494 - 127 155 148 #7f9b94 - 101 161 148 #65a194 - 71 165 148 #47a594 - 0 169 148 #00a994 - 0 173 149 #00ad95 - 0 176 149 #00b095 - 0 179 150 #00b396 - 0 182 151 #00b697 - 0 185 152 #00b998 - 0 187 153 #00bb99 - 0 189 155 #00bd9b - 0 191 156 #00bf9c - 0 193 157 #00c19d - 174 174 174 #aeaeae - 153 182 174 #99b6ae - 129 187 173 #81bbad - 101 192 173 #65c0ad - 56 196 173 #38c4ad - 0 200 173 #00c8ad - 0 204 173 #00ccad - 0 208 174 #00d0ae - 0 210 175 #00d2af - 0 213 176 #00d5b0 - 0 216 177 #00d8b1 - 0 218 177 #00dab1 - 0 220 178 #00dcb2 - 200 200 200 #c8c8c8 - 178 209 200 #b2d1c8 - 153 215 199 #99d7c7 - 125 220 198 #7ddcc6 - 87 224 198 #57e0c6 - 0 229 198 #00e5c6 - 0 233 198 #00e9c6 - 0 236 198 #00ecc6 - 0 239 199 #00efc7 - 0 243 200 #00f3c8 - 227 227 227 #e3e3e3 - 203 237 227 #cbede3 - 177 243 226 #b1f3e2 - 143 249 225 #8ff9e1 - 102 254 224 #66fee0 - 25 255 223 #19ffdf - 29 29 29 #1d1d1d - 12 32 32 #0c2020 - 0 36 37 #002425 - 0 39 42 #00272a - 49 49 49 #313131 - 35 53 53 #233535 - 0 57 56 #003938 - 0 60 60 #003c3c - 0 62 64 #003e40 - 0 65 67 #004143 - 0 67 70 #004346 - 0 68 73 #004449 - 72 72 72 #484848 - 54 77 76 #364d4c - 19 81 79 #13514f - 0 85 83 #005553 - 0 87 86 #005756 - 0 90 90 #005a5a - 0 92 93 #005c5d - 0 94 96 #005e60 - 0 96 98 #006062 - 0 97 101 #006165 - 97 97 97 #616161 - 78 103 100 #4e6764 - 48 107 103 #306b67 - 0 111 107 #006f6b - 0 115 110 #00736e - 0 118 114 #007672 - 0 120 117 #007875 - 0 123 120 #007b78 - 0 125 123 #007d7b - 0 126 125 #007e7d - 0 128 128 #008080 - 0 129 130 #008182 - 122 122 122 #7a7a7a - 102 129 126 #66817e - 76 133 128 #4c8580 - 36 137 131 #248983 - 0 141 134 #008d86 - 0 145 138 #00918a - 0 148 141 #00948d - 0 151 143 #00978f - 0 154 147 #009a93 - 0 156 150 #009c96 - 0 158 152 #009e98 - 0 160 154 #00a09a - 0 161 156 #00a19c - 148 148 148 #949494 - 127 155 151 #7f9b97 - 100 160 153 #64a099 - 65 165 156 #41a59c - 0 169 159 #00a99f - 0 172 161 #00aca1 - 0 176 164 #00b0a4 - 0 179 167 #00b3a7 - 0 182 170 #00b6aa - 0 184 172 #00b8ac - 0 187 175 #00bbaf - 0 189 178 #00bdb2 - 0 191 180 #00bfb4 - 174 174 174 #aeaeae - 152 182 177 #98b6b1 - 127 187 179 #7fbbb3 - 98 192 181 #62c0b5 - 44 196 183 #2cc4b7 - 0 200 186 #00c8ba - 0 204 188 #00ccbc - 0 207 190 #00cfbe - 0 210 193 #00d2c1 - 0 213 196 #00d5c4 - 0 216 198 #00d8c6 - 0 219 201 #00dbc9 - 200 200 200 #c8c8c8 - 178 209 203 #b2d1cb - 152 215 204 #98d7cc - 122 220 206 #7adcce - 77 224 208 #4de0d0 - 0 228 210 #00e4d2 - 0 232 212 #00e8d4 - 0 236 214 #00ecd6 - 0 239 216 #00efd8 - 227 227 227 #e3e3e3 - 203 237 230 #cbede6 - 175 243 231 #aff3e7 - 140 249 232 #8cf9e8 - 92 254 234 #5cfeea - 0 255 236 #00ffec - 29 29 29 #1d1d1d - 11 32 34 #0b2022 - 0 36 41 #002429 - 0 39 47 #00272f - 49 49 49 #313131 - 34 53 54 #223536 - 0 57 60 #00393c - 0 59 65 #003b41 - 0 62 71 #003e47 - 0 65 75 #00414b - 0 67 79 #00434f - 72 72 72 #484848 - 54 77 78 #364d4e - 15 81 84 #0f5154 - 0 84 89 #005459 - 0 87 94 #00575e - 0 90 99 #005a63 - 0 92 103 #005c67 - 0 94 107 #005e6b - 0 96 110 #00606e - 97 97 97 #616161 - 77 102 103 #4d6667 - 47 107 108 #2f6b6c - 0 111 113 #006f71 - 0 114 119 #007277 - 0 117 124 #00757c - 0 120 129 #007881 - 0 123 134 #007b86 - 0 125 138 #007d8a - 0 126 141 #007e8d - 0 128 144 #008090 - 122 122 122 #7a7a7a - 102 129 128 #668180 - 76 133 133 #4c8585 - 29 137 137 #1d8989 - 0 141 143 #008d8f - 0 145 148 #009194 - 0 148 154 #00949a - 0 150 158 #00969e - 0 153 163 #0099a3 - 0 156 167 #009ca7 - 0 158 171 #009eab - 0 160 174 #00a0ae - 148 148 148 #949494 - 127 155 154 #7f9b9a - 99 160 158 #63a09e - 62 164 163 #3ea4a3 - 0 168 168 #00a8a8 - 0 172 172 #00acac - 0 175 177 #00afb1 - 0 178 181 #00b2b5 - 0 181 186 #00b5ba - 0 184 190 #00b8be - 0 187 194 #00bbc2 - 0 189 199 #00bdc7 - 174 174 174 #aeaeae - 152 182 180 #98b6b4 - 126 187 184 #7ebbb8 - 96 191 188 #60bfbc - 37 195 192 #25c3c0 - 0 200 197 #00c8c5 - 0 203 201 #00cbc9 - 0 207 206 #00cfce - 0 210 210 #00d2d2 - 0 213 214 #00d5d6 - 0 215 218 #00d7da - 200 200 200 #c8c8c8 - 178 209 206 #b2d1ce - 152 214 210 #98d6d2 - 118 219 215 #76dbd7 - 71 224 219 #47e0db - 0 228 223 #00e4df - 0 232 227 #00e8e3 - 0 235 231 #00ebe7 - 0 239 235 #00efeb - 227 227 227 #e3e3e3 - 204 237 234 #ccedea - 174 243 237 #aef3ed - 137 249 242 #89f9f2 - 82 254 246 #52fef6 - 0 255 250 #00fffa - 29 29 29 #1d1d1d - 10 32 36 #0a2024 - 0 35 45 #00232d - 0 38 53 #002635 - 49 49 49 #313131 - 34 53 56 #223538 - 0 56 64 #003840 - 0 59 71 #003b47 - 0 62 79 #003e4f - 0 64 87 #004057 - 0 66 94 #00425e - 72 72 72 #484848 - 53 77 80 #354d50 - 14 81 88 #0e5158 - 0 84 96 #005460 - 0 86 103 #005667 - 0 89 110 #00596e - 0 92 117 #005c75 - 0 94 123 #005e7b - 0 96 128 #006080 - 97 97 97 #616161 - 77 102 105 #4d6669 - 47 106 112 #2f6a70 - 0 110 120 #006e78 - 0 113 128 #007180 - 0 116 136 #007488 - 0 119 143 #00778f - 0 122 150 #007a96 - 0 124 155 #007c9b - 0 126 160 #007ea0 - 0 128 165 #0080a5 - 122 122 122 #7a7a7a - 102 128 130 #668082 - 76 132 137 #4c8489 - 28 136 145 #1c8891 - 0 140 153 #008c99 - 0 143 160 #008fa0 - 0 147 168 #0093a8 - 0 149 174 #0095ae - 0 152 181 #0098b5 - 0 155 188 #009bbc - 0 158 194 #009ec2 - 0 160 198 #00a0c6 - 148 148 148 #949494 - 127 155 156 #7f9b9c - 101 159 163 #659fa3 - 62 163 170 #3ea3aa - 0 167 177 #00a7b1 - 0 171 184 #00abb8 - 0 174 192 #00aec0 - 0 177 198 #00b1c6 - 0 180 205 #00b4cd - 0 183 212 #00b7d4 - 0 186 218 #00bada - 0 189 225 #00bde1 - 174 174 174 #aeaeae - 153 181 182 #99b5b6 - 127 186 189 #7fbabd - 97 190 195 #61bec3 - 33 194 202 #21c2ca - 0 198 210 #00c6d2 - 0 202 217 #00cad9 - 0 205 224 #00cde0 - 0 209 231 #00d1e7 - 0 212 237 #00d4ed - 0 215 242 #00d7f2 - 200 200 200 #c8c8c8 - 179 208 208 #b3d0d0 - 152 214 215 #98d6d7 - 119 218 222 #77dade - 68 223 228 #44dfe4 - 0 227 235 #00e3eb - 0 231 242 #00e7f2 - 0 235 248 #00ebf8 - 0 239 255 #00efff - 227 227 227 #e3e3e3 - 205 236 236 #cdecec - 175 242 243 #aff2f3 - 137 248 250 #89f8fa - 81 253 255 #51fdff - 29 29 29 #1d1d1d - 10 32 38 #0a2026 - 0 35 48 #002330 - 0 37 57 #002539 - 49 49 49 #313131 - 34 53 58 #22353a - 0 56 67 #003843 - 0 58 77 #003a4d - 0 61 86 #003d56 - 0 64 96 #004060 - 72 72 72 #484848 - 54 77 82 #364d52 - 16 80 92 #10505c - 0 83 102 #005366 - 0 86 111 #00566f - 0 88 120 #005878 - 0 91 129 #005b81 - 0 93 137 #005d89 - 97 97 97 #616161 - 78 102 106 #4e666a - 49 106 116 #316a74 - 0 109 126 #006d7e - 0 112 136 #007088 - 0 115 146 #007392 - 0 118 155 #00769b - 0 121 164 #0079a4 - 0 123 170 #007baa - 122 122 122 #7a7a7a - 104 128 132 #688084 - 78 132 141 #4e848d - 34 135 151 #228797 - 0 139 160 #008ba0 - 0 142 170 #008eaa - 0 145 180 #0091b4 - 0 148 189 #0094bd - 0 151 198 #0097c6 - 0 154 207 #009acf - 148 148 148 #949494 - 129 154 158 #819a9e - 104 158 167 #689ea7 - 66 162 177 #42a2b1 - 0 166 186 #00a6ba - 0 169 195 #00a9c3 - 0 173 205 #00adcd - 0 176 214 #00b0d6 - 0 179 224 #00b3e0 - 0 182 232 #00b6e8 - 174 174 174 #aeaeae - 155 181 184 #9bb5b8 - 129 185 193 #81b9c1 - 99 189 202 #63bdca - 43 193 211 #2bc1d3 - 0 197 221 #00c5dd - 0 201 231 #00c9e7 - 0 204 240 #00ccf0 - 0 208 251 #00d0fb - 200 200 200 #c8c8c8 - 182 208 210 #b6d0d2 - 154 213 219 #9ad5db - 121 217 228 #79d9e4 - 71 221 238 #47ddee - 0 226 248 #00e2f8 - 0 230 255 #00e6ff - 0 233 255 #00e9ff - 227 227 227 #e3e3e3 - 208 235 238 #d0ebee - 176 241 248 #b0f1f8 - 138 247 255 #8af7ff - 29 29 29 #1d1d1d - 11 32 39 #0b2027 - 0 34 50 #002232 - 0 36 61 #00243d - 0 38 72 #002648 - 49 49 49 #313131 - 34 53 59 #22353b - 0 55 70 #003746 - 0 57 82 #003952 - 0 60 94 #003c5e - 0 62 105 #003e69 - 72 72 72 #484848 - 54 76 84 #364c54 - 22 79 96 #164f60 - 0 82 107 #00526b - 0 84 118 #005476 - 0 86 130 #005682 - 0 89 141 #00598d - 0 91 152 #005b98 - 97 97 97 #616161 - 79 101 108 #4f656c - 54 105 120 #366978 - 0 107 131 #006b83 - 0 110 143 #006e8f - 0 112 155 #00709b - 0 115 166 #0073a6 - 0 118 178 #0076b2 - 0 120 190 #0078be - 122 122 122 #7a7a7a - 105 127 133 #697f85 - 82 131 144 #528390 - 46 134 156 #2e869c - 0 136 168 #0088a8 - 0 139 180 #008bb4 - 0 142 192 #008ec0 - 0 145 204 #0091cc - 0 148 217 #0094d9 - 0 150 229 #0096e5 - 148 148 148 #949494 - 131 153 159 #83999f - 108 157 170 #6c9daa - 76 161 182 #4ca1b6 - 0 164 194 #00a4c2 - 0 166 206 #00a6ce - 0 169 218 #00a9da - 0 172 230 #00ace6 - 0 175 243 #00aff3 - 0 178 255 #00b2ff - 174 174 174 #aeaeae - 158 180 185 #9eb4b9 - 134 184 197 #86b8c5 - 105 188 208 #69bcd0 - 62 191 220 #3ebfdc - 0 194 233 #00c2e9 - 0 198 247 #00c6f7 - 0 200 255 #00c8ff - 200 200 200 #c8c8c8 - 185 207 212 #b9cfd4 - 159 211 224 #9fd3e0 - 129 215 236 #81d7ec - 82 219 249 #52dbf9 - 0 223 255 #00dfff - 227 227 227 #e3e3e3 - 211 234 239 #d3eaef - 181 240 253 #b5f0fd - 29 29 29 #1d1d1d - 13 31 41 #0d1f29 - 0 33 52 #002134 - 0 34 63 #00223f - 0 36 75 #00244b - 49 49 49 #313131 - 35 52 61 #23343d - 6 54 73 #063649 - 0 56 85 #003855 - 0 58 98 #003a62 - 0 60 110 #003c6e - 0 62 120 #003e78 - 72 72 72 #484848 - 56 76 86 #384c56 - 30 78 98 #1e4e62 - 0 80 110 #00506e - 0 82 123 #00527b - 0 84 135 #005487 - 0 86 147 #005693 - 0 88 160 #0058a0 - 97 97 97 #616161 - 82 101 109 #52656d - 60 103 122 #3c677a - 26 105 134 #1a6986 - 0 108 147 #006c93 - 0 109 160 #006da0 - 0 112 172 #0070ac - 0 114 185 #0072b9 - 0 117 199 #0075c7 - 122 122 122 #7a7a7a - 108 126 135 #6c7e87 - 88 129 147 #588193 - 60 132 160 #3c84a0 - 0 134 172 #0086ac - 0 136 185 #0088b9 - 0 139 199 #008bc7 - 0 141 212 #008dd4 - 0 143 226 #008fe2 - 0 146 240 #0092f0 - 148 148 148 #949494 - 134 153 160 #8699a0 - 114 156 172 #729cac - 88 158 186 #589eba - 48 161 199 #30a1c7 - 0 163 212 #00a3d4 - 0 166 226 #00a6e2 - 0 168 240 #00a8f0 - 0 171 255 #00abff - 0 174 255 #00aeff - 174 174 174 #aeaeae - 160 179 186 #a0b3ba - 139 183 199 #8bb7c7 - 115 186 211 #73bad3 - 80 188 225 #50bce1 - 0 191 240 #00bff0 - 0 194 255 #00c2ff - 200 200 200 #c8c8c8 - 188 206 212 #bcced4 - 164 210 226 #a4d2e2 - 138 213 240 #8ad5f0 - 98 217 255 #62d9ff - 227 227 227 #e3e3e3 - 214 233 240 #d6e9f0 - 186 238 255 #baeeff - 29 29 29 #1d1d1d - 15 31 42 #0f1f2a - 0 32 53 #002035 - 0 33 64 #002140 - 0 34 77 #00224d - 49 49 49 #313131 - 38 52 62 #26343e - 16 53 75 #10354b - 0 55 87 #003757 - 0 56 101 #003865 - 0 58 113 #003a71 - 0 59 125 #003b7d - 72 72 72 #484848 - 59 75 87 #3b4b57 - 39 77 100 #274d64 - 0 78 113 #004e71 - 0 80 125 #00507d - 0 81 138 #00518a - 0 83 151 #005397 - 0 85 164 #0055a4 - 97 97 97 #616161 - 84 100 110 #54646e - 67 102 124 #43667c - 43 104 136 #2b6888 - 0 105 150 #006996 - 0 107 162 #006ba2 - 0 109 175 #006daf - 0 110 189 #006ebd - 0 112 203 #0070cb - 122 122 122 #7a7a7a - 110 126 136 #6e7e88 - 94 128 149 #5e8095 - 73 130 162 #4982a2 - 37 132 175 #2584af - 0 133 189 #0085bd - 0 135 203 #0087cb - 0 137 216 #0089d8 - 0 139 231 #008be7 - 0 141 244 #008df4 - 148 148 148 #949494 - 137 152 161 #8998a1 - 121 154 174 #799aae - 100 156 188 #649cbc - 72 158 202 #489eca - 6 160 215 #06a0d7 - 0 162 231 #00a2e7 - 0 164 246 #00a4f6 - 0 167 255 #00a7ff - 0 169 255 #00a9ff - 174 174 174 #aeaeae - 163 178 187 #a3b2bb - 146 181 200 #92b5c8 - 126 183 214 #7eb7d6 - 101 185 229 #65b9e5 - 55 188 245 #37bcf5 - 0 190 255 #00beff - 200 200 200 #c8c8c8 - 190 205 213 #becdd5 - 172 208 228 #acd0e4 - 150 211 243 #96d3f3 - 118 214 255 #76d6ff - 227 227 227 #e3e3e3 - 217 233 240 #d9e9f0 - 193 236 255 #c1ecff - 29 29 29 #1d1d1d - 19 30 43 #131e2b - 1 31 54 #011f36 - 0 31 66 #001f42 - 0 31 78 #001f4e - 49 49 49 #313131 - 40 51 63 #28333f - 26 52 76 #1a344c - 0 52 89 #003459 - 0 53 102 #003566 - 0 54 115 #003673 - 0 54 128 #003680 - 72 72 72 #484848 - 62 74 88 #3e4a58 - 48 75 101 #304b65 - 25 76 114 #194c72 - 0 77 127 #004d7f - 0 77 140 #004d8c - 0 78 154 #004e9a - 0 79 167 #004fa7 - 97 97 97 #616161 - 88 99 111 #58636f - 75 100 125 #4b647d - 59 101 138 #3b658a - 30 102 152 #1e6698 - 0 103 164 #0067a4 - 0 104 177 #0068b1 - 0 105 192 #0069c0 - 0 105 206 #0069ce - 122 122 122 #7a7a7a - 114 125 136 #727d88 - 101 126 150 #657e96 - 86 127 164 #567fa4 - 66 128 177 #4280b1 - 30 129 191 #1e81bf - 0 130 205 #0082cd - 0 131 219 #0083db - 0 132 235 #0084eb - 0 134 250 #0086fa - 148 148 148 #949494 - 140 151 161 #8c97a1 - 128 152 175 #8098af - 113 154 189 #719abd - 95 155 204 #5f9bcc - 70 156 218 #469cda - 0 157 234 #009dea - 0 159 250 #009ffa - 0 160 255 #00a0ff - 174 174 174 #aeaeae - 167 177 187 #a7b1bb - 154 179 202 #9ab3ca - 139 180 216 #8bb4d8 - 121 182 231 #79b6e7 - 95 183 248 #5fb7f8 - 51 185 255 #33b9ff - 200 200 200 #c8c8c8 - 194 204 213 #c2ccd5 - 180 206 229 #b4cee5 - 162 208 245 #a2d0f5 - 141 210 255 #8dd2ff - 227 227 227 #e3e3e3 - 221 231 240 #dde7f0 - 203 234 255 #cbeaff - 29 29 29 #1d1d1d - 22 29 43 #161d2b - 12 29 54 #0c1d36 - 0 29 66 #001d42 - 0 28 78 #001c4e - 0 27 91 #001b5b - 0 25 103 #001967 - 0 23 112 #001770 - 0 20 123 #00147b - 0 17 131 #001183 - 0 13 141 #000d8d - 0 8 149 #000895 - 0 2 158 #00029e - 0 0 167 #0000a7 - 49 49 49 #313131 - 44 50 64 #2c3240 - 34 50 76 #22324c - 18 50 90 #12325a - 0 50 103 #003267 - 0 49 116 #003174 - 0 49 128 #003180 - 0 47 142 #002f8e - 0 45 156 #002d9c - 0 44 168 #002ca8 - 0 42 176 #002ab0 - 0 40 186 #0028ba - 0 37 198 #0025c6 - 0 35 207 #0023cf - 72 72 72 #484848 - 65 73 88 #414958 - 56 73 102 #384966 - 43 74 115 #2b4a73 - 22 74 128 #164a80 - 0 74 141 #004a8d - 0 73 155 #00499b - 0 73 168 #0049a8 - 0 72 182 #0048b6 - 0 71 196 #0047c4 - 0 70 208 #0046d0 - 0 68 220 #0044dc - 0 67 234 #0043ea - 0 65 243 #0041f3 - 97 97 97 #616161 - 91 98 112 #5b6270 - 83 98 125 #53627d - 72 99 139 #48638b - 56 99 153 #386399 - 33 99 166 #2163a6 - 0 99 178 #0063b2 - 0 99 192 #0063c0 - 0 99 207 #0063cf - 0 99 222 #0063de - 0 98 239 #0062ef - 0 97 253 #0061fd - 0 95 255 #005fff - 0 94 255 #005eff - 122 122 122 #7a7a7a - 117 124 137 #757c89 - 109 124 150 #6d7c96 - 98 125 164 #627da4 - 85 125 178 #557db2 - 68 125 192 #447dc0 - 39 126 206 #277ece - 0 126 220 #007edc - 0 126 236 #007eec - 0 126 252 #007efc - 0 126 255 #007eff - 148 148 148 #949494 - 143 150 162 #8f96a2 - 135 151 175 #8797af - 124 151 191 #7c97bf - 113 151 205 #7197cd - 97 152 219 #6198db - 73 153 235 #4999eb - 26 153 252 #1a99fc - 174 174 174 #aeaeae - 169 176 187 #a9b0bb - 160 177 202 #a0b1ca - 150 178 217 #96b2d9 - 137 178 232 #89b2e8 - 121 179 249 #79b3f9 - 95 180 255 #5fb4ff - 200 200 200 #c8c8c8 - 196 203 213 #c4cbd5 - 186 204 229 #bacce5 - 174 205 247 #aecdf7 - 158 206 255 #9eceff - 227 227 227 #e3e3e3 - 224 231 240 #e0e7f0 - 212 231 255 #d4e7ff - 29 29 29 #1d1d1d - 27 28 44 #1b1c2c - 25 26 54 #191a36 - 23 24 65 #171841 - 23 20 76 #17144c - 25 15 84 #190f54 - 28 7 93 #1c075d - 32 0 101 #200065 - 37 0 110 #25006e - 40 0 117 #280075 - 44 0 125 #2c007d - 48 0 133 #300085 - 52 0 141 #34008d - 57 0 151 #390097 - 49 49 49 #313131 - 48 49 64 #303140 - 45 48 77 #2d304d - 42 46 89 #2a2e59 - 38 44 101 #262c65 - 37 41 112 #252970 - 37 37 122 #25257a - 39 31 132 #271f84 - 42 24 141 #2a188d - 45 11 151 #2d0b97 - 49 0 159 #31009f - 53 0 169 #3500a9 - 56 0 177 #3800b1 - 60 0 185 #3c00b9 - 72 72 72 #484848 - 70 72 89 #464859 - 66 71 102 #424766 - 63 69 115 #3f4573 - 59 68 127 #3b447f - 55 66 140 #37428c - 52 63 151 #343f97 - 50 59 164 #323ba4 - 50 54 176 #3236b0 - 52 49 185 #3431b9 - 54 43 194 #362bc2 - 57 33 205 #3921cd - 60 18 215 #3c12d7 - 63 0 224 #3f00e0 - 97 97 97 #616161 - 95 97 112 #5f6170 - 92 96 125 #5c607d - 88 95 138 #585f8a - 83 94 152 #535e98 - 78 92 165 #4e5ca5 - 73 91 177 #495bb1 - 68 88 189 #4458bd - 65 85 202 #4155ca - 63 81 215 #3f51d7 - 62 76 229 #3e4ce5 - 62 71 239 #3e47ef - 63 65 250 #3f41fa - 65 57 255 #4139ff - 122 122 122 #7a7a7a - 120 123 137 #787b89 - 117 122 150 #757a96 - 112 121 164 #7079a4 - 108 120 178 #6c78b2 - 103 119 190 #6777be - 98 117 204 #6275cc - 91 116 218 #5b74da - 84 114 232 #5472e8 - 78 111 247 #4e6ff7 - 73 107 255 #496bff - 70 103 255 #4667ff - 67 97 255 #4361ff - 148 148 148 #949494 - 147 149 162 #9395a2 - 143 148 175 #8f94af - 138 147 190 #8a93be - 134 147 203 #8693cb - 129 146 217 #8192d9 - 122 144 233 #7a90e9 - 114 143 249 #728ff9 - 102 141 255 #668dff - 96 139 255 #608bff - 174 174 174 #aeaeae - 173 175 187 #adafbb - 168 175 202 #a8afca - 164 174 217 #a4aed9 - 158 173 233 #9eade9 - 152 172 249 #98acf9 - 145 171 255 #91abff - 200 200 200 #c8c8c8 - 200 202 213 #c8cad5 - 194 202 229 #c2cae5 - 188 201 246 #bcc9f6 - 181 200 255 #b5c8ff - 227 227 227 #e3e3e3 - 227 230 240 #e3e6f0 - 221 229 255 #dde5ff - 29 29 29 #1d1d1d - 31 27 44 #1f1b2c - 33 24 53 #211835 - 35 20 63 #23143f - 38 15 71 #260f47 - 41 8 79 #29084f - 45 0 87 #2d0057 - 49 0 95 #31005f - 53 0 103 #350067 - 57 0 110 #39006e - 62 0 118 #3e0076 - 66 0 126 #42007e - 71 0 134 #470086 - 77 0 145 #4d0091 - 49 49 49 #313131 - 51 48 64 #333040 - 53 45 75 #352d4b - 54 43 85 #362b55 - 56 39 96 #382760 - 59 34 106 #3b226a - 62 28 115 #3e1c73 - 65 19 124 #41137c - 69 4 133 #450485 - 74 0 142 #4a008e - 78 0 151 #4e0097 - 83 0 160 #5300a0 - 87 0 168 #5700a8 - 92 0 177 #5c00b1 - 72 72 72 #484848 - 74 71 88 #4a4758 - 75 68 101 #4b4465 - 76 66 113 #4c4271 - 77 63 124 #4d3f7c - 79 59 135 #4f3b87 - 81 55 145 #513791 - 84 49 156 #54319c - 88 42 166 #582aa6 - 92 33 175 #5c21af - 96 19 184 #6013b8 - 100 0 193 #6400c1 - 104 0 203 #6800cb - 108 0 212 #6c00d4 - 97 97 97 #616161 - 98 96 112 #626070 - 99 94 124 #635e7c - 99 92 137 #635c89 - 100 89 149 #645995 - 101 86 160 #6556a0 - 102 83 172 #6653ac - 104 79 183 #684fb7 - 107 74 194 #6b4ac2 - 110 69 204 #6e45cc - 113 61 216 #713dd8 - 116 54 224 #7436e0 - 120 44 234 #782cea - 125 27 245 #7d1bf5 - 122 122 122 #7a7a7a - 124 122 136 #7c7a88 - 124 120 149 #7c7895 - 124 118 163 #7c76a3 - 124 116 175 #7c74af - 125 113 187 #7d71bb - 125 110 199 #7d6ec7 - 126 107 212 #7e6bd4 - 127 103 224 #7f67e0 - 129 99 235 #8163eb - 132 94 247 #845ef7 - 135 87 255 #8757ff - 138 80 255 #8a50ff - 148 148 148 #949494 - 149 148 161 #9594a1 - 149 147 174 #9593ae - 149 145 188 #9591bc - 149 143 201 #958fc9 - 149 140 214 #958cd6 - 149 138 228 #958ae4 - 149 134 242 #9586f2 - 150 130 255 #9682ff - 151 127 255 #977fff - 174 174 174 #aeaeae - 175 175 187 #afafbb - 175 173 201 #afadc9 - 174 171 215 #aeabd7 - 174 169 230 #aea9e6 - 173 167 245 #ada7f5 - 174 164 255 #aea4ff - 200 200 200 #c8c8c8 - 202 202 212 #cacad4 - 201 200 228 #c9c8e4 - 200 198 244 #c8c6f4 - 200 195 255 #c8c3ff - 227 227 227 #e3e3e3 - 230 229 239 #e6e5ef - 228 227 255 #e4e3ff - 29 29 29 #1d1d1d - 34 26 43 #221a2b - 38 22 51 #261633 - 42 17 59 #2a113b - 47 10 67 #2f0a43 - 51 1 74 #33014a - 56 0 82 #380052 - 60 0 89 #3c0059 - 65 0 97 #410061 - 69 0 103 #450067 - 74 0 110 #4a006e - 79 0 118 #4f0076 - 85 0 126 #55007e - 92 0 137 #5c0089 - 49 49 49 #313131 - 54 47 63 #362f3f - 58 44 73 #3a2c49 - 62 40 81 #3e2851 - 67 35 91 #43235b - 71 28 100 #471c64 - 76 19 109 #4c136d - 81 3 117 #510375 - 85 0 125 #55007d - 91 0 133 #5b0085 - 96 0 142 #60008e - 101 0 150 #650096 - 107 0 160 #6b00a0 - 113 0 169 #7100a9 - 72 72 72 #484848 - 77 70 87 #4d4657 - 81 66 99 #514263 - 85 63 109 #553f6d - 89 59 119 #593b77 - 94 53 129 #5e3581 - 99 47 138 #632f8a - 104 39 148 #682794 - 109 28 157 #6d1c9d - 113 8 165 #7108a5 - 118 0 173 #7600ad - 124 0 182 #7c00b6 - 129 0 192 #8100c0 - 134 0 200 #8600c8 - 97 97 97 #616161 - 101 95 111 #655f6f - 105 92 123 #695c7b - 108 89 133 #6c5985 - 112 86 144 #705690 - 116 81 154 #74519a - 121 77 164 #794da4 - 125 71 174 #7d47ae - 130 64 184 #8240b8 - 135 56 193 #8738c1 - 140 45 204 #8c2dcc - 145 33 211 #9121d3 - 150 5 220 #9605dc - 155 0 230 #9b00e6 - 122 122 122 #7a7a7a - 126 121 135 #7e7987 - 129 119 147 #817793 - 132 116 159 #84749f - 136 112 171 #8870ab - 140 109 181 #8c6db5 - 144 104 192 #9068c0 - 149 100 202 #9564ca - 153 94 213 #995ed5 - 158 89 222 #9e59de - 163 81 233 #a351e9 - 168 72 244 #a848f4 - 173 61 254 #ad3dfe - 148 148 148 #949494 - 152 147 161 #9893a1 - 155 145 172 #9b91ac - 158 142 185 #9e8eb9 - 161 139 197 #a18bc5 - 165 136 209 #a588d1 - 169 132 220 #a984dc - 173 127 232 #ad7fe8 - 179 121 244 #b379f4 - 183 117 254 #b775fe - 174 174 174 #aeaeae - 178 174 186 #b2aeba - 181 172 199 #b5acc7 - 183 169 212 #b7a9d4 - 187 166 225 #bba6e1 - 190 162 238 #bea2ee - 195 158 252 #c39efc - 200 200 200 #c8c8c8 - 204 201 212 #ccc9d4 - 207 198 226 #cfc6e2 - 210 196 240 #d2c4f0 - 213 192 255 #d5c0ff - 227 227 227 #e3e3e3 - 231 228 239 #e7e4ef - 234 226 255 #eae2ff - 29 29 29 #1d1d1d - 37 25 42 #25192a - 42 20 49 #2a1431 - 47 15 56 #2f0f38 - 52 6 63 #34063f - 57 0 70 #390046 - 62 0 77 #3e004d - 67 0 84 #430054 - 73 0 91 #49005b - 77 0 97 #4d0061 - 83 0 104 #530068 - 89 0 112 #590070 - 94 0 118 #5e0076 - 49 49 49 #313131 - 57 46 62 #392e3e - 62 43 70 #3e2b46 - 67 38 78 #43264e - 73 32 87 #492057 - 79 24 95 #4f185f - 84 10 103 #540a67 - 90 0 111 #5a006f - 95 0 118 #5f0076 - 101 0 126 #65007e - 107 0 134 #6b0086 - 113 0 142 #71008e - 120 0 151 #780097 - 127 0 160 #7f00a0 - 72 72 72 #484848 - 80 69 86 #504556 - 86 65 96 #564160 - 92 61 105 #5c3d69 - 98 55 114 #623772 - 103 49 124 #67317c - 110 41 132 #6e2984 - 115 30 140 #731e8c - 121 11 149 #790b95 - 126 0 157 #7e009d - 132 0 164 #8400a4 - 138 0 172 #8a00ac - 145 0 181 #9100b5 - 151 0 189 #9700bd - 97 97 97 #616161 - 104 94 110 #685e6e - 110 91 120 #6e5b78 - 115 87 130 #735782 - 120 83 139 #78538b - 126 78 148 #7e4e94 - 132 72 157 #84489d - 138 65 166 #8a41a6 - 145 56 176 #9138b0 - 150 45 184 #962db8 - 156 28 193 #9c1cc1 - 162 0 200 #a200c8 - 168 0 209 #a800d1 - 174 0 217 #ae00d9 - 122 122 122 #7a7a7a - 129 121 134 #817986 - 134 117 145 #867591 - 140 113 155 #8c719b - 146 109 166 #926da6 - 151 105 175 #9769af - 157 100 185 #9d64b9 - 163 94 194 #a35ec2 - 169 88 203 #a958cb - 175 80 212 #af50d4 - 181 71 221 #b547dd - 187 59 231 #bb3be7 - 194 42 241 #c22af1 - 200 11 249 #c80bf9 - 148 148 148 #949494 - 154 147 160 #9a93a0 - 160 144 170 #a090aa - 165 140 181 #a58cb5 - 171 136 192 #ab88c0 - 176 132 202 #b084ca - 182 127 212 #b67fd4 - 189 122 223 #bd7adf - 195 116 233 #c374e9 - 201 109 243 #c96df3 - 207 101 254 #cf65fe - 216 88 255 #d858ff - 223 76 255 #df4cff - 231 56 255 #e738ff - 174 174 174 #aeaeae - 180 174 185 #b4aeb9 - 185 170 197 #b9aac5 - 191 167 208 #bfa7d0 - 196 163 219 #c4a3db - 202 159 231 #ca9fe7 - 209 154 243 #d19af3 - 215 149 253 #d795fd - 222 142 255 #de8eff - 229 136 255 #e588ff - 236 127 255 #ec7fff - 200 200 200 #c8c8c8 - 206 201 211 #cec9d3 - 211 197 224 #d3c5e0 - 217 194 236 #d9c2ec - 223 189 250 #dfbdfa - 230 185 255 #e6b9ff - 236 180 255 #ecb4ff - 227 227 227 #e3e3e3 - 233 228 238 #e9e4ee - 238 224 254 #eee0fe - 245 220 255 #f5dcff - 29 29 29 #1d1d1d - 38 24 41 #261829 - 44 19 48 #2c1330 - 49 13 54 #310d36 - 55 3 61 #37033d - 60 0 67 #3c0043 - 66 0 73 #420049 - 72 0 81 #480051 - 77 0 87 #4d0057 - 82 0 93 #52005d - 88 0 99 #580063 - 94 0 106 #5e006a - 49 49 49 #313131 - 59 46 60 #3b2e3c - 65 41 68 #412944 - 71 37 75 #47254b - 78 29 83 #4e1d53 - 85 19 91 #55135b - 91 1 98 #5b0162 - 97 0 105 #610069 - 103 0 112 #670070 - 109 0 119 #6d0077 - 115 0 126 #73007e - 122 0 135 #7a0087 - 129 0 143 #81008f - 137 0 151 #890097 - 72 72 72 #484848 - 83 68 84 #534454 - 91 63 93 #5b3f5d - 98 58 101 #623a65 - 105 52 109 #69346d - 112 44 117 #702c75 - 119 34 125 #77227d - 125 17 133 #7d1185 - 131 0 140 #83008c - 138 0 148 #8a0094 - 144 0 154 #90009a - 150 0 162 #9600a2 - 158 0 170 #9e00aa - 164 0 177 #a400b1 - 97 97 97 #616161 - 107 93 108 #6b5d6c - 115 89 116 #735974 - 122 85 124 #7a557c - 129 80 133 #815085 - 136 74 140 #884a8c - 143 67 148 #8f4394 - 150 58 157 #963a9d - 158 46 165 #9e2ea5 - 165 28 173 #a51cad - 172 0 181 #ac00b5 - 178 0 188 #b200bc - 184 0 195 #b800c3 - 192 0 203 #c000cb - 122 122 122 #7a7a7a - 131 120 131 #837883 - 140 116 140 #8c748c - 148 111 149 #946f95 - 156 106 158 #9c6a9e - 163 101 166 #a365a6 - 171 94 175 #ab5eaf - 178 87 182 #b257b6 - 185 79 190 #b94fbe - 193 69 199 #c145c7 - 200 56 207 #c838cf - 208 34 216 #d022d8 - 214 0 223 #d600df - 222 0 231 #de00e7 - 148 148 148 #949494 - 158 146 157 #9e929d - 166 142 165 #a68ea5 - 174 137 175 #ae89af - 182 133 183 #b685b7 - 190 127 192 #be7fc0 - 198 122 200 #c67ac8 - 206 115 209 #ce73d1 - 214 108 218 #d66cda - 221 99 226 #dd63e2 - 230 87 236 #e657ec - 239 73 246 #ef49f6 - 247 54 254 #f736fe - 174 174 174 #aeaeae - 183 173 183 #b7adb7 - 192 169 191 #c0a9bf - 201 164 200 #c9a4c8 - 209 159 210 #d19fd2 - 219 154 219 #db9adb - 226 148 228 #e294e4 - 235 141 237 #eb8ded - 244 134 246 #f486f6 - 253 125 255 #fd7dff - 255 115 255 #ff73ff - 255 102 255 #ff66ff - 255 86 255 #ff56ff - 200 200 200 #c8c8c8 - 209 200 208 #d1c8d0 - 219 195 218 #dbc3da - 228 191 227 #e4bfe3 - 239 185 238 #efb9ee - 248 179 247 #f8b3f7 - 255 173 255 #ffadff - 255 166 255 #ffa6ff - 227 227 227 #e3e3e3 - 236 227 235 #ece3eb - 248 222 246 #f8def6 - 255 217 255 #ffd9ff - 29 29 29 #1d1d1d - 40 24 39 #281827 - 46 19 46 #2e132e - 52 11 52 #340b34 - 58 1 58 #3a013a - 63 0 64 #3f0040 - 69 0 70 #450046 - 75 0 77 #4b004d - 81 0 83 #510053 - 86 0 88 #560058 - 92 0 95 #5c005f - 98 0 101 #620065 - 49 49 49 #313131 - 61 45 59 #3d2d3b - 68 41 65 #442941 - 75 35 71 #4b2347 - 83 26 79 #531a4f - 89 14 85 #590e55 - 96 0 92 #60005c - 103 0 99 #670063 - 110 0 106 #6e006a - 117 0 112 #750070 - 123 0 119 #7b0077 - 131 0 126 #83007e - 139 0 135 #8b0087 - 147 0 143 #93008f - 72 72 72 #484848 - 85 68 82 #554452 - 94 62 89 #5e3e59 - 102 57 96 #663960 - 111 49 103 #6f3167 - 119 40 110 #77286e - 127 25 118 #7f1976 - 134 0 124 #86007c - 141 0 130 #8d0082 - 148 0 138 #94008a - 155 0 143 #9b008f - 162 0 150 #a20096 - 169 0 157 #a9009d - 176 0 164 #b000a4 - 97 97 97 #616161 - 109 93 105 #6d5d69 - 119 88 112 #775870 - 128 83 119 #805377 - 136 77 126 #884d7e - 144 70 132 #904684 - 153 61 139 #993d8b - 161 51 146 #a13392 - 168 37 152 #a82598 - 177 0 160 #b100a0 - 186 0 168 #ba00a8 - 192 0 173 #c000ad - 199 0 179 #c700b3 - 207 0 186 #cf00ba - 122 122 122 #7a7a7a - 133 119 130 #857782 - 144 115 136 #907388 - 154 109 143 #9a6d8f - 164 103 151 #a46797 - 172 97 157 #ac619d - 181 89 164 #b559a4 - 190 81 171 #be51ab - 198 71 177 #c647b1 - 206 58 184 #ce3ab8 - 215 38 191 #d726bf - 223 0 197 #df00c5 - 230 0 204 #e600cc - 240 0 212 #f000d4 - 148 148 148 #949494 - 160 146 155 #a0929b - 169 141 162 #a98da2 - 180 136 169 #b488a9 - 190 130 176 #be82b0 - 199 124 183 #c77cb7 - 209 117 189 #d175bd - 218 109 197 #da6dc5 - 227 101 203 #e365cb - 235 91 210 #eb5bd2 - 245 77 218 #f54dda - 254 59 225 #fe3be1 - 255 31 233 #ff1fe9 - 255 0 241 #ff00f1 - 174 174 174 #aeaeae - 185 172 181 #b9acb5 - 196 168 188 #c4a8bc - 207 162 195 #cfa2c3 - 218 157 202 #da9dca - 228 150 209 #e496d1 - 238 144 216 #ee90d8 - 248 137 223 #f889df - 255 127 231 #ff7fe7 - 255 117 239 #ff75ef - 255 105 246 #ff69f6 - 255 89 255 #ff59ff - 255 70 255 #ff46ff - 200 200 200 #c8c8c8 - 210 200 207 #d2c8cf - 223 195 214 #dfc3d6 - 235 189 221 #ebbddd - 247 183 229 #f7b7e5 - 255 176 237 #ffb0ed - 255 169 244 #ffa9f4 - 255 160 253 #ffa0fd - 227 227 227 #e3e3e3 - 238 227 234 #eee3ea - 252 221 242 #fcddf2 - 255 215 249 #ffd7f9 - 29 29 29 #1d1d1d - 41 23 38 #291726 - 48 18 44 #30122c - 54 10 49 #360a31 - 61 0 55 #3d0037 - 67 0 61 #43003d - 72 0 66 #480042 - 79 0 72 #4f0048 - 85 0 78 #55004e - 90 0 83 #5a0053 - 49 49 49 #313131 - 63 44 56 #3f2c38 - 71 40 61 #47283d - 79 33 66 #4f2142 - 88 23 72 #581748 - 95 5 78 #5f054e - 103 0 83 #670053 - 111 0 89 #6f0059 - 119 0 95 #77005f - 126 0 101 #7e0065 - 133 0 106 #85006a - 72 72 72 #484848 - 87 67 79 #57434f - 98 61 84 #623d54 - 108 55 89 #6c3759 - 117 46 94 #752e5e - 126 34 100 #7e2264 - 135 15 105 #870f69 - 143 0 110 #8f006e - 152 0 115 #980073 - 160 0 121 #a00079 - 167 0 125 #a7007d - 176 0 131 #b00083 - 184 0 136 #b80088 - 97 97 97 #616161 - 111 93 103 #6f5d67 - 122 87 108 #7a576c - 133 81 113 #855171 - 143 74 117 #8f4a75 - 152 66 122 #98427a - 162 56 127 #a2387f - 170 43 132 #aa2b84 - 179 22 137 #b31689 - 188 0 142 #bc008e - 198 0 148 #c60094 - 206 0 153 #ce0099 - 214 0 158 #d6009e - 221 0 163 #dd00a3 - 122 122 122 #7a7a7a - 135 119 127 #87777f - 147 114 132 #937284 - 159 108 137 #9f6c89 - 171 100 142 #ab648e - 180 94 147 #b45e93 - 191 85 152 #bf5598 - 200 75 157 #c84b9d - 209 62 161 #d13ea1 - 218 45 166 #da2da6 - 227 10 171 #e30aab - 237 0 177 #ed00b1 - 244 0 181 #f400b5 - 253 0 186 #fd00ba - 148 148 148 #949494 - 161 145 153 #a19199 - 173 140 157 #ad8c9d - 186 134 162 #ba86a2 - 196 128 166 #c480a6 - 207 122 171 #cf7aab - 218 114 176 #da72b0 - 229 105 181 #e569b5 - 239 94 186 #ef5eba - 249 82 191 #f952bf - 255 64 197 #ff40c5 - 255 42 201 #ff2ac9 - 255 0 207 #ff00cf - 255 0 212 #ff00d4 - 174 174 174 #aeaeae - 187 172 179 #bbacb3 - 200 167 183 #c8a7b7 - 213 161 188 #d5a1bc - 225 154 192 #e19ac0 - 237 148 197 #ed94c5 - 248 140 202 #f88cca - 255 132 207 #ff84cf - 255 121 213 #ff79d5 - 255 108 218 #ff6cda - 255 92 224 #ff5ce0 - 255 75 230 #ff4be6 - 200 200 200 #c8c8c8 - 212 199 205 #d4c7cd - 226 194 209 #e2c2d1 - 241 187 213 #f1bbd5 - 255 181 218 #ffb5da - 255 174 223 #ffaedf - 255 165 229 #ffa5e5 - 255 155 234 #ff9bea - 227 227 227 #e3e3e3 - 239 227 232 #efe3e8 - 255 221 237 #ffdded - 255 214 241 #ffd6f1 - 29 29 29 #1d1d1d - 43 23 36 #2b1724 - 50 17 41 #321129 - 57 8 46 #39082e - 64 0 51 #400033 - 70 0 55 #460037 - 77 0 60 #4d003c - 83 0 65 #530041 - 49 49 49 #313131 - 64 44 54 #402c36 - 73 39 58 #49273a - 82 32 61 #52203d - 91 20 66 #5b1442 - 100 0 70 #640046 - 108 0 75 #6c004b - 116 0 80 #740050 - 125 0 84 #7d0054 - 132 0 88 #840058 - 72 72 72 #484848 - 89 67 76 #59434c - 101 60 79 #653c4f - 112 53 82 #703552 - 122 43 85 #7a2b55 - 132 30 89 #841e59 - 141 4 92 #8d045c - 150 0 97 #960061 - 159 0 101 #9f0065 - 167 0 105 #a70069 - 175 0 108 #af006c - 97 97 97 #616161 - 113 92 100 #715c64 - 126 86 102 #7e5666 - 138 79 104 #8a4f68 - 149 71 107 #95476b - 159 63 109 #9f3f6d - 169 51 112 #a93370 - 179 35 115 #b32373 - 188 0 118 #bc0076 - 198 0 122 #c6007a - 208 0 126 #d0007e - 216 0 129 #d80081 - 226 0 133 #e20085 - 122 122 122 #7a7a7a - 137 119 125 #89777d - 151 113 126 #97717e - 164 106 128 #a46a80 - 177 99 130 #b16382 - 188 91 132 #bc5b84 - 200 80 135 #c85087 - 210 69 137 #d24589 - 220 53 140 #dc358c - 230 29 143 #e61d8f - 240 0 145 #f00091 - 249 0 148 #f90094 - 255 0 152 #ff0098 - 255 0 155 #ff009b - 148 148 148 #949494 - 163 145 150 #a39196 - 177 140 152 #b18c98 - 191 133 153 #bf8599 - 203 127 155 #cb7f9b - 214 120 157 #d6789d - 227 111 159 #e36f9f - 238 100 162 #ee64a2 - 249 88 164 #f958a4 - 255 74 167 #ff4aa7 - 255 48 170 #ff30aa - 255 7 172 #ff07ac - 255 0 175 #ff00af - 174 174 174 #aeaeae - 188 172 177 #bcacb1 - 203 166 178 #cba6b2 - 218 160 179 #daa0b3 - 232 153 181 #e899b5 - 244 146 182 #f492b6 - 255 137 184 #ff89b8 - 255 127 187 #ff7fbb - 255 115 189 #ff73bd - 255 101 192 #ff65c0 - 255 87 195 #ff57c3 - 200 200 200 #c8c8c8 - 213 199 203 #d5c7cb - 230 193 204 #e6c1cc - 246 186 205 #f6bacd - 255 179 207 #ffb3cf - 255 171 208 #ffabd0 - 255 161 211 #ffa1d3 - 227 227 227 #e3e3e3 - 241 226 230 #f1e2e6 - 255 220 231 #ffdce7 - 255 212 232 #ffd4e8 - 29 29 29 #1d1d1d - 44 23 34 #2c1722 - 52 16 38 #341026 - 59 6 42 #3b062a - 66 0 46 #42002e - 74 0 50 #4a0032 - 81 0 54 #510036 - 87 0 58 #57003a - 49 49 49 #313131 - 65 44 52 #412c34 - 75 38 55 #4b2637 - 84 31 57 #541f39 - 94 19 60 #5e133c - 103 0 63 #67003f - 112 0 67 #700043 - 120 0 71 #780047 - 128 0 74 #80004a - 72 72 72 #484848 - 90 67 73 #5a4349 - 103 60 74 #673c4a - 115 52 75 #73344b - 126 42 77 #7e2a4d - 136 27 78 #881b4e - 146 0 80 #920050 - 156 0 83 #9c0053 - 165 0 85 #a50055 - 174 0 88 #ae0058 - 97 97 97 #616161 - 114 92 97 #725c61 - 128 86 97 #805661 - 141 79 97 #8d4f61 - 153 70 98 #994662 - 163 61 98 #a33d62 - 174 48 100 #ae3064 - 184 29 101 #b81d65 - 194 0 103 #c20067 - 204 0 105 #cc0069 - 215 0 107 #d7006b - 223 0 109 #df006d - 122 122 122 #7a7a7a - 138 119 123 #8a777b - 153 113 122 #99717a - 167 106 122 #a76a7a - 181 98 122 #b5627a - 192 89 122 #c0597a - 204 78 122 #cc4e7a - 214 66 123 #d6427b - 225 49 124 #e1317c - 235 18 125 #eb127d - 246 0 127 #f6007f - 255 0 128 #ff0080 - 255 0 130 #ff0082 - 255 0 132 #ff0084 - 148 148 148 #949494 - 164 145 149 #a49195 - 179 139 148 #b38b94 - 194 132 147 #c28493 - 206 126 146 #ce7e92 - 219 118 146 #db7692 - 231 109 146 #e76d92 - 243 98 147 #f36293 - 255 84 148 #ff5494 - 255 69 149 #ff4595 - 255 41 150 #ff2996 - 255 0 151 #ff0097 - 174 174 174 #aeaeae - 189 172 175 #bdacaf - 205 166 174 #cda6ae - 221 159 173 #dd9fad - 235 152 172 #eb98ac - 248 145 172 #f891ac - 255 135 172 #ff87ac - 255 124 172 #ff7cac - 255 112 172 #ff70ac - 255 97 174 #ff61ae - 200 200 200 #c8c8c8 - 214 199 202 #d6c7ca - 232 193 200 #e8c1c8 - 249 186 199 #f9bac7 - 255 178 198 #ffb2c6 - 255 170 197 #ffaac5 - 255 159 197 #ff9fc5 - 227 227 227 #e3e3e3 - 242 226 229 #f2e2e5 - 255 219 227 #ffdbe3 - 255 212 225 #ffd4e1 -- cgit v1.2.3 From 312bec37e3f38e950895be84cb116cc77b2aab6b Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Fri, 23 Jun 2017 09:15:32 -0400 Subject: add Munsell palette formated to show hue pages --- share/palettes/MunsellChart.gpl | 5418 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 5418 insertions(+) create mode 100644 share/palettes/MunsellChart.gpl diff --git a/share/palettes/MunsellChart.gpl b/share/palettes/MunsellChart.gpl new file mode 100644 index 000000000..23e9b6245 --- /dev/null +++ b/share/palettes/MunsellChart.gpl @@ -0,0 +1,5418 @@ +GIMP Palette +Name: MunsellChart +Columns: 15 +# + 0 0 0 #000000 + 29 29 29 #1d1d1d + 49 49 49 #313131 + 72 72 72 #484848 + 97 97 97 #616161 + 122 122 122 #7a7a7a + 148 148 148 #949494 + 174 174 174 #aeaeae + 200 200 200 #c8c8c8 + 227 227 227 #e3e3e3 + 255 255 255 #ffffff + 255 255 255 #ffffff + 255 255 255 #ffffff + 255 255 255 #ffffff + 227 227 227 #e3e3e3 + 242 226 227 #f2e2e3 + 255 219 222 #ffdbde + 255 211 218 #ffd3da + 255 204 214 #ffccd6 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 215 199 200 #d7c7c8 + 234 192 196 #eac0c4 + 251 186 192 #fbbac0 + 255 178 188 #ffb2bc + 255 169 185 #ffa9b9 + 255 157 181 #ff9db5 + 255 148 177 #ff94b1 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 190 171 173 #beabad + 207 166 170 #cfa6aa + 223 159 166 #df9fa6 + 238 152 163 #ee98a3 + 252 144 160 #fc90a0 + 255 134 157 #ff869d + 255 123 154 #ff7b9a + 255 110 152 #ff6e98 + 255 96 149 #ff6095 + 255 82 147 #ff5293 + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 165 145 147 #a59193 + 181 139 143 #b58b8f + 196 132 140 #c4848c + 209 126 138 #d17e8a + 222 117 135 #de7587 + 235 108 133 #eb6c85 + 247 97 131 #f76183 + 255 82 129 #ff5281 + 255 65 127 #ff417f + 255 39 127 #ff277f + 255 0 126 #ff007e + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 139 118 121 #8b7679 + 155 112 118 #9b7076 + 169 105 115 #a96973 + 183 97 113 #b76171 + 195 89 111 #c3596f + 208 77 109 #d04d6d + 218 65 108 #da416c + 230 45 107 #e62d6b + 240 3 106 #f0036a + 252 0 105 #fc0069 + 255 0 105 #ff0069 + 255 0 104 #ff0068 + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 97 97 97 #616161 + 115 92 95 #735c5f + 130 86 93 #82565d + 143 78 91 #8f4e5b + 155 70 89 #9b4659 + 166 60 88 #a63c58 + 177 46 87 #b12e57 + 188 23 86 #bc1756 + 198 0 86 #c60056 + 209 0 86 #d10056 + 219 0 86 #db0056 + 227 0 87 #e30057 + 237 0 88 #ed0058 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 91 66 71 #5b4247 + 105 60 69 #693c45 + 117 52 68 #753444 + 128 40 67 #802843 + 139 24 67 #8b1843 + 150 0 67 #960043 + 159 0 67 #9f0043 + 170 0 68 #aa0044 + 179 0 68 #b30044 + 188 0 70 #bc0046 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 65 44 50 #412c32 + 76 38 51 #4c2633 + 86 30 52 #561e34 + 96 17 54 #601136 + 105 0 56 #690038 + 115 0 59 #73003b + 124 0 61 #7c003d + 133 0 64 #850040 + 141 0 67 #8d0043 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 44 22 32 #2c1620 + 53 15 35 #350f23 + 61 5 38 #3d0526 + 69 0 41 #450029 + 76 0 44 #4c002c + 83 0 48 #530030 + 90 0 52 #5a0034 + 96 0 55 #600037 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 243 226 226 #f3e2e2 + 255 219 218 #ffdbda + 255 211 211 #ffd3d3 + 255 204 205 #ffcccd + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 216 199 199 #d8c7c7 + 236 192 192 #ecc0c0 + 253 185 186 #fdb9ba + 255 177 179 #ffb1b3 + 255 169 173 #ffa9ad + 255 158 166 #ff9ea6 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 191 171 171 #bfabab + 208 165 166 #d0a5a6 + 224 159 160 #e09fa0 + 240 152 155 #f0989b + 254 144 149 #fe9095 + 255 134 143 #ff868f + 255 123 139 #ff7b8b + 255 110 134 #ff6e86 + 255 98 130 #ff6282 + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 165 145 145 #a59191 + 182 139 140 #b68b8c + 198 132 134 #c68486 + 211 125 129 #d37d81 + 225 117 125 #e1757d + 238 107 120 #ee6b78 + 249 97 116 #f96174 + 255 82 112 #ff5270 + 255 65 108 #ff416c + 255 42 105 #ff2a69 + 255 0 103 #ff0067 + 255 0 102 #ff0066 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 140 118 119 #8c7677 + 156 112 114 #9c7072 + 171 105 109 #ab696d + 184 97 105 #b86169 + 197 88 100 #c55864 + 210 76 96 #d24c60 + 220 65 93 #dc415d + 232 45 90 #e82d5a + 243 0 87 #f30057 + 255 0 85 #ff0055 + 255 0 84 #ff0054 + 255 0 83 #ff0053 + 255 0 82 #ff0052 + 255 0 81 #ff0051 + 97 97 97 #616161 + 116 92 93 #745c5d + 131 86 89 #835659 + 144 78 85 #904e55 + 157 70 81 #9d4651 + 168 60 78 #a83c4e + 179 46 75 #b32e4b + 190 21 72 #be1548 + 200 0 70 #c80046 + 211 0 68 #d30044 + 221 0 65 #dd0041 + 230 0 65 #e60041 + 239 0 62 #ef003e + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 92 66 68 #5c4244 + 106 60 65 #6a3c41 + 118 52 61 #76343d + 130 40 58 #82283a + 141 23 56 #8d1738 + 152 0 54 #980036 + 161 0 52 #a10034 + 171 0 51 #ab0033 + 181 0 50 #b50032 + 193 0 50 #c10032 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 66 44 48 #422c30 + 77 38 47 #4d262f + 87 30 47 #571e2f + 98 15 47 #620f2f + 108 0 47 #6c002f + 118 0 48 #760030 + 128 0 49 #800031 + 137 0 50 #890032 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 45 22 30 #2d161e + 54 15 31 #360f1f + 63 3 33 #3f0321 + 71 0 35 #470023 + 78 0 37 #4e0025 + 87 0 40 #570028 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 244 226 224 #f4e2e0 + 255 219 213 #ffdbd5 + 255 211 203 #ffd3cb + 255 203 196 #ffcbc4 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 217 199 197 #d9c7c5 + 237 192 188 #edc0bc + 255 185 179 #ffb9b3 + 255 177 170 #ffb1aa + 255 169 162 #ffa9a2 + 255 158 152 #ff9e98 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 192 171 170 #c0abaa + 210 165 162 #d2a5a2 + 226 159 154 #e29f9a + 242 152 146 #f29892 + 255 144 139 #ff908b + 255 134 130 #ff8682 + 255 124 123 #ff7c7b + 255 112 115 #ff7073 + 255 100 109 #ff646d + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 166 145 143 #a6918f + 183 139 136 #b78b88 + 199 132 128 #c78480 + 212 125 121 #d47d79 + 226 117 114 #e27572 + 239 108 107 #ef6c6b + 251 98 100 #fb6264 + 255 84 92 #ff545c + 255 68 85 #ff4455 + 255 49 80 #ff3150 + 255 10 75 #ff0a4b + 255 0 72 #ff0048 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 140 118 117 #8c7675 + 157 112 110 #9d706e + 172 105 102 #ac6966 + 186 98 95 #ba625f + 198 88 88 #c65858 + 211 77 81 #d34d51 + 221 66 75 #dd424b + 233 47 68 #e92f44 + 244 8 62 #f4083e + 253 0 57 #fd0039 + 255 0 52 #ff0034 + 255 0 49 #ff0031 + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 97 97 97 #616161 + 116 92 91 #745c5b + 132 85 84 #845554 + 145 79 77 #914f4d + 158 70 71 #9e4647 + 169 60 65 #a93c41 + 179 48 59 #b3303b + 190 26 52 #be1a34 + 200 0 47 #c8002f + 211 0 41 #d30029 + 220 0 37 #dc0025 + 228 0 33 #e40021 + 237 0 29 #ed001d + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 92 67 66 #5c4342 + 107 60 60 #6b3c3c + 118 52 55 #763437 + 130 42 49 #822a31 + 141 25 44 #8d192c + 152 0 40 #980028 + 161 0 37 #a10025 + 171 0 33 #ab0021 + 182 0 31 #b6001f + 193 0 30 #c1001e + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 66 44 46 #422c2e + 78 38 43 #4e262b + 88 29 41 #581d29 + 99 14 38 #630e26 + 110 0 37 #6e0025 + 119 0 36 #770024 + 129 0 36 #810024 + 139 0 36 #8b0024 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 46 22 28 #2e161c + 55 15 27 #370f1b + 64 2 28 #40021c + 72 0 28 #48001c + 80 0 29 #50001d + 89 0 31 #59001f + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 245 226 222 #f5e2de + 255 218 208 #ffdad0 + 255 212 194 #ffd4c2 + 255 204 183 #ffccb7 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 217 199 195 #d9c7c3 + 239 192 183 #efc0b7 + 255 185 171 #ffb9ab + 255 178 159 #ffb29f + 255 170 147 #ffaa93 + 255 161 133 #ffa185 + 255 152 124 #ff987c + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 193 171 167 #c1aba7 + 211 165 157 #d3a59d + 227 159 147 #e39f93 + 243 152 135 #f39887 + 255 145 125 #ff917d + 255 136 113 #ff8871 + 255 127 101 #ff7f65 + 255 117 88 #ff7558 + 255 107 79 #ff6b4f + 255 96 69 #ff6045 + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 167 144 141 #a7908d + 184 139 131 #b88b83 + 199 133 122 #c7857a + 213 126 111 #d57e6f + 227 118 100 #e37664 + 239 110 90 #ef6e5a + 250 100 78 #fa644e + 255 89 66 #ff5942 + 255 76 52 #ff4c34 + 255 62 41 #ff3e29 + 255 41 20 #ff2914 + 255 13 0 #ff0d00 + 255 0 0 #ff0000 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 141 118 115 #8d7673 + 158 112 106 #9e706a + 172 106 96 #ac6a60 + 186 98 86 #ba6256 + 198 90 75 #c65a4b + 210 80 65 #d25041 + 220 69 55 #dc4537 + 231 54 43 #e7362b + 240 32 31 #f0201f + 249 0 16 #f90010 + 255 0 0 #ff0000 + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 97 97 97 #616161 + 116 92 89 #745c59 + 132 86 80 #845650 + 145 79 71 #914f47 + 158 71 62 #9e473e + 168 62 53 #a83e35 + 178 51 44 #b2332c + 188 34 34 #bc2222 + 198 0 24 #c60018 + 207 0 11 #cf000b + 217 0 0 #d90000 + 224 0 0 #e00000 + 234 0 0 #ea0000 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 92 67 64 #5c4340 + 106 60 56 #6a3c38 + 118 53 48 #763530 + 129 43 40 #812b28 + 140 29 31 #8c1d1f + 151 0 23 #970017 + 160 0 16 #a00010 + 169 0 8 #a90008 + 180 0 0 #b40000 + 192 0 0 #c00000 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 67 44 44 #432c2c + 79 38 39 #4f2627 + 89 30 34 #591e22 + 99 17 29 #63111d + 110 0 25 #6e0019 + 119 0 22 #770016 + 129 0 20 #810014 + 139 0 18 #8b0012 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 46 22 26 #2e161a + 56 15 24 #380f18 + 65 2 22 #410216 + 73 0 22 #490016 + 81 0 22 #510016 + 90 0 22 #5a0016 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 246 226 219 #f6e2db + 255 219 201 #ffdbc9 + 255 213 186 #ffd5ba + 255 205 171 #ffcdab + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 218 199 193 #dac7c1 + 240 192 177 #f0c0b1 + 255 186 162 #ffbaa2 + 255 180 147 #ffb493 + 255 173 132 #ffad84 + 255 165 114 #ffa572 + 255 158 97 #ff9e61 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 193 171 165 #c1aba5 + 211 166 151 #d3a697 + 227 160 138 #e3a08a + 242 154 123 #f29a7b + 254 147 110 #fe936e + 255 140 92 #ff8c5c + 255 132 74 #ff844a + 255 124 51 #ff7c33 + 255 118 29 #ff761d + 255 110 0 #ff6e00 + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 168 145 138 #a8918a + 185 139 125 #b98b7d + 199 134 113 #c78671 + 212 127 99 #d47f63 + 225 120 84 #e17854 + 236 113 68 #ec7144 + 247 105 49 #f76931 + 255 98 22 #ff6216 + 255 89 0 #ff5900 + 255 79 0 #ff4f00 + 255 69 0 #ff4500 + 255 59 0 #ff3b00 + 255 48 0 #ff3000 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 141 119 113 #8d7771 + 158 113 100 #9e7164 + 172 107 87 #ac6b57 + 185 100 73 #b96449 + 197 93 58 #c55d3a + 207 85 41 #cf5529 + 215 77 20 #d74d14 + 223 69 0 #df4500 + 230 58 0 #e63a00 + 238 44 0 #ee2c00 + 245 20 0 #f51400 + 252 0 0 #fc0000 + 255 0 0 #ff0000 + 122 122 122 #7a7a7a + 97 97 97 #616161 + 117 92 87 #755c57 + 132 86 75 #84564b + 144 80 64 #905040 + 156 73 51 #9c4933 + 166 65 37 #a64125 + 175 57 19 #af3913 + 183 46 0 #b72e00 + 190 34 0 #be2200 + 198 6 0 #c60600 + 204 0 0 #cc0000 + 212 0 0 #d40000 + 219 0 0 #db0000 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 92 67 62 #5c433e + 106 61 52 #6a3d34 + 117 54 42 #75362a + 128 46 31 #802e1f + 138 34 18 #8a2212 + 147 14 0 #930e00 + 156 0 0 #9c0000 + 165 0 0 #a50000 + 174 0 0 #ae0000 + 184 0 0 #b80000 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 66 45 42 #422d2a + 78 38 34 #4e2622 + 88 31 27 #581f1b + 99 19 19 #631313 + 108 0 11 #6c000b + 118 0 4 #760004 + 128 0 0 #800000 + 137 0 0 #890000 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 46 23 23 #2e1717 + 57 14 19 #390e13 + 65 3 16 #410310 + 74 0 13 #4a000d + 82 0 11 #52000b + 90 0 10 #5a000a + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 247 226 216 #f7e2d8 + 255 220 195 #ffdcc3 + 255 215 176 #ffd7b0 + 255 208 157 #ffd09d + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 219 199 189 #dbc7bd + 239 193 170 #efc1aa + 254 188 154 #febc9a + 255 182 135 #ffb687 + 255 177 117 #ffb175 + 255 171 96 #ffab60 + 255 165 72 #ffa548 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 194 171 162 #c2aba2 + 210 167 146 #d2a792 + 226 161 129 #e2a181 + 239 156 113 #ef9c71 + 250 151 96 #fa9760 + 255 145 74 #ff914a + 255 139 45 #ff8b2d + 255 135 0 #ff8700 + 255 131 0 #ff8300 + 255 128 0 #ff8000 + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 168 145 135 #a89187 + 183 140 120 #b78c78 + 198 135 104 #c68768 + 210 130 89 #d28259 + 221 124 70 #dd7c46 + 230 119 48 #e67730 + 238 114 13 #ee720d + 244 110 0 #f46e00 + 248 106 0 #f86a00 + 253 102 0 #fd6600 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 141 119 110 #8d776e + 156 114 95 #9c725f + 170 108 80 #aa6c50 + 182 103 62 #b6673e + 192 97 43 #c0612b + 199 92 17 #c75c11 + 205 88 0 #cd5800 + 209 85 0 #d15500 + 214 80 0 #d65000 + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 97 97 97 #616161 + 116 93 84 #745d54 + 131 87 70 #835746 + 142 82 56 #8e5238 + 152 77 39 #984d27 + 160 71 17 #a04711 + 166 67 0 #a64300 + 172 61 0 #ac3d00 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 91 68 60 #5b443c + 104 62 47 #683e2f + 114 57 33 #723921 + 123 51 15 #7b330f + 130 45 0 #822d00 + 138 36 0 #8a2400 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 66 45 40 #422d28 + 78 39 30 #4e271e + 87 33 18 #572112 + 97 24 1 #611801 + 105 7 0 #690700 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 46 23 20 #2e1714 + 57 15 11 #390f0b + 65 5 5 #410505 + 73 0 0 #490000 + 82 0 0 #520000 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 247 226 211 #f7e2d3 + 255 222 188 #ffdebc + 255 217 168 #ffd9a8 + 255 213 147 #ffd593 + 255 208 126 #ffd07e + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 219 199 185 #dbc7b9 + 236 195 165 #ecc3a5 + 250 190 146 #fabe92 + 255 186 124 #ffba7c + 255 182 103 #ffb667 + 255 178 78 #ffb24e + 255 174 46 #ffae2e + 255 170 0 #ffaa00 + 255 168 0 #ffa800 + 255 166 0 #ffa600 + 255 165 0 #ffa500 + 255 163 0 #ffa300 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 194 172 158 #c2ac9e + 209 168 140 #d1a88c + 222 164 121 #dea479 + 233 160 102 #e9a066 + 243 155 80 #f39b50 + 253 151 53 #fd9735 + 255 148 4 #ff9404 + 255 145 0 #ff9100 + 255 143 0 #ff8f00 + 255 142 0 #ff8e00 + 255 140 0 #ff8c00 + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 167 145 132 #a79184 + 181 141 115 #b58d73 + 194 137 96 #c28960 + 205 133 76 #cd854c + 214 129 54 #d68136 + 222 125 23 #de7d17 + 227 122 0 #e37a00 + 231 120 0 #e77800 + 234 118 0 #ea7600 + 237 116 0 #ed7400 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 140 119 107 #8c776b + 154 115 90 #9a735a + 167 111 71 #a76f47 + 177 106 51 #b16a33 + 184 102 27 #b8661b + 190 99 0 #be6300 + 195 97 0 #c36100 + 199 94 0 #c75e00 + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 97 97 97 #616161 + 115 93 81 #735d51 + 129 89 64 #815940 + 138 85 48 #8a5530 + 147 81 28 #93511c + 153 77 0 #994d00 + 158 74 0 #9e4a00 + 163 70 0 #a34600 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 90 68 58 #5a443a + 101 64 43 #65402b + 110 60 25 #6e3c19 + 117 56 0 #753800 + 123 52 0 #7b3400 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 65 46 38 #412e26 + 75 41 24 #4b2918 + 84 36 4 #542404 + 92 30 0 #5c1e00 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 45 24 16 #2d1810 + 56 17 1 #381101 + 63 10 0 #3f0a00 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 247 227 207 #f7e3cf + 255 223 183 #ffdfb7 + 255 220 160 #ffdca0 + 255 217 137 #ffd989 + 255 214 113 #ffd671 + 255 211 89 #ffd359 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 219 200 181 #dbc8b5 + 233 196 160 #e9c4a0 + 246 193 139 #f6c18b + 255 189 115 #ffbd73 + 255 187 91 #ffbb5b + 255 184 62 #ffb83e + 255 181 9 #ffb509 + 255 179 0 #ffb300 + 255 178 0 #ffb200 + 255 177 0 #ffb100 + 255 176 0 #ffb000 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 192 173 155 #c0ad9b + 206 169 135 #cea987 + 218 166 114 #daa672 + 228 163 92 #e4a35c + 236 160 67 #eca043 + 243 157 31 #f39d1f + 248 155 0 #f89b00 + 252 153 0 #fc9900 + 254 152 0 #fe9800 + 255 152 0 #ff9800 + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 166 146 130 #a69282 + 179 143 110 #b38f6e + 190 139 89 #be8b59 + 200 136 66 #c88842 + 207 133 38 #cf8526 + 212 131 0 #d48300 + 216 129 0 #d88100 + 219 128 0 #db8000 + 221 127 0 #dd7f00 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 139 120 105 #8b7869 + 152 116 85 #987455 + 163 113 64 #a37140 + 171 110 40 #ab6e28 + 177 108 3 #b16c03 + 181 106 0 #b56a00 + 184 104 0 #b86800 + 187 103 0 #bb6700 + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 97 97 97 #616161 + 114 94 79 #725e4f + 126 90 59 #7e5a3b + 134 87 41 #865729 + 141 85 15 #8d550f + 146 82 0 #925200 + 149 81 0 #955100 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 88 69 56 #584538 + 98 66 39 #624227 + 106 63 18 #6a3f12 + 111 60 0 #6f3c00 + 116 58 0 #743a00 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 63 47 36 #3f2f24 + 72 43 18 #482b12 + 80 40 0 #502800 + 85 37 0 #552500 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 43 25 13 #2b190d + 53 20 0 #351400 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 245 228 203 #f5e4cb + 255 226 177 #ffe2b1 + 255 223 153 #ffdf99 + 255 221 127 #ffdd7f + 255 219 99 #ffdb63 + 255 217 72 #ffd948 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 217 200 178 #d9c8b2 + 229 198 155 #e5c69b + 239 196 131 #efc483 + 249 194 105 #f9c269 + 255 192 79 #ffc04f + 255 190 43 #ffbe2b + 255 188 0 #ffbc00 + 255 187 0 #ffbb00 + 255 186 0 #ffba00 + 255 185 0 #ffb900 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 190 174 152 #beae98 + 202 171 129 #caab81 + 212 169 106 #d4a96a + 220 167 82 #dca752 + 227 165 53 #e3a535 + 233 163 0 #e9a300 + 237 161 0 #eda100 + 239 161 0 #efa100 + 241 160 0 #f1a000 + 242 160 0 #f2a000 + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 164 147 127 #a4937f + 175 145 105 #af9169 + 185 142 81 #b98e51 + 192 140 56 #c08c38 + 198 138 19 #c68a13 + 202 137 0 #ca8900 + 205 136 0 #cd8800 + 207 135 0 #cf8700 + 209 134 0 #d18600 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 137 121 102 #897966 + 148 118 80 #947650 + 158 116 56 #9e7438 + 164 114 28 #a4721c + 168 112 0 #a87000 + 171 111 0 #ab6f00 + 174 110 0 #ae6e00 + 176 109 0 #b06d00 + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 97 97 97 #616161 + 112 95 76 #705f4c + 122 92 55 #7a5c37 + 129 90 34 #815a22 + 134 88 0 #865800 + 138 87 0 #8a5700 + 141 86 0 #8d5600 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 86 70 54 #564636 + 94 68 35 #5e4423 + 101 66 9 #654209 + 105 64 0 #694000 + 110 62 0 #6e3e00 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 61 47 34 #3d2f22 + 69 45 14 #452d0e + 76 43 0 #4c2b00 + 80 41 0 #502900 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 41 26 10 #291a0a + 50 22 0 #321600 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 242 229 200 #f2e5c8 + 252 228 173 #fce4ad + 255 227 147 #ffe393 + 255 225 120 #ffe178 + 255 224 92 #ffe05c + 255 223 55 #ffdf37 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 214 202 175 #d6caaf + 224 200 151 #e0c897 + 232 199 125 #e8c77d + 240 198 98 #f0c662 + 246 196 68 #f6c444 + 251 195 18 #fbc312 + 255 194 0 #ffc200 + 255 193 0 #ffc100 + 255 192 0 #ffc000 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 187 175 150 #bbaf96 + 197 173 125 #c5ad7d + 206 172 100 #ceac64 + 212 170 73 #d4aa49 + 218 169 38 #daa926 + 222 168 0 #dea800 + 225 167 0 #e1a700 + 227 167 0 #e3a700 + 228 166 0 #e4a600 + 229 166 0 #e5a600 + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 161 148 124 #a1947c + 170 147 101 #aa9365 + 178 145 75 #b2914b + 184 144 46 #b8902e + 189 143 0 #bd8f00 + 192 142 0 #c08e00 + 194 141 0 #c28d00 + 196 141 0 #c48d00 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 135 122 100 #877a64 + 144 120 76 #90784c + 151 119 49 #977731 + 156 118 16 #9c7610 + 159 117 0 #9f7500 + 162 116 0 #a27400 + 164 115 0 #a47300 + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 97 97 97 #616161 + 109 96 75 #6d604b + 117 95 52 #755f34 + 123 93 27 #7b5d1b + 127 92 0 #7f5c00 + 130 91 0 #825b00 + 132 91 0 #845b00 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 83 71 53 #534735 + 90 70 32 #5a4620 + 96 68 1 #604401 + 100 67 0 #644300 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 59 49 33 #3b3121 + 66 47 8 #422f08 + 71 45 0 #472d00 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 39 27 8 #271b08 + 46 25 0 #2e1900 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 239 230 198 #efe6c6 + 245 230 170 #f5e6aa + 251 230 143 #fbe68f + 255 230 114 #ffe672 + 255 229 82 #ffe552 + 255 229 34 #ffe522 + 255 229 0 #ffe500 + 255 228 0 #ffe400 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 211 203 173 #d3cbad + 217 203 147 #d9cb93 + 223 202 120 #dfca78 + 229 202 91 #e5ca5b + 233 201 56 #e9c938 + 237 201 0 #edc900 + 239 200 0 #efc800 + 241 200 0 #f1c800 + 242 200 0 #f2c800 + 243 200 0 #f3c800 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 184 176 148 #b8b094 + 191 176 122 #bfb07a + 197 175 95 #c5af5f + 202 175 67 #caaf43 + 206 174 20 #ceae14 + 209 173 0 #d1ad00 + 211 173 0 #d3ad00 + 212 173 0 #d4ad00 + 213 173 0 #d5ad00 + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 158 149 123 #9e957b + 164 149 98 #a49562 + 171 148 70 #ab9446 + 175 148 37 #af9425 + 178 147 0 #b29300 + 181 147 0 #b59300 + 182 146 0 #b69200 + 184 146 0 #b89200 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 131 123 99 #837b63 + 138 123 73 #8a7b49 + 144 122 45 #907a2d + 148 121 2 #947902 + 150 121 0 #967900 + 152 120 0 #987800 + 154 120 0 #9a7800 + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 97 97 97 #616161 + 106 97 74 #6a614a + 112 97 49 #706131 + 117 96 22 #756016 + 120 95 0 #785f00 + 122 95 0 #7a5f00 + 123 95 0 #7b5f00 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 80 72 53 #504835 + 86 72 30 #56481e + 90 71 0 #5a4700 + 93 70 0 #5d4600 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 57 49 32 #393120 + 62 48 5 #3e3005 + 66 48 0 #423000 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 36 28 8 #241c08 + 42 27 0 #2a1b00 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 236 231 197 #ece7c5 + 241 232 169 #f1e8a9 + 245 232 141 #f5e88d + 248 233 111 #f8e96f + 251 233 78 #fbe94e + 254 233 21 #fee915 + 255 233 0 #ffe900 + 255 232 0 #ffe800 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 209 204 172 #d1ccac + 213 204 146 #d5cc92 + 217 205 118 #d9cd76 + 220 205 88 #dccd58 + 223 205 51 #dfcd33 + 226 205 0 #e2cd00 + 227 205 0 #e3cd00 + 228 205 0 #e4cd00 + 229 205 0 #e5cd00 + 230 205 0 #e6cd00 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 182 177 148 #b6b194 + 186 177 121 #bab179 + 190 178 94 #beb25e + 193 178 63 #c1b23f + 196 178 5 #c4b205 + 198 178 0 #c6b200 + 199 178 0 #c7b200 + 200 178 0 #c8b200 + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 155 150 123 #9b967b + 160 151 97 #a09761 + 164 151 68 #a49744 + 167 151 32 #a79720 + 169 151 0 #a99700 + 170 151 0 #aa9700 + 171 151 0 #ab9700 + 172 150 0 #ac9600 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 129 124 99 #817c63 + 134 124 73 #867c49 + 137 124 42 #897c2a + 139 124 0 #8b7c00 + 141 124 0 #8d7c00 + 142 124 0 #8e7c00 + 143 124 0 #8f7c00 + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 97 97 97 #616161 + 103 98 74 #67624a + 107 98 49 #6b6231 + 110 98 19 #6e6213 + 112 98 0 #706200 + 114 98 0 #726200 + 115 98 0 #736200 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 78 73 53 #4e4935 + 81 73 30 #51491e + 84 73 0 #544900 + 86 73 0 #564900 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 54 50 33 #363221 + 58 50 4 #3a3204 + 61 50 0 #3d3200 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 34 29 10 #221d0a + 38 29 0 #261d00 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 234 232 197 #eae8c5 + 236 233 169 #ece9a9 + 239 234 141 #efea8d + 241 235 110 #f1eb6e + 242 236 77 #f2ec4d + 243 236 15 #f3ec0f + 244 237 0 #f4ed00 + 245 237 0 #f5ed00 + 245 238 0 #f5ee00 + 246 238 0 #f6ee00 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 206 204 172 #ceccac + 209 206 146 #d1ce92 + 211 207 118 #d3cf76 + 213 207 88 #d5cf58 + 214 208 50 #d6d032 + 215 209 0 #d7d100 + 216 209 0 #d8d100 + 217 209 0 #d9d100 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 179 178 148 #b3b294 + 182 179 122 #b6b37a + 184 180 95 #b8b45f + 185 180 63 #b9b43f + 187 181 0 #bbb500 + 188 181 0 #bcb500 + 188 182 0 #bcb600 + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 152 151 123 #98977b + 155 152 98 #9b9862 + 157 153 69 #9d9945 + 158 154 32 #9e9a20 + 159 154 0 #9f9a00 + 160 154 0 #a09a00 + 161 154 0 #a19a00 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 126 125 99 #7e7d63 + 128 126 73 #807e49 + 130 127 43 #827f2b + 131 127 0 #837f00 + 132 127 0 #847f00 + 132 128 0 #848000 + 133 128 0 #858000 + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 97 97 97 #616161 + 100 99 75 #64634b + 102 100 49 #666431 + 104 101 19 #686513 + 104 101 0 #686500 + 105 101 0 #696500 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 75 74 53 #4b4a35 + 77 75 30 #4d4b1e + 78 75 0 #4e4b00 + 79 76 0 #4f4c00 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 52 51 34 #343322 + 53 52 6 #353406 + 54 52 0 #363400 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 31 30 13 #1f1e0d + 32 31 0 #201f00 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 231 233 198 #e7e9c6 + 230 235 170 #e6ebaa + 230 237 143 #e6ed8f + 229 239 113 #e5ef71 + 228 240 81 #e4f051 + 227 241 23 #e3f117 + 226 242 0 #e2f200 + 225 243 0 #e1f300 + 225 244 0 #e1f400 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 203 205 173 #cbcdad + 202 207 148 #cacf94 + 202 209 122 #cad17a + 201 211 93 #c9d35d + 200 212 56 #c8d438 + 199 213 0 #c7d500 + 198 214 0 #c6d600 + 198 215 0 #c6d700 + 197 215 0 #c5d700 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 176 178 149 #b0b295 + 175 181 124 #afb57c + 174 182 99 #aeb663 + 173 184 68 #adb844 + 172 185 17 #acb911 + 172 186 0 #acba00 + 171 186 0 #abba00 + 171 187 0 #abbb00 + 170 187 0 #aabb00 + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 149 152 124 #95987c + 148 154 100 #949a64 + 147 156 73 #939c49 + 146 157 38 #929d26 + 145 158 0 #919e00 + 145 159 0 #919f00 + 144 159 0 #909f00 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 122 126 101 #7a7e65 + 122 128 77 #7a804d + 121 129 49 #798131 + 120 130 4 #788204 + 119 131 0 #778300 + 118 132 0 #768400 + 116 132 0 #748400 + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 97 97 97 #616161 + 96 100 77 #60644d + 96 102 52 #606634 + 94 103 25 #5e6719 + 93 104 0 #5d6800 + 92 105 0 #5c6900 + 90 105 0 #5a6900 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 72 75 55 #484b37 + 71 76 33 #474c21 + 69 78 0 #454e00 + 67 79 0 #434f00 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 49 52 36 #313424 + 47 53 13 #2f350d + 45 55 0 #2d3700 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 28 31 16 #1c1f10 + 25 33 0 #192100 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 227 234 199 #e3eac7 + 224 237 173 #e0edad + 220 239 147 #dcef93 + 216 242 119 #d8f277 + 213 244 89 #d5f459 + 208 246 45 #d0f62d + 205 247 0 #cdf700 + 201 249 0 #c9f900 + 199 250 0 #c7fa00 + 198 250 0 #c6fa00 + 196 251 0 #c4fb00 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 200 206 175 #c8ceaf + 197 209 151 #c5d197 + 193 211 127 #c1d37f + 188 214 101 #bcd665 + 184 216 70 #b8d846 + 180 218 8 #b4da08 + 177 219 0 #b1db00 + 174 220 0 #aedc00 + 172 221 0 #acdd00 + 171 221 0 #abdd00 + 170 222 0 #aade00 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 172 179 151 #acb397 + 168 182 128 #a8b680 + 165 185 105 #a5b969 + 161 187 79 #a1bb4f + 156 189 41 #9cbd29 + 152 190 0 #98be00 + 149 192 0 #95c000 + 147 192 0 #93c000 + 146 193 0 #92c100 + 144 193 0 #90c100 + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 145 153 126 #91997e + 142 155 104 #8e9b68 + 138 158 81 #8a9e51 + 133 160 51 #85a033 + 129 162 0 #81a200 + 125 163 0 #7da300 + 123 164 0 #7ba400 + 122 164 0 #7aa400 + 121 165 0 #79a500 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 119 126 103 #777e67 + 116 129 82 #748152 + 111 132 57 #6f8439 + 106 133 25 #6a8519 + 103 135 0 #678700 + 99 136 0 #638800 + 97 137 0 #618900 + 94 138 0 #5e8a00 + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 97 97 97 #616161 + 94 101 79 #5e654f + 89 103 57 #596739 + 85 105 34 #556922 + 80 107 0 #506b00 + 76 108 0 #4c6c00 + 74 109 0 #4a6d00 + 70 110 0 #466e00 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 69 75 57 #454b39 + 64 78 38 #404e26 + 60 80 12 #3c500c + 55 81 0 #375100 + 49 83 0 #315300 + 43 84 0 #2b5400 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 47 52 38 #2f3426 + 42 54 20 #2a3614 + 35 56 0 #233800 + 28 58 0 #1c3a00 + 19 60 0 #133c00 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 26 31 18 #1a1f12 + 17 34 0 #112200 + 10 35 0 #0a2300 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 220 235 204 #dcebcc + 211 240 183 #d3f0b7 + 201 243 160 #c9f3a0 + 192 247 138 #c0f78a + 182 250 113 #b6fa71 + 173 253 85 #adfd55 + 162 255 48 #a2ff30 + 151 255 0 #97ff00 + 141 255 0 #8dff00 + 132 255 0 #84ff00 + 122 255 0 #7aff00 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 193 208 180 #c1d0b4 + 184 212 160 #b8d4a0 + 175 215 140 #afd78c + 167 218 119 #a7da77 + 157 221 95 #9ddd5f + 147 224 66 #93e042 + 136 226 10 #88e20a + 126 228 0 #7ee400 + 116 230 0 #74e600 + 110 231 0 #6ee700 + 101 232 0 #65e800 + 94 233 0 #5ee900 + 87 234 0 #57ea00 + 78 235 0 #4eeb00 + 174 174 174 #aeaeae + 166 181 155 #a6b59b + 158 184 137 #9eb889 + 150 188 118 #96bc76 + 140 191 97 #8cbf61 + 130 194 72 #82c248 + 119 196 40 #77c428 + 108 198 0 #6cc600 + 99 200 0 #63c800 + 90 201 0 #5ac900 + 84 202 0 #54ca00 + 76 203 0 #4ccb00 + 69 204 0 #45cc00 + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 140 154 130 #8c9a82 + 132 157 112 #849d70 + 123 161 93 #7ba15d + 113 164 71 #71a447 + 102 166 45 #66a62d + 91 169 0 #5ba900 + 79 171 0 #4fab00 + 69 172 0 #45ac00 + 60 173 0 #3cad00 + 51 174 0 #33ae00 + 39 175 0 #27af00 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 115 127 107 #737f6b + 106 131 90 #6a835a + 97 134 70 #618646 + 86 137 49 #568931 + 75 139 14 #4b8b0e + 61 141 0 #3d8d00 + 47 143 0 #2f8f00 + 32 144 0 #209000 + 6 145 0 #069100 + 0 147 0 #009300 + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 97 97 97 #616161 + 89 101 83 #596553 + 80 105 65 #506941 + 70 108 47 #466c2f + 58 110 21 #3a6e15 + 44 113 0 #2c7100 + 23 115 0 #177300 + 0 116 0 #007400 + 0 118 0 #007600 + 0 120 0 #007800 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 65 76 61 #414c3d + 56 79 45 #384f2d + 46 82 28 #2e521c + 33 84 0 #215400 + 6 86 0 #065600 + 0 88 0 #005800 + 0 90 0 #005a00 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 44 52 41 #2c3429 + 35 55 27 #23371b + 22 58 9 #163a09 + 0 60 0 #003c00 + 0 62 0 #003e00 + 0 64 0 #004000 + 0 65 0 #004100 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 23 32 21 #172015 + 7 35 4 #072304 + 0 37 0 #002500 + 0 39 0 #002700 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 214 237 209 #d6edd1 + 200 241 192 #c8f1c0 + 184 246 173 #b8f6ad + 170 250 157 #aafa9d + 153 254 139 #99fe8b + 135 255 121 #87ff79 + 113 255 101 #71ff65 + 82 255 77 #52ff4d + 25 255 46 #19ff2e + 0 255 0 #00ff00 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 188 209 184 #bcd1b8 + 175 213 168 #afd5a8 + 161 217 152 #a1d998 + 147 221 137 #93dd89 + 130 225 120 #82e178 + 111 228 101 #6fe465 + 87 231 81 #57e751 + 50 234 57 #32ea39 + 0 237 12 #00ed0c + 0 239 0 #00ef00 + 0 242 0 #00f200 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 162 181 159 #a2b59f + 149 186 144 #95ba90 + 137 189 130 #89bd82 + 122 193 114 #7ac172 + 105 197 97 #69c561 + 83 200 79 #53c84f + 53 203 58 #35cb3a + 0 206 27 #00ce1b + 0 208 0 #00d000 + 0 210 0 #00d200 + 0 212 0 #00d400 + 0 214 0 #00d600 + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 136 155 134 #889b86 + 124 159 120 #7c9f78 + 110 163 105 #6ea369 + 94 166 89 #5ea659 + 75 169 73 #4ba949 + 48 172 54 #30ac36 + 0 175 26 #00af1a + 0 177 0 #00b100 + 0 180 0 #00b400 + 0 182 0 #00b600 + 0 183 0 #00b700 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 111 128 110 #6f806e + 99 132 97 #638461 + 85 136 82 #558852 + 67 139 66 #438b42 + 43 142 49 #2b8e31 + 0 145 25 #009119 + 0 147 0 #009300 + 0 149 0 #009500 + 0 151 0 #009700 + 0 153 0 #009900 + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 97 97 97 #616161 + 87 102 86 #576656 + 73 106 72 #496a48 + 57 109 58 #396d3a + 35 112 42 #23702a + 0 115 23 #007317 + 0 118 0 #007600 + 0 120 0 #007800 + 0 121 0 #007900 + 0 123 0 #007b00 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 63 77 63 #3f4d3f + 49 80 51 #315033 + 33 83 39 #215327 + 0 86 25 #005619 + 0 88 6 #005806 + 0 90 0 #005a00 + 0 92 0 #005c00 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 42 53 43 #2a352b + 28 56 33 #1c3821 + 6 59 22 #063b16 + 0 61 9 #003d09 + 0 63 0 #003f00 + 0 65 0 #004100 + 0 67 0 #004300 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 21 32 23 #152017 + 0 35 12 #00230c + 0 38 2 #002602 + 0 41 0 #002900 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 209 237 215 #d1edd7 + 191 243 203 #bff3cb + 168 248 189 #a8f8bd + 146 253 178 #92fdb2 + 120 255 167 #78ffa7 + 87 255 156 #57ff9c + 0 255 145 #00ff91 + 0 255 133 #00ff85 + 0 255 120 #00ff78 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 183 209 189 #b7d1bd + 166 214 178 #a6d6b2 + 146 219 167 #92dba7 + 125 223 157 #7ddf9d + 99 227 146 #63e392 + 56 231 135 #38e787 + 0 234 126 #00ea7e + 0 238 115 #00ee73 + 0 241 104 #00f168 + 0 243 94 #00f35e + 0 246 85 #00f655 + 0 248 76 #00f84c + 0 250 69 #00fa45 + 0 253 60 #00fd3c + 174 174 174 #aeaeae + 158 182 164 #9eb6a4 + 141 187 154 #8dbb9a + 123 191 144 #7bbf90 + 100 195 133 #64c385 + 69 199 123 #45c77b + 0 203 114 #00cb72 + 0 206 104 #00ce68 + 0 209 95 #00d15f + 0 211 86 #00d356 + 0 214 77 #00d64d + 0 217 68 #00d944 + 0 219 60 #00db3c + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 132 155 138 #849b8a + 115 160 129 #73a081 + 95 164 119 #5fa477 + 70 168 110 #46a86e + 24 171 101 #18ab65 + 0 175 92 #00af5c + 0 178 83 #00b253 + 0 180 75 #00b44b + 0 183 67 #00b743 + 0 185 59 #00b93b + 0 188 52 #00bc34 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 108 129 114 #6c8172 + 91 133 105 #5b8569 + 70 137 96 #468960 + 35 141 87 #238d57 + 0 144 79 #00904f + 0 147 71 #009347 + 0 150 63 #00963f + 0 152 56 #009838 + 0 155 49 #009b31 + 0 157 43 #009d2b + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 97 97 97 #616161 + 83 102 89 #536659 + 65 107 81 #416b51 + 37 111 72 #256f48 + 0 114 65 #007241 + 0 117 57 #007539 + 0 120 50 #007832 + 0 122 44 #007a2c + 0 124 39 #007c27 + 0 125 34 #007d22 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 60 77 66 #3c4d42 + 42 81 58 #2a513a + 8 84 52 #085434 + 0 87 46 #00572e + 0 89 40 #005928 + 0 92 34 #005c22 + 0 93 29 #005d1d + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 40 53 45 #28352d + 22 57 39 #163927 + 0 60 33 #003c21 + 0 62 28 #003e1c + 0 64 22 #004016 + 0 66 17 #004211 + 0 68 14 #00440e + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 19 32 25 #132019 + 0 36 18 #002412 + 0 39 12 #00270c + 0 42 7 #002a07 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 207 237 219 #cfeddb + 185 243 211 #b9f3d3 + 157 249 203 #9df9cb + 128 254 196 #80fec4 + 91 255 190 #5bffbe + 0 255 184 #00ffb8 + 0 255 179 #00ffb3 + 0 255 174 #00ffae + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 181 210 193 #b5d2c1 + 161 215 186 #a1d7ba + 136 220 178 #88dcb2 + 109 224 172 #6de0ac + 69 228 166 #45e4a6 + 0 232 161 #00e8a1 + 0 236 156 #00ec9c + 0 239 152 #00ef98 + 0 242 148 #00f294 + 0 245 145 #00f591 + 0 248 142 #00f88e + 0 250 140 #00fa8c + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 156 182 167 #9cb6a7 + 136 187 160 #88bba0 + 114 192 154 #72c09a + 85 196 148 #55c494 + 29 200 143 #1dc88f + 0 204 138 #00cc8a + 0 207 133 #00cf85 + 0 210 130 #00d282 + 0 213 127 #00d57f + 0 216 124 #00d87c + 0 218 121 #00da79 + 0 220 119 #00dc77 + 0 222 118 #00de76 + 0 224 116 #00e074 + 148 148 148 #949494 + 130 155 142 #829b8e + 109 161 135 #6da187 + 86 165 129 #56a581 + 51 169 124 #33a97c + 0 172 119 #00ac77 + 0 176 115 #00b073 + 0 179 111 #00b36f + 0 181 108 #00b56c + 0 184 105 #00b869 + 0 186 103 #00ba67 + 0 188 101 #00bc65 + 0 190 99 #00be63 + 0 192 97 #00c061 + 0 194 96 #00c260 + 122 122 122 #7a7a7a + 106 129 117 #6a8175 + 86 133 110 #56856e + 60 138 105 #3c8a69 + 0 142 100 #008e64 + 0 145 95 #00915f + 0 148 91 #00945b + 0 151 89 #009759 + 0 153 86 #009956 + 0 155 84 #009b54 + 0 157 82 #009d52 + 0 159 81 #009f51 + 0 160 80 #00a050 + 0 162 79 #00a24f + 0 163 78 #00a34e + 97 97 97 #616161 + 82 103 92 #52675c + 60 107 86 #3c6b56 + 25 111 80 #196f50 + 0 115 76 #00734c + 0 118 73 #007649 + 0 121 70 #007946 + 0 123 67 #007b43 + 0 124 66 #007c42 + 0 126 64 #007e40 + 0 127 63 #007f3f + 0 128 62 #00803e + 0 130 62 #00823e + 0 131 61 #00833d + 0 132 60 #00843c + 72 72 72 #484848 + 59 77 68 #3b4d44 + 37 81 63 #25513f + 0 85 58 #00553a + 0 87 55 #005737 + 0 90 52 #005a34 + 0 92 50 #005c32 + 0 94 49 #005e31 + 0 95 47 #005f2f + 0 96 46 #00602e + 0 98 46 #00622e + 0 99 45 #00632d + 0 100 44 #00642c + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 39 53 46 #27352e + 18 57 42 #12392a + 0 60 39 #003c27 + 0 62 36 #003e24 + 0 64 34 #004022 + 0 66 32 #004220 + 0 68 31 #00441f + 0 69 30 #00451e + 0 71 30 #00471e + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 18 32 26 #12201a + 0 36 22 #002416 + 0 39 19 #002713 + 0 42 17 #002a11 + 0 43 16 #002b10 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 205 238 222 #cdeede + 181 244 216 #b5f4d8 + 151 249 210 #97f9d2 + 118 254 205 #76fecd + 74 255 201 #4affc9 + 0 255 197 #00ffc5 + 0 255 194 #00ffc2 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 179 210 196 #b3d2c4 + 158 215 190 #9ed7be + 131 220 185 #83dcb9 + 101 224 181 #65e0b5 + 50 229 177 #32e5b1 + 0 233 174 #00e9ae + 0 236 171 #00ecab + 0 239 168 #00efa8 + 0 243 165 #00f3a5 + 0 245 163 #00f5a3 + 0 248 162 #00f8a2 + 0 251 160 #00fba0 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 154 182 170 #9ab6aa + 133 187 165 #85bba5 + 109 192 161 #6dc0a1 + 76 196 157 #4cc49d + 0 200 153 #00c899 + 0 204 150 #00cc96 + 0 208 147 #00d093 + 0 211 145 #00d391 + 0 213 143 #00d58f + 0 216 141 #00d88d + 0 218 140 #00da8c + 0 220 138 #00dc8a + 0 222 138 #00de8a + 0 224 136 #00e088 + 148 148 148 #949494 + 129 155 144 #819b90 + 106 161 139 #6aa18b + 80 165 136 #50a588 + 37 169 132 #25a984 + 0 172 129 #00ac81 + 0 176 126 #00b07e + 0 179 124 #00b37c + 0 182 122 #00b67a + 0 184 121 #00b879 + 0 187 119 #00bb77 + 0 189 118 #00bd76 + 0 191 117 #00bf75 + 0 192 116 #00c074 + 0 194 115 #00c273 + 122 122 122 #7a7a7a + 105 129 119 #698177 + 83 134 114 #538672 + 54 138 111 #368a6f + 0 142 108 #008e6c + 0 145 105 #009169 + 0 149 103 #009567 + 0 151 102 #009766 + 0 153 100 #009964 + 0 156 99 #009c63 + 0 157 98 #009d62 + 0 159 97 #009f61 + 0 160 97 #00a061 + 0 162 96 #00a260 + 0 163 96 #00a360 + 97 97 97 #616161 + 81 103 94 #51675e + 57 107 90 #396b5a + 9 111 87 #096f57 + 0 115 84 #007354 + 0 118 82 #007652 + 0 121 81 #007951 + 0 123 80 #007b50 + 0 124 79 #007c4f + 0 126 78 #007e4e + 0 127 78 #007f4e + 0 128 77 #00804d + 0 130 77 #00824d + 0 131 77 #00834d + 0 132 77 #00844d + 72 72 72 #484848 + 58 77 70 #3a4d46 + 33 81 66 #215142 + 0 85 64 #005540 + 0 87 62 #00573e + 0 90 61 #005a3d + 0 92 60 #005c3c + 0 94 59 #005e3b + 0 95 59 #005f3b + 0 97 58 #00613a + 0 98 58 #00623a + 0 99 58 #00633a + 0 100 58 #00643a + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 38 53 48 #263530 + 14 57 45 #0e392d + 0 60 43 #003c2b + 0 62 42 #003e2a + 0 64 41 #004029 + 0 66 40 #004228 + 0 68 40 #004428 + 0 69 40 #004528 + 0 71 40 #004728 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 17 32 27 #11201b + 0 36 25 #002419 + 0 39 24 #002718 + 0 42 23 #002a17 + 0 43 23 #002b17 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 204 238 225 #cceee1 + 179 244 221 #b3f4dd + 147 249 218 #93f9da + 109 254 215 #6dfed7 + 55 255 213 #37ffd5 + 0 255 211 #00ffd3 + 0 255 210 #00ffd2 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 179 210 198 #b3d2c6 + 155 215 195 #9bd7c3 + 127 220 192 #7fdcc0 + 94 224 190 #5ee0be + 26 229 188 #1ae5bc + 0 233 186 #00e9ba + 0 236 185 #00ecb9 + 0 240 183 #00f0b7 + 0 243 182 #00f3b6 + 0 246 181 #00f6b5 + 0 248 181 #00f8b5 + 0 252 180 #00fcb4 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 153 182 172 #99b6ac + 131 187 169 #83bba9 + 104 192 167 #68c0a7 + 66 196 165 #42c4a5 + 0 200 163 #00c8a3 + 0 204 161 #00cca1 + 0 208 160 #00d0a0 + 0 211 159 #00d39f + 0 213 158 #00d59e + 0 216 158 #00d89e + 0 219 157 #00db9d + 0 220 157 #00dc9d + 0 222 156 #00de9c + 0 224 156 #00e09c + 148 148 148 #949494 + 128 155 146 #809b92 + 103 161 144 #67a190 + 75 165 142 #4ba58e + 16 169 140 #10a98c + 0 173 138 #00ad8a + 0 176 137 #00b089 + 0 179 136 #00b388 + 0 182 135 #00b687 + 0 184 135 #00b887 + 0 187 134 #00bb86 + 0 189 134 #00bd86 + 0 191 134 #00bf86 + 0 192 134 #00c086 + 0 194 134 #00c286 + 122 122 122 #7a7a7a + 104 129 121 #688179 + 80 134 119 #508677 + 48 138 117 #308a75 + 0 142 115 #008e73 + 0 145 114 #009172 + 0 149 113 #009571 + 0 151 113 #009771 + 0 154 113 #009a71 + 0 156 113 #009c71 + 0 157 113 #009d71 + 0 159 113 #009f71 + 0 161 113 #00a171 + 0 162 113 #00a271 + 0 163 113 #00a371 + 97 97 97 #616161 + 79 103 95 #4f675f + 53 107 94 #356b5e + 0 111 92 #006f5c + 0 115 91 #00735b + 0 118 91 #00765b + 0 121 91 #00795b + 0 123 90 #007b5a + 0 124 91 #007c5b + 0 126 91 #007e5b + 0 128 91 #00805b + 0 129 91 #00815b + 0 130 92 #00825c + 0 131 92 #00835c + 0 132 93 #00845d + 72 72 72 #484848 + 56 77 71 #384d47 + 28 82 70 #1c5246 + 0 85 69 #005545 + 0 88 69 #005845 + 0 90 68 #005a44 + 0 92 69 #005c45 + 0 94 69 #005e45 + 0 96 69 #006045 + 0 97 70 #006146 + 0 98 70 #006246 + 0 99 71 #006347 + 0 101 72 #006548 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 37 53 49 #253531 + 8 57 48 #083930 + 0 60 48 #003c30 + 0 62 48 #003e30 + 0 65 48 #004130 + 0 67 48 #004330 + 0 68 49 #004431 + 0 69 50 #004532 + 0 71 51 #004733 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 16 32 28 #10201c + 0 36 28 #00241c + 0 39 28 #00271c + 0 42 30 #002a1e + 0 44 32 #002c20 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 203 237 227 #cbede3 + 177 243 226 #b1f3e2 + 143 249 225 #8ff9e1 + 102 254 224 #66fee0 + 25 255 223 #19ffdf + 0 255 223 #00ffdf + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 178 209 200 #b2d1c8 + 153 215 199 #99d7c7 + 125 220 198 #7ddcc6 + 87 224 198 #57e0c6 + 0 229 198 #00e5c6 + 0 233 198 #00e9c6 + 0 236 198 #00ecc6 + 0 239 199 #00efc7 + 0 243 200 #00f3c8 + 0 246 200 #00f6c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 153 182 174 #99b6ae + 129 187 173 #81bbad + 101 192 173 #65c0ad + 56 196 173 #38c4ad + 0 200 173 #00c8ad + 0 204 173 #00ccad + 0 208 174 #00d0ae + 0 210 175 #00d2af + 0 213 176 #00d5b0 + 0 216 177 #00d8b1 + 0 218 177 #00dab1 + 0 220 178 #00dcb2 + 0 222 179 #00deb3 + 174 174 174 #aeaeae + 148 148 148 #949494 + 127 155 148 #7f9b94 + 101 161 148 #65a194 + 71 165 148 #47a594 + 0 169 148 #00a994 + 0 173 149 #00ad95 + 0 176 149 #00b095 + 0 179 150 #00b396 + 0 182 151 #00b697 + 0 185 152 #00b998 + 0 187 153 #00bb99 + 0 189 155 #00bd9b + 0 191 156 #00bf9c + 0 193 157 #00c19d + 0 194 157 #00c29d + 122 122 122 #7a7a7a + 103 129 123 #67817b + 78 134 123 #4e867b + 43 138 123 #2b8a7b + 0 142 123 #008e7b + 0 145 124 #00917c + 0 149 126 #00957e + 0 151 127 #00977f + 0 154 128 #009a80 + 0 156 130 #009c82 + 0 158 131 #009e83 + 0 159 132 #009f84 + 0 161 133 #00a185 + 0 162 134 #00a286 + 0 163 134 #00a386 + 97 97 97 #616161 + 78 103 98 #4e6762 + 50 107 98 #326b62 + 0 111 99 #006f63 + 0 115 100 #007364 + 0 118 101 #007665 + 0 121 103 #007967 + 0 123 104 #007b68 + 0 125 105 #007d69 + 0 126 106 #007e6a + 0 128 107 #00806b + 0 129 108 #00816c + 0 130 109 #00826d + 0 131 110 #00836e + 97 97 97 #616161 + 72 72 72 #484848 + 56 77 73 #384d49 + 24 82 74 #18524a + 0 85 75 #00554b + 0 88 76 #00584c + 0 90 78 #005a4e + 0 92 79 #005c4f + 0 94 81 #005e51 + 0 96 82 #006052 + 0 97 83 #006153 + 0 98 84 #006254 + 0 99 85 #006355 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 36 53 51 #243533 + 4 57 52 #043934 + 0 60 53 #003c35 + 0 62 55 #003e37 + 0 65 56 #004138 + 0 67 58 #00433a + 0 68 59 #00443b + 0 70 61 #00463d + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 14 32 30 #0e201e + 0 36 32 #002420 + 0 39 35 #002723 + 0 42 37 #002a25 + 0 44 40 #002c28 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 203 237 230 #cbede6 + 175 243 231 #aff3e7 + 140 249 232 #8cf9e8 + 92 254 234 #5cfeea + 0 255 236 #00ffec + 0 255 238 #00ffee + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 178 209 203 #b2d1cb + 152 215 204 #98d7cc + 122 220 206 #7adcce + 77 224 208 #4de0d0 + 0 228 210 #00e4d2 + 0 232 212 #00e8d4 + 0 236 214 #00ecd6 + 0 239 216 #00efd8 + 0 243 219 #00f3db + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 152 182 177 #98b6b1 + 127 187 179 #7fbbb3 + 98 192 181 #62c0b5 + 44 196 183 #2cc4b7 + 0 200 186 #00c8ba + 0 204 188 #00ccbc + 0 207 190 #00cfbe + 0 210 193 #00d2c1 + 0 213 196 #00d5c4 + 0 216 198 #00d8c6 + 0 219 201 #00dbc9 + 0 221 204 #00ddcc + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 127 155 151 #7f9b97 + 100 160 153 #64a099 + 65 165 156 #41a59c + 0 169 159 #00a99f + 0 172 161 #00aca1 + 0 176 164 #00b0a4 + 0 179 167 #00b3a7 + 0 182 170 #00b6aa + 0 184 172 #00b8ac + 0 187 175 #00bbaf + 0 189 178 #00bdb2 + 0 191 180 #00bfb4 + 0 193 182 #00c1b6 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 102 129 126 #66817e + 76 133 128 #4c8580 + 36 137 131 #248983 + 0 141 134 #008d86 + 0 145 138 #00918a + 0 148 141 #00948d + 0 151 143 #00978f + 0 154 147 #009a93 + 0 156 150 #009c96 + 0 158 152 #009e98 + 0 160 154 #00a09a + 0 161 156 #00a19c + 0 162 158 #00a29e + 122 122 122 #7a7a7a + 97 97 97 #616161 + 78 103 100 #4e6764 + 48 107 103 #306b67 + 0 111 107 #006f6b + 0 115 110 #00736e + 0 118 114 #007672 + 0 120 117 #007875 + 0 123 120 #007b78 + 0 125 123 #007d7b + 0 126 125 #007e7d + 0 128 128 #008080 + 0 129 130 #008182 + 0 130 131 #008283 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 54 77 76 #364d4c + 19 81 79 #13514f + 0 85 83 #005553 + 0 87 86 #005756 + 0 90 90 #005a5a + 0 92 93 #005c5d + 0 94 96 #005e60 + 0 96 98 #006062 + 0 97 101 #006165 + 0 99 103 #006367 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 35 53 53 #233535 + 0 57 56 #003938 + 0 60 60 #003c3c + 0 62 64 #003e40 + 0 65 67 #004143 + 0 67 70 #004346 + 0 68 73 #004449 + 0 70 76 #00464c + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 12 32 32 #0c2020 + 0 36 37 #002425 + 0 39 42 #00272a + 0 42 47 #002a2f + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 204 237 234 #ccedea + 174 243 237 #aef3ed + 137 249 242 #89f9f2 + 82 254 246 #52fef6 + 0 255 250 #00fffa + 0 255 254 #00fffe + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 178 209 206 #b2d1ce + 152 214 210 #98d6d2 + 118 219 215 #76dbd7 + 71 224 219 #47e0db + 0 228 223 #00e4df + 0 232 227 #00e8e3 + 0 235 231 #00ebe7 + 0 239 235 #00efeb + 0 242 240 #00f2f0 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 152 182 180 #98b6b4 + 126 187 184 #7ebbb8 + 96 191 188 #60bfbc + 37 195 192 #25c3c0 + 0 200 197 #00c8c5 + 0 203 201 #00cbc9 + 0 207 206 #00cfce + 0 210 210 #00d2d2 + 0 213 214 #00d5d6 + 0 215 218 #00d7da + 0 218 223 #00dadf + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 127 155 154 #7f9b9a + 99 160 158 #63a09e + 62 164 163 #3ea4a3 + 0 168 168 #00a8a8 + 0 172 172 #00acac + 0 175 177 #00afb1 + 0 178 181 #00b2b5 + 0 181 186 #00b5ba + 0 184 190 #00b8be + 0 187 194 #00bbc2 + 0 189 199 #00bdc7 + 0 192 202 #00c0ca + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 102 129 128 #668180 + 76 133 133 #4c8585 + 29 137 137 #1d8989 + 0 141 143 #008d8f + 0 145 148 #009194 + 0 148 154 #00949a + 0 150 158 #00969e + 0 153 163 #0099a3 + 0 156 167 #009ca7 + 0 158 171 #009eab + 0 160 174 #00a0ae + 0 161 177 #00a1b1 + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 97 97 97 #616161 + 77 102 103 #4d6667 + 47 107 108 #2f6b6c + 0 111 113 #006f71 + 0 114 119 #007277 + 0 117 124 #00757c + 0 120 129 #007881 + 0 123 134 #007b86 + 0 125 138 #007d8a + 0 126 141 #007e8d + 0 128 144 #008090 + 0 129 147 #008193 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 54 77 78 #364d4e + 15 81 84 #0f5154 + 0 84 89 #005459 + 0 87 94 #00575e + 0 90 99 #005a63 + 0 92 103 #005c67 + 0 94 107 #005e6b + 0 96 110 #00606e + 0 98 114 #006272 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 34 53 54 #223536 + 0 57 60 #00393c + 0 59 65 #003b41 + 0 62 71 #003e47 + 0 65 75 #00414b + 0 67 79 #00434f + 0 68 83 #004453 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 11 32 34 #0b2022 + 0 36 41 #002429 + 0 39 47 #00272f + 0 42 55 #002a37 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 205 236 236 #cdecec + 175 242 243 #aff2f3 + 137 248 250 #89f8fa + 81 253 255 #51fdff + 0 255 255 #00ffff + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 179 208 208 #b3d0d0 + 152 214 215 #98d6d7 + 119 218 222 #77dade + 68 223 228 #44dfe4 + 0 227 235 #00e3eb + 0 231 242 #00e7f2 + 0 235 248 #00ebf8 + 0 239 255 #00efff + 0 242 255 #00f2ff + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 153 181 182 #99b5b6 + 127 186 189 #7fbabd + 97 190 195 #61bec3 + 33 194 202 #21c2ca + 0 198 210 #00c6d2 + 0 202 217 #00cad9 + 0 205 224 #00cde0 + 0 209 231 #00d1e7 + 0 212 237 #00d4ed + 0 215 242 #00d7f2 + 0 217 249 #00d9f9 + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 127 155 156 #7f9b9c + 101 159 163 #659fa3 + 62 163 170 #3ea3aa + 0 167 177 #00a7b1 + 0 171 184 #00abb8 + 0 174 192 #00aec0 + 0 177 198 #00b1c6 + 0 180 205 #00b4cd + 0 183 212 #00b7d4 + 0 186 218 #00bada + 0 189 225 #00bde1 + 0 192 231 #00c0e7 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 102 128 130 #668082 + 76 132 137 #4c8489 + 28 136 145 #1c8891 + 0 140 153 #008c99 + 0 143 160 #008fa0 + 0 147 168 #0093a8 + 0 149 174 #0095ae + 0 152 181 #0098b5 + 0 155 188 #009bbc + 0 158 194 #009ec2 + 0 160 198 #00a0c6 + 0 161 202 #00a1ca + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 97 97 97 #616161 + 77 102 105 #4d6669 + 47 106 112 #2f6a70 + 0 110 120 #006e78 + 0 113 128 #007180 + 0 116 136 #007488 + 0 119 143 #00778f + 0 122 150 #007a96 + 0 124 155 #007c9b + 0 126 160 #007ea0 + 0 128 165 #0080a5 + 0 129 169 #0081a9 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 53 77 80 #354d50 + 14 81 88 #0e5158 + 0 84 96 #005460 + 0 86 103 #005667 + 0 89 110 #00596e + 0 92 117 #005c75 + 0 94 123 #005e7b + 0 96 128 #006080 + 0 97 131 #006183 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 34 53 56 #223538 + 0 56 64 #003840 + 0 59 71 #003b47 + 0 62 79 #003e4f + 0 64 87 #004057 + 0 66 94 #00425e + 0 68 99 #004463 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 10 32 36 #0a2024 + 0 35 45 #00232d + 0 38 53 #002635 + 0 41 62 #00293e + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 208 235 238 #d0ebee + 176 241 248 #b0f1f8 + 138 247 255 #8af7ff + 84 251 255 #54fbff + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 182 208 210 #b6d0d2 + 154 213 219 #9ad5db + 121 217 228 #79d9e4 + 71 221 238 #47ddee + 0 226 248 #00e2f8 + 0 230 255 #00e6ff + 0 233 255 #00e9ff + 0 237 255 #00edff + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 155 181 184 #9bb5b8 + 129 185 193 #81b9c1 + 99 189 202 #63bdca + 43 193 211 #2bc1d3 + 0 197 221 #00c5dd + 0 201 231 #00c9e7 + 0 204 240 #00ccf0 + 0 208 251 #00d0fb + 0 210 255 #00d2ff + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 129 154 158 #819a9e + 104 158 167 #689ea7 + 66 162 177 #42a2b1 + 0 166 186 #00a6ba + 0 169 195 #00a9c3 + 0 173 205 #00adcd + 0 176 214 #00b0d6 + 0 179 224 #00b3e0 + 0 182 232 #00b6e8 + 0 185 241 #00b9f1 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 104 128 132 #688084 + 78 132 141 #4e848d + 34 135 151 #228797 + 0 139 160 #008ba0 + 0 142 170 #008eaa + 0 145 180 #0091b4 + 0 148 189 #0094bd + 0 151 198 #0097c6 + 0 154 207 #009acf + 0 157 216 #009dd8 + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 97 97 97 #616161 + 78 102 106 #4e666a + 49 106 116 #316a74 + 0 109 126 #006d7e + 0 112 136 #007088 + 0 115 146 #007392 + 0 118 155 #00769b + 0 121 164 #0079a4 + 0 123 170 #007baa + 0 125 179 #007db3 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 54 77 82 #364d52 + 16 80 92 #10505c + 0 83 102 #005366 + 0 86 111 #00566f + 0 88 120 #005878 + 0 91 129 #005b81 + 0 93 137 #005d89 + 0 95 143 #005f8f + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 34 53 58 #22353a + 0 56 67 #003843 + 0 58 77 #003a4d + 0 61 86 #003d56 + 0 64 96 #004060 + 0 66 104 #004268 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 10 32 38 #0a2026 + 0 35 48 #002330 + 0 37 57 #002539 + 0 40 68 #002844 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 211 234 239 #d3eaef + 181 240 253 #b5f0fd + 147 244 255 #93f4ff + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 185 207 212 #b9cfd4 + 159 211 224 #9fd3e0 + 129 215 236 #81d7ec + 82 219 249 #52dbf9 + 0 223 255 #00dfff + 0 227 255 #00e3ff + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 158 180 185 #9eb4b9 + 134 184 197 #86b8c5 + 105 188 208 #69bcd0 + 62 191 220 #3ebfdc + 0 194 233 #00c2e9 + 0 198 247 #00c6f7 + 0 200 255 #00c8ff + 0 204 255 #00ccff + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 131 153 159 #83999f + 108 157 170 #6c9daa + 76 161 182 #4ca1b6 + 0 164 194 #00a4c2 + 0 166 206 #00a6ce + 0 169 218 #00a9da + 0 172 230 #00ace6 + 0 175 243 #00aff3 + 0 178 255 #00b2ff + 0 181 255 #00b5ff + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 105 127 133 #697f85 + 82 131 144 #528390 + 46 134 156 #2e869c + 0 136 168 #0088a8 + 0 139 180 #008bb4 + 0 142 192 #008ec0 + 0 145 204 #0091cc + 0 148 217 #0094d9 + 0 150 229 #0096e5 + 0 153 240 #0099f0 + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 97 97 97 #616161 + 79 101 108 #4f656c + 54 105 120 #366978 + 0 107 131 #006b83 + 0 110 143 #006e8f + 0 112 155 #00709b + 0 115 166 #0073a6 + 0 118 178 #0076b2 + 0 120 190 #0078be + 0 122 201 #007ac9 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 54 76 84 #364c54 + 22 79 96 #164f60 + 0 82 107 #00526b + 0 84 118 #005476 + 0 86 130 #005682 + 0 89 141 #00598d + 0 91 152 #005b98 + 0 93 161 #005da1 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 34 53 59 #22353b + 0 55 70 #003746 + 0 57 82 #003952 + 0 60 94 #003c5e + 0 62 105 #003e69 + 0 64 115 #004073 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 11 32 39 #0b2027 + 0 34 50 #002232 + 0 36 61 #00243d + 0 38 72 #002648 + 0 40 87 #002857 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 214 233 240 #d6e9f0 + 186 238 255 #baeeff + 154 243 255 #9af3ff + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 188 206 212 #bcced4 + 164 210 226 #a4d2e2 + 138 213 240 #8ad5f0 + 98 217 255 #62d9ff + 0 220 255 #00dcff + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 160 179 186 #a0b3ba + 139 183 199 #8bb7c7 + 115 186 211 #73bad3 + 80 188 225 #50bce1 + 0 191 240 #00bff0 + 0 194 255 #00c2ff + 0 197 255 #00c5ff + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 134 153 160 #8699a0 + 114 156 172 #729cac + 88 158 186 #589eba + 48 161 199 #30a1c7 + 0 163 212 #00a3d4 + 0 166 226 #00a6e2 + 0 168 240 #00a8f0 + 0 171 255 #00abff + 0 174 255 #00aeff + 0 176 255 #00b0ff + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 108 126 135 #6c7e87 + 88 129 147 #588193 + 60 132 160 #3c84a0 + 0 134 172 #0086ac + 0 136 185 #0088b9 + 0 139 199 #008bc7 + 0 141 212 #008dd4 + 0 143 226 #008fe2 + 0 146 240 #0092f0 + 0 148 251 #0094fb + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 97 97 97 #616161 + 82 101 109 #52656d + 60 103 122 #3c677a + 26 105 134 #1a6986 + 0 108 147 #006c93 + 0 109 160 #006da0 + 0 112 172 #0070ac + 0 114 185 #0072b9 + 0 117 199 #0075c7 + 0 118 209 #0076d1 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 56 76 86 #384c56 + 30 78 98 #1e4e62 + 0 80 110 #00506e + 0 82 123 #00527b + 0 84 135 #005487 + 0 86 147 #005693 + 0 88 160 #0058a0 + 0 90 170 #005aaa + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 35 52 61 #23343d + 6 54 73 #063649 + 0 56 85 #003855 + 0 58 98 #003a62 + 0 60 110 #003c6e + 0 62 120 #003e78 + 0 64 132 #004084 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 13 31 41 #0d1f29 + 0 33 52 #002134 + 0 34 63 #00223f + 0 36 75 #00244b + 0 38 89 #002659 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 217 233 240 #d9e9f0 + 193 236 255 #c1ecff + 166 240 255 #a6f0ff + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 190 205 213 #becdd5 + 172 208 228 #acd0e4 + 150 211 243 #96d3f3 + 118 214 255 #76d6ff + 71 216 255 #47d8ff + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 163 178 187 #a3b2bb + 146 181 200 #92b5c8 + 126 183 214 #7eb7d6 + 101 185 229 #65b9e5 + 55 188 245 #37bcf5 + 0 190 255 #00beff + 0 192 255 #00c0ff + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 137 152 161 #8998a1 + 121 154 174 #799aae + 100 156 188 #649cbc + 72 158 202 #489eca + 6 160 215 #06a0d7 + 0 162 231 #00a2e7 + 0 164 246 #00a4f6 + 0 167 255 #00a7ff + 0 169 255 #00a9ff + 0 171 255 #00abff + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 110 126 136 #6e7e88 + 94 128 149 #5e8095 + 73 130 162 #4982a2 + 37 132 175 #2584af + 0 133 189 #0085bd + 0 135 203 #0087cb + 0 137 216 #0089d8 + 0 139 231 #008be7 + 0 141 244 #008df4 + 0 143 255 #008fff + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 97 97 97 #616161 + 84 100 110 #54646e + 67 102 124 #43667c + 43 104 136 #2b6888 + 0 105 150 #006996 + 0 107 162 #006ba2 + 0 109 175 #006daf + 0 110 189 #006ebd + 0 112 203 #0070cb + 0 114 216 #0072d8 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 59 75 87 #3b4b57 + 39 77 100 #274d64 + 0 78 113 #004e71 + 0 80 125 #00507d + 0 81 138 #00518a + 0 83 151 #005397 + 0 85 164 #0055a4 + 0 86 175 #0056af + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 38 52 62 #26343e + 16 53 75 #10354b + 0 55 87 #003757 + 0 56 101 #003865 + 0 58 113 #003a71 + 0 59 125 #003b7d + 0 60 138 #003c8a + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 15 31 42 #0f1f2a + 0 32 53 #002035 + 0 33 64 #002140 + 0 34 77 #00224d + 0 36 90 #00245a + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 221 231 240 #dde7f0 + 203 234 255 #cbeaff + 183 236 255 #b7ecff + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 194 204 213 #c2ccd5 + 180 206 229 #b4cee5 + 162 208 245 #a2d0f5 + 141 210 255 #8dd2ff + 111 212 255 #6fd4ff + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 167 177 187 #a7b1bb + 154 179 202 #9ab3ca + 139 180 216 #8bb4d8 + 121 182 231 #79b6e7 + 95 183 248 #5fb7f8 + 51 185 255 #33b9ff + 0 186 255 #00baff + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 140 151 161 #8c97a1 + 128 152 175 #8098af + 113 154 189 #719abd + 95 155 204 #5f9bcc + 70 156 218 #469cda + 0 157 234 #009dea + 0 159 250 #009ffa + 0 160 255 #00a0ff + 0 161 255 #00a1ff + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 114 125 136 #727d88 + 101 126 150 #657e96 + 86 127 164 #567fa4 + 66 128 177 #4280b1 + 30 129 191 #1e81bf + 0 130 205 #0082cd + 0 131 219 #0083db + 0 132 235 #0084eb + 0 134 250 #0086fa + 0 135 255 #0087ff + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 97 97 97 #616161 + 88 99 111 #58636f + 75 100 125 #4b647d + 59 101 138 #3b658a + 30 102 152 #1e6698 + 0 103 164 #0067a4 + 0 104 177 #0068b1 + 0 105 192 #0069c0 + 0 105 206 #0069ce + 0 106 220 #006adc + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 62 74 88 #3e4a58 + 48 75 101 #304b65 + 25 76 114 #194c72 + 0 77 127 #004d7f + 0 77 140 #004d8c + 0 78 154 #004e9a + 0 79 167 #004fa7 + 0 80 180 #0050b4 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 40 51 63 #28333f + 26 52 76 #1a344c + 0 52 89 #003459 + 0 53 102 #003566 + 0 54 115 #003673 + 0 54 128 #003680 + 0 55 143 #00378f + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 19 30 43 #131e2b + 1 31 54 #011f36 + 0 31 66 #001f42 + 0 31 78 #001f4e + 0 32 91 #00205b + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 224 231 240 #e0e7f0 + 212 231 255 #d4e7ff + 197 233 255 #c5e9ff + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 196 203 213 #c4cbd5 + 186 204 229 #bacce5 + 174 205 247 #aecdf7 + 158 206 255 #9eceff + 141 206 255 #8dceff + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 169 176 187 #a9b0bb + 160 177 202 #a0b1ca + 150 178 217 #96b2d9 + 137 178 232 #89b2e8 + 121 179 249 #79b3f9 + 95 180 255 #5fb4ff + 63 180 255 #3fb4ff + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 143 150 162 #8f96a2 + 135 151 175 #8797af + 124 151 191 #7c97bf + 113 151 205 #7197cd + 97 152 219 #6198db + 73 153 235 #4999eb + 26 153 252 #1a99fc + 0 154 255 #009aff + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 117 124 137 #757c89 + 109 124 150 #6d7c96 + 98 125 164 #627da4 + 85 125 178 #557db2 + 68 125 192 #447dc0 + 39 126 206 #277ece + 0 126 220 #007edc + 0 126 236 #007eec + 0 126 252 #007efc + 0 126 255 #007eff + 122 122 122 #7a7a7a + 0 125 255 #007dff + 122 122 122 #7a7a7a + 122 122 122 #7a7a7a + 97 97 97 #616161 + 91 98 112 #5b6270 + 83 98 125 #53627d + 72 99 139 #48638b + 56 99 153 #386399 + 33 99 166 #2163a6 + 0 99 178 #0063b2 + 0 99 192 #0063c0 + 0 99 207 #0063cf + 0 99 222 #0063de + 0 98 239 #0062ef + 0 97 253 #0061fd + 0 95 255 #005fff + 0 94 255 #005eff + 0 93 255 #005dff + 72 72 72 #484848 + 65 73 88 #414958 + 56 73 102 #384966 + 43 74 115 #2b4a73 + 22 74 128 #164a80 + 0 74 141 #004a8d + 0 73 155 #00499b + 0 73 168 #0049a8 + 0 72 182 #0048b6 + 0 71 196 #0047c4 + 0 70 208 #0046d0 + 0 68 220 #0044dc + 0 67 234 #0043ea + 0 65 243 #0041f3 + 0 63 254 #003ffe + 49 49 49 #313131 + 44 50 64 #2c3240 + 34 50 76 #22324c + 18 50 90 #12325a + 0 50 103 #003267 + 0 49 116 #003174 + 0 49 128 #003180 + 0 47 142 #002f8e + 0 45 156 #002d9c + 0 44 168 #002ca8 + 0 42 176 #002ab0 + 0 40 186 #0028ba + 0 37 198 #0025c6 + 0 35 207 #0023cf + 0 33 212 #0021d4 + 29 29 29 #1d1d1d + 22 29 43 #161d2b + 12 29 54 #0c1d36 + 0 29 66 #001d42 + 0 28 78 #001c4e + 0 27 91 #001b5b + 0 25 103 #001967 + 0 23 112 #001770 + 0 20 123 #00147b + 0 17 131 #001183 + 0 13 141 #000d8d + 0 8 149 #000895 + 0 2 158 #00029e + 0 0 167 #0000a7 + 0 0 176 #0000b0 + 227 227 227 #e3e3e3 + 227 230 240 #e3e6f0 + 221 229 255 #dde5ff + 214 229 255 #d6e5ff + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 200 202 213 #c8cad5 + 194 202 229 #c2cae5 + 188 201 246 #bcc9f6 + 181 200 255 #b5c8ff + 174 199 255 #aec7ff + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 173 175 187 #adafbb + 168 175 202 #a8afca + 164 174 217 #a4aed9 + 158 173 233 #9eade9 + 152 172 249 #98acf9 + 145 171 255 #91abff + 137 170 255 #89aaff + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 147 149 162 #9395a2 + 143 148 175 #8f94af + 138 147 190 #8a93be + 134 147 203 #8693cb + 129 146 217 #8192d9 + 122 144 233 #7a90e9 + 114 143 249 #728ff9 + 102 141 255 #668dff + 96 139 255 #608bff + 88 136 255 #5888ff + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 120 123 137 #787b89 + 117 122 150 #757a96 + 112 121 164 #7079a4 + 108 120 178 #6c78b2 + 103 119 190 #6777be + 98 117 204 #6275cc + 91 116 218 #5b74da + 84 114 232 #5472e8 + 78 111 247 #4e6ff7 + 73 107 255 #496bff + 70 103 255 #4667ff + 67 97 255 #4361ff + 58 92 255 #3a5cff + 122 122 122 #7a7a7a + 97 97 97 #616161 + 95 97 112 #5f6170 + 92 96 125 #5c607d + 88 95 138 #585f8a + 83 94 152 #535e98 + 78 92 165 #4e5ca5 + 73 91 177 #495bb1 + 68 88 189 #4458bd + 65 85 202 #4155ca + 63 81 215 #3f51d7 + 62 76 229 #3e4ce5 + 62 71 239 #3e47ef + 63 65 250 #3f41fa + 65 57 255 #4139ff + 66 49 255 #4231ff + 72 72 72 #484848 + 70 72 89 #464859 + 66 71 102 #424766 + 63 69 115 #3f4573 + 59 68 127 #3b447f + 55 66 140 #37428c + 52 63 151 #343f97 + 50 59 164 #323ba4 + 50 54 176 #3236b0 + 52 49 185 #3431b9 + 54 43 194 #362bc2 + 57 33 205 #3921cd + 60 18 215 #3c12d7 + 63 0 224 #3f00e0 + 66 0 232 #4200e8 + 49 49 49 #313131 + 48 49 64 #303140 + 45 48 77 #2d304d + 42 46 89 #2a2e59 + 38 44 101 #262c65 + 37 41 112 #252970 + 37 37 122 #25257a + 39 31 132 #271f84 + 42 24 141 #2a188d + 45 11 151 #2d0b97 + 49 0 159 #31009f + 53 0 169 #3500a9 + 56 0 177 #3800b1 + 60 0 185 #3c00b9 + 64 0 193 #4000c1 + 29 29 29 #1d1d1d + 27 28 44 #1b1c2c + 25 26 54 #191a36 + 23 24 65 #171841 + 23 20 76 #17144c + 25 15 84 #190f54 + 28 7 93 #1c075d + 32 0 101 #200065 + 37 0 110 #25006e + 40 0 117 #280075 + 44 0 125 #2c007d + 48 0 133 #300085 + 52 0 141 #34008d + 57 0 151 #390097 + 62 0 161 #3e00a1 + 227 227 227 #e3e3e3 + 230 229 239 #e6e5ef + 228 227 255 #e4e3ff + 224 226 255 #e0e2ff + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 202 202 212 #cacad4 + 201 200 228 #c9c8e4 + 200 198 244 #c8c6f4 + 200 195 255 #c8c3ff + 200 192 255 #c8c0ff + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 175 175 187 #afafbb + 175 173 201 #afadc9 + 174 171 215 #aeabd7 + 174 169 230 #aea9e6 + 173 167 245 #ada7f5 + 174 164 255 #aea4ff + 175 160 255 #afa0ff + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 149 148 161 #9594a1 + 149 147 174 #9593ae + 149 145 188 #9591bc + 149 143 201 #958fc9 + 149 140 214 #958cd6 + 149 138 228 #958ae4 + 149 134 242 #9586f2 + 150 130 255 #9682ff + 151 127 255 #977fff + 152 122 255 #987aff + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 124 122 136 #7c7a88 + 124 120 149 #7c7895 + 124 118 163 #7c76a3 + 124 116 175 #7c74af + 125 113 187 #7d71bb + 125 110 199 #7d6ec7 + 126 107 212 #7e6bd4 + 127 103 224 #7f67e0 + 129 99 235 #8163eb + 132 94 247 #845ef7 + 135 87 255 #8757ff + 138 80 255 #8a50ff + 142 69 255 #8e45ff + 122 122 122 #7a7a7a + 97 97 97 #616161 + 98 96 112 #626070 + 99 94 124 #635e7c + 99 92 137 #635c89 + 100 89 149 #645995 + 101 86 160 #6556a0 + 102 83 172 #6653ac + 104 79 183 #684fb7 + 107 74 194 #6b4ac2 + 110 69 204 #6e45cc + 113 61 216 #713dd8 + 116 54 224 #7436e0 + 120 44 234 #782cea + 125 27 245 #7d1bf5 + 128 0 254 #8000fe + 72 72 72 #484848 + 74 71 88 #4a4758 + 75 68 101 #4b4465 + 76 66 113 #4c4271 + 77 63 124 #4d3f7c + 79 59 135 #4f3b87 + 81 55 145 #513791 + 84 49 156 #54319c + 88 42 166 #582aa6 + 92 33 175 #5c21af + 96 19 184 #6013b8 + 100 0 193 #6400c1 + 104 0 203 #6800cb + 108 0 212 #6c00d4 + 113 0 221 #7100dd + 49 49 49 #313131 + 51 48 64 #333040 + 53 45 75 #352d4b + 54 43 85 #362b55 + 56 39 96 #382760 + 59 34 106 #3b226a + 62 28 115 #3e1c73 + 65 19 124 #41137c + 69 4 133 #450485 + 74 0 142 #4a008e + 78 0 151 #4e0097 + 83 0 160 #5300a0 + 87 0 168 #5700a8 + 92 0 177 #5c00b1 + 97 0 186 #6100ba + 29 29 29 #1d1d1d + 31 27 44 #1f1b2c + 33 24 53 #211835 + 35 20 63 #23143f + 38 15 71 #260f47 + 41 8 79 #29084f + 45 0 87 #2d0057 + 49 0 95 #31005f + 53 0 103 #350067 + 57 0 110 #39006e + 62 0 118 #3e0076 + 66 0 126 #42007e + 71 0 134 #470086 + 77 0 145 #4d0091 + 83 0 155 #53009b + 227 227 227 #e3e3e3 + 231 228 239 #e7e4ef + 234 226 255 #eae2ff + 237 222 255 #eddeff + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 204 201 212 #ccc9d4 + 207 198 226 #cfc6e2 + 210 196 240 #d2c4f0 + 213 192 255 #d5c0ff + 219 187 255 #dbbbff + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 178 174 186 #b2aeba + 181 172 199 #b5acc7 + 183 169 212 #b7a9d4 + 187 166 225 #bba6e1 + 190 162 238 #bea2ee + 195 158 252 #c39efc + 200 153 255 #c899ff + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 152 147 161 #9893a1 + 155 145 172 #9b91ac + 158 142 185 #9e8eb9 + 161 139 197 #a18bc5 + 165 136 209 #a588d1 + 169 132 220 #a984dc + 173 127 232 #ad7fe8 + 179 121 244 #b379f4 + 183 117 254 #b775fe + 189 109 255 #bd6dff + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 126 121 135 #7e7987 + 129 119 147 #817793 + 132 116 159 #84749f + 136 112 171 #8870ab + 140 109 181 #8c6db5 + 144 104 192 #9068c0 + 149 100 202 #9564ca + 153 94 213 #995ed5 + 158 89 222 #9e59de + 163 81 233 #a351e9 + 168 72 244 #a848f4 + 173 61 254 #ad3dfe + 179 46 255 #b32eff + 122 122 122 #7a7a7a + 97 97 97 #616161 + 101 95 111 #655f6f + 105 92 123 #695c7b + 108 89 133 #6c5985 + 112 86 144 #705690 + 116 81 154 #74519a + 121 77 164 #794da4 + 125 71 174 #7d47ae + 130 64 184 #8240b8 + 135 56 193 #8738c1 + 140 45 204 #8c2dcc + 145 33 211 #9121d3 + 150 5 220 #9605dc + 155 0 230 #9b00e6 + 160 0 239 #a000ef + 72 72 72 #484848 + 77 70 87 #4d4657 + 81 66 99 #514263 + 85 63 109 #553f6d + 89 59 119 #593b77 + 94 53 129 #5e3581 + 99 47 138 #632f8a + 104 39 148 #682794 + 109 28 157 #6d1c9d + 113 8 165 #7108a5 + 118 0 173 #7600ad + 124 0 182 #7c00b6 + 129 0 192 #8100c0 + 134 0 200 #8600c8 + 140 0 210 #8c00d2 + 49 49 49 #313131 + 54 47 63 #362f3f + 58 44 73 #3a2c49 + 62 40 81 #3e2851 + 67 35 91 #43235b + 71 28 100 #471c64 + 76 19 109 #4c136d + 81 3 117 #510375 + 85 0 125 #55007d + 91 0 133 #5b0085 + 96 0 142 #60008e + 101 0 150 #650096 + 107 0 160 #6b00a0 + 113 0 169 #7100a9 + 120 0 179 #7800b3 + 29 29 29 #1d1d1d + 34 26 43 #221a2b + 38 22 51 #261633 + 42 17 59 #2a113b + 47 10 67 #2f0a43 + 51 1 74 #33014a + 56 0 82 #380052 + 60 0 89 #3c0059 + 65 0 97 #410061 + 69 0 103 #450067 + 74 0 110 #4a006e + 79 0 118 #4f0076 + 85 0 126 #55007e + 92 0 137 #5c0089 + 98 0 146 #620092 + 227 227 227 #e3e3e3 + 233 228 238 #e9e4ee + 238 224 254 #eee0fe + 245 220 255 #f5dcff + 254 215 255 #fed7ff + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 206 201 211 #cec9d3 + 211 197 224 #d3c5e0 + 217 194 236 #d9c2ec + 223 189 250 #dfbdfa + 230 185 255 #e6b9ff + 236 180 255 #ecb4ff + 243 174 255 #f3aeff + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 180 174 185 #b4aeb9 + 185 170 197 #b9aac5 + 191 167 208 #bfa7d0 + 196 163 219 #c4a3db + 202 159 231 #ca9fe7 + 209 154 243 #d19af3 + 215 149 253 #d795fd + 222 142 255 #de8eff + 229 136 255 #e588ff + 236 127 255 #ec7fff + 245 116 255 #f574ff + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 154 147 160 #9a93a0 + 160 144 170 #a090aa + 165 140 181 #a58cb5 + 171 136 192 #ab88c0 + 176 132 202 #b084ca + 182 127 212 #b67fd4 + 189 122 223 #bd7adf + 195 116 233 #c374e9 + 201 109 243 #c96df3 + 207 101 254 #cf65fe + 216 88 255 #d858ff + 223 76 255 #df4cff + 231 56 255 #e738ff + 240 9 255 #f009ff + 122 122 122 #7a7a7a + 129 121 134 #817986 + 134 117 145 #867591 + 140 113 155 #8c719b + 146 109 166 #926da6 + 151 105 175 #9769af + 157 100 185 #9d64b9 + 163 94 194 #a35ec2 + 169 88 203 #a958cb + 175 80 212 #af50d4 + 181 71 221 #b547dd + 187 59 231 #bb3be7 + 194 42 241 #c22af1 + 200 11 249 #c80bf9 + 208 0 255 #d000ff + 97 97 97 #616161 + 104 94 110 #685e6e + 110 91 120 #6e5b78 + 115 87 130 #735782 + 120 83 139 #78538b + 126 78 148 #7e4e94 + 132 72 157 #84489d + 138 65 166 #8a41a6 + 145 56 176 #9138b0 + 150 45 184 #962db8 + 156 28 193 #9c1cc1 + 162 0 200 #a200c8 + 168 0 209 #a800d1 + 174 0 217 #ae00d9 + 181 0 227 #b500e3 + 72 72 72 #484848 + 80 69 86 #504556 + 86 65 96 #564160 + 92 61 105 #5c3d69 + 98 55 114 #623772 + 103 49 124 #67317c + 110 41 132 #6e2984 + 115 30 140 #731e8c + 121 11 149 #790b95 + 126 0 157 #7e009d + 132 0 164 #8400a4 + 138 0 172 #8a00ac + 145 0 181 #9100b5 + 151 0 189 #9700bd + 158 0 198 #9e00c6 + 49 49 49 #313131 + 57 46 62 #392e3e + 62 43 70 #3e2b46 + 67 38 78 #43264e + 73 32 87 #492057 + 79 24 95 #4f185f + 84 10 103 #540a67 + 90 0 111 #5a006f + 95 0 118 #5f0076 + 101 0 126 #65007e + 107 0 134 #6b0086 + 113 0 142 #71008e + 120 0 151 #780097 + 127 0 160 #7f00a0 + 135 0 170 #8700aa + 29 29 29 #1d1d1d + 37 25 42 #25192a + 42 20 49 #2a1431 + 47 15 56 #2f0f38 + 52 6 63 #34063f + 57 0 70 #390046 + 62 0 77 #3e004d + 67 0 84 #430054 + 73 0 91 #49005b + 77 0 97 #4d0061 + 83 0 104 #530068 + 89 0 112 #590070 + 94 0 118 #5e0076 + 102 0 128 #660080 + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 236 227 235 #ece3eb + 248 222 246 #f8def6 + 255 217 255 #ffd9ff + 255 210 255 #ffd2ff + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 209 200 208 #d1c8d0 + 219 195 218 #dbc3da + 228 191 227 #e4bfe3 + 239 185 238 #efb9ee + 248 179 247 #f8b3f7 + 255 173 255 #ffadff + 255 166 255 #ffa6ff + 255 159 255 #ff9fff + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 183 173 183 #b7adb7 + 192 169 191 #c0a9bf + 201 164 200 #c9a4c8 + 209 159 210 #d19fd2 + 219 154 219 #db9adb + 226 148 228 #e294e4 + 235 141 237 #eb8ded + 244 134 246 #f486f6 + 253 125 255 #fd7dff + 255 115 255 #ff73ff + 255 102 255 #ff66ff + 255 86 255 #ff56ff + 255 63 255 #ff3fff + 174 174 174 #aeaeae + 148 148 148 #949494 + 158 146 157 #9e929d + 166 142 165 #a68ea5 + 174 137 175 #ae89af + 182 133 183 #b685b7 + 190 127 192 #be7fc0 + 198 122 200 #c67ac8 + 206 115 209 #ce73d1 + 214 108 218 #d66cda + 221 99 226 #dd63e2 + 230 87 236 #e657ec + 239 73 246 #ef49f6 + 247 54 254 #f736fe + 255 0 255 #ff00ff + 148 148 148 #949494 + 122 122 122 #7a7a7a + 131 120 131 #837883 + 140 116 140 #8c748c + 148 111 149 #946f95 + 156 106 158 #9c6a9e + 163 101 166 #a365a6 + 171 94 175 #ab5eaf + 178 87 182 #b257b6 + 185 79 190 #b94fbe + 193 69 199 #c145c7 + 200 56 207 #c838cf + 208 34 216 #d022d8 + 214 0 223 #d600df + 222 0 231 #de00e7 + 229 0 240 #e500f0 + 97 97 97 #616161 + 107 93 108 #6b5d6c + 115 89 116 #735974 + 122 85 124 #7a557c + 129 80 133 #815085 + 136 74 140 #884a8c + 143 67 148 #8f4394 + 150 58 157 #963a9d + 158 46 165 #9e2ea5 + 165 28 173 #a51cad + 172 0 181 #ac00b5 + 178 0 188 #b200bc + 184 0 195 #b800c3 + 192 0 203 #c000cb + 199 0 211 #c700d3 + 72 72 72 #484848 + 83 68 84 #534454 + 91 63 93 #5b3f5d + 98 58 101 #623a65 + 105 52 109 #69346d + 112 44 117 #702c75 + 119 34 125 #77227d + 125 17 133 #7d1185 + 131 0 140 #83008c + 138 0 148 #8a0094 + 144 0 154 #90009a + 150 0 162 #9600a2 + 158 0 170 #9e00aa + 164 0 177 #a400b1 + 172 0 186 #ac00ba + 49 49 49 #313131 + 59 46 60 #3b2e3c + 65 41 68 #412944 + 71 37 75 #47254b + 78 29 83 #4e1d53 + 85 19 91 #55135b + 91 1 98 #5b0162 + 97 0 105 #610069 + 103 0 112 #670070 + 109 0 119 #6d0077 + 115 0 126 #73007e + 122 0 135 #7a0087 + 129 0 143 #81008f + 137 0 151 #890097 + 147 0 163 #9300a3 + 29 29 29 #1d1d1d + 38 24 41 #261829 + 44 19 48 #2c1330 + 49 13 54 #310d36 + 55 3 61 #37033d + 60 0 67 #3c0043 + 66 0 73 #420049 + 72 0 81 #480051 + 77 0 87 #4d0057 + 82 0 93 #52005d + 88 0 99 #580063 + 94 0 106 #5e006a + 99 0 112 #630070 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 238 227 234 #eee3ea + 252 221 242 #fcddf2 + 255 215 249 #ffd7f9 + 255 207 255 #ffcfff + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 210 200 207 #d2c8cf + 223 195 214 #dfc3d6 + 235 189 221 #ebbddd + 247 183 229 #f7b7e5 + 255 176 237 #ffb0ed + 255 169 244 #ffa9f4 + 255 160 253 #ffa0fd + 255 152 255 #ff98ff + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 185 172 181 #b9acb5 + 196 168 188 #c4a8bc + 207 162 195 #cfa2c3 + 218 157 202 #da9dca + 228 150 209 #e496d1 + 238 144 216 #ee90d8 + 248 137 223 #f889df + 255 127 231 #ff7fe7 + 255 117 239 #ff75ef + 255 105 246 #ff69f6 + 255 89 255 #ff59ff + 255 70 255 #ff46ff + 255 40 255 #ff28ff + 174 174 174 #aeaeae + 148 148 148 #949494 + 160 146 155 #a0929b + 169 141 162 #a98da2 + 180 136 169 #b488a9 + 190 130 176 #be82b0 + 199 124 183 #c77cb7 + 209 117 189 #d175bd + 218 109 197 #da6dc5 + 227 101 203 #e365cb + 235 91 210 #eb5bd2 + 245 77 218 #f54dda + 254 59 225 #fe3be1 + 255 31 233 #ff1fe9 + 255 0 241 #ff00f1 + 255 0 249 #ff00f9 + 122 122 122 #7a7a7a + 133 119 130 #857782 + 144 115 136 #907388 + 154 109 143 #9a6d8f + 164 103 151 #a46797 + 172 97 157 #ac619d + 181 89 164 #b559a4 + 190 81 171 #be51ab + 198 71 177 #c647b1 + 206 58 184 #ce3ab8 + 215 38 191 #d726bf + 223 0 197 #df00c5 + 230 0 204 #e600cc + 240 0 212 #f000d4 + 247 0 218 #f700da + 97 97 97 #616161 + 109 93 105 #6d5d69 + 119 88 112 #775870 + 128 83 119 #805377 + 136 77 126 #884d7e + 144 70 132 #904684 + 153 61 139 #993d8b + 161 51 146 #a13392 + 168 37 152 #a82598 + 177 0 160 #b100a0 + 186 0 168 #ba00a8 + 192 0 173 #c000ad + 199 0 179 #c700b3 + 207 0 186 #cf00ba + 215 0 193 #d700c1 + 72 72 72 #484848 + 85 68 82 #554452 + 94 62 89 #5e3e59 + 102 57 96 #663960 + 111 49 103 #6f3167 + 119 40 110 #77286e + 127 25 118 #7f1976 + 134 0 124 #86007c + 141 0 130 #8d0082 + 148 0 138 #94008a + 155 0 143 #9b008f + 162 0 150 #a20096 + 169 0 157 #a9009d + 176 0 164 #b000a4 + 186 0 173 #ba00ad + 49 49 49 #313131 + 61 45 59 #3d2d3b + 68 41 65 #442941 + 75 35 71 #4b2347 + 83 26 79 #531a4f + 89 14 85 #590e55 + 96 0 92 #60005c + 103 0 99 #670063 + 110 0 106 #6e006a + 117 0 112 #750070 + 123 0 119 #7b0077 + 131 0 126 #83007e + 139 0 135 #8b0087 + 147 0 143 #93008f + 160 0 155 #a0009b + 29 29 29 #1d1d1d + 40 24 39 #281827 + 46 19 46 #2e132e + 52 11 52 #340b34 + 58 1 58 #3a013a + 63 0 64 #3f0040 + 69 0 70 #450046 + 75 0 77 #4b004d + 81 0 83 #510053 + 86 0 88 #560058 + 92 0 95 #5c005f + 98 0 101 #620065 + 105 0 108 #69006c + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 239 227 232 #efe3e8 + 255 221 237 #ffdded + 255 214 241 #ffd6f1 + 255 206 247 #ffcef7 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 212 199 205 #d4c7cd + 226 194 209 #e2c2d1 + 241 187 213 #f1bbd5 + 255 181 218 #ffb5da + 255 174 223 #ffaedf + 255 165 229 #ffa5e5 + 255 155 234 #ff9bea + 255 145 240 #ff91f0 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 187 172 179 #bbacb3 + 200 167 183 #c8a7b7 + 213 161 188 #d5a1bc + 225 154 192 #e19ac0 + 237 148 197 #ed94c5 + 248 140 202 #f88cca + 255 132 207 #ff84cf + 255 121 213 #ff79d5 + 255 108 218 #ff6cda + 255 92 224 #ff5ce0 + 255 75 230 #ff4be6 + 255 56 234 #ff38ea + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 161 145 153 #a19199 + 173 140 157 #ad8c9d + 186 134 162 #ba86a2 + 196 128 166 #c480a6 + 207 122 171 #cf7aab + 218 114 176 #da72b0 + 229 105 181 #e569b5 + 239 94 186 #ef5eba + 249 82 191 #f952bf + 255 64 197 #ff40c5 + 255 42 201 #ff2ac9 + 255 0 207 #ff00cf + 255 0 212 #ff00d4 + 255 0 217 #ff00d9 + 122 122 122 #7a7a7a + 135 119 127 #87777f + 147 114 132 #937284 + 159 108 137 #9f6c89 + 171 100 142 #ab648e + 180 94 147 #b45e93 + 191 85 152 #bf5598 + 200 75 157 #c84b9d + 209 62 161 #d13ea1 + 218 45 166 #da2da6 + 227 10 171 #e30aab + 237 0 177 #ed00b1 + 244 0 181 #f400b5 + 253 0 186 #fd00ba + 255 0 192 #ff00c0 + 97 97 97 #616161 + 111 93 103 #6f5d67 + 122 87 108 #7a576c + 133 81 113 #855171 + 143 74 117 #8f4a75 + 152 66 122 #98427a + 162 56 127 #a2387f + 170 43 132 #aa2b84 + 179 22 137 #b31689 + 188 0 142 #bc008e + 198 0 148 #c60094 + 206 0 153 #ce0099 + 214 0 158 #d6009e + 221 0 163 #dd00a3 + 231 0 169 #e700a9 + 72 72 72 #484848 + 87 67 79 #57434f + 98 61 84 #623d54 + 108 55 89 #6c3759 + 117 46 94 #752e5e + 126 34 100 #7e2264 + 135 15 105 #870f69 + 143 0 110 #8f006e + 152 0 115 #980073 + 160 0 121 #a00079 + 167 0 125 #a7007d + 176 0 131 #b00083 + 184 0 136 #b80088 + 191 0 141 #bf008d + 72 72 72 #484848 + 49 49 49 #313131 + 63 44 56 #3f2c38 + 71 40 61 #47283d + 79 33 66 #4f2142 + 88 23 72 #581748 + 95 5 78 #5f054e + 103 0 83 #670053 + 111 0 89 #6f0059 + 119 0 95 #77005f + 126 0 101 #7e0065 + 133 0 106 #85006a + 142 0 113 #8e0071 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 41 23 38 #291726 + 48 18 44 #30122c + 54 10 49 #360a31 + 61 0 55 #3d0037 + 67 0 61 #43003d + 72 0 66 #480042 + 79 0 72 #4f0048 + 85 0 78 #55004e + 90 0 83 #5a0053 + 97 0 90 #61005a + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 241 226 230 #f1e2e6 + 255 220 231 #ffdce7 + 255 212 232 #ffd4e8 + 255 205 234 #ffcdea + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 213 199 203 #d5c7cb + 230 193 204 #e6c1cc + 246 186 205 #f6bacd + 255 179 207 #ffb3cf + 255 171 208 #ffabd0 + 255 161 211 #ffa1d3 + 255 151 213 #ff97d5 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 188 172 177 #bcacb1 + 203 166 178 #cba6b2 + 218 160 179 #daa0b3 + 232 153 181 #e899b5 + 244 146 182 #f492b6 + 255 137 184 #ff89b8 + 255 127 187 #ff7fbb + 255 115 189 #ff73bd + 255 101 192 #ff65c0 + 255 87 195 #ff57c3 + 255 67 197 #ff43c5 + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 163 145 150 #a39196 + 177 140 152 #b18c98 + 191 133 153 #bf8599 + 203 127 155 #cb7f9b + 214 120 157 #d6789d + 227 111 159 #e36f9f + 238 100 162 #ee64a2 + 249 88 164 #f958a4 + 255 74 167 #ff4aa7 + 255 48 170 #ff30aa + 255 7 172 #ff07ac + 255 0 175 #ff00af + 255 0 178 #ff00b2 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 137 119 125 #89777d + 151 113 126 #97717e + 164 106 128 #a46a80 + 177 99 130 #b16382 + 188 91 132 #bc5b84 + 200 80 135 #c85087 + 210 69 137 #d24589 + 220 53 140 #dc358c + 230 29 143 #e61d8f + 240 0 145 #f00091 + 249 0 148 #f90094 + 255 0 152 #ff0098 + 255 0 155 #ff009b + 255 0 158 #ff009e + 97 97 97 #616161 + 113 92 100 #715c64 + 126 86 102 #7e5666 + 138 79 104 #8a4f68 + 149 71 107 #95476b + 159 63 109 #9f3f6d + 169 51 112 #a93370 + 179 35 115 #b32373 + 188 0 118 #bc0076 + 198 0 122 #c6007a + 208 0 126 #d0007e + 216 0 129 #d80081 + 226 0 133 #e20085 + 236 0 138 #ec008a + 97 97 97 #616161 + 72 72 72 #484848 + 89 67 76 #59434c + 101 60 79 #653c4f + 112 53 82 #703552 + 122 43 85 #7a2b55 + 132 30 89 #841e59 + 141 4 92 #8d045c + 150 0 97 #960061 + 159 0 101 #9f0065 + 167 0 105 #a70069 + 175 0 108 #af006c + 187 0 115 #bb0073 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 64 44 54 #402c36 + 73 39 58 #49273a + 82 32 61 #52203d + 91 20 66 #5b1442 + 100 0 70 #640046 + 108 0 75 #6c004b + 116 0 80 #740050 + 125 0 84 #7d0054 + 132 0 88 #840058 + 141 0 94 #8d005e + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 43 23 36 #2b1724 + 50 17 41 #321129 + 57 8 46 #39082e + 64 0 51 #400033 + 70 0 55 #460037 + 77 0 60 #4d003c + 83 0 65 #530041 + 89 0 69 #590045 + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 227 227 227 #e3e3e3 + 242 226 229 #f2e2e5 + 255 219 227 #ffdbe3 + 255 212 225 #ffd4e1 + 255 205 225 #ffcde1 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 227 227 227 #e3e3e3 + 200 200 200 #c8c8c8 + 214 199 202 #d6c7ca + 232 193 200 #e8c1c8 + 249 186 199 #f9bac7 + 255 178 198 #ffb2c6 + 255 170 197 #ffaac5 + 255 159 197 #ff9fc5 + 255 149 197 #ff95c5 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 200 200 200 #c8c8c8 + 174 174 174 #aeaeae + 189 172 175 #bdacaf + 205 166 174 #cda6ae + 221 159 173 #dd9fad + 235 152 172 #eb98ac + 248 145 172 #f891ac + 255 135 172 #ff87ac + 255 124 172 #ff7cac + 255 112 172 #ff70ac + 255 97 174 #ff61ae + 255 81 174 #ff51ae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 174 174 174 #aeaeae + 148 148 148 #949494 + 164 145 149 #a49195 + 179 139 148 #b38b94 + 194 132 147 #c28493 + 206 126 146 #ce7e92 + 219 118 146 #db7692 + 231 109 146 #e76d92 + 243 98 147 #f36293 + 255 84 148 #ff5494 + 255 69 149 #ff4595 + 255 41 150 #ff2996 + 255 0 151 #ff0097 + 255 0 152 #ff0098 + 148 148 148 #949494 + 148 148 148 #949494 + 122 122 122 #7a7a7a + 138 119 123 #8a777b + 153 113 122 #99717a + 167 106 122 #a76a7a + 181 98 122 #b5627a + 192 89 122 #c0597a + 204 78 122 #cc4e7a + 214 66 123 #d6427b + 225 49 124 #e1317c + 235 18 125 #eb127d + 246 0 127 #f6007f + 255 0 128 #ff0080 + 255 0 130 #ff0082 + 255 0 132 #ff0084 + 255 0 133 #ff0085 + 97 97 97 #616161 + 114 92 97 #725c61 + 128 86 97 #805661 + 141 79 97 #8d4f61 + 153 70 98 #994662 + 163 61 98 #a33d62 + 174 48 100 #ae3064 + 184 29 101 #b81d65 + 194 0 103 #c20067 + 204 0 105 #cc0069 + 215 0 107 #d7006b + 223 0 109 #df006d + 233 0 112 #e90070 + 97 97 97 #616161 + 97 97 97 #616161 + 72 72 72 #484848 + 90 67 73 #5a4349 + 103 60 74 #673c4a + 115 52 75 #73344b + 126 42 77 #7e2a4d + 136 27 78 #881b4e + 146 0 80 #920050 + 156 0 83 #9c0053 + 165 0 85 #a50055 + 174 0 88 #ae0058 + 183 0 91 #b7005b + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 72 72 72 #484848 + 49 49 49 #313131 + 65 44 52 #412c34 + 75 38 55 #4b2637 + 84 31 57 #541f39 + 94 19 60 #5e133c + 103 0 63 #67003f + 112 0 67 #700043 + 120 0 71 #780047 + 128 0 74 #80004a + 137 0 78 #89004e + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 49 49 49 #313131 + 29 29 29 #1d1d1d + 44 23 34 #2c1722 + 52 16 38 #341026 + 59 6 42 #3b062a + 66 0 46 #42002e + 74 0 50 #4a0032 + 81 0 54 #510036 + 87 0 58 #57003a + 94 0 61 #5e003d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d + 29 29 29 #1d1d1d -- cgit v1.2.3 From 8825db4e6132bada6cd86b93e6591aa3a53e86b7 Mon Sep 17 00:00:00 2001 From: Uli Schlachter Date: Mon, 26 Jun 2017 09:10:12 +0200 Subject: select-tool: Only stop the rubberband when it was started Rubberband::stop() calls SPCanvas::endForcedFullRedraws(), which means possible no full redraw will happen while moving. Fixes: https://bugs.launchpad.net/inkscape/+bug/1510704 Signed-off-by: Uli Schlachter --- src/ui/tools/select-tool.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ui/tools/select-tool.cpp b/src/ui/tools/select-tool.cpp index bae1793ed..927b8a3d4 100644 --- a/src/ui/tools/select-tool.cpp +++ b/src/ui/tools/select-tool.cpp @@ -566,7 +566,9 @@ bool SelectTool::root_handler(GdkEvent* event) { /* User has dragged fast, so we get events on root (lauris)*/ // not only that; we will end up here when ctrl-dragging as well // and also when we started within tolerance, but trespassed tolerance outside of item - Inkscape::Rubberband::get(desktop)->stop(); + if (Inkscape::Rubberband::get(desktop)->is_started()) { + Inkscape::Rubberband::get(desktop)->stop(); + } this->defaultMessageContext()->clear(); item_at_point = desktop->getItemAtPoint(Geom::Point(event->button.x, event->button.y), FALSE); -- cgit v1.2.3 From fa8a2ee7e2539b145a87ac9af0d9748effa91631 Mon Sep 17 00:00:00 2001 From: Alexander Valavanis Date: Tue, 27 Jun 2017 15:03:58 +0200 Subject: GdkScreen deprecation fixes --- CMakeScripts/DefineDependsandFlags.cmake | 12 +++++++++ config.h.cmake | 3 +++ src/sp-namedview.cpp | 46 +++++++++++++++++++++++++------- src/ui/dialog/dialog.cpp | 20 +++++++++++++- src/ui/interface.cpp | 29 +++++++++++++++----- 5 files changed, 93 insertions(+), 17 deletions(-) diff --git a/CMakeScripts/DefineDependsandFlags.cmake b/CMakeScripts/DefineDependsandFlags.cmake index 52410fb2b..1fead418a 100644 --- a/CMakeScripts/DefineDependsandFlags.cmake +++ b/CMakeScripts/DefineDependsandFlags.cmake @@ -258,6 +258,18 @@ set(TRY_GTKSPELL ON) set (WITH_GTKMM_3_10 ON) endif() + # Check whether we can use new features in Gtkmm 3.22 + # TODO: Drop this test and bump the version number in the GTK test above + # as soon as all supported distributions provide Gtkmm >= 3.22 + pkg_check_modules(GTKMM_3_22 + gtkmm-3.0>=3.22, + ) + + if("${GTKMM_3_22_FOUND}") + message("Using Gtkmm 3.22 build") + set (WITH_GTKMM_3_22 ON) + endif() + pkg_check_modules(GDL_3_6 gdl-3.0>=3.6) if("${GDL_3_6_FOUND}") diff --git a/config.h.cmake b/config.h.cmake index 35e9818a9..2cd660d87 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -56,6 +56,9 @@ /* Build with Gtkmm 3.10.x or higher */ #cmakedefine WITH_GTKMM_3_10 1 +/* Build with Gtkmm 3.22.x or higher */ +#cmakedefine WITH_GTKMM_3_22 1 + /* Build with GDL 3.6 or higher */ #cmakedefine WITH_GDL_3_6 1 diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index c40006a92..a3a5617e1 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -37,6 +37,12 @@ #include "sp-root.h" #include +#if WITH_GTKMM_3_22 +# include +#else +# include +#endif + using Inkscape::DocumentUndo; using Inkscape::Util::unit_table; @@ -742,9 +748,22 @@ gdouble const NEWDOC_Y_SCALE = NEWDOC_X_SCALE; Geom::Point calcAnchorPoint(gint const x, gint const y, gint const w, gint const h, gint const minOnscreen) { +#if WITH_GTKMM_3_22 + Gdk::Rectangle screen_geometry; + + auto const display = Gdk::Display::get_default(); + auto const monitor = display->get_primary_monitor(); + monitor->get_geometry(screen_geometry); + int screen_width = screen_geometry.get_width(); + int screen_height = screen_geometry.get_height(); +#else + int screen_width = gdk_screen_width(); + int screen_height = gdk_screen_height(); +#endif + // prevent the window from moving off the screen to the right or to the bottom - gint ax = MIN(gdk_screen_width() - minOnscreen, x); - gint ay = MIN(gdk_screen_height() - minOnscreen, y); + gint ax = MIN(screen_width - minOnscreen, x); + gint ay = MIN(screen_height - minOnscreen, y); // prevent the window from moving off the screen to the left or to the top ax = MAX(minOnscreen - w, ax); @@ -778,16 +797,23 @@ void sp_namedview_window_from_document(SPDesktop *desktop) win->maximize(); } } else { - // gdk_screen_width() / gdk_screen_height() return the dimensions of all displays combined - // therefore we have to get the dimensions of one monitor explicitly (currently the primary monitor) + // TODO: account for multi-monitor setups (i.e. on which monitor do we want to display Inkscape?) - gint monitor_number; - GdkRectangle monitor_geometry; - monitor_number = gdk_screen_get_primary_monitor(gdk_screen_get_default()); - gdk_screen_get_monitor_geometry(gdk_screen_get_default(), monitor_number, &monitor_geometry); + Gdk::Rectangle monitor_geometry; + +#if WITH_GTKMM_3_22 + auto const display = Gdk::Display::get_default(); + auto const monitor = display->get_primary_monitor(); + monitor->get_geometry(monitor_geometry); +#else + auto const default_screen = Gdk::Screen::get_default(); + auto const monitor_number = default_screen->get_primary_monitor(); + default_screen->get_monitor_geometry(monitor_number, monitor_geometry); +#endif + + int w = monitor_geometry.get_width(); + int h = monitor_geometry.get_height(); - gint w = monitor_geometry.width; - gint h = monitor_geometry.height; bool move_to_screen = false; if (geometry_from_file and !new_document) { w = MIN(w, nv->window_width); diff --git a/src/ui/dialog/dialog.cpp b/src/ui/dialog/dialog.cpp index 27a6e55d9..39c913175 100644 --- a/src/ui/dialog/dialog.cpp +++ b/src/ui/dialog/dialog.cpp @@ -19,6 +19,11 @@ #include "dialog-manager.h" #include + +#if WITH_GTKMM_3_22 +# include +#endif + #include #include "inkscape.h" @@ -161,10 +166,23 @@ void Dialog::read_geometry() resize(w, h); } +#if WITH_GTKMM_3_22 + auto const display = Gdk::Display::get_default(); + auto const monitor = display->get_primary_monitor(); + + Gdk::Rectangle screen_geometry; + monitor->get_geometry(screen_geometry); + auto const screen_width = screen_geometry.get_width(); + auto const screen_height = screen_geometry.get_height(); +#else + auto const screen_width = gdk_screen_width(); + auto const screen_height = gdk_screen_width(); +#endif + // If there are stored values for where the dialog should be // located, then restore the dialog to that position. // also check if (x,y) is actually onscreen with the current screen dimensions - if ( (x >= 0) && (y >= 0) && (x < (gdk_screen_width()-MIN_ONSCREEN_DISTANCE)) && (y < (gdk_screen_height()-MIN_ONSCREEN_DISTANCE)) ) { + if ( (x >= 0) && (y >= 0) && (x < (screen_width-MIN_ONSCREEN_DISTANCE)) && (y < (screen_height-MIN_ONSCREEN_DISTANCE)) ) { move(x, y); } else { // ...otherwise just put it in the middle of the screen diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index 7e80c1a2f..9abc1f07b 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -30,6 +30,10 @@ #include #include +#if WITH_GTKMM_3_22 +# include +#endif + #include "inkscape.h" #include "extension/db.h" #include "extension/effect.h" @@ -176,13 +180,26 @@ sp_create_window(SPViewWidget *vw, bool editable) gint full = prefs->getBool("/desktop/geometry/fullscreen"); gint maxed = prefs->getBool("/desktop/geometry/maximized"); if (pw>0 && ph>0) { - gint w = MIN(gdk_screen_width(), pw); - gint h = MIN(gdk_screen_height(), ph); - gint x = MIN(gdk_screen_width() - MIN_ONSCREEN_DISTANCE, px); - gint y = MIN(gdk_screen_height() - MIN_ONSCREEN_DISTANCE, py); +#if WITH_GTKMM_3_22 + auto const display = Gdk::Display::get_default(); + auto const monitor = display->get_primary_monitor(); + + // A Gdk::Rectangle in "application pixel" units + Gdk::Rectangle screen_geometry; + monitor->get_geometry(screen_geometry); + auto const screen_width = screen_geometry.get_width(); + auto const screen_height = screen_geometry.get_height(); +#else + auto const screen_width = gdk_screen_width(); + auto const screen_height = gdk_screen_height(); +#endif + gint w = MIN(screen_width, pw); + gint h = MIN(screen_height, ph); + gint x = MIN(screen_width - MIN_ONSCREEN_DISTANCE, px); + gint y = MIN(screen_height - MIN_ONSCREEN_DISTANCE, py); if (w>0 && h>0) { - x = MIN(gdk_screen_width() - w, x); - y = MIN(gdk_screen_height() - h, y); + x = MIN(screen_width - w, x); + y = MIN(screen_height - h, y); desktop->setWindowSize(w, h); } -- cgit v1.2.3 From 01c2a93d46c214b7e6afe55fd8815d66cf6be9c6 Mon Sep 17 00:00:00 2001 From: Alexander Valavanis Date: Tue, 27 Jun 2017 16:33:11 +0200 Subject: Initial addition of menu icons --- src/ui/interface.cpp | 80 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 48 insertions(+), 32 deletions(-) diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index 9abc1f07b..6c95c65a3 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -406,23 +406,6 @@ sp_ui_menu_deselect(gpointer object) view->tipsMessageContext()->clear(); } -/** - * Creates and attaches a scaled icon to the given menu item. - */ -static void -sp_ui_menuitem_add_icon( GtkWidget *item, gchar *icon_name ) -{ - static bool iconsInjected = false; - if ( !iconsInjected ) { - iconsInjected = true; - injectRenamedIcons(); - } - GtkWidget *icon; - - icon = sp_icon_new( Inkscape::ICON_SIZE_MENU, icon_name ); - gtk_widget_show(icon); - gtk_image_menu_item_set_image((GtkImageMenuItem *) item, icon); -} // end of sp_ui_menu_add_icon void sp_ui_dialog_title_string(Inkscape::Verb *verb, gchar *c) @@ -452,7 +435,6 @@ sp_ui_dialog_title_string(Inkscape::Verb *verb, gchar *c) } } - /** * Appends a custom menu UI from a verb. * @@ -460,25 +442,45 @@ sp_ui_dialog_title_string(Inkscape::Verb *verb, gchar *c) */ static GtkWidget *sp_ui_menu_append_item_from_verb(GtkMenu *menu, Inkscape::Verb *verb, Inkscape::UI::View::View *view, bool radio = false, GSList *group = NULL) { - SPAction *action; GtkWidget *item; + // Just create a menu separator if this isn't a real action. + // Otherwise, create a real menu item if (verb->get_code() == SP_VERB_NONE) { item = gtk_separator_menu_item_new(); } else { + SPAction *action = verb->get_action(Inkscape::ActionContext(view)); - action = verb->get_action(Inkscape::ActionContext(view)); if (!action) return NULL; + // Create a box to contain all the widgets (icon, label, accelerator) + // that will go inside the menu item + GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6); + + // If there is an image associated with the action, then we can add it as an + // icon for the menu item + if(action->image) { + GtkWidget *icon = gtk_image_new_from_icon_name(action->image, GTK_ICON_SIZE_MENU); + gtk_container_add(GTK_CONTAINER(box), icon); + } + + // Now create the label and add it to the menu item + GtkWidget *label = gtk_label_new_with_mnemonic(action->name); + gtk_label_set_markup_with_mnemonic( GTK_LABEL(label), action->name); + gtk_container_add(GTK_CONTAINER(box), label); + + // Create the menu item itself, either as a radio menu item, or just + // a regular menu item depending on whether the "radio" flag is set if (radio) { - item = gtk_radio_menu_item_new_with_mnemonic(group, action->name); + item = gtk_radio_menu_item_new(group); } else { - item = gtk_image_menu_item_new_with_mnemonic(action->name); + item = gtk_menu_item_new(); } - gtk_label_set_markup_with_mnemonic( GTK_LABEL(gtk_bin_get_child(GTK_BIN (item))), action->name); + // Finally, pack all the widgets into the menu item + gtk_container_add(GTK_CONTAINER(item), box); GtkAccelGroup *accel_group = sp_shortcut_get_accel_group(); gtk_menu_set_accel_group(menu, accel_group); @@ -498,9 +500,6 @@ static GtkWidget *sp_ui_menu_append_item_from_verb(GtkMenu *menu, Inkscape::Verb gtk_widget_set_sensitive(item, FALSE); } - if (action->image) { - sp_ui_menuitem_add_icon(item, action->image); - } gtk_widget_set_events(item, GDK_KEY_PRESS_MASK); g_object_set_data(G_OBJECT(item), "view", (gpointer) view); g_signal_connect( G_OBJECT(item), "activate", G_CALLBACK(sp_ui_menu_activate), action ); @@ -508,7 +507,7 @@ static GtkWidget *sp_ui_menu_append_item_from_verb(GtkMenu *menu, Inkscape::Verb g_signal_connect( G_OBJECT(item), "deselect", G_CALLBACK(sp_ui_menu_deselect_action), action ); } - gtk_widget_show(item); + gtk_widget_show_all(item); gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); return item; @@ -1607,6 +1606,7 @@ void ContextMenu::UnHideBelow(std::vector items) } } +// TODO: Update this to allow radio items to be used void ContextMenu::AppendItemFromVerb(Inkscape::Verb *verb)//, SPDesktop *view)//, bool radio, GSList *group) { SPAction *action; @@ -1622,7 +1622,25 @@ void ContextMenu::AppendItemFromVerb(Inkscape::Verb *verb)//, SPDesktop *view)// return; } - Gtk::ImageMenuItem *item = Gtk::manage(new Gtk::ImageMenuItem(action->name, true)); + // Create a box to contain all the widgets (icon, label, accelerator) + // that will go inside the menu item + auto const box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 6)); + + // If there is an image associated with the action, then we can add it as an + // icon for the menu item + if (action->image) { + auto const icon = Gtk::manage(new Gtk::Image()); + icon->set_from_icon_name(action->image, Gtk::ICON_SIZE_MENU); + box->add(*icon); + } + + // Now create the label and add it to the menu item (with mnemonic + auto const label = Gtk::manage(new Gtk::Label(action->name, true)); + box->add(*label); + + // Create the menu item itself, either as a radio menu item, or just + // a regular menu item depending on whether the "radio" flag is set + auto const item = Gtk::manage(new Gtk::MenuItem(*box)); sp_shortcut_add_accelerator(GTK_WIDGET(item->gobj()), sp_shortcut_get_primary(verb)); @@ -1633,14 +1651,12 @@ void ContextMenu::AppendItemFromVerb(Inkscape::Verb *verb)//, SPDesktop *view)// item->set_sensitive(FALSE); } - if (action->image) { - sp_ui_menuitem_add_icon((GtkWidget*)item->gobj(), action->image); - } + item->set_events(Gdk::KEY_PRESS_MASK); item->signal_activate().connect(sigc::bind(sigc::ptr_fun(sp_ui_menu_activate),item,action)); item->signal_select().connect(sigc::bind(sigc::ptr_fun(sp_ui_menu_select_action),item,action)); item->signal_deselect().connect(sigc::bind(sigc::ptr_fun(sp_ui_menu_deselect_action),item,action)); - item->show(); + item->show_all(); append(*item); } } -- cgit v1.2.3 From c951edaa91414fd5dfddb745de49baf777f72075 Mon Sep 17 00:00:00 2001 From: Alexander Valavanis Date: Tue, 27 Jun 2017 17:11:48 +0200 Subject: color wheel: Temp fix for Gtk+ style properties --- src/widgets/gimp/gimpcolorwheel.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/widgets/gimp/gimpcolorwheel.c b/src/widgets/gimp/gimpcolorwheel.c index 212391497..351201121 100644 --- a/src/widgets/gimp/gimpcolorwheel.c +++ b/src/widgets/gimp/gimpcolorwheel.c @@ -307,6 +307,20 @@ gimp_color_wheel_get_preferred_width (GtkWidget *widget, gint *minimum_width, gint *natural_width) { +// TODO: Sync this fix with the upstream GIMP code when available +#if GTK_CHECK_VERSION(3,14,0) + gint outline_width; + gint padding; + gint outline_offset; + + gtk_widget_style_get (widget, + "outline-width", &outline_width, + "padding", &padding, + "outline-offset", &outline_offset, + NULL); + + *minimum_width = *natural_width = DEFAULT_SIZE + 2 * (outline_width + padding + outline_offset); +#else gint focus_width; gint focus_pad; @@ -316,6 +330,7 @@ gimp_color_wheel_get_preferred_width (GtkWidget *widget, NULL); *minimum_width = *natural_width = DEFAULT_SIZE + 2 * (focus_width + focus_pad); +#endif } static void @@ -323,6 +338,20 @@ gimp_color_wheel_get_preferred_height (GtkWidget *widget, gint *minimum_height, gint *natural_height) { +// TODO: Sync this fix with the upstream GIMP code when available +#if GTK_CHECK_VERSION(3,14,0) + gint outline_width; + gint padding; + gint outline_offset; + + gtk_widget_style_get (widget, + "outline-width", &outline_width, + "padding", &padding, + "outline-offset", &outline_offset, + NULL); + + *minimum_height = *natural_height = DEFAULT_SIZE + 2 * (outline_width + padding + outline_offset); +#else gint focus_width; gint focus_pad; @@ -332,6 +361,7 @@ gimp_color_wheel_get_preferred_height (GtkWidget *widget, NULL); *minimum_height = *natural_height = DEFAULT_SIZE + 2 * (focus_width + focus_pad); +#endif } static void -- cgit v1.2.3 From 9787f22c4ce314f15ab9b132eb0e6e9db29003f0 Mon Sep 17 00:00:00 2001 From: Alvin Penner Date: Tue, 27 Jun 2017 21:07:47 +0000 Subject: Update dxf_input.py for LP Bug #1700582 --- share/extensions/dxf_input.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/share/extensions/dxf_input.py b/share/extensions/dxf_input.py index 1dcbac7b8..4021ffe6b 100755 --- a/share/extensions/dxf_input.py +++ b/share/extensions/dxf_input.py @@ -150,7 +150,7 @@ def export_LWPOLYLINE(): # optional group codes : (42) (bulge) iseqs = 0 ibulge = 0 - if vals[groups['70']][0]: # closed path + if vals[groups['70']][0] & 1: # closed path seqs.append('20') vals[groups['10']].append(vals[groups['10']][0]) vals[groups['20']].append(vals[groups['20']][0]) @@ -182,7 +182,7 @@ def export_LWPOLYLINE(): path += ' L %f,%f' % (vals[groups['10']][i], vals[groups['20']][i]) xold = vals[groups['10']][i] yold = vals[groups['20']][i] - if vals[groups['70']][0]: # closed path + if vals[groups['70']][0] & 1: # closed path path += ' z' attribs = {'d': path, 'style': style} inkex.etree.SubElement(layer, 'path', attribs) -- cgit v1.2.3 From 58928f3ed2adc05902c3fb2daf15b27a100c14f3 Mon Sep 17 00:00:00 2001 From: Alexander Valavanis Date: Wed, 28 Jun 2017 00:04:40 +0200 Subject: Partial fix for menu items and split contextmenu into separate file --- src/helper/pixbuf-ops.cpp | 2 + src/helper/png-write.h | 2 +- src/ui/CMakeLists.txt | 2 + src/ui/contextmenu.cpp | 932 +++++++++++++++++++++++++++++++++++++++++++++ src/ui/contextmenu.h | 218 +++++++++++ src/ui/interface.cpp | 929 ++------------------------------------------ src/ui/interface.h | 189 +-------- src/ui/tools/tool-base.cpp | 1 + 8 files changed, 1194 insertions(+), 1081 deletions(-) create mode 100644 src/ui/contextmenu.cpp create mode 100644 src/ui/contextmenu.h diff --git a/src/helper/pixbuf-ops.cpp b/src/helper/pixbuf-ops.cpp index bab998fdb..bb33f7b15 100644 --- a/src/helper/pixbuf-ops.cpp +++ b/src/helper/pixbuf-ops.cpp @@ -30,6 +30,8 @@ #include "helper/pixbuf-ops.h" +#include + // TODO look for copy-n-paste duplication of this function: /** * Hide all items that are not listed in list, recursively, skipping groups and defs. diff --git a/src/helper/png-write.h b/src/helper/png-write.h index 06498f46e..b886158c9 100644 --- a/src/helper/png-write.h +++ b/src/helper/png-write.h @@ -16,8 +16,8 @@ #include <2geom/forward.h> - class SPDocument; +class SPItem; enum ExportResult { EXPORT_ERROR = 0, diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt index 389e8902a..c253daed9 100644 --- a/src/ui/CMakeLists.txt +++ b/src/ui/CMakeLists.txt @@ -1,5 +1,6 @@ set(ui_SRC clipboard.cpp + contextmenu.cpp control-manager.cpp dialog-events.cpp draw-anchor.cpp @@ -173,6 +174,7 @@ set(ui_SRC # ------- # Headers clipboard.h + contextmenu.h control-manager.h control-types.h dialog-events.h diff --git a/src/ui/contextmenu.cpp b/src/ui/contextmenu.cpp new file mode 100644 index 000000000..cd61d3872 --- /dev/null +++ b/src/ui/contextmenu.cpp @@ -0,0 +1,932 @@ +/** + * @file + * Context menu + */ +/* Authors: + * Lauris Kaplinski + * Frank Felfe + * bulia byak + * Jon A. Cruz + * Abhishek Sharma + * Kris De Gussem + * + * Copyright (C) 2012 Kris De Gussem + * Copyright (C) 2010 authors + * Copyright (C) 1999-2005 authors + * Copyright (C) 2004 David Turner + * Copyright (C) 2001-2002 Ximian, Inc. + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#include "contextmenu.h" + +#include +#include + +#include +#include +#include + +#include "desktop.h" +#include "document.h" +#include "document-undo.h" +#include "helper/action.h" +#include "helper/action-context.h" +#include "inkscape.h" +#include "message-context.h" +#include "message-stack.h" +#include "selection.h" +#include "selection-chemistry.h" +#include "shortcuts.h" +#include "sp-anchor.h" +#include "sp-clippath.h" +#include "sp-image.h" +#include "sp-item.h" +#include "sp-mask.h" +#include "sp-shape.h" +#include "sp-text.h" +#include "ui/dialog/dialog-manager.h" +#include "ui/dialog/layer-properties.h" +#include "verbs.h" + +static bool temporarily_block_actions = false; + +ContextMenu::ContextMenu(SPDesktop *desktop, SPItem *item) : + _item(item), + MIGroup(), + MIParent(_("Go to parent")) +{ +// g_message("ContextMenu"); + _object = static_cast(item); + _desktop = desktop; + + AppendItemFromVerb(Inkscape::Verb::get(SP_VERB_EDIT_UNDO)); + AppendItemFromVerb(Inkscape::Verb::get(SP_VERB_EDIT_REDO)); + AddSeparator(); + AppendItemFromVerb(Inkscape::Verb::get(SP_VERB_EDIT_CUT)); + AppendItemFromVerb(Inkscape::Verb::get(SP_VERB_EDIT_COPY)); + AppendItemFromVerb(Inkscape::Verb::get(SP_VERB_EDIT_PASTE)); + AddSeparator(); + AppendItemFromVerb(Inkscape::Verb::get(SP_VERB_EDIT_DUPLICATE)); + AppendItemFromVerb(Inkscape::Verb::get(SP_VERB_EDIT_DELETE)); + + positionOfLastDialog = 10; // 9 in front + 1 for the separator in the next if; used to position the dialog menu entries below each other + /* Item menu */ + if (item!=NULL) { + AddSeparator(); + MakeObjectMenu(); + } + AddSeparator(); + /* Lock/Unock Hide/Unhide*/ + Geom::Rect b(_desktop->point(),_desktop->point() + Geom::Point(1,1)); + std::vector< SPItem * > down_items = _desktop->getDocument()->getItemsPartiallyInBox( _desktop->dkey, b, true, true); + bool has_down_hidden = false; + bool has_down_locked = false; + for(std::vector< SPItem * >::iterator down = down_items.begin(); down != down_items.end(); ++down){ + if((*down)->isHidden()) { + has_down_hidden = true; + } + if((*down)->isLocked()) { + has_down_locked = true; + } + } + Gtk::MenuItem* mi; + + mi = Gtk::manage(new Gtk::MenuItem(_("Hide selected objects"),1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::HideSelected)); + if (_desktop->selection->isEmpty()) { + mi->set_sensitive(false); + } + mi->show(); + append(*mi);//insert(*mi,positionOfLastDialog++); + + mi = Gtk::manage(new Gtk::MenuItem(_("Unhide objects below"),1)); + mi->signal_activate().connect(sigc::bind >(sigc::mem_fun(*this, &ContextMenu::UnHideBelow), down_items)); + if (!has_down_hidden) { + mi->set_sensitive(false); + } + mi->show(); + append(*mi);//insert(*mi,positionOfLastDialog++); + + mi = Gtk::manage(new Gtk::MenuItem(_("Lock selected objects"),1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::LockSelected)); + if (_desktop->selection->isEmpty()) { + mi->set_sensitive(false); + } + mi->show(); + append(*mi);//insert(*mi,positionOfLastDialog++); + + mi = Gtk::manage(new Gtk::MenuItem(_("Unlock objects below"),1)); + mi->signal_activate().connect(sigc::bind >(sigc::mem_fun(*this, &ContextMenu::UnLockBelow), down_items)); + if (!has_down_locked) { + mi->set_sensitive(false); + } + mi->show(); + append(*mi);//insert(*mi,positionOfLastDialog++); + /* layer menu */ + SPGroup *group=NULL; + if (item) { + if (SP_IS_GROUP(item)) { + group = SP_GROUP(item); + } else if ( item != _desktop->currentRoot() && SP_IS_GROUP(item->parent) ) { + group = SP_GROUP(item->parent); + } + } + + if (( group && group != _desktop->currentLayer() ) || + ( _desktop->currentLayer() != _desktop->currentRoot() && _desktop->currentLayer()->parent != _desktop->currentRoot() ) ) { + AddSeparator(); + } + + if ( group && group != _desktop->currentLayer() ) { + /* TRANSLATORS: #%1 is the id of the group e.g. , not a number. */ + MIGroup.set_label (Glib::ustring::compose(_("Enter group #%1"), group->getId())); + MIGroup.set_data("group", group); + MIGroup.signal_activate().connect(sigc::bind(sigc::mem_fun(*this, &ContextMenu::EnterGroup),&MIGroup)); + MIGroup.show(); + append(MIGroup); + } + + if ( _desktop->currentLayer() != _desktop->currentRoot() ) { + if ( _desktop->currentLayer()->parent != _desktop->currentRoot() ) { + MIParent.signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::LeaveGroup)); + MIParent.show(); + append(MIParent); + + /* Pop selection out of group */ + Gtk::MenuItem* miu = Gtk::manage(new Gtk::MenuItem(_("_Pop selection out of group"), 1)); + miu->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ActivateUngroupPopSelection)); + miu->show(); + append(*miu); + } + } +} + +ContextMenu::~ContextMenu(void) +{ +} + +Gtk::SeparatorMenuItem* ContextMenu::AddSeparator(void) +{ + Gtk::SeparatorMenuItem* sep = Gtk::manage(new Gtk::SeparatorMenuItem()); + sep->show(); + append(*sep); + return sep; +} + +void ContextMenu::EnterGroup(Gtk::MenuItem* mi) +{ + _desktop->setCurrentLayer(reinterpret_cast(mi->get_data("group"))); + _desktop->selection->clear(); +} + +void ContextMenu::LeaveGroup(void) +{ + _desktop->setCurrentLayer(_desktop->currentLayer()->parent); +} + +void ContextMenu::LockSelected(void) +{ + auto itemlist = _desktop->selection->items(); + for(auto i=itemlist.begin();i!=itemlist.end(); ++i) { + (*i)->setLocked(true); + } +} + +void ContextMenu::HideSelected(void) +{ + auto itemlist =_desktop->selection->items(); + for(auto i=itemlist.begin();i!=itemlist.end(); ++i) { + (*i)->setHidden(true); + } +} + +void ContextMenu::UnLockBelow(std::vector items) +{ + _desktop->selection->clear(); + for(auto i=items.begin();i!=items.end(); ++i) { + if ((*i)->isLocked()) { + (*i)->setLocked(false); + _desktop->selection->add(*i); + } + } +} + +void ContextMenu::UnHideBelow(std::vector items) +{ + _desktop->selection->clear(); + for(auto i=items.begin();i!=items.end(); ++i) { + if ((*i)->isHidden()) { + (*i)->setHidden(false); + _desktop->selection->add(*i); + } + } +} + +/* + * Some day when the right-click menus are ready to start working + * smarter with the verbs, we'll need to change this NULL being + * sent to sp_action_perform to something useful, or set some kind + * of global "right-clicked position" variable for actions to + * investigate when they're called. + */ +static void +context_menu_item_on_my_activate(void */*object*/, SPAction *action) +{ + if (!temporarily_block_actions) { + sp_action_perform(action, NULL); + } +} + +static void +context_menu_item_on_my_select(void */*object*/, SPAction *action) +{ + sp_action_get_view(action)->tipsMessageContext()->set(Inkscape::NORMAL_MESSAGE, action->tip); +} + +static void +context_menu_item_on_my_deselect(void */*object*/, SPAction *action) +{ + sp_action_get_view(action)->tipsMessageContext()->clear(); +} + + +// TODO: Update this to allow radio items to be used +void ContextMenu::AppendItemFromVerb(Inkscape::Verb *verb)//, SPDesktop *view)//, bool radio, GSList *group) +{ + SPAction *action; + SPDesktop *view = _desktop; + + if (verb->get_code() == SP_VERB_NONE) { + Gtk::MenuItem *item = AddSeparator(); + item->show(); + append(*item); + } else { + action = verb->get_action(Inkscape::ActionContext(view)); + if (!action) { + return; + } + + // Create a box to contain all the widgets (icon, label, accelerator) + // that will go inside the menu item + auto const box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 6)); + + // If there is an image associated with the action, then we can add it as an + // icon for the menu item + if (action->image) { + auto const icon = Gtk::manage(new Gtk::Image()); + icon->set_from_icon_name(action->image, Gtk::ICON_SIZE_MENU); + box->add(*icon); + } + + // Now create the label and add it to the menu item (with mnemonic + auto const label = Gtk::manage(new Gtk::Label(action->name, true)); + box->add(*label); + + // Create the menu item itself, either as a radio menu item, or just + // a regular menu item depending on whether the "radio" flag is set + auto const item = Gtk::manage(new Gtk::MenuItem(*box)); + + sp_shortcut_add_accelerator(GTK_WIDGET(item->gobj()), sp_shortcut_get_primary(verb)); + + action->signal_set_sensitive.connect(sigc::mem_fun(*this, &ContextMenu::set_sensitive)); + action->signal_set_name.connect(sigc::mem_fun(*item, &ContextMenu::set_name)); + + if (!action->sensitive) { + item->set_sensitive(FALSE); + } + + item->set_events(Gdk::KEY_PRESS_MASK); + item->signal_activate().connect(sigc::bind(sigc::ptr_fun(context_menu_item_on_my_activate),item,action)); + item->signal_select().connect(sigc::bind(sigc::ptr_fun(context_menu_item_on_my_select),item,action)); + item->signal_deselect().connect(sigc::bind(sigc::ptr_fun(context_menu_item_on_my_deselect),item,action)); + item->show_all(); + append(*item); + } +} + +void ContextMenu::MakeObjectMenu(void) +{ + if (SP_IS_ITEM(_object)) { + MakeItemMenu(); + } + + if (SP_IS_GROUP(_object)) { + MakeGroupMenu(); + } + + if (SP_IS_ANCHOR(_object)) { + MakeAnchorMenu(); + } + + if (SP_IS_IMAGE(_object)) { + MakeImageMenu(); + } + + if (SP_IS_SHAPE(_object)) { + MakeShapeMenu(); + } + + if (SP_IS_TEXT(_object)) { + MakeTextMenu(); + } +} + +void ContextMenu::MakeItemMenu (void) +{ + Gtk::MenuItem* mi; + + /* Item dialog */ + mi = Gtk::manage(new Gtk::MenuItem(_("_Object Properties..."),1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ItemProperties)); + mi->show(); + append(*mi);//insert(*mi,positionOfLastDialog++); + + AddSeparator(); + + /* Select item */ + if (Inkscape::Verb::getbyid( "org.inkscape.followlink" )) { + mi = Gtk::manage(new Gtk::MenuItem(_("_Select This"), 1)); + if (_desktop->selection->includes(_item)) { + mi->set_sensitive(FALSE); + } else { + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ItemSelectThis)); + } + mi->show(); + append(*mi); + } + + + mi = Gtk::manage(new Gtk::MenuItem(_("Select Same"))); + mi->show(); + Gtk::Menu *select_same_submenu = Gtk::manage(new Gtk::Menu()); + if (_desktop->selection->isEmpty()) { + mi->set_sensitive(FALSE); + } + mi->set_submenu(*select_same_submenu); + append(*mi); + + /* Select same fill and stroke */ + mi = Gtk::manage(new Gtk::MenuItem(_("Fill and Stroke"), 1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::SelectSameFillStroke)); + mi->set_sensitive(!SP_IS_ANCHOR(_item)); + mi->show(); + select_same_submenu->append(*mi); + + /* Select same fill color */ + mi = Gtk::manage(new Gtk::MenuItem(_("Fill Color"), 1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::SelectSameFillColor)); + mi->set_sensitive(!SP_IS_ANCHOR(_item)); + mi->show(); + select_same_submenu->append(*mi); + + /* Select same stroke color */ + mi = Gtk::manage(new Gtk::MenuItem(_("Stroke Color"), 1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::SelectSameStrokeColor)); + mi->set_sensitive(!SP_IS_ANCHOR(_item)); + mi->show(); + select_same_submenu->append(*mi); + + /* Select same stroke style */ + mi = Gtk::manage(new Gtk::MenuItem(_("Stroke Style"), 1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::SelectSameStrokeStyle)); + mi->set_sensitive(!SP_IS_ANCHOR(_item)); + mi->show(); + select_same_submenu->append(*mi); + + /* Select same stroke style */ + mi = Gtk::manage(new Gtk::MenuItem(_("Object type"), 1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::SelectSameObjectType)); + mi->set_sensitive(!SP_IS_ANCHOR(_item)); + mi->show(); + select_same_submenu->append(*mi); + + /* Move to layer */ + mi = Gtk::manage(new Gtk::MenuItem(_("_Move to layer ..."), 1)); + if (_desktop->selection->isEmpty()) { + mi->set_sensitive(FALSE); + } else { + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ItemMoveTo)); + } + mi->show(); + append(*mi); + + /* Create link */ + mi = Gtk::manage(new Gtk::MenuItem(_("Create _Link"), 1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ItemCreateLink)); + mi->set_sensitive(!SP_IS_ANCHOR(_item)); + mi->show(); + append(*mi); + + bool ClipRefOK=false; + bool MaskRefOK=false; + if (_item){ + if (_item->clip_ref){ + if (_item->clip_ref->getObject()){ + ClipRefOK=true; + } + } + } + if (_item){ + if (_item->mask_ref){ + if (_item->mask_ref->getObject()){ + MaskRefOK=true; + } + } + } + /* Set mask */ + mi = Gtk::manage(new Gtk::MenuItem(_("Set Mask"), 1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::SetMask)); + if (ClipRefOK || MaskRefOK) { + mi->set_sensitive(FALSE); + } else { + mi->set_sensitive(TRUE); + } + mi->show(); + append(*mi); + + /* Release mask */ + mi = Gtk::manage(new Gtk::MenuItem(_("Release Mask"), 1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ReleaseMask)); + if (MaskRefOK) { + mi->set_sensitive(TRUE); + } else { + mi->set_sensitive(FALSE); + } + mi->show(); + append(*mi); + + /*SSet Clip Group */ + mi = Gtk::manage(new Gtk::MenuItem(_("Create Clip G_roup"),1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::CreateGroupClip)); + mi->set_sensitive(TRUE); + mi->show(); + append(*mi); + + /* Set Clip */ + mi = Gtk::manage(new Gtk::MenuItem(_("Set Cl_ip"), 1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::SetClip)); + if (ClipRefOK || MaskRefOK) { + mi->set_sensitive(FALSE); + } else { + mi->set_sensitive(TRUE); + } + mi->show(); + append(*mi); + + /* Release Clip */ + mi = Gtk::manage(new Gtk::MenuItem(_("Release C_lip"), 1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ReleaseClip)); + if (ClipRefOK) { + mi->set_sensitive(TRUE); + } else { + mi->set_sensitive(FALSE); + } + mi->show(); + append(*mi); + + /* Group */ + mi = Gtk::manage(new Gtk::MenuItem(_("_Group"), 1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ActivateGroup)); + if (_desktop->selection->isEmpty()) { + mi->set_sensitive(FALSE); + } else { + mi->set_sensitive(TRUE); + } + mi->show(); + append(*mi); +} + +void ContextMenu::SelectSameFillStroke(void) +{ + sp_select_same_fill_stroke_style(_desktop, true, true, true); +} + +void ContextMenu::SelectSameFillColor(void) +{ + sp_select_same_fill_stroke_style(_desktop, true, false, false); +} + +void ContextMenu::SelectSameStrokeColor(void) +{ + sp_select_same_fill_stroke_style(_desktop, false, true, false); +} + +void ContextMenu::SelectSameStrokeStyle(void) +{ + sp_select_same_fill_stroke_style(_desktop, false, false, true); +} + +void ContextMenu::SelectSameObjectType(void) +{ + sp_select_same_object_type(_desktop); +} + +void ContextMenu::ItemProperties(void) +{ + _desktop->selection->set(_item); + _desktop->_dlg_mgr->showDialog("ObjectProperties"); +} + +void ContextMenu::ItemSelectThis(void) +{ + _desktop->selection->set(_item); +} + +void ContextMenu::ItemMoveTo(void) +{ + Inkscape::UI::Dialogs::LayerPropertiesDialog::showMove(_desktop, _desktop->currentLayer()); +} + + + +void ContextMenu::ItemCreateLink(void) +{ + Inkscape::XML::Document *xml_doc = _desktop->doc()->getReprDoc(); + Inkscape::XML::Node *repr = xml_doc->createElement("svg:a"); + _item->parent->getRepr()->addChild(repr, _item->getRepr()); + SPObject *object = _item->document->getObjectByRepr(repr); + g_return_if_fail(SP_IS_ANCHOR(object)); + + const char *id = _item->getRepr()->attribute("id"); + Inkscape::XML::Node *child = _item->getRepr()->duplicate(xml_doc); + _item->deleteObject(false); + repr->addChild(child, NULL); + child->setAttribute("id", id); + + Inkscape::GC::release(repr); + Inkscape::GC::release(child); + + Inkscape::DocumentUndo::done(object->document, SP_VERB_NONE, _("Create link")); + + _desktop->selection->set(SP_ITEM(object)); + _desktop->_dlg_mgr->showDialog("ObjectAttributes"); +} + +void ContextMenu::SetMask(void) +{ + _desktop->selection->setMask(false, false); +} + +void ContextMenu::ReleaseMask(void) +{ + _desktop->selection->unsetMask(false); +} + +void ContextMenu::CreateGroupClip(void) +{ + _desktop->selection->setClipGroup(); +} + +void ContextMenu::SetClip(void) +{ + _desktop->selection->setMask(true, false); +} + + +void ContextMenu::ReleaseClip(void) +{ + _desktop->selection->unsetMask(true); +} + +void ContextMenu::MakeGroupMenu(void) +{ + /* Ungroup */ + Gtk::MenuItem* mi = Gtk::manage(new Gtk::MenuItem(_("_Ungroup"), 1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ActivateUngroup)); + mi->show(); + append(*mi); +} + +void ContextMenu::ActivateGroup(void) +{ + _desktop->selection->group(); +} + +void ContextMenu::ActivateUngroup(void) +{ + std::vector children; + + sp_item_group_ungroup(static_cast(_item), children); + _desktop->selection->setList(children); +} + +void ContextMenu::ActivateUngroupPopSelection(void) +{ + _desktop->selection->popFromGroup(); +} + + +void ContextMenu::MakeAnchorMenu(void) +{ + Gtk::MenuItem* mi; + + /* Link dialog */ + mi = Gtk::manage(new Gtk::MenuItem(_("Link _Properties..."), 1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::AnchorLinkProperties)); + mi->show(); + insert(*mi,positionOfLastDialog++); + + /* Select item */ + mi = Gtk::manage(new Gtk::MenuItem(_("_Follow Link"), 1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::AnchorLinkFollow)); + mi->show(); + append(*mi); + + /* Reset transformations */ + mi = Gtk::manage(new Gtk::MenuItem(_("_Remove Link"), 1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::AnchorLinkRemove)); + mi->show(); + append(*mi); +} + +void ContextMenu::AnchorLinkProperties(void) +{ + _desktop->_dlg_mgr->showDialog("ObjectAttributes"); +} + +void ContextMenu::AnchorLinkFollow(void) +{ + + if (_desktop->selection->isEmpty()) { + _desktop->selection->set(_item); + } + // Opening the selected links with a python extension + Inkscape::Verb *verb = Inkscape::Verb::getbyid( "org.inkscape.followlink" ); + if (verb) { + SPAction *action = verb->get_action(Inkscape::ActionContext(_desktop)); + if (action) { + sp_action_perform(action, NULL); + } + } +} + +void ContextMenu::AnchorLinkRemove(void) +{ + std::vector children; + sp_item_group_ungroup(static_cast(_item), children, false); + Inkscape::DocumentUndo::done(_desktop->doc(), SP_VERB_NONE, _("Remove link")); +} + +void ContextMenu::MakeImageMenu (void) +{ + Gtk::MenuItem* mi; + Inkscape::XML::Node *ir = _object->getRepr(); + const gchar *href = ir->attribute("xlink:href"); + + /* Image properties */ + mi = Gtk::manage(new Gtk::MenuItem(_("Image _Properties..."), 1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ImageProperties)); + mi->show(); + insert(*mi,positionOfLastDialog++); + + /* Edit externally */ + mi = Gtk::manage(new Gtk::MenuItem(_("Edit Externally..."), 1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ImageEdit)); + mi->show(); + insert(*mi,positionOfLastDialog++); + if ( (!href) || ((strncmp(href, "data:", 5) == 0)) ) { + mi->set_sensitive( FALSE ); + } + + /* Trace Bitmap */ + mi = Gtk::manage(new Gtk::MenuItem(_("_Trace Bitmap..."), 1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ImageTraceBitmap)); + mi->show(); + insert(*mi,positionOfLastDialog++); + if (_desktop->selection->isEmpty()) { + mi->set_sensitive(FALSE); + } + + /* Trace Pixel Art */ + mi = Gtk::manage(new Gtk::MenuItem(_("Trace Pixel Art"), 1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ImageTracePixelArt)); + mi->show(); + insert(*mi,positionOfLastDialog++); + if (_desktop->selection->isEmpty()) { + mi->set_sensitive(FALSE); + } + + /* Embed image */ + if (Inkscape::Verb::getbyid( "org.ekips.filter.embedselectedimages" )) { + mi = Gtk::manage(new Gtk::MenuItem(C_("Context menu", "Embed Image"))); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ImageEmbed)); + mi->show(); + insert(*mi,positionOfLastDialog++); + if ( (!href) || ((strncmp(href, "data:", 5) == 0)) ) { + mi->set_sensitive( FALSE ); + } + } + + /* Extract image */ + if (Inkscape::Verb::getbyid( "org.ekips.filter.extractimage" )) { + mi = Gtk::manage(new Gtk::MenuItem(C_("Context menu", "Extract Image..."))); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ImageExtract)); + mi->show(); + insert(*mi,positionOfLastDialog++); + if ( (!href) || ((strncmp(href, "data:", 5) != 0)) ) { + mi->set_sensitive( FALSE ); + } + } +} + +void ContextMenu::ImageProperties(void) +{ + _desktop->_dlg_mgr->showDialog("ObjectAttributes"); +} + +Glib::ustring ContextMenu::getImageEditorName() { + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + Glib::ustring value; + Glib::ustring choices = prefs->getString("/options/bitmapeditor/value"); + if (!choices.empty()) { + value = choices; + } + else { + value = "gimp"; + } + return value; +} + +void ContextMenu::ImageEdit(void) +{ + if (_desktop->selection->isEmpty()) { + _desktop->selection->set(_item); + } + + GError* errThing = 0; + Glib::ustring cmdline = getImageEditorName(); + Glib::ustring name; + Glib::ustring fullname; + +#ifdef WIN32 + // g_spawn_command_line_sync parsing is done according to Unix shell rules, + // not Windows command interpreter rules. Thus we need to enclose the + // executable path with single quotes. + int index = cmdline.find(".exe"); + if ( index < 0 ) index = cmdline.find(".bat"); + if ( index < 0 ) index = cmdline.find(".com"); + if ( index >= 0 ) { + Glib::ustring editorBin = cmdline.substr(0, index + 4).c_str(); + Glib::ustring args = cmdline.substr(index + 4, cmdline.length()).c_str(); + editorBin.insert(0, "'"); + editorBin.append("'"); + cmdline = editorBin; + cmdline.append(args); + } else { + // Enclose the whole command line if no executable path can be extracted. + cmdline.insert(0, "'"); + cmdline.append("'"); + } +#endif + + auto itemlist= _desktop->selection->items(); + for(auto i=itemlist.begin();i!=itemlist.end();++i){ + Inkscape::XML::Node *ir = (*i)->getRepr(); + const gchar *href = ir->attribute("xlink:href"); + + if (strncmp (href,"file:",5) == 0) { + // URI to filename conversion + name = g_filename_from_uri(href, NULL, NULL); + } else { + name.append(href); + } + + if (Glib::path_is_absolute(name)) { + fullname = name; + } else if (SP_ACTIVE_DOCUMENT->getBase()) { + fullname = Glib::build_filename(SP_ACTIVE_DOCUMENT->getBase(), name); + } else { + fullname = Glib::build_filename(Glib::get_current_dir(), name); + } + + cmdline.append(" '"); + cmdline.append(fullname.c_str()); + cmdline.append("'"); + } + + //g_warning("##Command line: %s\n", cmdline.c_str()); + + g_spawn_command_line_async(cmdline.c_str(), &errThing); + + if ( errThing ) { + g_warning("Problem launching editor (%d). %s", errThing->code, errThing->message); + (_desktop->messageStack())->flash(Inkscape::ERROR_MESSAGE, errThing->message); + g_error_free(errThing); + errThing = 0; + } +} + +void ContextMenu::ImageTraceBitmap(void) +{ + INKSCAPE.dialogs_unhide(); + _desktop->_dlg_mgr->showDialog("Trace"); +} + +void ContextMenu::ImageTracePixelArt(void) +{ + INKSCAPE.dialogs_unhide(); + _desktop->_dlg_mgr->showDialog("PixelArt"); +} + +void ContextMenu::ImageEmbed(void) +{ + if (_desktop->selection->isEmpty()) { + _desktop->selection->set(_item); + } + + Inkscape::Verb *verb = Inkscape::Verb::getbyid( "org.ekips.filter.embedselectedimages" ); + if (verb) { + SPAction *action = verb->get_action(Inkscape::ActionContext(_desktop)); + if (action) { + sp_action_perform(action, NULL); + } + } +} + +void ContextMenu::ImageExtract(void) +{ + if (_desktop->selection->isEmpty()) { + _desktop->selection->set(_item); + } + + Inkscape::Verb *verb = Inkscape::Verb::getbyid( "org.ekips.filter.extractimage" ); + if (verb) { + SPAction *action = verb->get_action(Inkscape::ActionContext(_desktop)); + if (action) { + sp_action_perform(action, NULL); + } + } +} + +void ContextMenu::MakeShapeMenu (void) +{ + Gtk::MenuItem* mi; + + /* Item dialog */ + mi = Gtk::manage(new Gtk::MenuItem(_("_Fill and Stroke..."), 1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::FillSettings)); + mi->show(); + insert(*mi,positionOfLastDialog++); +} + +void ContextMenu::FillSettings(void) +{ + if (_desktop->selection->isEmpty()) { + _desktop->selection->set(_item); + } + + _desktop->_dlg_mgr->showDialog("FillAndStroke"); +} + +void ContextMenu::MakeTextMenu (void) +{ + Gtk::MenuItem* mi; + + /* Fill and Stroke dialog */ + mi = Gtk::manage(new Gtk::MenuItem(_("_Fill and Stroke..."), 1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::FillSettings)); + mi->show(); + insert(*mi,positionOfLastDialog++); + + /* Edit Text dialog */ + mi = Gtk::manage(new Gtk::MenuItem(_("_Text and Font..."), 1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::TextSettings)); + mi->show(); + insert(*mi,positionOfLastDialog++); + + /* Spellcheck dialog */ + mi = Gtk::manage(new Gtk::MenuItem(_("Check Spellin_g..."), 1)); + mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::SpellcheckSettings)); + mi->show(); + insert(*mi,positionOfLastDialog++); +} + +void ContextMenu::TextSettings (void) +{ + if (_desktop->selection->isEmpty()) { + _desktop->selection->set(_item); + } + + _desktop->_dlg_mgr->showDialog("TextFont"); +} + +void ContextMenu::SpellcheckSettings (void) +{ + if (_desktop->selection->isEmpty()) { + _desktop->selection->set(_item); + } + + _desktop->_dlg_mgr->showDialog("SpellCheck"); +} +/* + 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/ui/contextmenu.h b/src/ui/contextmenu.h new file mode 100644 index 000000000..faae6358f --- /dev/null +++ b/src/ui/contextmenu.h @@ -0,0 +1,218 @@ +#ifndef SEEN_CONTEXTMENU_H +#define SEEN_CONTEXTMENU_H + +/* + * Context menu + * + * Authors: + * Lauris Kaplinski + * Frank Felfe + * Abhishek Sharma + * Kris De Gussem + * + * Copyright (C) 2012 Kris De Gussem + * Copyright (C) 1999-2002 authors + * Copyright (C) 2001-2002 Ximian, Inc. + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#include + +class SPDesktop; +class SPItem; +class SPObject; + +namespace Gtk { +class SeparatorMenuItem; +} + +namespace Inkscape { +class Verb; +} + +/** + * Implements the Inkscape context menu. + * + * For the context menu implementation, the ContextMenu class stores the object + * that was selected in a private data member. This should be farely safe to do + * and a pointer to the SPItem as well as SPObject class are kept. + * All callbacks of the context menu entries are implemented as private + * functions. + * + * @todo add callbacks to destroy the context menu when it is closed (=key or mouse button pressed out of the scope of the context menu) + */ +class ContextMenu : public Gtk::Menu +{ + public: + /** + * The ContextMenu constructor contains all code to create and show the + * menu entries (aka child widgets). + * + * @param desktop pointer to the desktop the user is currently working on. + * @param item SPItem pointer to the object selected at the time the ContextMenu is created. + */ + ContextMenu(SPDesktop *desktop, SPItem *item); + ~ContextMenu(void); + + private: + SPItem *_item; // pointer to the object selected at the time the ContextMenu is created + SPObject *_object; // pointer to the object selected at the time the ContextMenu is created + SPDesktop *_desktop; //pointer to the desktop the user was currently working on at the time the ContextMenu is created + + int positionOfLastDialog; + + Gtk::MenuItem MIGroup; //menu entry to enter a group + Gtk::MenuItem MIParent; //menu entry to leave a group + + /** + * auxiliary function that adds a separator line in the context menu + */ + Gtk::SeparatorMenuItem* AddSeparator(void); + + /** + * c++ified version of sp_ui_menu_append_item. + * + * @see sp_ui_menu_append_item_from_verb and synchronize/drop that function when c++ifying other code in interface.cpp + */ + void AppendItemFromVerb(Inkscape::Verb *verb); + + /** + * main function which is responsible for creating the context sensitive menu items, + * calls subfunctions below to create the menu entry widgets. + */ + void MakeObjectMenu (void); + /** + * creates menu entries for an SP_TYPE_ITEM object + */ + void MakeItemMenu (void); + /** + * creates menu entries for a grouped object + */ + void MakeGroupMenu (void); + /** + * creates menu entries for an anchor object + */ + void MakeAnchorMenu (void); + /** + * creates menu entries for a bitmap image object + */ + void MakeImageMenu (void); + /** + * creates menu entries for a shape object + */ + void MakeShapeMenu (void); + /** + * creates menu entries for a text object + */ + void MakeTextMenu (void); + + void EnterGroup(Gtk::MenuItem* mi); + void LeaveGroup(void); + void LockSelected(void); + void HideSelected(void); + void UnLockBelow(std::vector items); + void UnHideBelow(std::vector items); + ////////////////////////////////////////// + //callbacks for the context menu entries of an SP_TYPE_ITEM object + void ItemProperties(void); + void ItemSelectThis(void); + void ItemMoveTo(void); + void SelectSameFillStroke(void); + void SelectSameFillColor(void); + void SelectSameStrokeColor(void); + void SelectSameStrokeStyle(void); + void SelectSameObjectType(void); + void ItemCreateLink(void); + void CreateGroupClip(void); + void SetMask(void); + void ReleaseMask(void); + void SetClip(void); + void ReleaseClip(void); + ////////////////////////////////////////// + + + /** + * callback, is executed on clicking the anchor "Group" and "Ungroup" menu entry + */ + void ActivateUngroupPopSelection(void); + void ActivateUngroup(void); + void ActivateGroup(void); + + void AnchorLinkProperties(void); + /** + * placeholder for callback to be executed on clicking the anchor "Follow link" context menu entry + * @todo add code to follow link externally + */ + void AnchorLinkFollow(void); + + /** + * callback, is executed on clicking the anchor "Link remove" menu entry + */ + void AnchorLinkRemove(void); + + + /** + * callback, opens the image properties dialog and is executed on clicking the context menu entry with similar name + */ + void ImageProperties(void); + + /** + * callback, is executed on clicking the image "Edit Externally" menu entry + */ + void ImageEdit(void); + + /** + * auxiliary function that loads the external image editor name from the settings. + */ + Glib::ustring getImageEditorName(); + + /** + * callback, is executed on clicking the "Embed Image" menu entry + */ + void ImageEmbed(void); + + /** + * callback, is executed on clicking the "Trace Bitmap" menu entry + */ + void ImageTraceBitmap(void); + + /** + * callback, is executed on clicking the "Trace Pixel Art" menu entry + */ + void ImageTracePixelArt(void); + + /** + * callback, is executed on clicking the "Extract Image" menu entry + */ + void ImageExtract(void); + + + /** + * callback, is executed on clicking the "Fill and Stroke" menu entry + */ + void FillSettings(void); + + + /** + * callback, is executed on clicking the "Text and Font" menu entry + */ + void TextSettings(void); + + /** + * callback, is executed on clicking the "Check spelling" menu entry + */ + void SpellcheckSettings(void); +}; +#endif // SEEN_CONTEXT_MENU_H + +/* + 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/ui/interface.cpp b/src/ui/interface.cpp index 6c95c65a3..c2ce9e568 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -27,8 +27,6 @@ #include #include "file.h" #include -#include -#include #if WITH_GTKMM_3_22 # include @@ -447,45 +445,55 @@ static GtkWidget *sp_ui_menu_append_item_from_verb(GtkMenu *menu, Inkscape::Verb // Just create a menu separator if this isn't a real action. // Otherwise, create a real menu item if (verb->get_code() == SP_VERB_NONE) { - item = gtk_separator_menu_item_new(); - } else { SPAction *action = verb->get_action(Inkscape::ActionContext(view)); if (!action) return NULL; + // Create the menu item itself, either as a radio menu item, or just + // a regular menu item depending on whether the "radio" flag is set + if (radio) { + item = gtk_radio_menu_item_new(group); + } else { + item = gtk_menu_item_new(); + } + // Create a box to contain all the widgets (icon, label, accelerator) // that will go inside the menu item - GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6); + GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + + // Now create the label and add it to the menu item + GtkWidget *label = gtk_accel_label_new(action->name); + gtk_label_set_markup_with_mnemonic( GTK_LABEL(label), action->name); + gtk_label_set_use_underline(GTK_LABEL(label), true); + gtk_label_set_xalign(GTK_LABEL(label), 0.0); + + GtkAccelGroup *accel_group = sp_shortcut_get_accel_group(); + gtk_menu_set_accel_group(menu, accel_group); + + sp_shortcut_add_accelerator(item, sp_shortcut_get_primary(verb)); + gtk_accel_label_set_accel_widget(GTK_ACCEL_LABEL(label), item); // If there is an image associated with the action, then we can add it as an - // icon for the menu item + // icon for the menu item. If not, give the label a bit more space if(action->image) { GtkWidget *icon = gtk_image_new_from_icon_name(action->image, GTK_ICON_SIZE_MENU); - gtk_container_add(GTK_CONTAINER(box), icon); + gtk_box_pack_start(GTK_BOX(box), icon, FALSE, TRUE, 0); + } + else { + GtkWidget *fake_icon = gtk_label_new(""); + gtk_widget_set_size_request(label, 16, 16); + gtk_widget_set_hexpand(label, true); + gtk_box_pack_start(GTK_BOX(box), fake_icon, FALSE, TRUE, 16); } - // Now create the label and add it to the menu item - GtkWidget *label = gtk_label_new_with_mnemonic(action->name); - gtk_label_set_markup_with_mnemonic( GTK_LABEL(label), action->name); - gtk_container_add(GTK_CONTAINER(box), label); + gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 0); - // Create the menu item itself, either as a radio menu item, or just - // a regular menu item depending on whether the "radio" flag is set - if (radio) { - item = gtk_radio_menu_item_new(group); - } else { - item = gtk_menu_item_new(); - } // Finally, pack all the widgets into the menu item gtk_container_add(GTK_CONTAINER(item), box); - GtkAccelGroup *accel_group = sp_shortcut_get_accel_group(); - gtk_menu_set_accel_group(menu, accel_group); - - sp_shortcut_add_accelerator(item, sp_shortcut_get_primary(verb)); action->signal_set_sensitive.connect( sigc::bind<0>( @@ -1398,8 +1406,13 @@ sp_ui_menu_item_set_name(GtkWidget *data, Glib::ustring const &name) if (GTK_IS_LABEL(child)) { gtk_label_set_markup_with_mnemonic(GTK_LABEL (child), name.c_str()); } else if (GTK_IS_BOX(child)) { + GList *children = gtk_container_get_children(GTK_CONTAINER(child)); + + // Label is second child in list + GtkWidget *label = GTK_WIDGET(children->next->data); + gtk_label_set_markup_with_mnemonic( - GTK_LABEL (gtk_container_get_children(GTK_CONTAINER (child))->data), + GTK_LABEL (label), name.c_str()); }//else sp_ui_menu_append_item_from_verb has been modified and can set //a menu item in yet another way... @@ -1433,876 +1446,6 @@ void injectRenamedIcons() } } - -ContextMenu::ContextMenu(SPDesktop *desktop, SPItem *item) : - _item(item), - MIGroup(), - MIParent(_("Go to parent")) -{ -// g_message("ContextMenu"); - _object = static_cast(item); - _desktop = desktop; - - AppendItemFromVerb(Inkscape::Verb::get(SP_VERB_EDIT_UNDO)); - AppendItemFromVerb(Inkscape::Verb::get(SP_VERB_EDIT_REDO)); - AddSeparator(); - AppendItemFromVerb(Inkscape::Verb::get(SP_VERB_EDIT_CUT)); - AppendItemFromVerb(Inkscape::Verb::get(SP_VERB_EDIT_COPY)); - AppendItemFromVerb(Inkscape::Verb::get(SP_VERB_EDIT_PASTE)); - AddSeparator(); - AppendItemFromVerb(Inkscape::Verb::get(SP_VERB_EDIT_DUPLICATE)); - AppendItemFromVerb(Inkscape::Verb::get(SP_VERB_EDIT_DELETE)); - - positionOfLastDialog = 10; // 9 in front + 1 for the separator in the next if; used to position the dialog menu entries below each other - /* Item menu */ - if (item!=NULL) { - AddSeparator(); - MakeObjectMenu(); - } - AddSeparator(); - /* Lock/Unock Hide/Unhide*/ - Geom::Rect b(_desktop->point(),_desktop->point() + Geom::Point(1,1)); - std::vector< SPItem * > down_items = _desktop->getDocument()->getItemsPartiallyInBox( _desktop->dkey, b, true, true); - bool has_down_hidden = false; - bool has_down_locked = false; - for(std::vector< SPItem * >::iterator down = down_items.begin(); down != down_items.end(); ++down){ - if((*down)->isHidden()) { - has_down_hidden = true; - } - if((*down)->isLocked()) { - has_down_locked = true; - } - } - Gtk::MenuItem* mi; - - mi = Gtk::manage(new Gtk::MenuItem(_("Hide selected objects"),1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::HideSelected)); - if (_desktop->selection->isEmpty()) { - mi->set_sensitive(false); - } - mi->show(); - append(*mi);//insert(*mi,positionOfLastDialog++); - - mi = Gtk::manage(new Gtk::MenuItem(_("Unhide objects below"),1)); - mi->signal_activate().connect(sigc::bind >(sigc::mem_fun(*this, &ContextMenu::UnHideBelow), down_items)); - if (!has_down_hidden) { - mi->set_sensitive(false); - } - mi->show(); - append(*mi);//insert(*mi,positionOfLastDialog++); - - mi = Gtk::manage(new Gtk::MenuItem(_("Lock selected objects"),1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::LockSelected)); - if (_desktop->selection->isEmpty()) { - mi->set_sensitive(false); - } - mi->show(); - append(*mi);//insert(*mi,positionOfLastDialog++); - - mi = Gtk::manage(new Gtk::MenuItem(_("Unlock objects below"),1)); - mi->signal_activate().connect(sigc::bind >(sigc::mem_fun(*this, &ContextMenu::UnLockBelow), down_items)); - if (!has_down_locked) { - mi->set_sensitive(false); - } - mi->show(); - append(*mi);//insert(*mi,positionOfLastDialog++); - /* layer menu */ - SPGroup *group=NULL; - if (item) { - if (SP_IS_GROUP(item)) { - group = SP_GROUP(item); - } else if ( item != _desktop->currentRoot() && SP_IS_GROUP(item->parent) ) { - group = SP_GROUP(item->parent); - } - } - - if (( group && group != _desktop->currentLayer() ) || - ( _desktop->currentLayer() != _desktop->currentRoot() && _desktop->currentLayer()->parent != _desktop->currentRoot() ) ) { - AddSeparator(); - } - - if ( group && group != _desktop->currentLayer() ) { - /* TRANSLATORS: #%1 is the id of the group e.g. , not a number. */ - MIGroup.set_label (Glib::ustring::compose(_("Enter group #%1"), group->getId())); - MIGroup.set_data("group", group); - MIGroup.signal_activate().connect(sigc::bind(sigc::mem_fun(*this, &ContextMenu::EnterGroup),&MIGroup)); - MIGroup.show(); - append(MIGroup); - } - - if ( _desktop->currentLayer() != _desktop->currentRoot() ) { - if ( _desktop->currentLayer()->parent != _desktop->currentRoot() ) { - MIParent.signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::LeaveGroup)); - MIParent.show(); - append(MIParent); - - /* Pop selection out of group */ - Gtk::MenuItem* miu = Gtk::manage(new Gtk::MenuItem(_("_Pop selection out of group"), 1)); - miu->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ActivateUngroupPopSelection)); - miu->show(); - append(*miu); - } - } -} - -ContextMenu::~ContextMenu(void) -{ -} - -Gtk::SeparatorMenuItem* ContextMenu::AddSeparator(void) -{ - Gtk::SeparatorMenuItem* sep = Gtk::manage(new Gtk::SeparatorMenuItem()); - sep->show(); - append(*sep); - return sep; -} - -void ContextMenu::EnterGroup(Gtk::MenuItem* mi) -{ - _desktop->setCurrentLayer(reinterpret_cast(mi->get_data("group"))); - _desktop->selection->clear(); -} - -void ContextMenu::LeaveGroup(void) -{ - _desktop->setCurrentLayer(_desktop->currentLayer()->parent); -} - -void ContextMenu::LockSelected(void) -{ - auto itemlist = _desktop->selection->items(); - for(auto i=itemlist.begin();i!=itemlist.end(); ++i) { - (*i)->setLocked(true); - } -} - -void ContextMenu::HideSelected(void) -{ - auto itemlist =_desktop->selection->items(); - for(auto i=itemlist.begin();i!=itemlist.end(); ++i) { - (*i)->setHidden(true); - } -} - -void ContextMenu::UnLockBelow(std::vector items) -{ - _desktop->selection->clear(); - for(auto i=items.begin();i!=items.end(); ++i) { - if ((*i)->isLocked()) { - (*i)->setLocked(false); - _desktop->selection->add(*i); - } - } -} - -void ContextMenu::UnHideBelow(std::vector items) -{ - _desktop->selection->clear(); - for(auto i=items.begin();i!=items.end(); ++i) { - if ((*i)->isHidden()) { - (*i)->setHidden(false); - _desktop->selection->add(*i); - } - } -} - -// TODO: Update this to allow radio items to be used -void ContextMenu::AppendItemFromVerb(Inkscape::Verb *verb)//, SPDesktop *view)//, bool radio, GSList *group) -{ - SPAction *action; - SPDesktop *view = _desktop; - - if (verb->get_code() == SP_VERB_NONE) { - Gtk::MenuItem *item = AddSeparator(); - item->show(); - append(*item); - } else { - action = verb->get_action(Inkscape::ActionContext(view)); - if (!action) { - return; - } - - // Create a box to contain all the widgets (icon, label, accelerator) - // that will go inside the menu item - auto const box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 6)); - - // If there is an image associated with the action, then we can add it as an - // icon for the menu item - if (action->image) { - auto const icon = Gtk::manage(new Gtk::Image()); - icon->set_from_icon_name(action->image, Gtk::ICON_SIZE_MENU); - box->add(*icon); - } - - // Now create the label and add it to the menu item (with mnemonic - auto const label = Gtk::manage(new Gtk::Label(action->name, true)); - box->add(*label); - - // Create the menu item itself, either as a radio menu item, or just - // a regular menu item depending on whether the "radio" flag is set - auto const item = Gtk::manage(new Gtk::MenuItem(*box)); - - sp_shortcut_add_accelerator(GTK_WIDGET(item->gobj()), sp_shortcut_get_primary(verb)); - - action->signal_set_sensitive.connect(sigc::mem_fun(*this, &ContextMenu::set_sensitive)); - action->signal_set_name.connect(sigc::mem_fun(*item, &ContextMenu::set_name)); - - if (!action->sensitive) { - item->set_sensitive(FALSE); - } - - - item->set_events(Gdk::KEY_PRESS_MASK); - item->signal_activate().connect(sigc::bind(sigc::ptr_fun(sp_ui_menu_activate),item,action)); - item->signal_select().connect(sigc::bind(sigc::ptr_fun(sp_ui_menu_select_action),item,action)); - item->signal_deselect().connect(sigc::bind(sigc::ptr_fun(sp_ui_menu_deselect_action),item,action)); - item->show_all(); - append(*item); - } -} - -void ContextMenu::MakeObjectMenu(void) -{ -// GObjectClass *klass = G_OBJECT_GET_CLASS(_object); //to deduce the object's type from its class -// -// if (G_TYPE_CHECK_CLASS_TYPE(klass, SP_TYPE_ITEM)) -// { -// MakeItemMenu (); -// } -// if (G_TYPE_CHECK_CLASS_TYPE(klass, SP_TYPE_GROUP)) -// { -// MakeGroupMenu(); -// } -// if (G_TYPE_CHECK_CLASS_TYPE(klass, SP_TYPE_ANCHOR)) -// { -// MakeAnchorMenu(); -// } -// if (G_TYPE_CHECK_CLASS_TYPE(klass, SP_TYPE_IMAGE)) -// { -// MakeImageMenu(); -// } -// if (G_TYPE_CHECK_CLASS_TYPE(klass, SP_TYPE_SHAPE)) -// { -// MakeShapeMenu(); -// } -// if (G_TYPE_CHECK_CLASS_TYPE(klass, SP_TYPE_TEXT)) -// { -// MakeTextMenu(); -// } - - if (SP_IS_ITEM(_object)) { - MakeItemMenu(); - } - - if (SP_IS_GROUP(_object)) { - MakeGroupMenu(); - } - - if (SP_IS_ANCHOR(_object)) { - MakeAnchorMenu(); - } - - if (SP_IS_IMAGE(_object)) { - MakeImageMenu(); - } - - if (SP_IS_SHAPE(_object)) { - MakeShapeMenu(); - } - - if (SP_IS_TEXT(_object)) { - MakeTextMenu(); - } -} - -void ContextMenu::MakeItemMenu (void) -{ - Gtk::MenuItem* mi; - - /* Item dialog */ - mi = Gtk::manage(new Gtk::MenuItem(_("_Object Properties..."),1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ItemProperties)); - mi->show(); - append(*mi);//insert(*mi,positionOfLastDialog++); - - AddSeparator(); - - /* Select item */ - if (Inkscape::Verb::getbyid( "org.inkscape.followlink" )) { - mi = Gtk::manage(new Gtk::MenuItem(_("_Select This"), 1)); - if (_desktop->selection->includes(_item)) { - mi->set_sensitive(FALSE); - } else { - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ItemSelectThis)); - } - mi->show(); - append(*mi); - } - - - mi = Gtk::manage(new Gtk::MenuItem(_("Select Same"))); - mi->show(); - Gtk::Menu *select_same_submenu = Gtk::manage(new Gtk::Menu()); - if (_desktop->selection->isEmpty()) { - mi->set_sensitive(FALSE); - } - mi->set_submenu(*select_same_submenu); - append(*mi); - - /* Select same fill and stroke */ - mi = Gtk::manage(new Gtk::MenuItem(_("Fill and Stroke"), 1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::SelectSameFillStroke)); - mi->set_sensitive(!SP_IS_ANCHOR(_item)); - mi->show(); - select_same_submenu->append(*mi); - - /* Select same fill color */ - mi = Gtk::manage(new Gtk::MenuItem(_("Fill Color"), 1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::SelectSameFillColor)); - mi->set_sensitive(!SP_IS_ANCHOR(_item)); - mi->show(); - select_same_submenu->append(*mi); - - /* Select same stroke color */ - mi = Gtk::manage(new Gtk::MenuItem(_("Stroke Color"), 1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::SelectSameStrokeColor)); - mi->set_sensitive(!SP_IS_ANCHOR(_item)); - mi->show(); - select_same_submenu->append(*mi); - - /* Select same stroke style */ - mi = Gtk::manage(new Gtk::MenuItem(_("Stroke Style"), 1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::SelectSameStrokeStyle)); - mi->set_sensitive(!SP_IS_ANCHOR(_item)); - mi->show(); - select_same_submenu->append(*mi); - - /* Select same stroke style */ - mi = Gtk::manage(new Gtk::MenuItem(_("Object type"), 1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::SelectSameObjectType)); - mi->set_sensitive(!SP_IS_ANCHOR(_item)); - mi->show(); - select_same_submenu->append(*mi); - - /* Move to layer */ - mi = Gtk::manage(new Gtk::MenuItem(_("_Move to layer ..."), 1)); - if (_desktop->selection->isEmpty()) { - mi->set_sensitive(FALSE); - } else { - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ItemMoveTo)); - } - mi->show(); - append(*mi); - - /* Create link */ - mi = Gtk::manage(new Gtk::MenuItem(_("Create _Link"), 1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ItemCreateLink)); - mi->set_sensitive(!SP_IS_ANCHOR(_item)); - mi->show(); - append(*mi); - - bool ClipRefOK=false; - bool MaskRefOK=false; - if (_item){ - if (_item->clip_ref){ - if (_item->clip_ref->getObject()){ - ClipRefOK=true; - } - } - } - if (_item){ - if (_item->mask_ref){ - if (_item->mask_ref->getObject()){ - MaskRefOK=true; - } - } - } - /* Set mask */ - mi = Gtk::manage(new Gtk::MenuItem(_("Set Mask"), 1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::SetMask)); - if (ClipRefOK || MaskRefOK) { - mi->set_sensitive(FALSE); - } else { - mi->set_sensitive(TRUE); - } - mi->show(); - append(*mi); - - /* Release mask */ - mi = Gtk::manage(new Gtk::MenuItem(_("Release Mask"), 1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ReleaseMask)); - if (MaskRefOK) { - mi->set_sensitive(TRUE); - } else { - mi->set_sensitive(FALSE); - } - mi->show(); - append(*mi); - - /*SSet Clip Group */ - mi = Gtk::manage(new Gtk::MenuItem(_("Create Clip G_roup"),1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::CreateGroupClip)); - mi->set_sensitive(TRUE); - mi->show(); - append(*mi); - - /* Set Clip */ - mi = Gtk::manage(new Gtk::MenuItem(_("Set Cl_ip"), 1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::SetClip)); - if (ClipRefOK || MaskRefOK) { - mi->set_sensitive(FALSE); - } else { - mi->set_sensitive(TRUE); - } - mi->show(); - append(*mi); - - /* Release Clip */ - mi = Gtk::manage(new Gtk::MenuItem(_("Release C_lip"), 1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ReleaseClip)); - if (ClipRefOK) { - mi->set_sensitive(TRUE); - } else { - mi->set_sensitive(FALSE); - } - mi->show(); - append(*mi); - - /* Group */ - mi = Gtk::manage(new Gtk::MenuItem(_("_Group"), 1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ActivateGroup)); - if (_desktop->selection->isEmpty()) { - mi->set_sensitive(FALSE); - } else { - mi->set_sensitive(TRUE); - } - mi->show(); - append(*mi); -} - -void ContextMenu::SelectSameFillStroke(void) -{ - sp_select_same_fill_stroke_style(_desktop, true, true, true); -} - -void ContextMenu::SelectSameFillColor(void) -{ - sp_select_same_fill_stroke_style(_desktop, true, false, false); -} - -void ContextMenu::SelectSameStrokeColor(void) -{ - sp_select_same_fill_stroke_style(_desktop, false, true, false); -} - -void ContextMenu::SelectSameStrokeStyle(void) -{ - sp_select_same_fill_stroke_style(_desktop, false, false, true); -} - -void ContextMenu::SelectSameObjectType(void) -{ - sp_select_same_object_type(_desktop); -} - -void ContextMenu::ItemProperties(void) -{ - _desktop->selection->set(_item); - _desktop->_dlg_mgr->showDialog("ObjectProperties"); -} - -void ContextMenu::ItemSelectThis(void) -{ - _desktop->selection->set(_item); -} - -void ContextMenu::ItemMoveTo(void) -{ - Inkscape::UI::Dialogs::LayerPropertiesDialog::showMove(_desktop, _desktop->currentLayer()); -} - - - -void ContextMenu::ItemCreateLink(void) -{ - Inkscape::XML::Document *xml_doc = _desktop->doc()->getReprDoc(); - Inkscape::XML::Node *repr = xml_doc->createElement("svg:a"); - _item->parent->getRepr()->addChild(repr, _item->getRepr()); - SPObject *object = _item->document->getObjectByRepr(repr); - g_return_if_fail(SP_IS_ANCHOR(object)); - - const char *id = _item->getRepr()->attribute("id"); - Inkscape::XML::Node *child = _item->getRepr()->duplicate(xml_doc); - _item->deleteObject(false); - repr->addChild(child, NULL); - child->setAttribute("id", id); - - Inkscape::GC::release(repr); - Inkscape::GC::release(child); - - DocumentUndo::done(object->document, SP_VERB_NONE, _("Create link")); - - _desktop->selection->set(SP_ITEM(object)); - _desktop->_dlg_mgr->showDialog("ObjectAttributes"); -} - -void ContextMenu::SetMask(void) -{ - _desktop->selection->setMask(false, false); -} - -void ContextMenu::ReleaseMask(void) -{ - _desktop->selection->unsetMask(false); -} - -void ContextMenu::CreateGroupClip(void) -{ - _desktop->selection->setClipGroup(); -} - -void ContextMenu::SetClip(void) -{ - _desktop->selection->setMask(true, false); -} - - -void ContextMenu::ReleaseClip(void) -{ - _desktop->selection->unsetMask(true); -} - -void ContextMenu::MakeGroupMenu(void) -{ - /* Ungroup */ - Gtk::MenuItem* mi = Gtk::manage(new Gtk::MenuItem(_("_Ungroup"), 1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ActivateUngroup)); - mi->show(); - append(*mi); -} - -void ContextMenu::ActivateGroup(void) -{ - _desktop->selection->group(); -} - -void ContextMenu::ActivateUngroup(void) -{ - std::vector children; - - sp_item_group_ungroup(static_cast(_item), children); - _desktop->selection->setList(children); -} - -void ContextMenu::ActivateUngroupPopSelection(void) -{ - _desktop->selection->popFromGroup(); -} - - -void ContextMenu::MakeAnchorMenu(void) -{ - Gtk::MenuItem* mi; - - /* Link dialog */ - mi = Gtk::manage(new Gtk::MenuItem(_("Link _Properties..."), 1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::AnchorLinkProperties)); - mi->show(); - insert(*mi,positionOfLastDialog++); - - /* Select item */ - mi = Gtk::manage(new Gtk::MenuItem(_("_Follow Link"), 1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::AnchorLinkFollow)); - mi->show(); - append(*mi); - - /* Reset transformations */ - mi = Gtk::manage(new Gtk::MenuItem(_("_Remove Link"), 1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::AnchorLinkRemove)); - mi->show(); - append(*mi); -} - -void ContextMenu::AnchorLinkProperties(void) -{ - _desktop->_dlg_mgr->showDialog("ObjectAttributes"); -} - -void ContextMenu::AnchorLinkFollow(void) -{ - - if (_desktop->selection->isEmpty()) { - _desktop->selection->set(_item); - } - // Opening the selected links with a python extension - Inkscape::Verb *verb = Inkscape::Verb::getbyid( "org.inkscape.followlink" ); - if (verb) { - SPAction *action = verb->get_action(Inkscape::ActionContext(_desktop)); - if (action) { - sp_action_perform(action, NULL); - } - } -} - -void ContextMenu::AnchorLinkRemove(void) -{ - std::vector children; - sp_item_group_ungroup(static_cast(_item), children, false); - DocumentUndo::done(_desktop->doc(), SP_VERB_NONE, _("Remove link")); -} - -void ContextMenu::MakeImageMenu (void) -{ - Gtk::MenuItem* mi; - Inkscape::XML::Node *ir = _object->getRepr(); - const gchar *href = ir->attribute("xlink:href"); - - /* Image properties */ - mi = Gtk::manage(new Gtk::MenuItem(_("Image _Properties..."), 1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ImageProperties)); - mi->show(); - insert(*mi,positionOfLastDialog++); - - /* Edit externally */ - mi = Gtk::manage(new Gtk::MenuItem(_("Edit Externally..."), 1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ImageEdit)); - mi->show(); - insert(*mi,positionOfLastDialog++); - if ( (!href) || ((strncmp(href, "data:", 5) == 0)) ) { - mi->set_sensitive( FALSE ); - } - - /* Trace Bitmap */ - mi = Gtk::manage(new Gtk::MenuItem(_("_Trace Bitmap..."), 1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ImageTraceBitmap)); - mi->show(); - insert(*mi,positionOfLastDialog++); - if (_desktop->selection->isEmpty()) { - mi->set_sensitive(FALSE); - } - - /* Trace Pixel Art */ - mi = Gtk::manage(new Gtk::MenuItem(_("Trace Pixel Art"), 1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ImageTracePixelArt)); - mi->show(); - insert(*mi,positionOfLastDialog++); - if (_desktop->selection->isEmpty()) { - mi->set_sensitive(FALSE); - } - - /* Embed image */ - if (Inkscape::Verb::getbyid( "org.ekips.filter.embedselectedimages" )) { - mi = Gtk::manage(new Gtk::MenuItem(C_("Context menu", "Embed Image"))); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ImageEmbed)); - mi->show(); - insert(*mi,positionOfLastDialog++); - if ( (!href) || ((strncmp(href, "data:", 5) == 0)) ) { - mi->set_sensitive( FALSE ); - } - } - - /* Extract image */ - if (Inkscape::Verb::getbyid( "org.ekips.filter.extractimage" )) { - mi = Gtk::manage(new Gtk::MenuItem(C_("Context menu", "Extract Image..."))); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::ImageExtract)); - mi->show(); - insert(*mi,positionOfLastDialog++); - if ( (!href) || ((strncmp(href, "data:", 5) != 0)) ) { - mi->set_sensitive( FALSE ); - } - } -} - -void ContextMenu::ImageProperties(void) -{ - _desktop->_dlg_mgr->showDialog("ObjectAttributes"); -} - -Glib::ustring ContextMenu::getImageEditorName() { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - Glib::ustring value; - Glib::ustring choices = prefs->getString("/options/bitmapeditor/value"); - if (!choices.empty()) { - value = choices; - } - else { - value = "gimp"; - } - return value; -} - -void ContextMenu::ImageEdit(void) -{ - if (_desktop->selection->isEmpty()) { - _desktop->selection->set(_item); - } - - GError* errThing = 0; - Glib::ustring cmdline = getImageEditorName(); - Glib::ustring name; - Glib::ustring fullname; - -#ifdef WIN32 - // g_spawn_command_line_sync parsing is done according to Unix shell rules, - // not Windows command interpreter rules. Thus we need to enclose the - // executable path with single quotes. - int index = cmdline.find(".exe"); - if ( index < 0 ) index = cmdline.find(".bat"); - if ( index < 0 ) index = cmdline.find(".com"); - if ( index >= 0 ) { - Glib::ustring editorBin = cmdline.substr(0, index + 4).c_str(); - Glib::ustring args = cmdline.substr(index + 4, cmdline.length()).c_str(); - editorBin.insert(0, "'"); - editorBin.append("'"); - cmdline = editorBin; - cmdline.append(args); - } else { - // Enclose the whole command line if no executable path can be extracted. - cmdline.insert(0, "'"); - cmdline.append("'"); - } -#endif - - auto itemlist= _desktop->selection->items(); - for(auto i=itemlist.begin();i!=itemlist.end();++i){ - Inkscape::XML::Node *ir = (*i)->getRepr(); - const gchar *href = ir->attribute("xlink:href"); - - if (strncmp (href,"file:",5) == 0) { - // URI to filename conversion - name = g_filename_from_uri(href, NULL, NULL); - } else { - name.append(href); - } - - if (Glib::path_is_absolute(name)) { - fullname = name; - } else if (SP_ACTIVE_DOCUMENT->getBase()) { - fullname = Glib::build_filename(SP_ACTIVE_DOCUMENT->getBase(), name); - } else { - fullname = Glib::build_filename(Glib::get_current_dir(), name); - } - - cmdline.append(" '"); - cmdline.append(fullname.c_str()); - cmdline.append("'"); - } - - //g_warning("##Command line: %s\n", cmdline.c_str()); - - g_spawn_command_line_async(cmdline.c_str(), &errThing); - - if ( errThing ) { - g_warning("Problem launching editor (%d). %s", errThing->code, errThing->message); - (_desktop->messageStack())->flash(Inkscape::ERROR_MESSAGE, errThing->message); - g_error_free(errThing); - errThing = 0; - } -} - -void ContextMenu::ImageTraceBitmap(void) -{ - INKSCAPE.dialogs_unhide(); - _desktop->_dlg_mgr->showDialog("Trace"); -} - -void ContextMenu::ImageTracePixelArt(void) -{ - INKSCAPE.dialogs_unhide(); - _desktop->_dlg_mgr->showDialog("PixelArt"); -} - -void ContextMenu::ImageEmbed(void) -{ - if (_desktop->selection->isEmpty()) { - _desktop->selection->set(_item); - } - - Inkscape::Verb *verb = Inkscape::Verb::getbyid( "org.ekips.filter.embedselectedimages" ); - if (verb) { - SPAction *action = verb->get_action(Inkscape::ActionContext(_desktop)); - if (action) { - sp_action_perform(action, NULL); - } - } -} - -void ContextMenu::ImageExtract(void) -{ - if (_desktop->selection->isEmpty()) { - _desktop->selection->set(_item); - } - - Inkscape::Verb *verb = Inkscape::Verb::getbyid( "org.ekips.filter.extractimage" ); - if (verb) { - SPAction *action = verb->get_action(Inkscape::ActionContext(_desktop)); - if (action) { - sp_action_perform(action, NULL); - } - } -} - -void ContextMenu::MakeShapeMenu (void) -{ - Gtk::MenuItem* mi; - - /* Item dialog */ - mi = Gtk::manage(new Gtk::MenuItem(_("_Fill and Stroke..."), 1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::FillSettings)); - mi->show(); - insert(*mi,positionOfLastDialog++); -} - -void ContextMenu::FillSettings(void) -{ - if (_desktop->selection->isEmpty()) { - _desktop->selection->set(_item); - } - - _desktop->_dlg_mgr->showDialog("FillAndStroke"); -} - -void ContextMenu::MakeTextMenu (void) -{ - Gtk::MenuItem* mi; - - /* Fill and Stroke dialog */ - mi = Gtk::manage(new Gtk::MenuItem(_("_Fill and Stroke..."), 1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::FillSettings)); - mi->show(); - insert(*mi,positionOfLastDialog++); - - /* Edit Text dialog */ - mi = Gtk::manage(new Gtk::MenuItem(_("_Text and Font..."), 1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::TextSettings)); - mi->show(); - insert(*mi,positionOfLastDialog++); - - /* Spellcheck dialog */ - mi = Gtk::manage(new Gtk::MenuItem(_("Check Spellin_g..."), 1)); - mi->signal_activate().connect(sigc::mem_fun(*this, &ContextMenu::SpellcheckSettings)); - mi->show(); - insert(*mi,positionOfLastDialog++); -} - -void ContextMenu::TextSettings (void) -{ - if (_desktop->selection->isEmpty()) { - _desktop->selection->set(_item); - } - - _desktop->_dlg_mgr->showDialog("TextFont"); -} - -void ContextMenu::SpellcheckSettings (void) -{ - if (_desktop->selection->isEmpty()) { - _desktop->selection->set(_item); - } - - _desktop->_dlg_mgr->showDialog("SpellCheck"); -} - /* Local Variables: mode:c++ diff --git a/src/ui/interface.h b/src/ui/interface.h index a41c36cc3..6e95c161c 100644 --- a/src/ui/interface.h +++ b/src/ui/interface.h @@ -17,23 +17,13 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -//#ifdef HAVE_CONFIG_H -//# include -//#endif +#include -#include - -class SPItem; -class SPObject; -class SPDesktop; class SPViewWidget; -namespace Gtk { -class SeparatorMenuItem; -} +typedef struct _GtkWidget GtkWidget; namespace Inkscape { - class Verb; namespace UI { @@ -93,181 +83,6 @@ Glib::ustring getLayoutPrefPath( Inkscape::UI::View::View *view ); void sp_ui_error_dialog (char const* message); bool sp_ui_overwrite_file (char const* filename); - -/** - * Implements the Inkscape context menu. - * - * For the context menu implementation, the ContextMenu class stores the object - * that was selected in a private data member. This should be farely safe to do - * and a pointer to the SPItem as well as SPObject class are kept. - * All callbacks of the context menu entries are implemented as private - * functions. - * - * @todo add callbacks to destroy the context menu when it is closed (=key or mouse button pressed out of the scope of the context menu) - */ -class ContextMenu : public Gtk::Menu -{ - public: - /** - * The ContextMenu constructor contains all code to create and show the - * menu entries (aka child widgets). - * - * @param desktop pointer to the desktop the user is currently working on. - * @param item SPItem pointer to the object selected at the time the ContextMenu is created. - */ - ContextMenu(SPDesktop *desktop, SPItem *item); - ~ContextMenu(void); - - private: - SPItem *_item; // pointer to the object selected at the time the ContextMenu is created - SPObject *_object; // pointer to the object selected at the time the ContextMenu is created - SPDesktop *_desktop; //pointer to the desktop the user was currently working on at the time the ContextMenu is created - - int positionOfLastDialog; - - Gtk::MenuItem MIGroup; //menu entry to enter a group - Gtk::MenuItem MIParent; //menu entry to leave a group - - /** - * auxiliary function that adds a separator line in the context menu - */ - Gtk::SeparatorMenuItem* AddSeparator(void); - - /** - * c++ified version of sp_ui_menu_append_item. - * - * @see sp_ui_menu_append_item_from_verb and synchronize/drop that function when c++ifying other code in interface.cpp - */ - void AppendItemFromVerb(Inkscape::Verb *verb); - - /** - * main function which is responsible for creating the context sensitive menu items, - * calls subfunctions below to create the menu entry widgets. - */ - void MakeObjectMenu (void); - /** - * creates menu entries for an SP_TYPE_ITEM object - */ - void MakeItemMenu (void); - /** - * creates menu entries for a grouped object - */ - void MakeGroupMenu (void); - /** - * creates menu entries for an anchor object - */ - void MakeAnchorMenu (void); - /** - * creates menu entries for a bitmap image object - */ - void MakeImageMenu (void); - /** - * creates menu entries for a shape object - */ - void MakeShapeMenu (void); - /** - * creates menu entries for a text object - */ - void MakeTextMenu (void); - - void EnterGroup(Gtk::MenuItem* mi); - void LeaveGroup(void); - void LockSelected(void); - void HideSelected(void); - void UnLockBelow(std::vector items); - void UnHideBelow(std::vector items); - ////////////////////////////////////////// - //callbacks for the context menu entries of an SP_TYPE_ITEM object - void ItemProperties(void); - void ItemSelectThis(void); - void ItemMoveTo(void); - void SelectSameFillStroke(void); - void SelectSameFillColor(void); - void SelectSameStrokeColor(void); - void SelectSameStrokeStyle(void); - void SelectSameObjectType(void); - void ItemCreateLink(void); - void CreateGroupClip(void); - void SetMask(void); - void ReleaseMask(void); - void SetClip(void); - void ReleaseClip(void); - ////////////////////////////////////////// - - - /** - * callback, is executed on clicking the anchor "Group" and "Ungroup" menu entry - */ - void ActivateUngroupPopSelection(void); - void ActivateUngroup(void); - void ActivateGroup(void); - - void AnchorLinkProperties(void); - /** - * placeholder for callback to be executed on clicking the anchor "Follow link" context menu entry - * @todo add code to follow link externally - */ - void AnchorLinkFollow(void); - - /** - * callback, is executed on clicking the anchor "Link remove" menu entry - */ - void AnchorLinkRemove(void); - - - /** - * callback, opens the image properties dialog and is executed on clicking the context menu entry with similar name - */ - void ImageProperties(void); - - /** - * callback, is executed on clicking the image "Edit Externally" menu entry - */ - void ImageEdit(void); - - /** - * auxiliary function that loads the external image editor name from the settings. - */ - Glib::ustring getImageEditorName(); - - /** - * callback, is executed on clicking the "Embed Image" menu entry - */ - void ImageEmbed(void); - - /** - * callback, is executed on clicking the "Trace Bitmap" menu entry - */ - void ImageTraceBitmap(void); - - /** - * callback, is executed on clicking the "Trace Pixel Art" menu entry - */ - void ImageTracePixelArt(void); - - /** - * callback, is executed on clicking the "Extract Image" menu entry - */ - void ImageExtract(void); - - - /** - * callback, is executed on clicking the "Fill and Stroke" menu entry - */ - void FillSettings(void); - - - /** - * callback, is executed on clicking the "Text and Font" menu entry - */ - void TextSettings(void); - - /** - * callback, is executed on clicking the "Check spelling" menu entry - */ - void SpellcheckSettings(void); -}; - #endif // SEEN_SP_INTERFACE_H /* diff --git a/src/ui/tools/tool-base.cpp b/src/ui/tools/tool-base.cpp index 3d755eadc..9231db7c8 100644 --- a/src/ui/tools/tool-base.cpp +++ b/src/ui/tools/tool-base.cpp @@ -23,6 +23,7 @@ #include "shortcuts.h" #include "file.h" +#include "ui/contextmenu.h" #include "ui/interface.h" #include "ui/event-debug.h" #include "ui/tool/control-point.h" -- cgit v1.2.3 From cf457eea72b81850da5503d0091952871135c1fd Mon Sep 17 00:00:00 2001 From: Martin Owens Date: Wed, 28 Jun 2017 09:04:16 +0200 Subject: Refactor profile directory use and promote IO::Resource get_path and get_filename methods --- src/extension/error-file.cpp | 3 +- src/extension/extension.cpp | 3 +- src/extension/init.cpp | 28 ++-- src/extension/internal/filter/filter-file.cpp | 21 +-- src/extension/internal/filter/filter.h | 1 - src/file.cpp | 45 +----- src/inkscape.cpp | 209 +++----------------------- src/inkscape.h | 3 - src/io/resource.cpp | 185 +++++++++++++++++++++-- src/io/resource.h | 21 ++- src/preferences.cpp | 28 ++-- src/preferences.h | 2 - src/selection-chemistry.cpp | 3 +- src/shortcuts.cpp | 22 ++- src/ui/dialog/export.cpp | 3 +- src/ui/dialog/filedialogimpl-gtkmm.cpp | 6 +- src/ui/dialog/inkscape-preferences.cpp | 2 +- src/ui/dialog/swatches.cpp | 7 +- src/ui/dialog/symbols.cpp | 17 +-- src/ui/dialog/template-load-tab.cpp | 17 +-- src/ui/dialog/template-load-tab.h | 4 +- src/widgets/icon.cpp | 10 +- src/widgets/toolbox.cpp | 14 +- 23 files changed, 302 insertions(+), 352 deletions(-) diff --git a/src/extension/error-file.cpp b/src/extension/error-file.cpp index 342511ec9..063e43f42 100644 --- a/src/extension/error-file.cpp +++ b/src/extension/error-file.cpp @@ -18,6 +18,7 @@ #include "inkscape.h" #include "preferences.h" #include "extension/extension.h" +#include "io/resource.h" #include "error-file.h" @@ -51,7 +52,7 @@ ErrorFileNotice::ErrorFileNotice (void) : // \FIXME change this /* This is some filler text, needs to change before relase */ Glib::ustring dialog_text(_("One or more extensions failed to load\n\nThe failed extensions have been skipped. Inkscape will continue to run normally but those extensions will be unavailable. For details to troubleshoot this problem, please refer to the error log located at: ")); - gchar * ext_error_file = Inkscape::Application::profile_path(EXTENSION_ERROR_LOG_FILENAME); + gchar * ext_error_file = Inkscape::IO::Resource::log_path(EXTENSION_ERROR_LOG_FILENAME); dialog_text += ext_error_file; g_free(ext_error_file); set_message(dialog_text, true); diff --git a/src/extension/extension.cpp b/src/extension/extension.cpp index 497f98431..9c0221521 100644 --- a/src/extension/extension.cpp +++ b/src/extension/extension.cpp @@ -33,6 +33,7 @@ #include "dependency.h" #include "timer.h" #include "param/parameter.h" +#include "io/resource.h" namespace Inkscape { namespace Extension { @@ -658,7 +659,7 @@ Extension::set_param_color (const gchar * name, guint32 color, SPDocument * doc, void Extension::error_file_open (void) { - gchar * ext_error_file = Inkscape::Application::profile_path(EXTENSION_ERROR_LOG_FILENAME); + gchar * ext_error_file = Inkscape::IO::Resource::log_path(EXTENSION_ERROR_LOG_FILENAME); gchar * filename = g_filename_from_utf8( ext_error_file, -1, NULL, NULL, NULL ); error_file.open(filename); if (!error_file.is_open()) { diff --git a/src/extension/init.cpp b/src/extension/init.cpp index af7af2cb1..f2e74377d 100644 --- a/src/extension/init.cpp +++ b/src/extension/init.cpp @@ -60,6 +60,7 @@ #endif #include "preferences.h" #include "io/sys.h" +#include "io/resource.h" #ifdef WITH_DBUS #include "dbus/dbus-init.h" #endif @@ -106,6 +107,8 @@ #include "init.h" +using namespace Inkscape::IO::Resource; + namespace Inkscape { namespace Extension { @@ -113,7 +116,7 @@ namespace Extension { the extension directory and parsed */ #define SP_MODULE_EXTENSION "inx" -static void build_module_from_dir(gchar const *dirname); +static void build_module_from_domain(Domain domain); static void check_extensions(); /** @@ -150,7 +153,7 @@ update_pref(Glib::ustring const &pref_path, * Invokes the init routines for internal modules. * * This should be a list of all the internal modules that need to initialized. This is just a - * convinent place to put them. Also, this function calls build_module_from_dir to parse the + * convinent place to put them. Also, this function calls build_module_from_domain to parse the * Inkscape extensions directory. */ void @@ -240,18 +243,8 @@ init() Internal::Filter::Filter::filters_all(); - /* Load search path for extensions */ - if (Inkscape::Extension::Extension::search_path.size() == 0) - { - Inkscape::Extension::Extension::search_path.push_back(Inkscape::Application::profile_path("extensions")); - - Inkscape::Extension::Extension::search_path.push_back(g_strdup(INKSCAPE_EXTENSIONDIR)); - - } - - for (unsigned int i=0; i #include +using namespace Inkscape::IO::Resource; + namespace Inkscape { namespace Extension { namespace Internal { namespace Filter { +void filters_load_domain(Domain domain, gchar *menuname); + void Filter::filters_all_files(void) { - gchar *filtersProfilePath = Inkscape::Application::profile_path("filters"); - - filters_load_dir(INKSCAPE_FILTERDIR, _("Bundled")); - filters_load_dir(filtersProfilePath, _("Personal")); - - g_free(filtersProfilePath); - filtersProfilePath = 0; + filters_load_domain(SYSTEM, _("Bundled")); + filters_load_domain(USER, _("Personal")); } #define INKSCAPE_FILTER_FILE ".svg" -void -Filter::filters_load_dir (gchar const * dirname, gchar * menuname) +void filters_load_domain(Domain domain, gchar *menuname) { + char const *dirname = get_path(domain, FILTERS); + if (!dirname) { g_warning("%s", _("Null external module directory name. Filters will not be loaded.")); return; @@ -72,7 +73,7 @@ Filter::filters_load_dir (gchar const * dirname, gchar * menuname) } gchar *pathname = g_build_filename(dirname, filename, NULL); - filters_load_file(pathname, menuname); + Filter::filters_load_file(pathname, menuname); g_free(pathname); } diff --git a/src/extension/internal/filter/filter.h b/src/extension/internal/filter/filter.h index 9aaa84aec..d4728b69c 100644 --- a/src/extension/internal/filter/filter.h +++ b/src/extension/internal/filter/filter.h @@ -53,7 +53,6 @@ public: /* File loader related */ static void filters_all_files(void); - static void filters_load_dir(gchar const * filename, gchar * menuname); static void filters_load_file(gchar * filename, gchar * menuname); static void filters_load_node(Inkscape::XML::Node * node, gchar * menuname); diff --git a/src/file.cpp b/src/file.cpp index 43a9c6f5b..b9d896de0 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -50,6 +50,7 @@ #include "inkscape-version.h" #include "ui/interface.h" #include "io/sys.h" +#include "io/resource.h" #include "message-stack.h" #include "path-prefix.h" #include "print.h" @@ -67,6 +68,7 @@ using Inkscape::DocumentUndo; +using Inkscape::IO::Resource::TEMPLATES; #ifdef WITH_GNOME_VFS # include @@ -159,48 +161,7 @@ SPDesktop *sp_file_new(const std::string &templ) Glib::ustring sp_file_default_template_uri() { - std::list sources; - sources.push_back( Inkscape::Application::profile_path("templates") ); // first try user's local dir - sources.push_back( g_strdup(INKSCAPE_TEMPLATESDIR) ); // then the system templates dir - std::list baseNames; - gchar const* localized = _("default.svg"); - if (strcmp("default.svg", localized) != 0) { - baseNames.push_back(localized); - } - baseNames.push_back("default.svg"); - gchar *foundTemplate = 0; - - for (std::list::iterator it = sources.begin(); (it != sources.end()) && !foundTemplate; ++it) { - for (std::list::iterator nameIt = baseNames.begin(); (nameIt != baseNames.end()) && !foundTemplate; ++nameIt) { - gchar *dirname = *it; - if ( Inkscape::IO::file_test( dirname, (GFileTest)(G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR) ) ) { - - // TRANSLATORS: default.svg is localizable - this is the name of the default document - // template. This way you can localize the default pagesize, translate the name of - // the default layer, etc. If you wish to localize this file, please create a - // localized share/templates/default.xx.svg file, where xx is your language code. - char *tmp = g_build_filename(dirname, *nameIt, NULL); - if (Inkscape::IO::file_test(tmp, G_FILE_TEST_IS_REGULAR)) { - foundTemplate = tmp; - } else { - g_free(tmp); - } - } - } - } - - for (std::list::iterator it = sources.begin(); it != sources.end(); ++it) { - g_free(*it); - } - - Glib::ustring templateUri = foundTemplate ? foundTemplate : ""; - - if (foundTemplate) { - g_free(foundTemplate); - foundTemplate = 0; - } - - return templateUri; + return Inkscape::IO::Resource::get_filename(TEMPLATES, "default.svg", _("default.svg")); } SPDesktop* sp_file_new_default() diff --git a/src/inkscape.cpp b/src/inkscape.cpp index bf694ada7..b0d2a7f6b 100644 --- a/src/inkscape.cpp +++ b/src/inkscape.cpp @@ -60,6 +60,7 @@ #include "helper/action-context.h" #include "inkscape.h" #include "io/sys.h" +#include "io/resource.h" #include "message-stack.h" #include "path-prefix.h" #include "resource-manager.h" @@ -83,9 +84,6 @@ static void (* ill_handler) (int) = SIG_DFL; static void (* bus_handler) (int) = SIG_DFL; #endif -#define INKSCAPE_PROFILE_DIR "inkscape" -#define INKSCAPE_PROFILE_DIR_047DEV "Inkscape" -#define INKSCAPE_LEGACY_PROFILE_DIR ".inkscape" #define MENUS_FILE "menus.xml" #define SP_INDENT 8 @@ -390,31 +388,17 @@ void Application::argv0(char const* argv) void Application::add_icon_theme() { + using namespace Inkscape::IO::Resource; // Get list of the possible folders containing the theme - auto dataDirs = Glib::get_system_data_dirs(); - dataDirs.insert(dataDirs.begin(), Glib::get_user_data_dir()); - auto icon_theme = Gtk::IconTheme::get_default(); - - for (auto it : dataDirs) - { - std::vector listing; - listing.push_back(it); - listing.push_back("inkscape"); - listing.push_back("icons"); - auto dir = Glib::build_filename(listing); - icon_theme->append_search_path(dir); - } - - // Add our icon directory to the search path for icon theme lookups. - auto const usericondir = Inkscape::Application::profile_path("icons"); - icon_theme->append_search_path(usericondir); - icon_theme->append_search_path(INKSCAPE_PIXMAPDIR); + // We used to add get_system_data_dirs and get_user_data_dir, but these + // folders didn't seem to make much sense for Linux. More testing needed. + icon_theme->append_search_path(get_path_ustring(SYSTEM, ICONS)); + icon_theme->append_search_path(get_path_ustring(USER, ICONS)); #ifdef INKSCAPE_THEMEDIR - icon_theme->append_search_path(INKSCAPE_THEMEDIR); - icon_theme->rescan_if_needed(); + icon_theme->append_search_path(get_path_ustring(SYSTEM, THEMES)); + icon_theme->append_search_path(get_path_ustring(USER, THEMES)); #endif - g_free(usericondir); } /** @@ -423,63 +407,33 @@ Application::add_icon_theme() void Application::add_style_sheet() { + using namespace Inkscape::IO::Resource; // Add style sheet (GTK3) auto const screen = Gdk::Screen::get_default(); - Glib::ustring inkscape_style = INKSCAPE_UIDIR; - inkscape_style += "/style.css"; - // std::cout << "CSS Stylesheet Inkscape: " << inkscape_style << std::endl; - - if (Glib::file_test(inkscape_style, Glib::FILE_TEST_EXISTS)) { + // Calling get_filename always returns a real filename OR + // if no file exists, then it will have warned already and returns empty. + Glib::ustring style = get_filename(UIS, "style.css"); + if (!style.empty()) { auto provider = Gtk::CssProvider::create(); // From 3.16, throws an error which we must catch. try { - provider->load_from_path (inkscape_style); + provider->load_from_path (style); } #if GTK_CHECK_VERSION(3,16,0) // Gtk::CssProviderError not defined until 3.16. catch (const Gtk::CssProviderError& ex) { - std::cerr << "CSSProviderError::load_from_path(): failed to load: " << inkscape_style - << "\n (" << ex.what() << ")" << std::endl; + g_error("CSSProviderError::load_from_path(): %s\n(%s)", + style.c_str(), ex.what().c_str()); } #else catch (...) {} #endif - Gtk::StyleContext::add_provider_for_screen (screen, provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); - } else { - std::cerr << "sp_main_gui: Cannot find default style file:\n (" << inkscape_style - << ")" << std::endl; - } - - Glib::ustring user_style = Inkscape::Application::profile_path("ui/style.css"); - // std::cout << "CSS Stylesheet User: " << user_style << std::endl; - - if (Glib::file_test(user_style, Glib::FILE_TEST_EXISTS)) { - auto provider2 = Gtk::CssProvider::create(); - - // From 3.16, throws an error which we must catch. - try { - provider2->load_from_path (user_style); - } -#if GTK_CHECK_VERSION(3,16,0) - // Gtk::CssProviderError not defined until 3.16. - catch (const Gtk::CssProviderError& ex) - { - std::cerr << "CSSProviderError::load_from_path(): failed to load: " << user_style - << "\n (" << ex.what() << ")" << std::endl; - } -#else - catch (...) - {} -#endif - - Gtk::StyleContext::add_provider_for_screen (screen, provider2, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); } - } /* \brief Constructor for the application. * Creates a new Inkscape::Application. @@ -813,7 +767,7 @@ Application::crash_handler (int /*signum*/) */ bool Application::load_menus() { - gchar *fn = profile_path(MENUS_FILE); + gchar *fn = Inkscape::IO::Resource::profile_path(MENUS_FILE); gchar *menus_xml = 0; gsize len = 0; @@ -1302,137 +1256,8 @@ Application::exit () gtk_main_quit (); } -char * -Application::homedir_path(const char *filename) -{ - static const gchar *homedir = NULL; - if (!homedir) { - homedir = g_get_home_dir(); - } - if (!homedir) { - if (Application::exists()) { - homedir = g_path_get_dirname(Application::instance()._argv0); - } - } - return g_build_filename(homedir, filename, NULL); -} - - -/** - * Get, or guess, or decide the location where the preferences.xml - * file should be located. - */ -gchar * -Application::profile_path(const char *filename) -{ - static const gchar *prefdir = NULL; - - - if (!prefdir) { - // First check for a custom environment variable for a "portable app" - gchar const *val = g_getenv("INKSCAPE_PORTABLE_PROFILE_DIR"); - if (val) { - prefdir = g_strdup(val); - } - // Then check for a custom user environment variable - gchar const *userenv = g_getenv("INKSCAPE_PROFILE_DIR"); - if (userenv) { - prefdir = g_strdup(userenv); - } - -#ifdef HAS_SHGetSpecialFolderLocation - // prefer c:\Documents and Settings\UserName\Application Data\ to - // c:\Documents and Settings\userName\; - if (!prefdir) { - ITEMIDLIST *pidl = 0; - if ( SHGetSpecialFolderLocation( NULL, CSIDL_APPDATA, &pidl ) == NOERROR ) { - gchar * utf8Path = NULL; - - { - wchar_t pathBuf[MAX_PATH+1]; - g_assert(sizeof(wchar_t) == sizeof(gunichar2)); - - if ( SHGetPathFromIDListW( pidl, pathBuf ) ) { - utf8Path = g_utf16_to_utf8( (gunichar2*)(&pathBuf[0]), -1, NULL, NULL, NULL ); - } - } - - if ( utf8Path ) { - if (!g_utf8_validate(utf8Path, -1, NULL)) { - g_warning( "SHGetPathFromIDListW() resulted in invalid UTF-8"); - g_free( utf8Path ); - utf8Path = 0; - } else { - prefdir = utf8Path; - } - } - - - /* not compiling yet... - - // Remember to free the list pointer - IMalloc * imalloc = 0; - if ( SHGetMalloc(&imalloc) == NOERROR) { - imalloc->lpVtbl->Free( imalloc, pidl ); - imalloc->lpVtbl->Release( imalloc ); - } - */ - } - if (prefdir) { - const char *prefdir_profile = g_build_filename(prefdir, INKSCAPE_PROFILE_DIR, NULL); - g_free((void *)prefdir); - prefdir = prefdir_profile; - } - } -#endif - if (!prefdir) { - prefdir = g_build_filename(g_get_user_config_dir(), INKSCAPE_PROFILE_DIR, NULL); - gchar * legacyDir = homedir_path(INKSCAPE_LEGACY_PROFILE_DIR); - gchar * dev47Dir = g_build_filename(g_get_user_config_dir(), INKSCAPE_PROFILE_DIR_047DEV, NULL); - - bool needsMigration = ( !Inkscape::IO::file_test( prefdir, G_FILE_TEST_EXISTS ) && Inkscape::IO::file_test( legacyDir, G_FILE_TEST_EXISTS ) ); - if (needsMigration) { - // TODO here is a point to hook in preference migration - g_warning("Preferences need to be migrated from 0.46 or older %s to %s", legacyDir, prefdir); - Inkscape::Preferences::migrate( legacyDir, prefdir ); - } - - bool needsRenameWarning = ( !Inkscape::IO::file_test( prefdir, G_FILE_TEST_EXISTS ) && Inkscape::IO::file_test( dev47Dir, G_FILE_TEST_EXISTS ) ); - if (needsRenameWarning) { - g_warning("Preferences need to be copied from %s to %s", legacyDir, prefdir); - } - g_free(legacyDir); - legacyDir = 0; - g_free(dev47Dir); - dev47Dir = 0; - // In case the XDG user config dir of the moment does not yet exist... - int mode = S_IRWXU; -#ifdef S_IRGRP - mode |= S_IRGRP; -#endif -#ifdef S_IXGRP - mode |= S_IXGRP; -#endif -#ifdef S_IXOTH - mode |= S_IXOTH; -#endif - if ( g_mkdir_with_parents(prefdir, mode) == -1 ) { - int problem = errno; - g_warning("Unable to create profile directory (%s) (%d)", g_strerror(problem), problem); - } else { - gchar const *userDirs[] = {"keys", "templates", "icons", "extensions", "palettes", NULL}; - for (gchar const** name = userDirs; *name; ++name) { - gchar *dir = g_build_filename(prefdir, *name, NULL); - g_mkdir_with_parents(dir, mode); - g_free(dir); - } - } - } - } - return g_build_filename(prefdir, filename, NULL); -} Inkscape::XML::Node * Application::get_menus() diff --git a/src/inkscape.h b/src/inkscape.h index 3f4416f2f..e66201b25 100644 --- a/src/inkscape.h +++ b/src/inkscape.h @@ -147,9 +147,6 @@ public: void add_document (SPDocument *document); bool remove_document (SPDocument *document); - static char *homedir_path(const char *filename); - static char *profile_path(const char *filename); - // fixme: This has to be rethought void refresh_display (); diff --git a/src/io/resource.cpp b/src/io/resource.cpp index 52ac884b1..84be1586e 100644 --- a/src/io/resource.cpp +++ b/src/io/resource.cpp @@ -1,7 +1,11 @@ /* * Inkscape::IO::Resource - simple resource API * - * Copyright 2006 MenTaLguY + * Authors: + * MenTaLguY + * Martin Owens + * + * Copyright (C) 2006-2017 Authors * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -18,7 +22,6 @@ #include // g_assert() #include "path-prefix.h" -#include "inkscape.h" #include "io/sys.h" #include "io/resource.h" @@ -30,6 +33,8 @@ namespace IO { namespace Resource { +#define INKSCAPE_PROFILE_DIR "inkscape" + gchar *_get_path(Domain domain, Type type, char const *filename) { gchar *path=NULL; @@ -39,6 +44,7 @@ gchar *_get_path(Domain domain, Type type, char const *filename) switch (type) { case APPICONS: temp = INKSCAPE_APPICONDIR; break; case EXTENSIONS: temp = INKSCAPE_EXTENSIONDIR; break; + case FILTERS: temp = INKSCAPE_FILTERDIR; break; case GRADIENTS: temp = INKSCAPE_GRADIENTSDIR; break; case ICONS: temp = INKSCAPE_PIXMAPDIR; break; case KEYS: temp = INKSCAPE_KEYSDIR; break; @@ -46,9 +52,11 @@ gchar *_get_path(Domain domain, Type type, char const *filename) case PALETTES: temp = INKSCAPE_PALETTESDIR; break; case PATTERNS: temp = INKSCAPE_PATTERNSDIR; break; case SCREENS: temp = INKSCAPE_SCREENSDIR; break; + case SYMBOLS: temp = INKSCAPE_SYMBOLSDIR; break; case TEMPLATES: temp = INKSCAPE_TEMPLATESDIR; break; + case THEMES: temp = INKSCAPE_THEMEDIR; break; case TUTORIALS: temp = INKSCAPE_TUTORIALSDIR; break; - case UI: temp = INKSCAPE_UIDIR; break; + case UIS: temp = INKSCAPE_UIDIR; break; default: g_assert_not_reached(); } path = g_strdup(temp); @@ -67,17 +75,20 @@ gchar *_get_path(Domain domain, Type type, char const *filename) char const *name=NULL; switch (type) { case EXTENSIONS: name = "extensions"; break; + case FILTERS: name = "filters"; break; case GRADIENTS: name = "gradients"; break; case ICONS: name = "icons"; break; case KEYS: name = "keys"; break; case MARKERS: name = "markers"; break; case PALETTES: name = "palettes"; break; case PATTERNS: name = "patterns"; break; + case SYMBOLS: name = "symbols"; break; case TEMPLATES: name = "templates"; break; - case UI: name = "ui"; break; + case THEMES: name = "icons"; break; + case UIS: name = "ui"; break; default: return _get_path(SYSTEM, type, filename); } - path = Inkscape::Application::profile_path(name); + path = profile_path(name); } break; } @@ -97,29 +108,185 @@ Util::ptr_shared get_path(Domain domain, Type type, char const *filename) g_free(path); return result; } +Glib::ustring get_path_ustring(Domain domain, Type type, char const *filename) +{ + Glib::ustring result; + char *path = _get_path(domain, type, filename); + if(path) { + result = Glib::ustring(path); + g_free(path); + } + return result; +} /* * Same as get_path, but checks for file's existance and falls back * from USER to SYSTEM modes. + * + * type - The type of file to get, such as extension, template, ui etc + * filename - The filename to get, i.e. preferences.xml + * locale - The local language version of the file (if needed) */ -Util::ptr_shared get_filename(Type type, char const *filename) +Glib::ustring get_filename(Type type, char const *filename, char const *locale) { - Util::ptr_shared result; + Glib::ustring result; + + if(locale != NULL) { + char *user_locale = _get_path(USER, type, filename); + char *sys_locale = _get_path(SYSTEM, type, filename); + + if (file_test(user_locale, G_FILE_TEST_EXISTS)) { + result = Glib::ustring(user_locale); + } else if(file_test(sys_locale, G_FILE_TEST_EXISTS)) { + result = Glib::ustring(sys_locale); + } + g_free(user_locale); + g_free(sys_locale); + + if(!result.empty()) { + g_info("Using translated resource file: %s", result.c_str()); + return result; + } + } + char *user_filename = _get_path(USER, type, filename); char *sys_filename = _get_path(SYSTEM, type, filename); if (file_test(user_filename, G_FILE_TEST_EXISTS)) { - result = Util::share_string(user_filename); + result = Glib::ustring(user_filename); } else if(file_test(sys_filename, G_FILE_TEST_EXISTS)) { - result = Util::share_string(sys_filename); + result = Glib::ustring(sys_filename); } else { g_warning("Failed to load resource: %s", filename); } + + if(!result.empty()) { + g_info("Using resource file: %s", result.c_str()); + } + g_free(user_filename); g_free(sys_filename); return result; } +/** + * Get, or guess, or decide the location where the preferences.xml + * file should be located. This also indicates where all other inkscape + * shared files may optionally exist. + */ +char *profile_path(const char *filename) +{ + static const gchar *prefdir = NULL; + + + if (!prefdir) { + // First check for a custom environment variable for a "portable app" + gchar const *val = g_getenv("INKSCAPE_PORTABLE_PROFILE_DIR"); + if (val) { + prefdir = g_strdup(val); + } + // Then check for a custom user environment variable + gchar const *userenv = g_getenv("INKSCAPE_PROFILE_DIR"); + if (userenv) { + prefdir = g_strdup(userenv); + } + +#ifdef HAS_SHGetSpecialFolderLocation + // prefer c:\Documents and Settings\UserName\Application Data\ to + // c:\Documents and Settings\userName\; + if (!prefdir) { + ITEMIDLIST *pidl = 0; + if ( SHGetSpecialFolderLocation( NULL, CSIDL_APPDATA, &pidl ) == NOERROR ) { + gchar * utf8Path = NULL; + + { + wchar_t pathBuf[MAX_PATH+1]; + g_assert(sizeof(wchar_t) == sizeof(gunichar2)); + + if ( SHGetPathFromIDListW( pidl, pathBuf ) ) { + utf8Path = g_utf16_to_utf8( (gunichar2*)(&pathBuf[0]), -1, NULL, NULL, NULL ); + } + } + + if ( utf8Path ) { + if (!g_utf8_validate(utf8Path, -1, NULL)) { + g_warning( "SHGetPathFromIDListW() resulted in invalid UTF-8"); + g_free( utf8Path ); + utf8Path = 0; + } else { + prefdir = utf8Path; + } + } + + + /* not compiling yet... + + // Remember to free the list pointer + IMalloc * imalloc = 0; + if ( SHGetMalloc(&imalloc) == NOERROR) { + imalloc->lpVtbl->Free( imalloc, pidl ); + imalloc->lpVtbl->Release( imalloc ); + } + */ + } + + if (prefdir) { + const char *prefdir_profile = g_build_filename(prefdir, INKSCAPE_PROFILE_DIR, NULL); + g_free((void *)prefdir); + prefdir = prefdir_profile; + } + } +#endif + if (!prefdir) { + prefdir = g_build_filename(g_get_user_config_dir(), INKSCAPE_PROFILE_DIR, NULL); + // In case the XDG user config dir of the moment does not yet exist... + int mode = S_IRWXU; +#ifdef S_IRGRP + mode |= S_IRGRP; +#endif +#ifdef S_IXGRP + mode |= S_IXGRP; +#endif +#ifdef S_IXOTH + mode |= S_IXOTH; +#endif + if ( g_mkdir_with_parents(prefdir, mode) == -1 ) { + int problem = errno; + g_warning("Unable to create profile directory (%s) (%d)", g_strerror(problem), problem); + } else { + gchar const *userDirs[] = {"keys", "templates", "icons", "extensions", "palettes", NULL}; + for (gchar const** name = userDirs; *name; ++name) { + gchar *dir = g_build_filename(prefdir, *name, NULL); + g_mkdir_with_parents(dir, mode); + g_free(dir); + } + } + } + } + return g_build_filename(prefdir, filename, NULL); +} + +/* + * We return the profile_path because that is where most documentation + * days log files will be generated in inkscape 0.92 + */ +char *log_path(const char *filename) +{ + return profile_path(filename); +} + +char *homedir_path(const char *filename) +{ + static const gchar *homedir = NULL; + homedir = g_get_home_dir(); + + // I suspect this is for handling inkscape app packages + /*if (!homedir && Application::exists()) { + homedir = g_path_get_dirname(Application::instance()._argv0); + }*/ + return g_build_filename(homedir, filename, NULL); +} + } } diff --git a/src/io/resource.h b/src/io/resource.h index fbf2111f4..8b60775b5 100644 --- a/src/io/resource.h +++ b/src/io/resource.h @@ -1,5 +1,9 @@ /* - * Copyright 2006 MenTaLguY + * Authors: + * MenTaLguY + * Martin Owens + * + * Copyright (C) 2006-2017 Authors * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -36,7 +40,10 @@ enum Type { SCREENS, TEMPLATES, TUTORIALS, - UI + SYMBOLS, + FILTERS, + THEMES, + UIS }; enum Domain { @@ -48,7 +55,15 @@ enum Domain { Util::ptr_shared get_path(Domain domain, Type type, char const *filename=NULL); -Util::ptr_shared get_filename(Type type, char const *filename=NULL); +Glib::ustring get_path_ustring(Domain domain, Type type, + char const *filename=NULL); + +Glib::ustring get_filename(Type type, char const *filename, + char const *locale=NULL); + +char *profile_path(const char *filename); +char *homedir_path(const char *filename); +char *log_path(const char *filename); } diff --git a/src/preferences.cpp b/src/preferences.cpp index 2849fe068..4d14afa93 100644 --- a/src/preferences.cpp +++ b/src/preferences.cpp @@ -25,6 +25,7 @@ #include "xml/attribute-record.h" #include "util/units.h" #include "attribute-rel-util.h" +#include "io/resource.h" #define PREFERENCES_FILE_NAME "preferences.xml" @@ -82,22 +83,13 @@ private: }; Preferences::Preferences() : - _prefs_basename(PREFERENCES_FILE_NAME), - _prefs_dir(""), _prefs_filename(""), _prefs_doc(0), _errorHandler(0), _writable(false), _hasError(false) { - // profile_path essentailly returns the argument prefixed by the profile directory. - // \TODO this is kinda hackish, but the alternative (strrchr) is worse - - gchar *path = Inkscape::Application::profile_path(NULL); - _prefs_dir = path; - g_free(path); - - path = Inkscape::Application::profile_path(_prefs_basename.c_str()); + char *path = Inkscape::IO::Resource::profile_path(PREFERENCES_FILE_NAME); _prefs_filename = path; g_free(path); @@ -140,16 +132,16 @@ void Preferences::_load() // 1. Does the file exist? if (!g_file_test(_prefs_filename.c_str(), G_FILE_TEST_EXISTS)) { + char *_prefs_dir = Inkscape::IO::Resource::profile_path(NULL); // No - we need to create one. // Does the profile directory exist? - if (!g_file_test(_prefs_dir.c_str(), G_FILE_TEST_EXISTS)) { + if (!g_file_test(_prefs_dir, G_FILE_TEST_EXISTS)) { // No - create the profile directory - if (g_mkdir(_prefs_dir.c_str(), 0755)) { + if (g_mkdir(_prefs_dir, 0755)) { // the creation failed //_reportError(Glib::ustring::compose(_("Cannot create profile directory %1."), // Glib::filename_to_utf8(_prefs_dir)), not_saved); - gchar *msg = g_strdup_printf(_("Cannot create profile directory %s."), - Glib::filename_to_utf8(_prefs_dir).c_str()); + gchar *msg = g_strdup_printf(_("Cannot create profile directory %s."), _prefs_dir); _reportError(msg, not_saved); g_free(msg); return; @@ -157,17 +149,17 @@ void Preferences::_load() // create some subdirectories for user stuff char const *user_dirs[] = {"keys", "templates", "icons", "extensions", "palettes", NULL}; for (int i=0; user_dirs[i]; ++i) { - char *dir = Inkscape::Application::profile_path(user_dirs[i]); + // XXX Why are we doing this here? shouldn't this be an IO load item? + char *dir = Inkscape::IO::Resource::profile_path(user_dirs[i]); g_mkdir(dir, 0755); g_free(dir); } - } else if (!g_file_test(_prefs_dir.c_str(), G_FILE_TEST_IS_DIR)) { + } else if (!g_file_test(_prefs_dir, G_FILE_TEST_IS_DIR)) { // The profile dir is not actually a directory //_reportError(Glib::ustring::compose(_("%1 is not a valid directory."), // Glib::filename_to_utf8(_prefs_dir)), not_saved); - gchar *msg = g_strdup_printf(_("%s is not a valid directory."), - Glib::filename_to_utf8(_prefs_dir).c_str()); + gchar *msg = g_strdup_printf(_("%s is not a valid directory."), _prefs_dir); _reportError(msg, not_saved); g_free(msg); return; diff --git a/src/preferences.h b/src/preferences.h index d5ae40e56..2a9818c63 100644 --- a/src/preferences.h +++ b/src/preferences.h @@ -544,8 +544,6 @@ private: Preferences(Preferences const &); Preferences operator=(Preferences const &); - std::string _prefs_basename; ///< Basename of the prefs file - std::string _prefs_dir; ///< Directory in which to look for the prefs file std::string _prefs_filename; ///< Full filename (with directory) of the prefs file Glib::ustring _lastErrPrimary; ///< Last primary error message, if any. Glib::ustring _lastErrSecondary; ///< Last secondary error message, if any. diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index b3d910700..bac924980 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -39,6 +39,7 @@ SPCycleType SP_CYCLING = SP_CYCLE_FOCUS; #include "layer-model.h" #include "selection.h" #include "ui/tools-switch.h" +#include "io/resource.h" #include "message-stack.h" #include "sp-item-transform.h" @@ -3628,7 +3629,7 @@ void ObjectSet::createBitmapCopy() directory = g_path_get_dirname( doc->getURI() ); } if (directory == NULL) { - directory = INKSCAPE.homedir_path(NULL); + directory = Inkscape::IO::Resource::homedir_path(NULL); } gchar *filepath = g_build_filename(directory, basename, NULL); g_free(directory); diff --git a/src/shortcuts.cpp b/src/shortcuts.cpp index e74d60abc..f8a647040 100644 --- a/src/shortcuts.cpp +++ b/src/shortcuts.cpp @@ -48,11 +48,7 @@ #include "ui/dialog/filedialog.h" using namespace Inkscape; - -using Inkscape::IO::Resource::get_path; -using Inkscape::IO::Resource::SYSTEM; -using Inkscape::IO::Resource::USER; -using Inkscape::IO::Resource::KEYS; +using namespace Inkscape::IO::Resource; static void try_shortcuts_file(char const *filename); static void read_shortcuts_file(char const *filename, bool const is_user_set=false); @@ -208,9 +204,11 @@ Inkscape::XML::Document *sp_shortcut_create_template_file(char const *filename) */ void sp_shortcut_get_file_names(std::vector *names, std::vector *paths) { - std::list sources; - sources.push_back( Inkscape::Application::profile_path("keys") ); - sources.push_back( g_strdup(INKSCAPE_KEYSDIR) ); + using namespace Inkscape::IO::Resource; + std::list sources; + + sources.push_back(g_strdup(get_path(USER, KEYS))); + sources.push_back(g_strdup(get_path(SYSTEM, KEYS))); // loop through possible keyboard shortcut file locations. while (!sources.empty()) { @@ -227,14 +225,12 @@ void sp_shortcut_get_file_names(std::vector *names, std::vector sources; - sources.push_back( Inkscape::Application::profile_path("palettes") ); - sources.push_back( g_strdup(INKSCAPE_PALETTESDIR) ); - sources.push_back( g_strdup(CREATE_PALETTESDIR) ); + sources.push_back(g_strdup(get_path(USER, PALETTES))); + sources.push_back(g_strdup(get_path(SYSTEM, PALETTES))); + sources.push_back(g_strdup(get_path(CREATE, PALETTES))); // Use this loop to iterate through a list of possible document locations. while (!sources.empty()) { diff --git a/src/ui/dialog/symbols.cpp b/src/ui/dialog/symbols.cpp index e9a13620b..b7a43a1ca 100644 --- a/src/ui/dialog/symbols.cpp +++ b/src/ui/dialog/symbols.cpp @@ -31,6 +31,7 @@ #include #include "path-prefix.h" #include "io/sys.h" +#include "io/resource.h" #include "ui/cache/svg_preview_cache.h" #include "ui/clipboard.h" @@ -577,19 +578,15 @@ void SymbolsDialog::get_symbols() { std::list directories; -// \TODO optimize this - - if( Inkscape::IO::file_test( INKSCAPE_SYMBOLSDIR, G_FILE_TEST_EXISTS ) && - Inkscape::IO::file_test( INKSCAPE_SYMBOLSDIR, G_FILE_TEST_IS_DIR ) ) { - directories.push_back( INKSCAPE_SYMBOLSDIR ); - } - if( Inkscape::IO::file_test( Inkscape::Application::profile_path("symbols"), G_FILE_TEST_EXISTS ) && - Inkscape::IO::file_test( Inkscape::Application::profile_path("symbols"), G_FILE_TEST_IS_DIR ) ) { - directories.push_back( Inkscape::Application::profile_path("symbols") ); - } + using namespace Inkscape::IO::Resource; + directories.push_back(get_path_ustring(USER, SYMBOLS)); + directories.push_back(get_path_ustring(SYSTEM, SYMBOLS)); std::list::iterator it; for( it = directories.begin(); it != directories.end(); ++it ) { + if(!Inkscape::IO::file_test((*it).c_str(), G_FILE_TEST_IS_DIR)) { + continue; + } GError *err = 0; GDir *dir = g_dir_open( (*it).c_str(), 0, &err ); diff --git a/src/ui/dialog/template-load-tab.cpp b/src/ui/dialog/template-load-tab.cpp index 7b96c2b97..10b4716ff 100644 --- a/src/ui/dialog/template-load-tab.cpp +++ b/src/ui/dialog/template-load-tab.cpp @@ -24,6 +24,8 @@ #include "file.h" #include "path-prefix.h" +using namespace Inkscape::IO::Resource; + namespace Inkscape { namespace UI { @@ -57,7 +59,6 @@ TemplateLoadTab::TemplateLoadTab(NewFromTemplate* parent) sigc::mem_fun(*this, &TemplateLoadTab::_keywordSelected)); this->show_all(); - _loading_path = ""; _loadTemplates(); _initLists(); } @@ -207,11 +208,8 @@ void TemplateLoadTab::_refreshTemplatesList() void TemplateLoadTab::_loadTemplates() { - // user's local dir - _getTemplatesFromDir(Inkscape::Application::profile_path("templates") + _loading_path); - - // system templates dir - _getTemplatesFromDir(INKSCAPE_TEMPLATESDIR + _loading_path); + _getTemplatesFromDomain(USER); + _getTemplatesFromDomain(SYSTEM); // procedural templates _getProceduralTemplates(); @@ -252,11 +250,12 @@ TemplateLoadTab::TemplateData TemplateLoadTab::_processTemplateFile(const std::s } -void TemplateLoadTab::_getTemplatesFromDir(const std::string &path) +void TemplateLoadTab::_getTemplatesFromDomain(Domain domain) { - if ( !Glib::file_test(path, Glib::FILE_TEST_EXISTS) || - !Glib::file_test(path, Glib::FILE_TEST_IS_DIR)) + Glib::ustring path = get_path_ustring(domain, TEMPLATES); + if (!Glib::file_test(path, Glib::FILE_TEST_IS_DIR)) { return; + } Glib::Dir dir(path); diff --git a/src/ui/dialog/template-load-tab.h b/src/ui/dialog/template-load-tab.h index d11c4c77f..0a5521d93 100644 --- a/src/ui/dialog/template-load-tab.h +++ b/src/ui/dialog/template-load-tab.h @@ -21,6 +21,7 @@ #include #include "xml/node.h" +#include "io/resource.h" #include "extension/effect.h" @@ -66,7 +67,6 @@ protected: Glib::ustring _current_keyword; Glib::ustring _current_template; - std::string _loading_path; std::map _tdata; std::set _keywords; @@ -100,7 +100,7 @@ private: void _getDataFromNode(Inkscape::XML::Node *, TemplateData &); void _getProceduralTemplates(); - void _getTemplatesFromDir(const std::string &); + void _getTemplatesFromDomain(Inkscape::IO::Resource::Domain domain); void _keywordSelected(); TemplateData _processTemplateFile(const std::string &); diff --git a/src/widgets/icon.cpp b/src/widgets/icon.cpp index 885deaab7..730fe3e31 100644 --- a/src/widgets/icon.cpp +++ b/src/widgets/icon.cpp @@ -34,6 +34,7 @@ #include "display/drawing-item.h" #include "display/drawing.h" #include "io/sys.h" +#include "io/resource.h" #include "sp-root.h" #include "sp-namedview.h" #include "util/units.h" @@ -1237,14 +1238,15 @@ GdkPixbuf *get_cached_pixbuf(Glib::ustring const &key) { std::list &IconImpl::icons_svg_paths() { + using namespace Inkscape::IO::Resource; static std::list sources; static bool initialized = false; if (!initialized) { // Fall back from user prefs dir into system locations. - gchar *userdir = Inkscape::Application::profile_path("icons"); - sources.push_back(g_build_filename(userdir,"icons.svg", NULL)); - sources.push_back(g_build_filename(INKSCAPE_PIXMAPDIR, "icons.svg", NULL)); - g_free(userdir); + // doctormo 2017 hackfest - I've left this modification very light + // because there is a refactoring of the icons underway. + sources.push_back(g_strdup(get_path(USER, ICONS, "icons.svg"))); + sources.push_back(g_strdup(get_path(SYSTEM, ICONS, "icons.svg"))); initialized = true; } return sources; diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index 65c54f0ce..672cb708b 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -102,7 +102,7 @@ using Inkscape::UI::ToolboxFactory; using Inkscape::UI::Tools::ToolBase; using Inkscape::IO::Resource::get_filename; -using Inkscape::IO::Resource::UI; +using Inkscape::IO::Resource::UIS; typedef void (*SetupFunction)(GtkWidget *toolbox, SPDesktop *desktop); typedef void (*UpdateFunction)(SPDesktop *desktop, ToolBase *eventcontext, GtkWidget *toolbox); @@ -840,10 +840,10 @@ static void setupToolboxCommon( GtkWidget *toolbox, gtk_ui_manager_insert_action_group( mgr, mainActions->gobj(), 0 ); - char const *filename = get_filename(UI, ui_file); - gtk_ui_manager_add_ui_from_file( mgr, filename, &err ); + Glib::ustring filename = get_filename(UIS, ui_file); + gtk_ui_manager_add_ui_from_file( mgr, filename.c_str(), &err ); if(err) { - g_warning("Failed to load %s: %s", filename, err->message); + g_warning("Failed to load %s: %s", filename.c_str(), err->message); g_error_free(err); return; } @@ -984,10 +984,10 @@ void setup_aux_toolbox(GtkWidget *toolbox, SPDesktop *desktop) GError *err = 0; gtk_ui_manager_insert_action_group( mgr, mainActions->gobj(), 0 ); - char const *filename = get_filename(UI, "select-toolbar.ui"); - guint ret = gtk_ui_manager_add_ui_from_file(mgr, filename, &err); + Glib::ustring filename = get_filename(UIS, "select-toolbar.ui"); + guint ret = gtk_ui_manager_add_ui_from_file(mgr, filename.c_str(), &err); if(err) { - g_warning("Failed to load aux toolbar %s: %s", filename, err->message); + g_warning("Failed to load aux toolbar %s: %s", filename.c_str(), err->message); g_error_free(err); return; } -- cgit v1.2.3 From 17dc4aeed3efb2414a5a4718c77cac3267f4e0ba Mon Sep 17 00:00:00 2001 From: Martin Owens Date: Wed, 28 Jun 2017 12:35:43 +0200 Subject: Fix README for cmake build in place --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5e888763e..68a88d4a2 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ For developers and others who want to run inkscape without installing it: ln -s . share/inkscape mkdir -p build/conf cd build -cmake -DCMAKE_INSTALL_PREFIX:PATH=$PWD/../ +cmake -DCMAKE_INSTALL_PREFIX:PATH=$PWD/../ .. make -j4 export INKSCAPE_PROFILE_DIR=$PWD/conf ./bin/inkscape -- cgit v1.2.3 From c26a023d294cd0451ca989e807fc0c05a0868245 Mon Sep 17 00:00:00 2001 From: Martin Owens Date: Wed, 28 Jun 2017 13:03:37 +0200 Subject: Remove menus-bars.xml since it's a duplicate file --- share/ui/menus-bars.xml | 276 ------------------------------------------------ 1 file changed, 276 deletions(-) delete mode 100644 share/ui/menus-bars.xml diff --git a/share/ui/menus-bars.xml b/share/ui/menus-bars.xml deleted file mode 100644 index 5ff7f5b83..000000000 --- a/share/ui/menus-bars.xml +++ /dev/null @@ -1,276 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- cgit v1.2.3 From d483c2ab23354cf5ea58a2d2225ab464b77f6614 Mon Sep 17 00:00:00 2001 From: Alexander Valavanis Date: Wed, 28 Jun 2017 15:17:39 +0200 Subject: menu-items: C++ify --- src/shortcuts.cpp | 14 +---- src/shortcuts.h | 1 - src/ui/interface.cpp | 120 ++++++++++++++++++++++++----------------- src/ui/interface.h | 9 +++- src/widgets/desktop-widget.cpp | 13 +++-- src/widgets/desktop-widget.h | 6 ++- 6 files changed, 93 insertions(+), 70 deletions(-) diff --git a/src/shortcuts.cpp b/src/shortcuts.cpp index e74d60abc..f7ce2643d 100644 --- a/src/shortcuts.cpp +++ b/src/shortcuts.cpp @@ -651,18 +651,6 @@ sp_shortcut_unset(unsigned int const shortcut) } } -GtkAccelGroup * -sp_shortcut_get_accel_group() -{ - static GtkAccelGroup *accel_group = NULL; - - if (!accel_group) { - accel_group = gtk_accel_group_new (); - } - - return accel_group; -} - /** * Adds a gtk accelerator to a widget * Used to display the keyboard shortcuts in the main menu items @@ -678,7 +666,7 @@ sp_shortcut_add_accelerator(GtkWidget *item, unsigned int const shortcut) if (accel_key > 0) { gtk_widget_add_accelerator (item, "activate", - sp_shortcut_get_accel_group(), + gtk_accel_group_new(), accel_key, sp_shortcut_get_modifiers(shortcut), GTK_ACCEL_VISIBLE); diff --git a/src/shortcuts.h b/src/shortcuts.h index f24a82603..f73d178d7 100644 --- a/src/shortcuts.h +++ b/src/shortcuts.h @@ -53,7 +53,6 @@ void sp_shortcut_file_export(); bool sp_shortcut_file_import(); void sp_shortcut_file_import_do(char const *importname); void sp_shortcut_file_export_do(char const *exportname); -GtkAccelGroup *sp_shortcut_get_accel_group(); void sp_shortcut_add_accelerator(GtkWidget *item, unsigned int const shortcut); #endif diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index c2ce9e568..c9c00df02 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -24,7 +24,12 @@ #endif #include "ui/dialog/dialog-manager.h" + #include +#include +#include +#include + #include "file.h" #include @@ -438,14 +443,18 @@ sp_ui_dialog_title_string(Inkscape::Verb *verb, gchar *c) * * @see ContextMenu::AppendItemFromVerb for a c++ified alternative. Consider dropping sp_ui_menu_append_item_from_verb when c++ifying interface.cpp. */ -static GtkWidget *sp_ui_menu_append_item_from_verb(GtkMenu *menu, Inkscape::Verb *verb, Inkscape::UI::View::View *view, bool radio = false, GSList *group = NULL) +static Gtk::MenuItem * +sp_ui_menu_append_item_from_verb(Gtk::Menu *menu, + Inkscape::Verb *verb, + Inkscape::UI::View::View *view, + bool radio = false) { - GtkWidget *item; + Gtk::MenuItem *item; // Just create a menu separator if this isn't a real action. // Otherwise, create a real menu item if (verb->get_code() == SP_VERB_NONE) { - item = gtk_separator_menu_item_new(); + item = Gtk::manage(new Gtk::SeparatorMenuItem()); } else { SPAction *action = verb->get_action(Inkscape::ActionContext(view)); @@ -453,76 +462,70 @@ static GtkWidget *sp_ui_menu_append_item_from_verb(GtkMenu *menu, Inkscape::Verb // Create the menu item itself, either as a radio menu item, or just // a regular menu item depending on whether the "radio" flag is set - if (radio) { - item = gtk_radio_menu_item_new(group); - } else { - item = gtk_menu_item_new(); - } + if(radio) item = Gtk::manage(new Gtk::RadioMenuItem()); + else item = Gtk::manage(new Gtk::MenuItem()); // Create a box to contain all the widgets (icon, label, accelerator) // that will go inside the menu item - GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + Gtk::Box *box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 0)); // Now create the label and add it to the menu item - GtkWidget *label = gtk_accel_label_new(action->name); - gtk_label_set_markup_with_mnemonic( GTK_LABEL(label), action->name); - gtk_label_set_use_underline(GTK_LABEL(label), true); - gtk_label_set_xalign(GTK_LABEL(label), 0.0); + Gtk::AccelLabel *label = Gtk::manage(new Gtk::AccelLabel(action->name)); + label->set_markup_with_mnemonic(action->name); + label->set_use_underline(true); + label->set_xalign(0.0); - GtkAccelGroup *accel_group = sp_shortcut_get_accel_group(); - gtk_menu_set_accel_group(menu, accel_group); + auto accel_group = Gtk::AccelGroup::create(); + menu->set_accel_group(accel_group); - sp_shortcut_add_accelerator(item, sp_shortcut_get_primary(verb)); - gtk_accel_label_set_accel_widget(GTK_ACCEL_LABEL(label), item); + sp_shortcut_add_accelerator(GTK_WIDGET(item->gobj()), sp_shortcut_get_primary(verb)); + label->set_accel_widget(*item); // If there is an image associated with the action, then we can add it as an // icon for the menu item. If not, give the label a bit more space if(action->image) { - GtkWidget *icon = gtk_image_new_from_icon_name(action->image, GTK_ICON_SIZE_MENU); - gtk_box_pack_start(GTK_BOX(box), icon, FALSE, TRUE, 0); + Gtk::Image *icon = Gtk::manage(new Gtk::Image()); + icon->set_from_icon_name(action->image, Gtk::ICON_SIZE_MENU); + box->pack_start(*icon, false, true, 0); } else { - GtkWidget *fake_icon = gtk_label_new(""); - gtk_widget_set_size_request(label, 16, 16); - gtk_widget_set_hexpand(label, true); - gtk_box_pack_start(GTK_BOX(box), fake_icon, FALSE, TRUE, 16); + Gtk::Widget *fake_icon = Gtk::manage(new Gtk::Label("")); + label->set_size_request(16, 16); + label->set_hexpand(true); + box->pack_start(*fake_icon, false, true, 16); } - gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 0); - + box->pack_start(*label, true, true, 0); // Finally, pack all the widgets into the menu item - gtk_container_add(GTK_CONTAINER(item), box); - + item->add(*box); + // Handle signals from the SPAction action->signal_set_sensitive.connect( - sigc::bind<0>( - sigc::ptr_fun(>k_widget_set_sensitive), - item)); + sigc::mem_fun(*item, &Gtk::MenuItem::set_sensitive)); + action->signal_set_name.connect( sigc::bind<0>( sigc::ptr_fun(&sp_ui_menu_item_set_name), - item)); + GTK_WIDGET(item->gobj()))); if (!action->sensitive) { - gtk_widget_set_sensitive(item, FALSE); + item->set_sensitive(false); } - gtk_widget_set_events(item, GDK_KEY_PRESS_MASK); + item->set_events(Gdk::KEY_PRESS_MASK); g_object_set_data(G_OBJECT(item), "view", (gpointer) view); g_signal_connect( G_OBJECT(item), "activate", G_CALLBACK(sp_ui_menu_activate), action ); g_signal_connect( G_OBJECT(item), "select", G_CALLBACK(sp_ui_menu_select_action), action ); g_signal_connect( G_OBJECT(item), "deselect", G_CALLBACK(sp_ui_menu_deselect_action), action ); } - gtk_widget_show_all(item); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); + item->show_all(); + menu->append(*item); return item; - } // end of sp_ui_menu_append_item_from_verb - Glib::ustring getLayoutPrefPath( Inkscape::UI::View::View *view ) { Glib::ustring prefPath; @@ -797,7 +800,7 @@ private: /** * This function turns XML into a menu. * - * This function is realitively simple as it just goes through the XML + * This function is relatively simple as it just goes through the XML * and parses the individual elements. In the case of a submenu, it * just calls itself recursively. Because it is only reasonable to have * a couple of submenus, it is unlikely this will go more than two or @@ -811,18 +814,19 @@ private: * @param menu Menu to be added to * @param view The View that this menu is being built for */ -static void sp_ui_build_dyn_menus(Inkscape::XML::Node *menus, GtkWidget *menu, Inkscape::UI::View::View *view) +static void sp_ui_build_dyn_menus(Inkscape::XML::Node *menus, + Gtk::Menu *menu, + Inkscape::UI::View::View *view) { if (menus == NULL) return; if (menu == NULL) return; - GSList *group = NULL; for (Inkscape::XML::Node *menu_pntr = menus; menu_pntr != NULL; menu_pntr = menu_pntr->next()) { if (!strcmp(menu_pntr->name(), "submenu")) { GtkWidget *mitem = gtk_menu_item_new_with_mnemonic(_(menu_pntr->attribute("name"))); - GtkWidget *submenu = gtk_menu_new(); + Gtk::Menu *submenu = Gtk::manage(new Gtk::Menu()); sp_ui_build_dyn_menus(menu_pntr->firstChild(), submenu, view); gtk_menu_item_set_submenu(GTK_MENU_ITEM(mitem), GTK_WIDGET(submenu)); gtk_menu_shell_append(GTK_MENU_SHELL(menu), mitem); @@ -833,9 +837,23 @@ static void sp_ui_build_dyn_menus(Inkscape::XML::Node *menus, GtkWidget *menu, I Inkscape::Verb *verb = Inkscape::Verb::getbyid(verb_name); if (verb != NULL) { + + // Add a radio item to the menu if (menu_pntr->attribute("radio") != NULL) { - GtkWidget *item = sp_ui_menu_append_item_from_verb (GTK_MENU(menu), verb, view, true, group); - group = gtk_radio_menu_item_get_group( GTK_RADIO_MENU_ITEM(item)); + auto item = sp_ui_menu_append_item_from_verb (menu, verb, view, true); + + // If the last item was also a radio item, then we need to add the new item to + // its group. Note that the Inkscape dynamic menu XML files do not support + // explicit grouping yet. Instead, groups consist of ALL adjacent radio menu items + // in the file. + Gtk::RadioMenuItem *last_item = dynamic_cast(menu->get_children().back()); + + if(last_item != nullptr) { + auto radioitem = dynamic_cast(item); + radioitem->join_group(*last_item); + } + + if (menu_pntr->attribute("default") != NULL) { gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), TRUE); } @@ -850,8 +868,7 @@ static void sp_ui_build_dyn_menus(Inkscape::XML::Node *menus, GtkWidget *menu, I checkitem_toggled, checkitem_update, verb); } } else { - sp_ui_menu_append_item_from_verb(GTK_MENU(menu), verb, view); - group = NULL; + sp_ui_menu_append_item_from_verb(menu, verb, view); } } else { gchar string[120]; @@ -910,11 +927,16 @@ static void sp_ui_build_dyn_menus(Inkscape::XML::Node *menus, GtkWidget *menu, I } } -GtkWidget *sp_ui_main_menubar(Inkscape::UI::View::View *view) +Gtk::MenuBar * +sp_ui_main_menubar(Inkscape::UI::View::View *view) { - GtkWidget *mbar = gtk_menu_bar_new(); - sp_ui_build_dyn_menus(INKSCAPE.get_menus(), mbar, view); - return mbar; + auto menu_bar = Gtk::manage(new Gtk::MenuBar()); + + sp_ui_build_dyn_menus(INKSCAPE.get_menus(), + dynamic_cast(menu_bar), + view); + + return menu_bar; } diff --git a/src/ui/interface.h b/src/ui/interface.h index 6e95c161c..6b687aa78 100644 --- a/src/ui/interface.h +++ b/src/ui/interface.h @@ -23,6 +23,10 @@ class SPViewWidget; typedef struct _GtkWidget GtkWidget; +namespace Gtk { +class MenuBar; +} + namespace Inkscape { class Verb; @@ -30,9 +34,12 @@ namespace UI { namespace View { class View; } // namespace View + + } // namespace UI } // namespace Inkscape + /** * Create a new document window. */ @@ -70,7 +77,7 @@ unsigned int sp_ui_close_all (void); * * @param view View to build the bar for */ -GtkWidget *sp_ui_main_menubar (Inkscape::UI::View::View *view); +Gtk::MenuBar * sp_ui_main_menubar(Inkscape::UI::View::View *view); void sp_menu_append_recent_documents (GtkWidget *menu); void sp_ui_dialog_title_string (Inkscape::Verb * verb, char* c); diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index ce4c5936c..fa7e680c6 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -66,6 +66,7 @@ #include #include #include +#include #include "inkscape-version.h" using Inkscape::UI::Widget::UnitTracker; @@ -1439,9 +1440,9 @@ void SPDesktopWidget::layoutWidgets() } if (!prefs->getBool(pref_root + "menu/state", true)) { - gtk_widget_hide (dtw->menubar); + dtw->menubar->hide(); } else { - gtk_widget_show_all (dtw->menubar); + dtw->menubar->show_all(); } if (!prefs->getBool(pref_root + "commands/state", true)) { @@ -1647,10 +1648,12 @@ SPDesktopWidget* SPDesktopWidget::createInstance(SPNamedView *namedview) dtw->layer_selector->setDesktop(dtw->desktop); dtw->menubar = sp_ui_main_menubar (dtw->desktop); - gtk_widget_set_name(dtw->menubar, "MenuBar"); - gtk_widget_show_all (dtw->menubar); + dtw->menubar->set_name("MenuBar"); + dtw->menubar->show_all(); SPNamedView *nv = dtw->desktop->namedview; - gtk_box_pack_start (GTK_BOX (dtw->vbox), dtw->menubar, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (dtw->vbox), + GTK_WIDGET(dtw->menubar->gobj()), + FALSE, FALSE, 0); dtw->layoutWidgets(); std::vector toolboxes; diff --git a/src/widgets/desktop-widget.h b/src/widgets/desktop-widget.h index 0d5f40987..1aaa20afe 100644 --- a/src/widgets/desktop-widget.h +++ b/src/widgets/desktop-widget.h @@ -28,6 +28,9 @@ class SPDesktop; struct SPDesktopWidget; class SPObject; +namespace Gtk { +class MenuBar; +} #define SP_TYPE_DESKTOP_WIDGET SPDesktopWidget::getType() #define SP_DESKTOP_WIDGET(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_DESKTOP_WIDGET, SPDesktopWidget)) @@ -79,7 +82,8 @@ struct SPDesktopWidget { GtkWidget *hbox; - GtkWidget *menubar, *statusbar; + Gtk::MenuBar *menubar; + GtkWidget *statusbar; Inkscape::UI::Dialogs::SwatchesPanel *panels; -- cgit v1.2.3 From 1da12a921c8a5e9f49de799cf9f3e9a642208bd7 Mon Sep 17 00:00:00 2001 From: Alexander Valavanis Date: Wed, 28 Jun 2017 16:25:51 +0200 Subject: Rm unused fn --- src/ui/interface.cpp | 29 ----------------------------- 1 file changed, 29 deletions(-) diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index c9c00df02..d31aa19a2 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -142,8 +142,6 @@ static void sp_ui_menu_item_set_name(GtkWidget *data, Glib::ustring const &name); static void sp_recent_open(GtkRecentChooser *, gpointer); -static void injectRenamedIcons(); - static const int MIN_ONSCREEN_DISTANCE = 50; void @@ -1441,33 +1439,6 @@ sp_ui_menu_item_set_name(GtkWidget *data, Glib::ustring const &name) } } } - -void injectRenamedIcons() -{ - Glib::RefPtr iconTheme = Gtk::IconTheme::get_default(); - - std::vector< std::pair > renamed; - renamed.push_back(std::make_pair("gtk-file", "document-x-generic")); - renamed.push_back(std::make_pair("gtk-directory", "folder")); - - for ( std::vector< std::pair >::iterator it = renamed.begin(); it < renamed.end(); ++it ) { - bool hasIcon = iconTheme->has_icon(it->first); - bool hasSecondIcon = iconTheme->has_icon(it->second); - - if ( !hasIcon && hasSecondIcon ) { - Glib::ArrayHandle sizes = iconTheme->get_icon_sizes(it->second); - for ( Glib::ArrayHandle::iterator it2 = sizes.begin(); it2 < sizes.end(); ++it2 ) { - Glib::RefPtr pb = iconTheme->load_icon( it->second, *it2 ); - if ( pb ) { - // install a private copy of the pixbuf to avoid pinning a theme - Glib::RefPtr pbCopy = pb->copy(); - Gtk::IconTheme::add_builtin_icon( it->first, *it2, pbCopy ); - } - } - } - } -} - /* Local Variables: mode:c++ -- cgit v1.2.3 From ff0dd4905d403242364fa5d63c510b0e1051ee2b Mon Sep 17 00:00:00 2001 From: Alexander Valavanis Date: Wed, 28 Jun 2017 16:57:29 +0200 Subject: Revert "Rm unused fn" This reverts commit 1da12a921c8a5e9f49de799cf9f3e9a642208bd7. --- src/ui/interface.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index d31aa19a2..c9c00df02 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -142,6 +142,8 @@ static void sp_ui_menu_item_set_name(GtkWidget *data, Glib::ustring const &name); static void sp_recent_open(GtkRecentChooser *, gpointer); +static void injectRenamedIcons(); + static const int MIN_ONSCREEN_DISTANCE = 50; void @@ -1439,6 +1441,33 @@ sp_ui_menu_item_set_name(GtkWidget *data, Glib::ustring const &name) } } } + +void injectRenamedIcons() +{ + Glib::RefPtr iconTheme = Gtk::IconTheme::get_default(); + + std::vector< std::pair > renamed; + renamed.push_back(std::make_pair("gtk-file", "document-x-generic")); + renamed.push_back(std::make_pair("gtk-directory", "folder")); + + for ( std::vector< std::pair >::iterator it = renamed.begin(); it < renamed.end(); ++it ) { + bool hasIcon = iconTheme->has_icon(it->first); + bool hasSecondIcon = iconTheme->has_icon(it->second); + + if ( !hasIcon && hasSecondIcon ) { + Glib::ArrayHandle sizes = iconTheme->get_icon_sizes(it->second); + for ( Glib::ArrayHandle::iterator it2 = sizes.begin(); it2 < sizes.end(); ++it2 ) { + Glib::RefPtr pb = iconTheme->load_icon( it->second, *it2 ); + if ( pb ) { + // install a private copy of the pixbuf to avoid pinning a theme + Glib::RefPtr pbCopy = pb->copy(); + Gtk::IconTheme::add_builtin_icon( it->first, *it2, pbCopy ); + } + } + } + } +} + /* Local Variables: mode:c++ -- cgit v1.2.3 From 4e9ea206bf17a0520e154c0fabe0128a4cc4f6fb Mon Sep 17 00:00:00 2001 From: Alexander Valavanis Date: Wed, 28 Jun 2017 16:57:52 +0200 Subject: Revert "menu-items: C++ify" This reverts commit d483c2ab23354cf5ea58a2d2225ab464b77f6614. --- src/shortcuts.cpp | 14 ++++- src/shortcuts.h | 1 + src/ui/interface.cpp | 120 +++++++++++++++++------------------------ src/ui/interface.h | 9 +--- src/widgets/desktop-widget.cpp | 13 ++--- src/widgets/desktop-widget.h | 6 +-- 6 files changed, 70 insertions(+), 93 deletions(-) diff --git a/src/shortcuts.cpp b/src/shortcuts.cpp index f7ce2643d..e74d60abc 100644 --- a/src/shortcuts.cpp +++ b/src/shortcuts.cpp @@ -651,6 +651,18 @@ sp_shortcut_unset(unsigned int const shortcut) } } +GtkAccelGroup * +sp_shortcut_get_accel_group() +{ + static GtkAccelGroup *accel_group = NULL; + + if (!accel_group) { + accel_group = gtk_accel_group_new (); + } + + return accel_group; +} + /** * Adds a gtk accelerator to a widget * Used to display the keyboard shortcuts in the main menu items @@ -666,7 +678,7 @@ sp_shortcut_add_accelerator(GtkWidget *item, unsigned int const shortcut) if (accel_key > 0) { gtk_widget_add_accelerator (item, "activate", - gtk_accel_group_new(), + sp_shortcut_get_accel_group(), accel_key, sp_shortcut_get_modifiers(shortcut), GTK_ACCEL_VISIBLE); diff --git a/src/shortcuts.h b/src/shortcuts.h index f73d178d7..f24a82603 100644 --- a/src/shortcuts.h +++ b/src/shortcuts.h @@ -53,6 +53,7 @@ void sp_shortcut_file_export(); bool sp_shortcut_file_import(); void sp_shortcut_file_import_do(char const *importname); void sp_shortcut_file_export_do(char const *exportname); +GtkAccelGroup *sp_shortcut_get_accel_group(); void sp_shortcut_add_accelerator(GtkWidget *item, unsigned int const shortcut); #endif diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index c9c00df02..c2ce9e568 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -24,12 +24,7 @@ #endif #include "ui/dialog/dialog-manager.h" - #include -#include -#include -#include - #include "file.h" #include @@ -443,18 +438,14 @@ sp_ui_dialog_title_string(Inkscape::Verb *verb, gchar *c) * * @see ContextMenu::AppendItemFromVerb for a c++ified alternative. Consider dropping sp_ui_menu_append_item_from_verb when c++ifying interface.cpp. */ -static Gtk::MenuItem * -sp_ui_menu_append_item_from_verb(Gtk::Menu *menu, - Inkscape::Verb *verb, - Inkscape::UI::View::View *view, - bool radio = false) +static GtkWidget *sp_ui_menu_append_item_from_verb(GtkMenu *menu, Inkscape::Verb *verb, Inkscape::UI::View::View *view, bool radio = false, GSList *group = NULL) { - Gtk::MenuItem *item; + GtkWidget *item; // Just create a menu separator if this isn't a real action. // Otherwise, create a real menu item if (verb->get_code() == SP_VERB_NONE) { - item = Gtk::manage(new Gtk::SeparatorMenuItem()); + item = gtk_separator_menu_item_new(); } else { SPAction *action = verb->get_action(Inkscape::ActionContext(view)); @@ -462,70 +453,76 @@ sp_ui_menu_append_item_from_verb(Gtk::Menu *menu, // Create the menu item itself, either as a radio menu item, or just // a regular menu item depending on whether the "radio" flag is set - if(radio) item = Gtk::manage(new Gtk::RadioMenuItem()); - else item = Gtk::manage(new Gtk::MenuItem()); + if (radio) { + item = gtk_radio_menu_item_new(group); + } else { + item = gtk_menu_item_new(); + } // Create a box to contain all the widgets (icon, label, accelerator) // that will go inside the menu item - Gtk::Box *box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 0)); + GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); // Now create the label and add it to the menu item - Gtk::AccelLabel *label = Gtk::manage(new Gtk::AccelLabel(action->name)); - label->set_markup_with_mnemonic(action->name); - label->set_use_underline(true); - label->set_xalign(0.0); + GtkWidget *label = gtk_accel_label_new(action->name); + gtk_label_set_markup_with_mnemonic( GTK_LABEL(label), action->name); + gtk_label_set_use_underline(GTK_LABEL(label), true); + gtk_label_set_xalign(GTK_LABEL(label), 0.0); - auto accel_group = Gtk::AccelGroup::create(); - menu->set_accel_group(accel_group); + GtkAccelGroup *accel_group = sp_shortcut_get_accel_group(); + gtk_menu_set_accel_group(menu, accel_group); - sp_shortcut_add_accelerator(GTK_WIDGET(item->gobj()), sp_shortcut_get_primary(verb)); - label->set_accel_widget(*item); + sp_shortcut_add_accelerator(item, sp_shortcut_get_primary(verb)); + gtk_accel_label_set_accel_widget(GTK_ACCEL_LABEL(label), item); // If there is an image associated with the action, then we can add it as an // icon for the menu item. If not, give the label a bit more space if(action->image) { - Gtk::Image *icon = Gtk::manage(new Gtk::Image()); - icon->set_from_icon_name(action->image, Gtk::ICON_SIZE_MENU); - box->pack_start(*icon, false, true, 0); + GtkWidget *icon = gtk_image_new_from_icon_name(action->image, GTK_ICON_SIZE_MENU); + gtk_box_pack_start(GTK_BOX(box), icon, FALSE, TRUE, 0); } else { - Gtk::Widget *fake_icon = Gtk::manage(new Gtk::Label("")); - label->set_size_request(16, 16); - label->set_hexpand(true); - box->pack_start(*fake_icon, false, true, 16); + GtkWidget *fake_icon = gtk_label_new(""); + gtk_widget_set_size_request(label, 16, 16); + gtk_widget_set_hexpand(label, true); + gtk_box_pack_start(GTK_BOX(box), fake_icon, FALSE, TRUE, 16); } - box->pack_start(*label, true, true, 0); + gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 0); + // Finally, pack all the widgets into the menu item - item->add(*box); + gtk_container_add(GTK_CONTAINER(item), box); - // Handle signals from the SPAction - action->signal_set_sensitive.connect( - sigc::mem_fun(*item, &Gtk::MenuItem::set_sensitive)); + action->signal_set_sensitive.connect( + sigc::bind<0>( + sigc::ptr_fun(>k_widget_set_sensitive), + item)); action->signal_set_name.connect( sigc::bind<0>( sigc::ptr_fun(&sp_ui_menu_item_set_name), - GTK_WIDGET(item->gobj()))); + item)); if (!action->sensitive) { - item->set_sensitive(false); + gtk_widget_set_sensitive(item, FALSE); } - item->set_events(Gdk::KEY_PRESS_MASK); + gtk_widget_set_events(item, GDK_KEY_PRESS_MASK); g_object_set_data(G_OBJECT(item), "view", (gpointer) view); g_signal_connect( G_OBJECT(item), "activate", G_CALLBACK(sp_ui_menu_activate), action ); g_signal_connect( G_OBJECT(item), "select", G_CALLBACK(sp_ui_menu_select_action), action ); g_signal_connect( G_OBJECT(item), "deselect", G_CALLBACK(sp_ui_menu_deselect_action), action ); } - item->show_all(); - menu->append(*item); + gtk_widget_show_all(item); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); return item; + } // end of sp_ui_menu_append_item_from_verb + Glib::ustring getLayoutPrefPath( Inkscape::UI::View::View *view ) { Glib::ustring prefPath; @@ -800,7 +797,7 @@ private: /** * This function turns XML into a menu. * - * This function is relatively simple as it just goes through the XML + * This function is realitively simple as it just goes through the XML * and parses the individual elements. In the case of a submenu, it * just calls itself recursively. Because it is only reasonable to have * a couple of submenus, it is unlikely this will go more than two or @@ -814,19 +811,18 @@ private: * @param menu Menu to be added to * @param view The View that this menu is being built for */ -static void sp_ui_build_dyn_menus(Inkscape::XML::Node *menus, - Gtk::Menu *menu, - Inkscape::UI::View::View *view) +static void sp_ui_build_dyn_menus(Inkscape::XML::Node *menus, GtkWidget *menu, Inkscape::UI::View::View *view) { if (menus == NULL) return; if (menu == NULL) return; + GSList *group = NULL; for (Inkscape::XML::Node *menu_pntr = menus; menu_pntr != NULL; menu_pntr = menu_pntr->next()) { if (!strcmp(menu_pntr->name(), "submenu")) { GtkWidget *mitem = gtk_menu_item_new_with_mnemonic(_(menu_pntr->attribute("name"))); - Gtk::Menu *submenu = Gtk::manage(new Gtk::Menu()); + GtkWidget *submenu = gtk_menu_new(); sp_ui_build_dyn_menus(menu_pntr->firstChild(), submenu, view); gtk_menu_item_set_submenu(GTK_MENU_ITEM(mitem), GTK_WIDGET(submenu)); gtk_menu_shell_append(GTK_MENU_SHELL(menu), mitem); @@ -837,23 +833,9 @@ static void sp_ui_build_dyn_menus(Inkscape::XML::Node *menus, Inkscape::Verb *verb = Inkscape::Verb::getbyid(verb_name); if (verb != NULL) { - - // Add a radio item to the menu if (menu_pntr->attribute("radio") != NULL) { - auto item = sp_ui_menu_append_item_from_verb (menu, verb, view, true); - - // If the last item was also a radio item, then we need to add the new item to - // its group. Note that the Inkscape dynamic menu XML files do not support - // explicit grouping yet. Instead, groups consist of ALL adjacent radio menu items - // in the file. - Gtk::RadioMenuItem *last_item = dynamic_cast(menu->get_children().back()); - - if(last_item != nullptr) { - auto radioitem = dynamic_cast(item); - radioitem->join_group(*last_item); - } - - + GtkWidget *item = sp_ui_menu_append_item_from_verb (GTK_MENU(menu), verb, view, true, group); + group = gtk_radio_menu_item_get_group( GTK_RADIO_MENU_ITEM(item)); if (menu_pntr->attribute("default") != NULL) { gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), TRUE); } @@ -868,7 +850,8 @@ static void sp_ui_build_dyn_menus(Inkscape::XML::Node *menus, checkitem_toggled, checkitem_update, verb); } } else { - sp_ui_menu_append_item_from_verb(menu, verb, view); + sp_ui_menu_append_item_from_verb(GTK_MENU(menu), verb, view); + group = NULL; } } else { gchar string[120]; @@ -927,16 +910,11 @@ static void sp_ui_build_dyn_menus(Inkscape::XML::Node *menus, } } -Gtk::MenuBar * -sp_ui_main_menubar(Inkscape::UI::View::View *view) +GtkWidget *sp_ui_main_menubar(Inkscape::UI::View::View *view) { - auto menu_bar = Gtk::manage(new Gtk::MenuBar()); - - sp_ui_build_dyn_menus(INKSCAPE.get_menus(), - dynamic_cast(menu_bar), - view); - - return menu_bar; + GtkWidget *mbar = gtk_menu_bar_new(); + sp_ui_build_dyn_menus(INKSCAPE.get_menus(), mbar, view); + return mbar; } diff --git a/src/ui/interface.h b/src/ui/interface.h index 6b687aa78..6e95c161c 100644 --- a/src/ui/interface.h +++ b/src/ui/interface.h @@ -23,10 +23,6 @@ class SPViewWidget; typedef struct _GtkWidget GtkWidget; -namespace Gtk { -class MenuBar; -} - namespace Inkscape { class Verb; @@ -34,12 +30,9 @@ namespace UI { namespace View { class View; } // namespace View - - } // namespace UI } // namespace Inkscape - /** * Create a new document window. */ @@ -77,7 +70,7 @@ unsigned int sp_ui_close_all (void); * * @param view View to build the bar for */ -Gtk::MenuBar * sp_ui_main_menubar(Inkscape::UI::View::View *view); +GtkWidget *sp_ui_main_menubar (Inkscape::UI::View::View *view); void sp_menu_append_recent_documents (GtkWidget *menu); void sp_ui_dialog_title_string (Inkscape::Verb * verb, char* c); diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index fa7e680c6..ce4c5936c 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -66,7 +66,6 @@ #include #include #include -#include #include "inkscape-version.h" using Inkscape::UI::Widget::UnitTracker; @@ -1440,9 +1439,9 @@ void SPDesktopWidget::layoutWidgets() } if (!prefs->getBool(pref_root + "menu/state", true)) { - dtw->menubar->hide(); + gtk_widget_hide (dtw->menubar); } else { - dtw->menubar->show_all(); + gtk_widget_show_all (dtw->menubar); } if (!prefs->getBool(pref_root + "commands/state", true)) { @@ -1648,12 +1647,10 @@ SPDesktopWidget* SPDesktopWidget::createInstance(SPNamedView *namedview) dtw->layer_selector->setDesktop(dtw->desktop); dtw->menubar = sp_ui_main_menubar (dtw->desktop); - dtw->menubar->set_name("MenuBar"); - dtw->menubar->show_all(); + gtk_widget_set_name(dtw->menubar, "MenuBar"); + gtk_widget_show_all (dtw->menubar); SPNamedView *nv = dtw->desktop->namedview; - gtk_box_pack_start (GTK_BOX (dtw->vbox), - GTK_WIDGET(dtw->menubar->gobj()), - FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (dtw->vbox), dtw->menubar, FALSE, FALSE, 0); dtw->layoutWidgets(); std::vector toolboxes; diff --git a/src/widgets/desktop-widget.h b/src/widgets/desktop-widget.h index 1aaa20afe..0d5f40987 100644 --- a/src/widgets/desktop-widget.h +++ b/src/widgets/desktop-widget.h @@ -28,9 +28,6 @@ class SPDesktop; struct SPDesktopWidget; class SPObject; -namespace Gtk { -class MenuBar; -} #define SP_TYPE_DESKTOP_WIDGET SPDesktopWidget::getType() #define SP_DESKTOP_WIDGET(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_DESKTOP_WIDGET, SPDesktopWidget)) @@ -82,8 +79,7 @@ struct SPDesktopWidget { GtkWidget *hbox; - Gtk::MenuBar *menubar; - GtkWidget *statusbar; + GtkWidget *menubar, *statusbar; Inkscape::UI::Dialogs::SwatchesPanel *panels; -- cgit v1.2.3 From 2a37efcab12aedd2d6149f61427aaa0de205d96c Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Wed, 28 Jun 2017 18:13:15 +0200 Subject: First version (non-working) --- src/ui/CMakeLists.txt | 2 + src/ui/dialog/dialog-manager.cpp | 3 + src/ui/dialog/filter-editor.cpp | 110 ++++++++++++++++++++++++++++++++++ src/ui/dialog/filter-editor.h | 61 +++++++++++++++++++ src/ui/dialog/filter-effects-dialog.h | 8 --- src/verbs.cpp | 2 +- 6 files changed, 177 insertions(+), 9 deletions(-) create mode 100644 src/ui/dialog/filter-editor.cpp create mode 100644 src/ui/dialog/filter-editor.h diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt index 389e8902a..6eefdb47b 100644 --- a/src/ui/CMakeLists.txt +++ b/src/ui/CMakeLists.txt @@ -71,6 +71,7 @@ set(ui_SRC dialog/filedialog.cpp dialog/filedialogimpl-gtkmm.cpp dialog/fill-and-stroke.cpp + dialog/filter-editor.cpp dialog/filter-effects-dialog.cpp dialog/find.cpp dialog/floating-behavior.cpp @@ -214,6 +215,7 @@ set(ui_SRC dialog/filedialogimpl-gtkmm.h dialog/filedialogimpl-win32.h dialog/fill-and-stroke.h + dialog/filter-editor.h dialog/filter-effects-dialog.h dialog/find.h dialog/floating-behavior.h diff --git a/src/ui/dialog/dialog-manager.cpp b/src/ui/dialog/dialog-manager.cpp index 01cd9dd0f..c5392864d 100644 --- a/src/ui/dialog/dialog-manager.cpp +++ b/src/ui/dialog/dialog-manager.cpp @@ -26,6 +26,7 @@ #include "ui/dialog/extension-editor.h" #include "ui/dialog/fill-and-stroke.h" #include "ui/dialog/filter-effects-dialog.h" +#include "ui/dialog/filter-editor.h" #include "ui/dialog/find.h" #include "ui/dialog/glyphs.h" #include "ui/dialog/inkscape-preferences.h" @@ -113,6 +114,7 @@ DialogManager::DialogManager() { registerFactory("ExtensionEditor", &create); registerFactory("FillAndStroke", &create); registerFactory("FilterEffectsDialog", &create); + registerFactory("FilterEditorDialog", &create); registerFactory("Find", &create); registerFactory("Glyphs", &create); registerFactory("IconPreviewPanel", &create); @@ -155,6 +157,7 @@ DialogManager::DialogManager() { registerFactory("ExtensionEditor", &create); registerFactory("FillAndStroke", &create); registerFactory("FilterEffectsDialog", &create); + registerFactory("FilterEditorDialog", &create); registerFactory("Find", &create); registerFactory("Glyphs", &create); registerFactory("IconPreviewPanel", &create); diff --git a/src/ui/dialog/filter-editor.cpp b/src/ui/dialog/filter-editor.cpp new file mode 100644 index 000000000..bf4fbdf99 --- /dev/null +++ b/src/ui/dialog/filter-editor.cpp @@ -0,0 +1,110 @@ +/** + * @file + * Filter Effects dialog. + */ +/* Authors: + * Marc Jeanmougin + * + * Copyright (C) 2017 Authors + * + * Released under GNU GPL. Read the file 'COPYING' for more information. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "dialog-manager.h" + +#include +#if GTK_CHECK_VERSION(3, 20, 0) +# include +#else +# include +#endif + +#include "ui/widget/spinbutton.h" + +#include +#include +#include +#include + +#include "desktop.h" + +#include "document.h" +#include "document-undo.h" +#include "filter-chemistry.h" +#include "filter-editor.h" +#include "filter-enums.h" +#include "inkscape.h" +#include "filters/blend.h" +#include "filters/colormatrix.h" +#include "filters/componenttransfer.h" +#include "filters/componenttransfer-funcnode.h" +#include "filters/convolvematrix.h" +#include "filters/distantlight.h" +#include "filters/merge.h" +#include "filters/mergenode.h" +#include "filters/pointlight.h" +#include "filters/spotlight.h" + +#include "style.h" +#include "svg/svg-color.h" +#include "ui/dialog/filedialog.h" +#include "verbs.h" + +#include "io/sys.h" +#include "selection-chemistry.h" + +#include +#include +#include + +using namespace Inkscape::Filters; + +namespace Inkscape::UI::Dialog { + +FilterEditorDialog::FilterEditorDialog() { + + builder = Gtk::Builder::create_from_file("/home/mc/Desktop/test.glade"); + builder->get_widget("FilterEditor", FilterEditor); + builder->get_widget("FilterList", FilterList); + builder->get_widget("FilterFERX", FilterFERX); + builder->get_widget("FilterFERY", FilterFERY); + builder->get_widget("FilterFERH", FilterFERH); + builder->get_widget("FilterFERW", FilterFERW); + builder->get_widget("FilterPreview",FilterPreview); + builder->get_widget("FilterStore", FilterStore); + builder->get_widget("FilterPrimitiveDescImage", FilterPrimitiveDescImage); + //builder->get_widget("FilterPrimitiveParameters",FilterPrimitiveParameters); + builder->get_widget("FilterPrimitiveDescText", FilterPrimitiveDescText); + builder->get_widget("FilterPrimitiveList", FilterPrimitiveList); + builder->get_widget("FilterPrimitiveAdd", FilterPrimitiveAdd); + if (!(FilterList && FilterFERX && FilterFERY && FilterFERH && FilterFERW && FilterPreview + && FilterStore && FilterPrimitiveDescImage && FilterPrimitiveDescText && FilterPrimitiveList + && FilterPrimitiveAdd )) { + g_warning("Some widget does not exist!"); + } + _getContents()->add(*FilterEditor); + +} +FilterEditorDialog::~FilterEditorDialog(){} + + + + + + +} // namespace Inkscape::UI::Dialog + +/* + 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/ui/dialog/filter-editor.h b/src/ui/dialog/filter-editor.h new file mode 100644 index 000000000..1ca4e1760 --- /dev/null +++ b/src/ui/dialog/filter-editor.h @@ -0,0 +1,61 @@ +/** @file + * @brief Filter Editor dialog + */ +/* Authors: + * Marc Jeanmougin + * + * Copyright (C) 2017 Authors + * + * Released under GNU GPL. Read the file 'COPYING' for more information. + */ + +#ifndef INKSCAPE_UI_DIALOG_FILTER_EFFECTS_H +#define INKSCAPE_UI_DIALOG_FILTER_EFFECTS_H + +#include "attributes.h" +#include "ui/widget/panel.h" +#include "sp-filter.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace Inkscape { +namespace UI { +namespace Dialog { + +class FilterEditorDialog : public UI::Widget::Panel { +public: + + FilterEditorDialog(); + ~FilterEditorDialog(); + + static FilterEditorDialog &getInstance() + { return *new FilterEditorDialog(); } + +// void set_attrs_locked(const bool); +private: + Glib::RefPtr builder; + Gtk::ComboBoxText *FilterList; + Gtk::SpinButton *FilterFERX, *FilterFERY, *FilterFERW, *FilterFERH; + Gtk::DrawingArea *FilterPreview; + Gtk::Image *FilterPrimitiveDescImage; + Gtk::Box *FilterPrimitiveParameters; + Gtk::Label *FilterPrimitiveDescText; + Gtk::ComboBox *FilterPrimitiveList; + Gtk::Button *FilterPrimitiveAdd; + Gtk::ListStore *FilterStore; + Gtk::Box *FilterEditor; +}; +} +} +} +#endif diff --git a/src/ui/dialog/filter-effects-dialog.h b/src/ui/dialog/filter-effects-dialog.h index 32fabb741..e410a88f9 100644 --- a/src/ui/dialog/filter-effects-dialog.h +++ b/src/ui/dialog/filter-effects-dialog.h @@ -132,11 +132,7 @@ private: Gtk::Button _add; Glib::RefPtr _menu; sigc::signal _signal_filter_changed; -#if __cplusplus <= 199711L - std::auto_ptr _observer; -#else std::unique_ptr _observer; -#endif }; class PrimitiveColumns : public Gtk::TreeModel::ColumnRecord @@ -244,11 +240,7 @@ private: sigc::connection _scroll_connection; int _autoscroll_y; int _autoscroll_x; -#if __cplusplus <= 199711L - std::auto_ptr _observer; -#else std::unique_ptr _observer; -#endif int _input_type_width; int _input_type_height; }; diff --git a/src/verbs.cpp b/src/verbs.cpp index 22ded60b3..0085d6549 100644 --- a/src/verbs.cpp +++ b/src/verbs.cpp @@ -2234,7 +2234,7 @@ void DialogVerb::perform(SPAction *action, void *data) dt->_dlg_mgr->showDialog("LivePathEffect"); break; case SP_VERB_DIALOG_FILTER_EFFECTS: - dt->_dlg_mgr->showDialog("FilterEffectsDialog"); + dt->_dlg_mgr->showDialog("FilterEditorDialog"); break; case SP_VERB_DIALOG_SVG_FONTS: dt->_dlg_mgr->showDialog("SvgFontsDialog"); -- cgit v1.2.3 From 18c0d1f13449856f3c0914d07b645fd3e5da002f Mon Sep 17 00:00:00 2001 From: Alexander Valavanis Date: Wed, 28 Jun 2017 21:26:18 +0200 Subject: Add a show-icon attribute to menu XML --- share/ui/menus.xml | 28 ++++++++++++++-------------- src/menus-skeleton.h | 28 ++++++++++++++-------------- src/ui/interface.cpp | 45 ++++++++++++++++++++++++++++++++++----------- 3 files changed, 62 insertions(+), 39 deletions(-) diff --git a/share/ui/menus.xml b/share/ui/menus.xml index 2880a7c67..40b6919bf 100644 --- a/share/ui/menus.xml +++ b/share/ui/menus.xml @@ -224,20 +224,20 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/src/menus-skeleton.h b/src/menus-skeleton.h index 7d00ffa86..65c497da4 100644 --- a/src/menus-skeleton.h +++ b/src/menus-skeleton.h @@ -237,20 +237,20 @@ static char const menus_skeleton[] = " \n" " \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" " \n" " \n" " \n" diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index c2ce9e568..d1da47867 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -437,8 +437,25 @@ sp_ui_dialog_title_string(Inkscape::Verb *verb, gchar *c) * Appends a custom menu UI from a verb. * * @see ContextMenu::AppendItemFromVerb for a c++ified alternative. Consider dropping sp_ui_menu_append_item_from_verb when c++ifying interface.cpp. + * + * @param menu The menu to which the item will be appended + * @param verb The verb from which the item's label, action and icon (optionally) will be read + * @param view + * @param show_icon True if an icon should be displayed before the menu item's label + * @param radio True if a radio button should be displayed next to the menu item + * @param group The radio button group that the item should belong to + * + * @details The show_icon flag should be used very sparingly because menu icons are not recommended + * any longer under the GNOME HIG. Also, note that the text appears after the icon, and + * so will be indented relative to "normal" menu items. As such, menus will look best if + * all the items with icons are grouped together between a pair of separators. */ -static GtkWidget *sp_ui_menu_append_item_from_verb(GtkMenu *menu, Inkscape::Verb *verb, Inkscape::UI::View::View *view, bool radio = false, GSList *group = NULL) +static GtkWidget *sp_ui_menu_append_item_from_verb(GtkMenu *menu, + Inkscape::Verb *verb, + Inkscape::UI::View::View *view, + bool show_icon = false, + bool radio = false, + GSList *group = NULL) { GtkWidget *item; @@ -475,22 +492,20 @@ static GtkWidget *sp_ui_menu_append_item_from_verb(GtkMenu *menu, Inkscape::Verb sp_shortcut_add_accelerator(item, sp_shortcut_get_primary(verb)); gtk_accel_label_set_accel_widget(GTK_ACCEL_LABEL(label), item); + GtkWidget *icon; + // If there is an image associated with the action, then we can add it as an // icon for the menu item. If not, give the label a bit more space - if(action->image) { - GtkWidget *icon = gtk_image_new_from_icon_name(action->image, GTK_ICON_SIZE_MENU); - gtk_box_pack_start(GTK_BOX(box), icon, FALSE, TRUE, 0); + if(show_icon && action->image) { + icon = gtk_image_new_from_icon_name(action->image, GTK_ICON_SIZE_MENU); } else { - GtkWidget *fake_icon = gtk_label_new(""); - gtk_widget_set_size_request(label, 16, 16); - gtk_widget_set_hexpand(label, true); - gtk_box_pack_start(GTK_BOX(box), fake_icon, FALSE, TRUE, 16); + icon = gtk_label_new(NULL); // A fake icon just to act as a placeholder } + gtk_box_pack_start(GTK_BOX(box), icon, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 0); - // Finally, pack all the widgets into the menu item gtk_container_add(GTK_CONTAINER(item), box); @@ -830,11 +845,19 @@ static void sp_ui_build_dyn_menus(Inkscape::XML::Node *menus, GtkWidget *menu, I } if (!strcmp(menu_pntr->name(), "verb")) { gchar const *verb_name = menu_pntr->attribute("verb-id"); + + // Check if the "show-icon" attribute is set, and set the flag here accordingly + bool show_icon = false; + + if(menu_pntr->attribute("show-icon") != NULL) { + show_icon = true; + } + Inkscape::Verb *verb = Inkscape::Verb::getbyid(verb_name); if (verb != NULL) { if (menu_pntr->attribute("radio") != NULL) { - GtkWidget *item = sp_ui_menu_append_item_from_verb (GTK_MENU(menu), verb, view, true, group); + GtkWidget *item = sp_ui_menu_append_item_from_verb (GTK_MENU(menu), verb, view, show_icon, true, group); group = gtk_radio_menu_item_get_group( GTK_RADIO_MENU_ITEM(item)); if (menu_pntr->attribute("default") != NULL) { gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), TRUE); @@ -850,7 +873,7 @@ static void sp_ui_build_dyn_menus(Inkscape::XML::Node *menus, GtkWidget *menu, I checkitem_toggled, checkitem_update, verb); } } else { - sp_ui_menu_append_item_from_verb(GTK_MENU(menu), verb, view); + sp_ui_menu_append_item_from_verb(GTK_MENU(menu), verb, view, show_icon); group = NULL; } } else { -- cgit v1.2.3 From b50eb4cd21ff55bd174a2290aeb1a52d49c56479 Mon Sep 17 00:00:00 2001 From: Alexander Valavanis Date: Wed, 28 Jun 2017 21:37:37 +0200 Subject: contextmenu: Rm icons per GNOME HIG --- src/ui/contextmenu.cpp | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/src/ui/contextmenu.cpp b/src/ui/contextmenu.cpp index cd61d3872..1bc87574e 100644 --- a/src/ui/contextmenu.cpp +++ b/src/ui/contextmenu.cpp @@ -268,25 +268,7 @@ void ContextMenu::AppendItemFromVerb(Inkscape::Verb *verb)//, SPDesktop *view)// return; } - // Create a box to contain all the widgets (icon, label, accelerator) - // that will go inside the menu item - auto const box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 6)); - - // If there is an image associated with the action, then we can add it as an - // icon for the menu item - if (action->image) { - auto const icon = Gtk::manage(new Gtk::Image()); - icon->set_from_icon_name(action->image, Gtk::ICON_SIZE_MENU); - box->add(*icon); - } - - // Now create the label and add it to the menu item (with mnemonic - auto const label = Gtk::manage(new Gtk::Label(action->name, true)); - box->add(*label); - - // Create the menu item itself, either as a radio menu item, or just - // a regular menu item depending on whether the "radio" flag is set - auto const item = Gtk::manage(new Gtk::MenuItem(*box)); + auto const item = Gtk::manage(new Gtk::MenuItem(action->name, true)); sp_shortcut_add_accelerator(GTK_WIDGET(item->gobj()), sp_shortcut_get_primary(verb)); -- cgit v1.2.3 From 591ff2f2e45958c0c92f29a674691259be67d691 Mon Sep 17 00:00:00 2001 From: Alexander Valavanis Date: Wed, 28 Jun 2017 21:37:48 +0200 Subject: Revert "color wheel: Temp fix for Gtk+ style properties" This reverts commit c951edaa91414fd5dfddb745de49baf777f72075. --- src/widgets/gimp/gimpcolorwheel.c | 30 ------------------------------ 1 file changed, 30 deletions(-) diff --git a/src/widgets/gimp/gimpcolorwheel.c b/src/widgets/gimp/gimpcolorwheel.c index 351201121..212391497 100644 --- a/src/widgets/gimp/gimpcolorwheel.c +++ b/src/widgets/gimp/gimpcolorwheel.c @@ -307,20 +307,6 @@ gimp_color_wheel_get_preferred_width (GtkWidget *widget, gint *minimum_width, gint *natural_width) { -// TODO: Sync this fix with the upstream GIMP code when available -#if GTK_CHECK_VERSION(3,14,0) - gint outline_width; - gint padding; - gint outline_offset; - - gtk_widget_style_get (widget, - "outline-width", &outline_width, - "padding", &padding, - "outline-offset", &outline_offset, - NULL); - - *minimum_width = *natural_width = DEFAULT_SIZE + 2 * (outline_width + padding + outline_offset); -#else gint focus_width; gint focus_pad; @@ -330,7 +316,6 @@ gimp_color_wheel_get_preferred_width (GtkWidget *widget, NULL); *minimum_width = *natural_width = DEFAULT_SIZE + 2 * (focus_width + focus_pad); -#endif } static void @@ -338,20 +323,6 @@ gimp_color_wheel_get_preferred_height (GtkWidget *widget, gint *minimum_height, gint *natural_height) { -// TODO: Sync this fix with the upstream GIMP code when available -#if GTK_CHECK_VERSION(3,14,0) - gint outline_width; - gint padding; - gint outline_offset; - - gtk_widget_style_get (widget, - "outline-width", &outline_width, - "padding", &padding, - "outline-offset", &outline_offset, - NULL); - - *minimum_height = *natural_height = DEFAULT_SIZE + 2 * (outline_width + padding + outline_offset); -#else gint focus_width; gint focus_pad; @@ -361,7 +332,6 @@ gimp_color_wheel_get_preferred_height (GtkWidget *widget, NULL); *minimum_height = *natural_height = DEFAULT_SIZE + 2 * (focus_width + focus_pad); -#endif } static void -- cgit v1.2.3 From 17b5f8bce1ce1bc58c149adcac80ab2118019615 Mon Sep 17 00:00:00 2001 From: Martin Owens Date: Thu, 29 Jun 2017 10:47:04 +0200 Subject: Improved warning in io/resource.cpp --- src/io/resource.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/io/resource.cpp b/src/io/resource.cpp index 84be1586e..ffe612e43 100644 --- a/src/io/resource.cpp +++ b/src/io/resource.cpp @@ -157,7 +157,7 @@ Glib::ustring get_filename(Type type, char const *filename, char const *locale) } else if(file_test(sys_filename, G_FILE_TEST_EXISTS)) { result = Glib::ustring(sys_filename); } else { - g_warning("Failed to load resource: %s", filename); + g_warning("Failed to load resource: %s from %s or %s", filename, user_filename, sys_filename); } if(!result.empty()) { -- cgit v1.2.3 From 22d06152d0fabc7fe50bb6829f00b2bac4ed1796 Mon Sep 17 00:00:00 2001 From: Alexander Valavanis Date: Thu, 29 Jun 2017 13:43:56 +0200 Subject: Remove old icon handling code --- share/icons/3dbox_four_handles.svg | 33 + share/icons/3dbox_three_handles.svg | 32 + share/icons/align-horizontal-baseline.svg | 38 + share/icons/align-horizontal-center.svg | 64 + share/icons/align-horizontal-left-to-anchor.svg | 71 + share/icons/align-horizontal-left.svg | 61 + share/icons/align-horizontal-node.svg | 34 + share/icons/align-horizontal-right-to-anchor.svg | 72 + share/icons/align-horizontal-right.svg | 61 + share/icons/align-vertical-baseline.svg | 38 + share/icons/align-vertical-bottom-to-anchor.svg | 71 + share/icons/align-vertical-bottom.svg | 60 + share/icons/align-vertical-center.svg | 63 + share/icons/align-vertical-node.svg | 35 + share/icons/align-vertical-top-to-anchor.svg | 71 + share/icons/align-vertical-top.svg | 61 + share/icons/bitmap-trace.svg | 30 + share/icons/boundingbox_bottom.svg | 37 + share/icons/boundingbox_bottom_left.svg | 37 + share/icons/boundingbox_bottom_right.svg | 37 + share/icons/boundingbox_center.svg | 36 + share/icons/boundingbox_left.svg | 37 + share/icons/boundingbox_right.svg | 37 + share/icons/boundingbox_top.svg | 37 + share/icons/boundingbox_top_left.svg | 37 + share/icons/boundingbox_top_right.svg | 37 + share/icons/clonetiler_per_column_color.svg | 67 + share/icons/clonetiler_per_column_opacity.svg | 53 + share/icons/clonetiler_per_column_rotation.svg | 53 + share/icons/clonetiler_per_column_scale.svg | 55 + share/icons/clonetiler_per_column_shift.svg | 53 + share/icons/clonetiler_per_row_color.svg | 67 + share/icons/clonetiler_per_row_opacity.svg | 53 + share/icons/clonetiler_per_row_rotation.svg | 53 + share/icons/clonetiler_per_row_scale.svg | 55 + share/icons/clonetiler_per_row_shift.svg | 53 + share/icons/color-fill.svg | 44 + share/icons/color-gradient.svg | 41 + share/icons/color-management.svg | 34 + share/icons/color-picker.svg | 52 + share/icons/connector-avoid.svg | 45 + share/icons/connector-edit.svg | 32 + share/icons/connector-ignore.svg | 45 + share/icons/connector-new-connpoint.svg | 32 + share/icons/connector-orthogonal.svg | 42 + share/icons/connector-remove-connpoint.svg | 36 + share/icons/controls_fill.svg | 27 + share/icons/controls_stroke.svg | 27 + share/icons/dialog-align-and-distribute.svg | 59 + share/icons/dialog-fill-and-stroke.svg | 64 + share/icons/dialog-filters.svg | 47 + share/icons/dialog-geometry.svg | 75 + share/icons/dialog-icon-preview.svg | 61 + share/icons/dialog-input-devices.svg | 54 + share/icons/dialog-layers.svg | 43 + share/icons/dialog-memory.svg | 53 + share/icons/dialog-messages.svg | 44 + share/icons/dialog-object-properties.svg | 53 + share/icons/dialog-path-effects.svg | 38 + share/icons/dialog-rows-and-columns.svg | 61 + share/icons/dialog-scripts.svg | 45 + share/icons/dialog-templates.svg | 48 + share/icons/dialog-text-and-font.svg | 39 + share/icons/dialog-tile-clones.svg | 72 + share/icons/dialog-transform.svg | 50 + share/icons/dialog-xml-editor.svg | 51 + share/icons/distribute-graph-directed.svg | 39 + share/icons/distribute-graph.svg | 46 + share/icons/distribute-horizontal-baseline.svg | 42 + share/icons/distribute-horizontal-center.svg | 66 + share/icons/distribute-horizontal-gaps.svg | 60 + share/icons/distribute-horizontal-left.svg | 65 + share/icons/distribute-horizontal-node.svg | 39 + share/icons/distribute-horizontal-right.svg | 65 + share/icons/distribute-randomize.svg | 65 + share/icons/distribute-remove-overlaps.svg | 66 + share/icons/distribute-unclump.svg | 62 + share/icons/distribute-vertical-baseline.svg | 42 + share/icons/distribute-vertical-bottom.svg | 65 + share/icons/distribute-vertical-center.svg | 66 + share/icons/distribute-vertical-gaps.svg | 60 + share/icons/distribute-vertical-node.svg | 39 + share/icons/distribute-vertical-top.svg | 65 + share/icons/document-cleanup.svg | 51 + share/icons/document-export-ocal.svg | 38 + share/icons/document-export.svg | 46 + share/icons/document-import-ocal.svg | 38 + share/icons/document-import.svg | 46 + share/icons/document-metadata.svg | 53 + share/icons/document-open-recent.svg | 52 + share/icons/draw-calligraphic.svg | 65 + share/icons/draw-connector.svg | 56 + share/icons/draw-cuboid.svg | 50 + share/icons/draw-ellipse-arc.svg | 31 + share/icons/draw-ellipse-chord.svg | 31 + share/icons/draw-ellipse-segment.svg | 31 + share/icons/draw-ellipse-whole.svg | 33 + share/icons/draw-ellipse.svg | 46 + share/icons/draw-eraser-delete-objects.svg | 36 + share/icons/draw-eraser.svg | 40 + share/icons/draw-freehand.svg | 57 + share/icons/draw-geometry-angle-bisector.svg | 31 + share/icons/draw-geometry-circle-from-radius.svg | 33 + .../draw-geometry-circle-from-three-points.svg | 33 + share/icons/draw-geometry-inactive.svg | 32 + share/icons/draw-geometry-line-parallel.svg | 31 + share/icons/draw-geometry-line-perpendicular.svg | 31 + share/icons/draw-geometry-line-segment.svg | 33 + share/icons/draw-geometry-mirror.svg | 32 + share/icons/draw-geometry-set-bounding-box.svg | 32 + share/icons/draw-geometry-show-measuring-info.svg | 41 + share/icons/draw-geometry.svg | 66 + share/icons/draw-path.svg | 54 + share/icons/draw-polygon-star.svg | 52 + share/icons/draw-polygon.svg | 42 + share/icons/draw-rectangle.svg | 38 + share/icons/draw-spiral.svg | 31 + share/icons/draw-star.svg | 42 + share/icons/draw-text.svg | 47 + share/icons/draw-trace-background.svg | 40 + share/icons/draw-use-pressure.svg | 37 + share/icons/draw-use-tilt.svg | 38 + share/icons/edit-clone-unlink.svg | 59 + share/icons/edit-clone.svg | 60 + share/icons/edit-duplicate.svg | 49 + share/icons/edit-paste-in-place.svg | 57 + share/icons/edit-paste-style.svg | 58 + share/icons/edit-select-all-layers.svg | 62 + share/icons/edit-select-all.svg | 75 + share/icons/edit-select-invert.svg | 76 + share/icons/edit-select-none.svg | 75 + share/icons/edit-select-original.svg | 60 + share/icons/edit-undo-history.svg | 50 + share/icons/exchange-positions-clockwise.svg | 68 + share/icons/exchange-positions-zorder.svg | 69 + share/icons/exchange-positions.svg | 62 + share/icons/fill-rule-even-odd.svg | 27 + share/icons/fill-rule-nonzero.svg | 27 + share/icons/flatten_simplify.svg | 31 + share/icons/format-text-direction-horizontal.svg | 48 + share/icons/format-text-direction-r2l.svg | 44 + share/icons/format-text-direction-vertical-lr.svg | 46 + share/icons/format-text-direction-vertical.svg | 46 + share/icons/g3735.svg | 27 + share/icons/g7621-2.svg | 30 + share/icons/grid-axonometric.svg | 38 + share/icons/grid-rectangular.svg | 37 + share/icons/guides.svg | 32 + share/icons/help-contents.svg | 59 + share/icons/help-keyborad-shortcuts.svg | 72 + share/icons/icons.svg | 4340 -------------------- share/icons/inkscape-logo.svg | 51 + share/icons/interactive_simplify.svg | 31 + share/icons/layer-bottom.svg | 50 + share/icons/layer-delete.svg | 48 + share/icons/layer-duplicate.svg | 48 + share/icons/layer-lower.svg | 50 + share/icons/layer-new.svg | 44 + share/icons/layer-next.svg | 48 + share/icons/layer-previous.svg | 48 + share/icons/layer-raise.svg | 50 + share/icons/layer-rename.svg | 60 + share/icons/layer-top.svg | 50 + share/icons/mesh-gradient-fit.svg | 31 + share/icons/mesh-gradient.svg | 40 + share/icons/no-marker.svg | 33 + share/icons/node-add.svg | 33 + share/icons/node-break.svg | 37 + share/icons/node-delete-segment.svg | 38 + share/icons/node-delete.svg | 33 + share/icons/node-join-segment.svg | 38 + share/icons/node-join.svg | 37 + share/icons/node-segment-curve.svg | 33 + share/icons/node-segment-line.svg | 33 + share/icons/node-transform.svg | 33 + share/icons/node-type-auto-smooth.svg | 32 + share/icons/node-type-cusp.svg | 32 + share/icons/node-type-smooth.svg | 32 + share/icons/node-type-symmetric.svg | 34 + share/icons/node_insert_max_x.svg | 33 + share/icons/node_insert_max_y.svg | 33 + share/icons/node_insert_min_x.svg | 33 + share/icons/node_insert_min_y.svg | 33 + share/icons/object-columns.svg | 54 + share/icons/object-fill.svg | 38 + share/icons/object-flip-horizontal.svg | 49 + share/icons/object-flip-vertical.svg | 49 + share/icons/object-group.svg | 54 + share/icons/object-hidden.svg | 39 + share/icons/object-locked.svg | 43 + share/icons/object-rotate-left.svg | 44 + share/icons/object-rotate-right.svg | 43 + share/icons/object-rows.svg | 218 + share/icons/object-stroke-style.svg | 35 + share/icons/object-to-path.svg | 34 + share/icons/object-tweak-attract.svg | 54 + share/icons/object-tweak-blur.svg | 59 + share/icons/object-tweak-duplicate.svg | 40 + share/icons/object-tweak-jitter-color.svg | 39 + share/icons/object-tweak-paint.svg | 39 + share/icons/object-tweak-push.svg | 57 + share/icons/object-tweak-randomize.svg | 54 + share/icons/object-tweak-rotate.svg | 54 + share/icons/object-tweak-shrink.svg | 54 + share/icons/object-ungroup-pop-selection.svg | 59 + share/icons/object-ungroup.svg | 62 + share/icons/object-unlocked.svg | 43 + share/icons/object-visible.svg | 45 + share/icons/off.svg | 47 + share/icons/on.svg | 49 + share/icons/pack-less.svg | 36 + share/icons/pack-more.svg | 41 + share/icons/paint-gradient-conical.svg | 36 + share/icons/paint-gradient-linear.svg | 36 + share/icons/paint-gradient-mesh.svg | 34 + share/icons/paint-gradient-radial.svg | 36 + share/icons/paint-none.svg | 32 + share/icons/paint-order-fms.svg | 41 + share/icons/paint-order-fsm.svg | 41 + share/icons/paint-order-mfs.svg | 41 + share/icons/paint-order-msf.svg | 41 + share/icons/paint-order-sfm.svg | 41 + share/icons/paint-order-smf.svg | 41 + share/icons/paint-pattern.svg | 32 + share/icons/paint-solid.svg | 31 + share/icons/paint-swatch.svg | 33 + share/icons/paint-unknown.svg | 33 + share/icons/path-break-apart.svg | 31 + share/icons/path-clip-edit.svg | 35 + share/icons/path-combine.svg | 30 + share/icons/path-cut.svg | 31 + share/icons/path-difference.svg | 31 + share/icons/path-division.svg | 32 + share/icons/path-effect-parameter-next.svg | 47 + share/icons/path-exclusion.svg | 30 + share/icons/path-inset.svg | 34 + share/icons/path-intersection.svg | 32 + share/icons/path-mask-edit.svg | 40 + share/icons/path-mode-bezier.svg | 34 + share/icons/path-mode-bspline.svg | 34 + share/icons/path-mode-polyline-paraxial.svg | 38 + share/icons/path-mode-polyline.svg | 36 + share/icons/path-mode-spiro.svg | 27 + share/icons/path-offset-dynamic.svg | 35 + share/icons/path-offset-linked.svg | 34 + share/icons/path-outset.svg | 34 + share/icons/path-reverse.svg | 33 + share/icons/path-simplify.svg | 30 + share/icons/path-tweak-attract.svg | 43 + share/icons/path-tweak-grow.svg | 40 + share/icons/path-tweak-push.svg | 40 + share/icons/path-tweak-repel.svg | 43 + share/icons/path-tweak-roughen.svg | 40 + share/icons/path-tweak-shrink.svg | 40 + share/icons/path-union.svg | 30 + share/icons/perspective-parallel.svg | 31 + share/icons/pixelart-trace.svg | 62 + share/icons/randomize.svg | 58 + share/icons/rectangle-make-corners-sharp.svg | 35 + share/icons/selection-bottom.svg | 47 + share/icons/selection-lower.svg | 48 + share/icons/selection-make-bitmap-copy.svg | 57 + share/icons/selection-move-to-layer-above.svg | 59 + share/icons/selection-move-to-layer-below.svg | 59 + share/icons/selection-raise.svg | 48 + share/icons/selection-top.svg | 47 + share/icons/show-dialogs.svg | 54 + share/icons/show-grid.svg | 66 + share/icons/show-guides.svg | 40 + share/icons/show-node-handles.svg | 34 + share/icons/show-path-outline.svg | 33 + share/icons/snap-bounding-box-center.svg | 32 + share/icons/snap-bounding-box-corners.svg | 32 + share/icons/snap-bounding-box-edges.svg | 32 + share/icons/snap-bounding-box-midpoints.svg | 32 + share/icons/snap-bounding-box.svg | 32 + share/icons/snap-grid-guide-intersections.svg | 33 + share/icons/snap-nodes-center.svg | 34 + share/icons/snap-nodes-cusp.svg | 33 + share/icons/snap-nodes-intersection.svg | 35 + share/icons/snap-nodes-midpoint.svg | 41 + share/icons/snap-nodes-path.svg | 32 + share/icons/snap-nodes-rotation-center.svg | 36 + share/icons/snap-nodes-smooth.svg | 32 + share/icons/snap-nodes.svg | 33 + share/icons/snap-others.svg | 40 + share/icons/snap-page.svg | 41 + share/icons/snap-text-baseline.svg | 42 + share/icons/snap.svg | 35 + share/icons/spray-mode-clone.svg | 46 + share/icons/spray-mode-copy.svg | 43 + share/icons/spray-mode-union.svg | 36 + share/icons/sticky_zoom.svg | 66 + share/icons/stroke-cap-butt.svg | 35 + share/icons/stroke-cap-round.svg | 35 + share/icons/stroke-cap-square.svg | 35 + share/icons/stroke-join-bevel.svg | 39 + share/icons/stroke-join-miter.svg | 39 + share/icons/stroke-join-round.svg | 39 + share/icons/stroke-to-path.svg | 37 + share/icons/swatches.svg | 52 + share/icons/symbol-add.svg | 32 + share/icons/symbol-bigger.svg | 32 + share/icons/symbol-fit.svg | 37 + share/icons/symbol-remove.svg | 32 + share/icons/symbol-smaller.svg | 32 + share/icons/symbols.svg | 47 + share/icons/symbols_old.svg | 31 + share/icons/text-convert-to-regular.svg | 56 + share/icons/text-flow-into-frame.svg | 48 + share/icons/text-orientation-auto.svg | 45 + share/icons/text-orientation-sideways.svg | 45 + share/icons/text-orientation-upright.svg | 45 + share/icons/text-put-on-path.svg | 34 + share/icons/text-remove-from-path.svg | 37 + share/icons/text-unflow.svg | 43 + share/icons/text-unkern.svg | 51 + share/icons/text_horz_kern.svg | 61 + share/icons/text_letter_spacing.svg | 57 + share/icons/text_line_spacing.svg | 55 + share/icons/text_outer_style.svg | 41 + share/icons/text_remove_kerns.svg | 35 + share/icons/text_rotation.svg | 62 + share/icons/text_subscript.svg | 46 + share/icons/text_superscript.svg | 46 + share/icons/text_vert_kern.svg | 58 + share/icons/text_word_spacing.svg | 61 + share/icons/toggle_vp_y.svg | 31 + share/icons/toggle_vp_z.svg | 31 + share/icons/tool-measure.svg | 49 + share/icons/tool-node-editor.svg | 35 + share/icons/tool-pointer.svg | 31 + share/icons/tool-spray.svg | 68 + share/icons/tool-tweak.svg | 40 + share/icons/transform-affect-gradient.svg | 44 + share/icons/transform-affect-pattern.svg | 37 + share/icons/transform-affect-rounded-corners.svg | 36 + share/icons/transform-affect-stroke.svg | 36 + share/icons/transform-move-horizontal.svg | 50 + share/icons/transform-move-vertical.svg | 50 + share/icons/transform-rotate.svg | 51 + share/icons/transform-scale-horizontal.svg | 53 + share/icons/transform-scale-vertical.svg | 53 + share/icons/transform-skew-horizontal.svg | 54 + share/icons/transform-skew-vertical.svg | 54 + share/icons/view-fullscreen.svg | 42 + share/icons/window-new.svg | 45 + share/icons/window-next.svg | 52 + share/icons/window-previous.svg | 52 + share/icons/xml-attribute-delete.svg | 47 + share/icons/xml-element-new.svg | 59 + share/icons/xml-node-delete.svg | 54 + share/icons/xml-node-duplicate.svg | 52 + share/icons/xml-text-new.svg | 55 + share/icons/zoom-double-size.svg | 44 + share/icons/zoom-fit-drawing.svg | 60 + share/icons/zoom-fit-page.svg | 51 + share/icons/zoom-fit-selection.svg | 55 + share/icons/zoom-fit-width.svg | 51 + share/icons/zoom-half-size.svg | 42 + share/icons/zoom-in.svg | 46 + share/icons/zoom-next.svg | 49 + share/icons/zoom-original.svg | 43 + share/icons/zoom-out.svg | 46 + share/icons/zoom-previous.svg | 49 + share/icons/zoom.svg | 66 + src/icon-size.h | 2 - src/live_effects/parameter/bool.cpp | 1 - src/live_effects/parameter/item.cpp | 4 +- src/live_effects/parameter/originalitem.cpp | 7 +- src/live_effects/parameter/originalpath.cpp | 7 +- src/live_effects/parameter/originalpatharray.cpp | 13 +- src/live_effects/parameter/path.cpp | 15 +- src/live_effects/parameter/point.cpp | 1 - src/live_effects/parameter/text.cpp | 1 - src/live_effects/parameter/togglebutton.cpp | 12 +- src/live_effects/parameter/togglebutton.h | 4 +- src/main.cpp | 3 - src/ui/dialog/align-and-distribute.cpp | 4 +- src/ui/dialog/clonetiler.cpp | 5 +- src/ui/dialog/cssdialog.cpp | 3 +- src/ui/dialog/dock-behavior.cpp | 1 - src/ui/dialog/document-properties.cpp | 9 +- src/ui/dialog/fill-and-stroke.cpp | 7 +- src/ui/dialog/grid-arrange-tab.cpp | 1 - src/ui/dialog/icon-preview.cpp | 188 +- src/ui/dialog/layers.cpp | 9 +- src/ui/dialog/livepatheffect-editor.cpp | 3 +- src/ui/dialog/objects.cpp | 7 +- src/ui/dialog/polar-arrange-tab.cpp | 1 - src/ui/dialog/spellcheck.cpp | 1 - src/ui/dialog/styledialog.cpp | 3 +- src/ui/dialog/symbols.cpp | 44 +- src/ui/dialog/tags.cpp | 7 +- src/ui/dialog/text-edit.cpp | 26 +- src/ui/dialog/transformation.cpp | 13 +- src/ui/dialog/undo-history.cpp | 9 +- src/ui/dialog/undo-history.h | 1 - src/ui/dialog/xml-tree.cpp | 55 +- src/ui/interface.cpp | 1 - src/ui/widget/addtoicon.cpp | 14 +- src/ui/widget/addtoicon.h | 2 +- src/ui/widget/anchor-selector.cpp | 6 +- src/ui/widget/clipmaskicon.cpp | 17 +- src/ui/widget/color-notebook.cpp | 1 - src/ui/widget/dock-item.cpp | 4 - src/ui/widget/highlight-picker.cpp | 1 - src/ui/widget/imagetoggler.cpp | 14 +- src/ui/widget/insertordericon.cpp | 14 +- src/ui/widget/labelled.cpp | 8 +- src/ui/widget/labelled.h | 3 +- src/ui/widget/layer-selector.cpp | 21 +- src/ui/widget/layertypeicon.cpp | 15 +- src/ui/widget/object-composite-settings.cpp | 1 - src/ui/widget/panel.cpp | 4 +- src/ui/widget/random.cpp | 5 +- src/widgets/CMakeLists.txt | 2 - src/widgets/arc-toolbar.cpp | 2 +- src/widgets/box3d-toolbar.cpp | 6 +- src/widgets/button.cpp | 12 +- src/widgets/button.h | 6 +- src/widgets/calligraphy-toolbar.cpp | 8 +- src/widgets/connector-toolbar.cpp | 8 +- src/widgets/desktop-widget.cpp | 7 +- src/widgets/dropper-toolbar.cpp | 4 +- src/widgets/ege-adjustment-action.cpp | 15 +- src/widgets/eraser-toolbar.cpp | 4 +- src/widgets/gradient-selector.cpp | 3 +- src/widgets/gradient-toolbar.cpp | 4 +- src/widgets/icon.cpp | 1651 -------- src/widgets/icon.h | 71 - src/widgets/ink-action.cpp | 45 +- src/widgets/ink-action.h | 2 +- src/widgets/ink-radio-action.cpp | 18 +- src/widgets/ink-radio-action.h | 4 +- src/widgets/ink-toggle-action.cpp | 15 +- src/widgets/ink-toggle-action.h | 2 +- src/widgets/ink-tool-menu-action.cpp | 2 +- src/widgets/ink-tool-menu-action.h | 2 +- src/widgets/lpe-toolbar.cpp | 8 +- src/widgets/measure-toolbar.cpp | 2 +- src/widgets/mesh-toolbar.cpp | 2 +- src/widgets/node-toolbar.cpp | 2 +- src/widgets/paint-selector.cpp | 7 +- src/widgets/paintbucket-toolbar.cpp | 2 +- src/widgets/pencil-toolbar.cpp | 8 +- src/widgets/rect-toolbar.cpp | 2 +- src/widgets/select-toolbar.cpp | 9 +- src/widgets/spiral-toolbar.cpp | 2 +- src/widgets/spray-toolbar.cpp | 8 +- src/widgets/star-toolbar.cpp | 4 +- src/widgets/stroke-marker-selector.cpp | 9 +- src/widgets/stroke-style.cpp | 5 +- src/widgets/stroke-style.h | 1 - src/widgets/text-toolbar.cpp | 2 +- src/widgets/toolbox.cpp | 34 +- src/widgets/toolbox.h | 2 +- src/widgets/tweak-toolbar.cpp | 12 +- 458 files changed, 16976 insertions(+), 6454 deletions(-) create mode 100644 share/icons/3dbox_four_handles.svg create mode 100644 share/icons/3dbox_three_handles.svg create mode 100644 share/icons/align-horizontal-baseline.svg create mode 100644 share/icons/align-horizontal-center.svg create mode 100644 share/icons/align-horizontal-left-to-anchor.svg create mode 100644 share/icons/align-horizontal-left.svg create mode 100644 share/icons/align-horizontal-node.svg create mode 100644 share/icons/align-horizontal-right-to-anchor.svg create mode 100644 share/icons/align-horizontal-right.svg create mode 100644 share/icons/align-vertical-baseline.svg create mode 100644 share/icons/align-vertical-bottom-to-anchor.svg create mode 100644 share/icons/align-vertical-bottom.svg create mode 100644 share/icons/align-vertical-center.svg create mode 100644 share/icons/align-vertical-node.svg create mode 100644 share/icons/align-vertical-top-to-anchor.svg create mode 100644 share/icons/align-vertical-top.svg create mode 100644 share/icons/bitmap-trace.svg create mode 100644 share/icons/boundingbox_bottom.svg create mode 100644 share/icons/boundingbox_bottom_left.svg create mode 100644 share/icons/boundingbox_bottom_right.svg create mode 100644 share/icons/boundingbox_center.svg create mode 100644 share/icons/boundingbox_left.svg create mode 100644 share/icons/boundingbox_right.svg create mode 100644 share/icons/boundingbox_top.svg create mode 100644 share/icons/boundingbox_top_left.svg create mode 100644 share/icons/boundingbox_top_right.svg create mode 100644 share/icons/clonetiler_per_column_color.svg create mode 100644 share/icons/clonetiler_per_column_opacity.svg create mode 100644 share/icons/clonetiler_per_column_rotation.svg create mode 100644 share/icons/clonetiler_per_column_scale.svg create mode 100644 share/icons/clonetiler_per_column_shift.svg create mode 100644 share/icons/clonetiler_per_row_color.svg create mode 100644 share/icons/clonetiler_per_row_opacity.svg create mode 100644 share/icons/clonetiler_per_row_rotation.svg create mode 100644 share/icons/clonetiler_per_row_scale.svg create mode 100644 share/icons/clonetiler_per_row_shift.svg create mode 100644 share/icons/color-fill.svg create mode 100644 share/icons/color-gradient.svg create mode 100644 share/icons/color-management.svg create mode 100644 share/icons/color-picker.svg create mode 100644 share/icons/connector-avoid.svg create mode 100644 share/icons/connector-edit.svg create mode 100644 share/icons/connector-ignore.svg create mode 100644 share/icons/connector-new-connpoint.svg create mode 100644 share/icons/connector-orthogonal.svg create mode 100644 share/icons/connector-remove-connpoint.svg create mode 100644 share/icons/controls_fill.svg create mode 100644 share/icons/controls_stroke.svg create mode 100644 share/icons/dialog-align-and-distribute.svg create mode 100644 share/icons/dialog-fill-and-stroke.svg create mode 100644 share/icons/dialog-filters.svg create mode 100644 share/icons/dialog-geometry.svg create mode 100644 share/icons/dialog-icon-preview.svg create mode 100644 share/icons/dialog-input-devices.svg create mode 100644 share/icons/dialog-layers.svg create mode 100644 share/icons/dialog-memory.svg create mode 100644 share/icons/dialog-messages.svg create mode 100644 share/icons/dialog-object-properties.svg create mode 100644 share/icons/dialog-path-effects.svg create mode 100644 share/icons/dialog-rows-and-columns.svg create mode 100644 share/icons/dialog-scripts.svg create mode 100644 share/icons/dialog-templates.svg create mode 100644 share/icons/dialog-text-and-font.svg create mode 100644 share/icons/dialog-tile-clones.svg create mode 100644 share/icons/dialog-transform.svg create mode 100644 share/icons/dialog-xml-editor.svg create mode 100644 share/icons/distribute-graph-directed.svg create mode 100644 share/icons/distribute-graph.svg create mode 100644 share/icons/distribute-horizontal-baseline.svg create mode 100644 share/icons/distribute-horizontal-center.svg create mode 100644 share/icons/distribute-horizontal-gaps.svg create mode 100644 share/icons/distribute-horizontal-left.svg create mode 100644 share/icons/distribute-horizontal-node.svg create mode 100644 share/icons/distribute-horizontal-right.svg create mode 100644 share/icons/distribute-randomize.svg create mode 100644 share/icons/distribute-remove-overlaps.svg create mode 100644 share/icons/distribute-unclump.svg create mode 100644 share/icons/distribute-vertical-baseline.svg create mode 100644 share/icons/distribute-vertical-bottom.svg create mode 100644 share/icons/distribute-vertical-center.svg create mode 100644 share/icons/distribute-vertical-gaps.svg create mode 100644 share/icons/distribute-vertical-node.svg create mode 100644 share/icons/distribute-vertical-top.svg create mode 100644 share/icons/document-cleanup.svg create mode 100644 share/icons/document-export-ocal.svg create mode 100644 share/icons/document-export.svg create mode 100644 share/icons/document-import-ocal.svg create mode 100644 share/icons/document-import.svg create mode 100644 share/icons/document-metadata.svg create mode 100644 share/icons/document-open-recent.svg create mode 100644 share/icons/draw-calligraphic.svg create mode 100644 share/icons/draw-connector.svg create mode 100644 share/icons/draw-cuboid.svg create mode 100644 share/icons/draw-ellipse-arc.svg create mode 100644 share/icons/draw-ellipse-chord.svg create mode 100644 share/icons/draw-ellipse-segment.svg create mode 100644 share/icons/draw-ellipse-whole.svg create mode 100644 share/icons/draw-ellipse.svg create mode 100644 share/icons/draw-eraser-delete-objects.svg create mode 100644 share/icons/draw-eraser.svg create mode 100644 share/icons/draw-freehand.svg create mode 100644 share/icons/draw-geometry-angle-bisector.svg create mode 100644 share/icons/draw-geometry-circle-from-radius.svg create mode 100644 share/icons/draw-geometry-circle-from-three-points.svg create mode 100644 share/icons/draw-geometry-inactive.svg create mode 100644 share/icons/draw-geometry-line-parallel.svg create mode 100644 share/icons/draw-geometry-line-perpendicular.svg create mode 100644 share/icons/draw-geometry-line-segment.svg create mode 100644 share/icons/draw-geometry-mirror.svg create mode 100644 share/icons/draw-geometry-set-bounding-box.svg create mode 100644 share/icons/draw-geometry-show-measuring-info.svg create mode 100644 share/icons/draw-geometry.svg create mode 100644 share/icons/draw-path.svg create mode 100644 share/icons/draw-polygon-star.svg create mode 100644 share/icons/draw-polygon.svg create mode 100644 share/icons/draw-rectangle.svg create mode 100644 share/icons/draw-spiral.svg create mode 100644 share/icons/draw-star.svg create mode 100644 share/icons/draw-text.svg create mode 100644 share/icons/draw-trace-background.svg create mode 100644 share/icons/draw-use-pressure.svg create mode 100644 share/icons/draw-use-tilt.svg create mode 100644 share/icons/edit-clone-unlink.svg create mode 100644 share/icons/edit-clone.svg create mode 100644 share/icons/edit-duplicate.svg create mode 100644 share/icons/edit-paste-in-place.svg create mode 100644 share/icons/edit-paste-style.svg create mode 100644 share/icons/edit-select-all-layers.svg create mode 100644 share/icons/edit-select-all.svg create mode 100644 share/icons/edit-select-invert.svg create mode 100644 share/icons/edit-select-none.svg create mode 100644 share/icons/edit-select-original.svg create mode 100644 share/icons/edit-undo-history.svg create mode 100644 share/icons/exchange-positions-clockwise.svg create mode 100644 share/icons/exchange-positions-zorder.svg create mode 100644 share/icons/exchange-positions.svg create mode 100644 share/icons/fill-rule-even-odd.svg create mode 100644 share/icons/fill-rule-nonzero.svg create mode 100644 share/icons/flatten_simplify.svg create mode 100644 share/icons/format-text-direction-horizontal.svg create mode 100644 share/icons/format-text-direction-r2l.svg create mode 100644 share/icons/format-text-direction-vertical-lr.svg create mode 100644 share/icons/format-text-direction-vertical.svg create mode 100644 share/icons/g3735.svg create mode 100644 share/icons/g7621-2.svg create mode 100644 share/icons/grid-axonometric.svg create mode 100644 share/icons/grid-rectangular.svg create mode 100644 share/icons/guides.svg create mode 100644 share/icons/help-contents.svg create mode 100644 share/icons/help-keyborad-shortcuts.svg delete mode 100644 share/icons/icons.svg create mode 100644 share/icons/inkscape-logo.svg create mode 100644 share/icons/interactive_simplify.svg create mode 100644 share/icons/layer-bottom.svg create mode 100644 share/icons/layer-delete.svg create mode 100644 share/icons/layer-duplicate.svg create mode 100644 share/icons/layer-lower.svg create mode 100644 share/icons/layer-new.svg create mode 100644 share/icons/layer-next.svg create mode 100644 share/icons/layer-previous.svg create mode 100644 share/icons/layer-raise.svg create mode 100644 share/icons/layer-rename.svg create mode 100644 share/icons/layer-top.svg create mode 100644 share/icons/mesh-gradient-fit.svg create mode 100644 share/icons/mesh-gradient.svg create mode 100644 share/icons/no-marker.svg create mode 100644 share/icons/node-add.svg create mode 100644 share/icons/node-break.svg create mode 100644 share/icons/node-delete-segment.svg create mode 100644 share/icons/node-delete.svg create mode 100644 share/icons/node-join-segment.svg create mode 100644 share/icons/node-join.svg create mode 100644 share/icons/node-segment-curve.svg create mode 100644 share/icons/node-segment-line.svg create mode 100644 share/icons/node-transform.svg create mode 100644 share/icons/node-type-auto-smooth.svg create mode 100644 share/icons/node-type-cusp.svg create mode 100644 share/icons/node-type-smooth.svg create mode 100644 share/icons/node-type-symmetric.svg create mode 100644 share/icons/node_insert_max_x.svg create mode 100644 share/icons/node_insert_max_y.svg create mode 100644 share/icons/node_insert_min_x.svg create mode 100644 share/icons/node_insert_min_y.svg create mode 100644 share/icons/object-columns.svg create mode 100644 share/icons/object-fill.svg create mode 100644 share/icons/object-flip-horizontal.svg create mode 100644 share/icons/object-flip-vertical.svg create mode 100644 share/icons/object-group.svg create mode 100644 share/icons/object-hidden.svg create mode 100644 share/icons/object-locked.svg create mode 100644 share/icons/object-rotate-left.svg create mode 100644 share/icons/object-rotate-right.svg create mode 100644 share/icons/object-rows.svg create mode 100644 share/icons/object-stroke-style.svg create mode 100644 share/icons/object-to-path.svg create mode 100644 share/icons/object-tweak-attract.svg create mode 100644 share/icons/object-tweak-blur.svg create mode 100644 share/icons/object-tweak-duplicate.svg create mode 100644 share/icons/object-tweak-jitter-color.svg create mode 100644 share/icons/object-tweak-paint.svg create mode 100644 share/icons/object-tweak-push.svg create mode 100644 share/icons/object-tweak-randomize.svg create mode 100644 share/icons/object-tweak-rotate.svg create mode 100644 share/icons/object-tweak-shrink.svg create mode 100644 share/icons/object-ungroup-pop-selection.svg create mode 100644 share/icons/object-ungroup.svg create mode 100644 share/icons/object-unlocked.svg create mode 100644 share/icons/object-visible.svg create mode 100644 share/icons/off.svg create mode 100644 share/icons/on.svg create mode 100644 share/icons/pack-less.svg create mode 100644 share/icons/pack-more.svg create mode 100644 share/icons/paint-gradient-conical.svg create mode 100644 share/icons/paint-gradient-linear.svg create mode 100644 share/icons/paint-gradient-mesh.svg create mode 100644 share/icons/paint-gradient-radial.svg create mode 100644 share/icons/paint-none.svg create mode 100644 share/icons/paint-order-fms.svg create mode 100644 share/icons/paint-order-fsm.svg create mode 100644 share/icons/paint-order-mfs.svg create mode 100644 share/icons/paint-order-msf.svg create mode 100644 share/icons/paint-order-sfm.svg create mode 100644 share/icons/paint-order-smf.svg create mode 100644 share/icons/paint-pattern.svg create mode 100644 share/icons/paint-solid.svg create mode 100644 share/icons/paint-swatch.svg create mode 100644 share/icons/paint-unknown.svg create mode 100644 share/icons/path-break-apart.svg create mode 100644 share/icons/path-clip-edit.svg create mode 100644 share/icons/path-combine.svg create mode 100644 share/icons/path-cut.svg create mode 100644 share/icons/path-difference.svg create mode 100644 share/icons/path-division.svg create mode 100644 share/icons/path-effect-parameter-next.svg create mode 100644 share/icons/path-exclusion.svg create mode 100644 share/icons/path-inset.svg create mode 100644 share/icons/path-intersection.svg create mode 100644 share/icons/path-mask-edit.svg create mode 100644 share/icons/path-mode-bezier.svg create mode 100644 share/icons/path-mode-bspline.svg create mode 100644 share/icons/path-mode-polyline-paraxial.svg create mode 100644 share/icons/path-mode-polyline.svg create mode 100644 share/icons/path-mode-spiro.svg create mode 100644 share/icons/path-offset-dynamic.svg create mode 100644 share/icons/path-offset-linked.svg create mode 100644 share/icons/path-outset.svg create mode 100644 share/icons/path-reverse.svg create mode 100644 share/icons/path-simplify.svg create mode 100644 share/icons/path-tweak-attract.svg create mode 100644 share/icons/path-tweak-grow.svg create mode 100644 share/icons/path-tweak-push.svg create mode 100644 share/icons/path-tweak-repel.svg create mode 100644 share/icons/path-tweak-roughen.svg create mode 100644 share/icons/path-tweak-shrink.svg create mode 100644 share/icons/path-union.svg create mode 100644 share/icons/perspective-parallel.svg create mode 100644 share/icons/pixelart-trace.svg create mode 100644 share/icons/randomize.svg create mode 100644 share/icons/rectangle-make-corners-sharp.svg create mode 100644 share/icons/selection-bottom.svg create mode 100644 share/icons/selection-lower.svg create mode 100644 share/icons/selection-make-bitmap-copy.svg create mode 100644 share/icons/selection-move-to-layer-above.svg create mode 100644 share/icons/selection-move-to-layer-below.svg create mode 100644 share/icons/selection-raise.svg create mode 100644 share/icons/selection-top.svg create mode 100644 share/icons/show-dialogs.svg create mode 100644 share/icons/show-grid.svg create mode 100644 share/icons/show-guides.svg create mode 100644 share/icons/show-node-handles.svg create mode 100644 share/icons/show-path-outline.svg create mode 100644 share/icons/snap-bounding-box-center.svg create mode 100644 share/icons/snap-bounding-box-corners.svg create mode 100644 share/icons/snap-bounding-box-edges.svg create mode 100644 share/icons/snap-bounding-box-midpoints.svg create mode 100644 share/icons/snap-bounding-box.svg create mode 100644 share/icons/snap-grid-guide-intersections.svg create mode 100644 share/icons/snap-nodes-center.svg create mode 100644 share/icons/snap-nodes-cusp.svg create mode 100644 share/icons/snap-nodes-intersection.svg create mode 100644 share/icons/snap-nodes-midpoint.svg create mode 100644 share/icons/snap-nodes-path.svg create mode 100644 share/icons/snap-nodes-rotation-center.svg create mode 100644 share/icons/snap-nodes-smooth.svg create mode 100644 share/icons/snap-nodes.svg create mode 100644 share/icons/snap-others.svg create mode 100644 share/icons/snap-page.svg create mode 100644 share/icons/snap-text-baseline.svg create mode 100644 share/icons/snap.svg create mode 100644 share/icons/spray-mode-clone.svg create mode 100644 share/icons/spray-mode-copy.svg create mode 100644 share/icons/spray-mode-union.svg create mode 100644 share/icons/sticky_zoom.svg create mode 100644 share/icons/stroke-cap-butt.svg create mode 100644 share/icons/stroke-cap-round.svg create mode 100644 share/icons/stroke-cap-square.svg create mode 100644 share/icons/stroke-join-bevel.svg create mode 100644 share/icons/stroke-join-miter.svg create mode 100644 share/icons/stroke-join-round.svg create mode 100644 share/icons/stroke-to-path.svg create mode 100644 share/icons/swatches.svg create mode 100644 share/icons/symbol-add.svg create mode 100644 share/icons/symbol-bigger.svg create mode 100644 share/icons/symbol-fit.svg create mode 100644 share/icons/symbol-remove.svg create mode 100644 share/icons/symbol-smaller.svg create mode 100644 share/icons/symbols.svg create mode 100644 share/icons/symbols_old.svg create mode 100644 share/icons/text-convert-to-regular.svg create mode 100644 share/icons/text-flow-into-frame.svg create mode 100644 share/icons/text-orientation-auto.svg create mode 100644 share/icons/text-orientation-sideways.svg create mode 100644 share/icons/text-orientation-upright.svg create mode 100644 share/icons/text-put-on-path.svg create mode 100644 share/icons/text-remove-from-path.svg create mode 100644 share/icons/text-unflow.svg create mode 100644 share/icons/text-unkern.svg create mode 100644 share/icons/text_horz_kern.svg create mode 100644 share/icons/text_letter_spacing.svg create mode 100644 share/icons/text_line_spacing.svg create mode 100644 share/icons/text_outer_style.svg create mode 100644 share/icons/text_remove_kerns.svg create mode 100644 share/icons/text_rotation.svg create mode 100644 share/icons/text_subscript.svg create mode 100644 share/icons/text_superscript.svg create mode 100644 share/icons/text_vert_kern.svg create mode 100644 share/icons/text_word_spacing.svg create mode 100644 share/icons/toggle_vp_y.svg create mode 100644 share/icons/toggle_vp_z.svg create mode 100644 share/icons/tool-measure.svg create mode 100644 share/icons/tool-node-editor.svg create mode 100644 share/icons/tool-pointer.svg create mode 100644 share/icons/tool-spray.svg create mode 100644 share/icons/tool-tweak.svg create mode 100644 share/icons/transform-affect-gradient.svg create mode 100644 share/icons/transform-affect-pattern.svg create mode 100644 share/icons/transform-affect-rounded-corners.svg create mode 100644 share/icons/transform-affect-stroke.svg create mode 100644 share/icons/transform-move-horizontal.svg create mode 100644 share/icons/transform-move-vertical.svg create mode 100644 share/icons/transform-rotate.svg create mode 100644 share/icons/transform-scale-horizontal.svg create mode 100644 share/icons/transform-scale-vertical.svg create mode 100644 share/icons/transform-skew-horizontal.svg create mode 100644 share/icons/transform-skew-vertical.svg create mode 100644 share/icons/view-fullscreen.svg create mode 100644 share/icons/window-new.svg create mode 100644 share/icons/window-next.svg create mode 100644 share/icons/window-previous.svg create mode 100644 share/icons/xml-attribute-delete.svg create mode 100644 share/icons/xml-element-new.svg create mode 100644 share/icons/xml-node-delete.svg create mode 100644 share/icons/xml-node-duplicate.svg create mode 100644 share/icons/xml-text-new.svg create mode 100644 share/icons/zoom-double-size.svg create mode 100644 share/icons/zoom-fit-drawing.svg create mode 100644 share/icons/zoom-fit-page.svg create mode 100644 share/icons/zoom-fit-selection.svg create mode 100644 share/icons/zoom-fit-width.svg create mode 100644 share/icons/zoom-half-size.svg create mode 100644 share/icons/zoom-in.svg create mode 100644 share/icons/zoom-next.svg create mode 100644 share/icons/zoom-original.svg create mode 100644 share/icons/zoom-out.svg create mode 100644 share/icons/zoom-previous.svg create mode 100644 share/icons/zoom.svg delete mode 100644 src/widgets/icon.cpp delete mode 100644 src/widgets/icon.h diff --git a/share/icons/3dbox_four_handles.svg b/share/icons/3dbox_four_handles.svg new file mode 100644 index 000000000..e8d5a6f1f --- /dev/null +++ b/share/icons/3dbox_four_handles.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/share/icons/3dbox_three_handles.svg b/share/icons/3dbox_three_handles.svg new file mode 100644 index 000000000..bb03464be --- /dev/null +++ b/share/icons/3dbox_three_handles.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/align-horizontal-baseline.svg b/share/icons/align-horizontal-baseline.svg new file mode 100644 index 000000000..a704eb27b --- /dev/null +++ b/share/icons/align-horizontal-baseline.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/align-horizontal-center.svg b/share/icons/align-horizontal-center.svg new file mode 100644 index 000000000..9cac83e06 --- /dev/null +++ b/share/icons/align-horizontal-center.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/align-horizontal-left-to-anchor.svg b/share/icons/align-horizontal-left-to-anchor.svg new file mode 100644 index 000000000..2585464da --- /dev/null +++ b/share/icons/align-horizontal-left-to-anchor.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/align-horizontal-left.svg b/share/icons/align-horizontal-left.svg new file mode 100644 index 000000000..eaaa947b7 --- /dev/null +++ b/share/icons/align-horizontal-left.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/align-horizontal-node.svg b/share/icons/align-horizontal-node.svg new file mode 100644 index 000000000..7660c84e8 --- /dev/null +++ b/share/icons/align-horizontal-node.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + diff --git a/share/icons/align-horizontal-right-to-anchor.svg b/share/icons/align-horizontal-right-to-anchor.svg new file mode 100644 index 000000000..8e931ccac --- /dev/null +++ b/share/icons/align-horizontal-right-to-anchor.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/align-horizontal-right.svg b/share/icons/align-horizontal-right.svg new file mode 100644 index 000000000..fd873a131 --- /dev/null +++ b/share/icons/align-horizontal-right.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/align-vertical-baseline.svg b/share/icons/align-vertical-baseline.svg new file mode 100644 index 000000000..8c9db2954 --- /dev/null +++ b/share/icons/align-vertical-baseline.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/align-vertical-bottom-to-anchor.svg b/share/icons/align-vertical-bottom-to-anchor.svg new file mode 100644 index 000000000..e8da3e3a1 --- /dev/null +++ b/share/icons/align-vertical-bottom-to-anchor.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/align-vertical-bottom.svg b/share/icons/align-vertical-bottom.svg new file mode 100644 index 000000000..f74df6407 --- /dev/null +++ b/share/icons/align-vertical-bottom.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/align-vertical-center.svg b/share/icons/align-vertical-center.svg new file mode 100644 index 000000000..2f326dca6 --- /dev/null +++ b/share/icons/align-vertical-center.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/align-vertical-node.svg b/share/icons/align-vertical-node.svg new file mode 100644 index 000000000..7afae3f23 --- /dev/null +++ b/share/icons/align-vertical-node.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + diff --git a/share/icons/align-vertical-top-to-anchor.svg b/share/icons/align-vertical-top-to-anchor.svg new file mode 100644 index 000000000..18868264d --- /dev/null +++ b/share/icons/align-vertical-top-to-anchor.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/align-vertical-top.svg b/share/icons/align-vertical-top.svg new file mode 100644 index 000000000..37a3e4bca --- /dev/null +++ b/share/icons/align-vertical-top.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/bitmap-trace.svg b/share/icons/bitmap-trace.svg new file mode 100644 index 000000000..64d5fe194 --- /dev/null +++ b/share/icons/bitmap-trace.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + diff --git a/share/icons/boundingbox_bottom.svg b/share/icons/boundingbox_bottom.svg new file mode 100644 index 000000000..445cbf2d5 --- /dev/null +++ b/share/icons/boundingbox_bottom.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + diff --git a/share/icons/boundingbox_bottom_left.svg b/share/icons/boundingbox_bottom_left.svg new file mode 100644 index 000000000..64a91896a --- /dev/null +++ b/share/icons/boundingbox_bottom_left.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + diff --git a/share/icons/boundingbox_bottom_right.svg b/share/icons/boundingbox_bottom_right.svg new file mode 100644 index 000000000..8e7452e6d --- /dev/null +++ b/share/icons/boundingbox_bottom_right.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + diff --git a/share/icons/boundingbox_center.svg b/share/icons/boundingbox_center.svg new file mode 100644 index 000000000..843f6a990 --- /dev/null +++ b/share/icons/boundingbox_center.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + diff --git a/share/icons/boundingbox_left.svg b/share/icons/boundingbox_left.svg new file mode 100644 index 000000000..ba14f3ec8 --- /dev/null +++ b/share/icons/boundingbox_left.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + diff --git a/share/icons/boundingbox_right.svg b/share/icons/boundingbox_right.svg new file mode 100644 index 000000000..839725da0 --- /dev/null +++ b/share/icons/boundingbox_right.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + diff --git a/share/icons/boundingbox_top.svg b/share/icons/boundingbox_top.svg new file mode 100644 index 000000000..b22fc5d03 --- /dev/null +++ b/share/icons/boundingbox_top.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + diff --git a/share/icons/boundingbox_top_left.svg b/share/icons/boundingbox_top_left.svg new file mode 100644 index 000000000..d0e4ae19c --- /dev/null +++ b/share/icons/boundingbox_top_left.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + diff --git a/share/icons/boundingbox_top_right.svg b/share/icons/boundingbox_top_right.svg new file mode 100644 index 000000000..80dd063df --- /dev/null +++ b/share/icons/boundingbox_top_right.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + diff --git a/share/icons/clonetiler_per_column_color.svg b/share/icons/clonetiler_per_column_color.svg new file mode 100644 index 000000000..225a88e60 --- /dev/null +++ b/share/icons/clonetiler_per_column_color.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/clonetiler_per_column_opacity.svg b/share/icons/clonetiler_per_column_opacity.svg new file mode 100644 index 000000000..ba667d987 --- /dev/null +++ b/share/icons/clonetiler_per_column_opacity.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/clonetiler_per_column_rotation.svg b/share/icons/clonetiler_per_column_rotation.svg new file mode 100644 index 000000000..cd8c4efe3 --- /dev/null +++ b/share/icons/clonetiler_per_column_rotation.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/clonetiler_per_column_scale.svg b/share/icons/clonetiler_per_column_scale.svg new file mode 100644 index 000000000..1d8dbb8ca --- /dev/null +++ b/share/icons/clonetiler_per_column_scale.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/clonetiler_per_column_shift.svg b/share/icons/clonetiler_per_column_shift.svg new file mode 100644 index 000000000..c0eb22ca2 --- /dev/null +++ b/share/icons/clonetiler_per_column_shift.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/clonetiler_per_row_color.svg b/share/icons/clonetiler_per_row_color.svg new file mode 100644 index 000000000..4fb9e58a4 --- /dev/null +++ b/share/icons/clonetiler_per_row_color.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/clonetiler_per_row_opacity.svg b/share/icons/clonetiler_per_row_opacity.svg new file mode 100644 index 000000000..a958463dd --- /dev/null +++ b/share/icons/clonetiler_per_row_opacity.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/clonetiler_per_row_rotation.svg b/share/icons/clonetiler_per_row_rotation.svg new file mode 100644 index 000000000..375dc8c59 --- /dev/null +++ b/share/icons/clonetiler_per_row_rotation.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/clonetiler_per_row_scale.svg b/share/icons/clonetiler_per_row_scale.svg new file mode 100644 index 000000000..62e8bceea --- /dev/null +++ b/share/icons/clonetiler_per_row_scale.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/clonetiler_per_row_shift.svg b/share/icons/clonetiler_per_row_shift.svg new file mode 100644 index 000000000..313c0632e --- /dev/null +++ b/share/icons/clonetiler_per_row_shift.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/color-fill.svg b/share/icons/color-fill.svg new file mode 100644 index 000000000..8b60b3706 --- /dev/null +++ b/share/icons/color-fill.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/color-gradient.svg b/share/icons/color-gradient.svg new file mode 100644 index 000000000..76a655031 --- /dev/null +++ b/share/icons/color-gradient.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/color-management.svg b/share/icons/color-management.svg new file mode 100644 index 000000000..9ba40d525 --- /dev/null +++ b/share/icons/color-management.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + diff --git a/share/icons/color-picker.svg b/share/icons/color-picker.svg new file mode 100644 index 000000000..116f27f62 --- /dev/null +++ b/share/icons/color-picker.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/connector-avoid.svg b/share/icons/connector-avoid.svg new file mode 100644 index 000000000..79f2ad9a5 --- /dev/null +++ b/share/icons/connector-avoid.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/connector-edit.svg b/share/icons/connector-edit.svg new file mode 100644 index 000000000..f6ea9c2ef --- /dev/null +++ b/share/icons/connector-edit.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/connector-ignore.svg b/share/icons/connector-ignore.svg new file mode 100644 index 000000000..fd9ec0081 --- /dev/null +++ b/share/icons/connector-ignore.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/connector-new-connpoint.svg b/share/icons/connector-new-connpoint.svg new file mode 100644 index 000000000..b9e6dda18 --- /dev/null +++ b/share/icons/connector-new-connpoint.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/connector-orthogonal.svg b/share/icons/connector-orthogonal.svg new file mode 100644 index 000000000..a445fb1a2 --- /dev/null +++ b/share/icons/connector-orthogonal.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/connector-remove-connpoint.svg b/share/icons/connector-remove-connpoint.svg new file mode 100644 index 000000000..634deaa4a --- /dev/null +++ b/share/icons/connector-remove-connpoint.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + diff --git a/share/icons/controls_fill.svg b/share/icons/controls_fill.svg new file mode 100644 index 000000000..ce7802314 --- /dev/null +++ b/share/icons/controls_fill.svg @@ -0,0 +1,27 @@ + + + + + + + + diff --git a/share/icons/controls_stroke.svg b/share/icons/controls_stroke.svg new file mode 100644 index 000000000..f6ce6f0c5 --- /dev/null +++ b/share/icons/controls_stroke.svg @@ -0,0 +1,27 @@ + + + + + + + + diff --git a/share/icons/dialog-align-and-distribute.svg b/share/icons/dialog-align-and-distribute.svg new file mode 100644 index 000000000..af53fc450 --- /dev/null +++ b/share/icons/dialog-align-and-distribute.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/dialog-fill-and-stroke.svg b/share/icons/dialog-fill-and-stroke.svg new file mode 100644 index 000000000..ae65d4b36 --- /dev/null +++ b/share/icons/dialog-fill-and-stroke.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/dialog-filters.svg b/share/icons/dialog-filters.svg new file mode 100644 index 000000000..ce006bf39 --- /dev/null +++ b/share/icons/dialog-filters.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/dialog-geometry.svg b/share/icons/dialog-geometry.svg new file mode 100644 index 000000000..e81a856e1 --- /dev/null +++ b/share/icons/dialog-geometry.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/dialog-icon-preview.svg b/share/icons/dialog-icon-preview.svg new file mode 100644 index 000000000..3cfcbe2d4 --- /dev/null +++ b/share/icons/dialog-icon-preview.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/dialog-input-devices.svg b/share/icons/dialog-input-devices.svg new file mode 100644 index 000000000..4d218d96e --- /dev/null +++ b/share/icons/dialog-input-devices.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/dialog-layers.svg b/share/icons/dialog-layers.svg new file mode 100644 index 000000000..b413dd2c0 --- /dev/null +++ b/share/icons/dialog-layers.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/dialog-memory.svg b/share/icons/dialog-memory.svg new file mode 100644 index 000000000..7e25e90ac --- /dev/null +++ b/share/icons/dialog-memory.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/dialog-messages.svg b/share/icons/dialog-messages.svg new file mode 100644 index 000000000..b129c2e16 --- /dev/null +++ b/share/icons/dialog-messages.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/dialog-object-properties.svg b/share/icons/dialog-object-properties.svg new file mode 100644 index 000000000..1ce323d3d --- /dev/null +++ b/share/icons/dialog-object-properties.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/dialog-path-effects.svg b/share/icons/dialog-path-effects.svg new file mode 100644 index 000000000..db92e82cb --- /dev/null +++ b/share/icons/dialog-path-effects.svg @@ -0,0 +1,38 @@ + + + + + + + + + + +inkscape:path-effect="#path-effect9860" striped for faster load + + + + + + + + diff --git a/share/icons/dialog-rows-and-columns.svg b/share/icons/dialog-rows-and-columns.svg new file mode 100644 index 000000000..3d0e90b64 --- /dev/null +++ b/share/icons/dialog-rows-and-columns.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/dialog-scripts.svg b/share/icons/dialog-scripts.svg new file mode 100644 index 000000000..1463147a7 --- /dev/null +++ b/share/icons/dialog-scripts.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/dialog-templates.svg b/share/icons/dialog-templates.svg new file mode 100644 index 000000000..49566d7ac --- /dev/null +++ b/share/icons/dialog-templates.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/dialog-text-and-font.svg b/share/icons/dialog-text-and-font.svg new file mode 100644 index 000000000..2ff31a88e --- /dev/null +++ b/share/icons/dialog-text-and-font.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/dialog-tile-clones.svg b/share/icons/dialog-tile-clones.svg new file mode 100644 index 000000000..89ec9f42c --- /dev/null +++ b/share/icons/dialog-tile-clones.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/dialog-transform.svg b/share/icons/dialog-transform.svg new file mode 100644 index 000000000..a12411544 --- /dev/null +++ b/share/icons/dialog-transform.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/dialog-xml-editor.svg b/share/icons/dialog-xml-editor.svg new file mode 100644 index 000000000..092e75ae1 --- /dev/null +++ b/share/icons/dialog-xml-editor.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/distribute-graph-directed.svg b/share/icons/distribute-graph-directed.svg new file mode 100644 index 000000000..569811fd1 --- /dev/null +++ b/share/icons/distribute-graph-directed.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/distribute-graph.svg b/share/icons/distribute-graph.svg new file mode 100644 index 000000000..eaf66556d --- /dev/null +++ b/share/icons/distribute-graph.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/distribute-horizontal-baseline.svg b/share/icons/distribute-horizontal-baseline.svg new file mode 100644 index 000000000..d158287d1 --- /dev/null +++ b/share/icons/distribute-horizontal-baseline.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/distribute-horizontal-center.svg b/share/icons/distribute-horizontal-center.svg new file mode 100644 index 000000000..5ec21144b --- /dev/null +++ b/share/icons/distribute-horizontal-center.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/distribute-horizontal-gaps.svg b/share/icons/distribute-horizontal-gaps.svg new file mode 100644 index 000000000..513392d4d --- /dev/null +++ b/share/icons/distribute-horizontal-gaps.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/distribute-horizontal-left.svg b/share/icons/distribute-horizontal-left.svg new file mode 100644 index 000000000..c79e1a3dc --- /dev/null +++ b/share/icons/distribute-horizontal-left.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/distribute-horizontal-node.svg b/share/icons/distribute-horizontal-node.svg new file mode 100644 index 000000000..893ff3792 --- /dev/null +++ b/share/icons/distribute-horizontal-node.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/distribute-horizontal-right.svg b/share/icons/distribute-horizontal-right.svg new file mode 100644 index 000000000..bfd2f976d --- /dev/null +++ b/share/icons/distribute-horizontal-right.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/distribute-randomize.svg b/share/icons/distribute-randomize.svg new file mode 100644 index 000000000..a636b23b2 --- /dev/null +++ b/share/icons/distribute-randomize.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/distribute-remove-overlaps.svg b/share/icons/distribute-remove-overlaps.svg new file mode 100644 index 000000000..8ece17069 --- /dev/null +++ b/share/icons/distribute-remove-overlaps.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/distribute-unclump.svg b/share/icons/distribute-unclump.svg new file mode 100644 index 000000000..fa28073a9 --- /dev/null +++ b/share/icons/distribute-unclump.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/distribute-vertical-baseline.svg b/share/icons/distribute-vertical-baseline.svg new file mode 100644 index 000000000..19a2e915e --- /dev/null +++ b/share/icons/distribute-vertical-baseline.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/distribute-vertical-bottom.svg b/share/icons/distribute-vertical-bottom.svg new file mode 100644 index 000000000..9b4f06ae2 --- /dev/null +++ b/share/icons/distribute-vertical-bottom.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/distribute-vertical-center.svg b/share/icons/distribute-vertical-center.svg new file mode 100644 index 000000000..dcb004d17 --- /dev/null +++ b/share/icons/distribute-vertical-center.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/distribute-vertical-gaps.svg b/share/icons/distribute-vertical-gaps.svg new file mode 100644 index 000000000..8be9802fd --- /dev/null +++ b/share/icons/distribute-vertical-gaps.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/distribute-vertical-node.svg b/share/icons/distribute-vertical-node.svg new file mode 100644 index 000000000..f7cfb1137 --- /dev/null +++ b/share/icons/distribute-vertical-node.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/distribute-vertical-top.svg b/share/icons/distribute-vertical-top.svg new file mode 100644 index 000000000..7616b61e4 --- /dev/null +++ b/share/icons/distribute-vertical-top.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/document-cleanup.svg b/share/icons/document-cleanup.svg new file mode 100644 index 000000000..4d9782855 --- /dev/null +++ b/share/icons/document-cleanup.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/document-export-ocal.svg b/share/icons/document-export-ocal.svg new file mode 100644 index 000000000..8ca2878ab --- /dev/null +++ b/share/icons/document-export-ocal.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/document-export.svg b/share/icons/document-export.svg new file mode 100644 index 000000000..c48f57edd --- /dev/null +++ b/share/icons/document-export.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/document-import-ocal.svg b/share/icons/document-import-ocal.svg new file mode 100644 index 000000000..cf78255fa --- /dev/null +++ b/share/icons/document-import-ocal.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/document-import.svg b/share/icons/document-import.svg new file mode 100644 index 000000000..510933619 --- /dev/null +++ b/share/icons/document-import.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/document-metadata.svg b/share/icons/document-metadata.svg new file mode 100644 index 000000000..be49b0e28 --- /dev/null +++ b/share/icons/document-metadata.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/document-open-recent.svg b/share/icons/document-open-recent.svg new file mode 100644 index 000000000..3d3a36cea --- /dev/null +++ b/share/icons/document-open-recent.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/draw-calligraphic.svg b/share/icons/draw-calligraphic.svg new file mode 100644 index 000000000..ce187f37f --- /dev/null +++ b/share/icons/draw-calligraphic.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/draw-connector.svg b/share/icons/draw-connector.svg new file mode 100644 index 000000000..f3ba3eaa1 --- /dev/null +++ b/share/icons/draw-connector.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/draw-cuboid.svg b/share/icons/draw-cuboid.svg new file mode 100644 index 000000000..01252829f --- /dev/null +++ b/share/icons/draw-cuboid.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/draw-ellipse-arc.svg b/share/icons/draw-ellipse-arc.svg new file mode 100644 index 000000000..9c86aad0a --- /dev/null +++ b/share/icons/draw-ellipse-arc.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/share/icons/draw-ellipse-chord.svg b/share/icons/draw-ellipse-chord.svg new file mode 100644 index 000000000..14ff3017f --- /dev/null +++ b/share/icons/draw-ellipse-chord.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/share/icons/draw-ellipse-segment.svg b/share/icons/draw-ellipse-segment.svg new file mode 100644 index 000000000..6e34ecac0 --- /dev/null +++ b/share/icons/draw-ellipse-segment.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/share/icons/draw-ellipse-whole.svg b/share/icons/draw-ellipse-whole.svg new file mode 100644 index 000000000..e9621a688 --- /dev/null +++ b/share/icons/draw-ellipse-whole.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/share/icons/draw-ellipse.svg b/share/icons/draw-ellipse.svg new file mode 100644 index 000000000..eeab261b7 --- /dev/null +++ b/share/icons/draw-ellipse.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/draw-eraser-delete-objects.svg b/share/icons/draw-eraser-delete-objects.svg new file mode 100644 index 000000000..2a9d37564 --- /dev/null +++ b/share/icons/draw-eraser-delete-objects.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + diff --git a/share/icons/draw-eraser.svg b/share/icons/draw-eraser.svg new file mode 100644 index 000000000..481e2ac75 --- /dev/null +++ b/share/icons/draw-eraser.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/draw-freehand.svg b/share/icons/draw-freehand.svg new file mode 100644 index 000000000..f65cf7451 --- /dev/null +++ b/share/icons/draw-freehand.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/draw-geometry-angle-bisector.svg b/share/icons/draw-geometry-angle-bisector.svg new file mode 100644 index 000000000..658a65cad --- /dev/null +++ b/share/icons/draw-geometry-angle-bisector.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/share/icons/draw-geometry-circle-from-radius.svg b/share/icons/draw-geometry-circle-from-radius.svg new file mode 100644 index 000000000..69b19b161 --- /dev/null +++ b/share/icons/draw-geometry-circle-from-radius.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/share/icons/draw-geometry-circle-from-three-points.svg b/share/icons/draw-geometry-circle-from-three-points.svg new file mode 100644 index 000000000..44369c964 --- /dev/null +++ b/share/icons/draw-geometry-circle-from-three-points.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/share/icons/draw-geometry-inactive.svg b/share/icons/draw-geometry-inactive.svg new file mode 100644 index 000000000..5dc608ae4 --- /dev/null +++ b/share/icons/draw-geometry-inactive.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/draw-geometry-line-parallel.svg b/share/icons/draw-geometry-line-parallel.svg new file mode 100644 index 000000000..e23d3bb94 --- /dev/null +++ b/share/icons/draw-geometry-line-parallel.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/share/icons/draw-geometry-line-perpendicular.svg b/share/icons/draw-geometry-line-perpendicular.svg new file mode 100644 index 000000000..61de07de3 --- /dev/null +++ b/share/icons/draw-geometry-line-perpendicular.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/share/icons/draw-geometry-line-segment.svg b/share/icons/draw-geometry-line-segment.svg new file mode 100644 index 000000000..3cec1a36e --- /dev/null +++ b/share/icons/draw-geometry-line-segment.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/share/icons/draw-geometry-mirror.svg b/share/icons/draw-geometry-mirror.svg new file mode 100644 index 000000000..25112fa1c --- /dev/null +++ b/share/icons/draw-geometry-mirror.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/draw-geometry-set-bounding-box.svg b/share/icons/draw-geometry-set-bounding-box.svg new file mode 100644 index 000000000..ab3515de6 --- /dev/null +++ b/share/icons/draw-geometry-set-bounding-box.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/draw-geometry-show-measuring-info.svg b/share/icons/draw-geometry-show-measuring-info.svg new file mode 100644 index 000000000..a67a2e4a3 --- /dev/null +++ b/share/icons/draw-geometry-show-measuring-info.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/draw-geometry.svg b/share/icons/draw-geometry.svg new file mode 100644 index 000000000..4aa05b092 --- /dev/null +++ b/share/icons/draw-geometry.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/draw-path.svg b/share/icons/draw-path.svg new file mode 100644 index 000000000..c4c017b26 --- /dev/null +++ b/share/icons/draw-path.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/draw-polygon-star.svg b/share/icons/draw-polygon-star.svg new file mode 100644 index 000000000..a7fa54ce6 --- /dev/null +++ b/share/icons/draw-polygon-star.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/draw-polygon.svg b/share/icons/draw-polygon.svg new file mode 100644 index 000000000..7155ff054 --- /dev/null +++ b/share/icons/draw-polygon.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/draw-rectangle.svg b/share/icons/draw-rectangle.svg new file mode 100644 index 000000000..2e8d2a667 --- /dev/null +++ b/share/icons/draw-rectangle.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/draw-spiral.svg b/share/icons/draw-spiral.svg new file mode 100644 index 000000000..57c51f9c2 --- /dev/null +++ b/share/icons/draw-spiral.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/share/icons/draw-star.svg b/share/icons/draw-star.svg new file mode 100644 index 000000000..ab38d29d2 --- /dev/null +++ b/share/icons/draw-star.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/draw-text.svg b/share/icons/draw-text.svg new file mode 100644 index 000000000..e1a08f60a --- /dev/null +++ b/share/icons/draw-text.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/draw-trace-background.svg b/share/icons/draw-trace-background.svg new file mode 100644 index 000000000..281350c14 --- /dev/null +++ b/share/icons/draw-trace-background.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/draw-use-pressure.svg b/share/icons/draw-use-pressure.svg new file mode 100644 index 000000000..2297fe9a1 --- /dev/null +++ b/share/icons/draw-use-pressure.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + diff --git a/share/icons/draw-use-tilt.svg b/share/icons/draw-use-tilt.svg new file mode 100644 index 000000000..369ddd18a --- /dev/null +++ b/share/icons/draw-use-tilt.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/edit-clone-unlink.svg b/share/icons/edit-clone-unlink.svg new file mode 100644 index 000000000..57ba95452 --- /dev/null +++ b/share/icons/edit-clone-unlink.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/edit-clone.svg b/share/icons/edit-clone.svg new file mode 100644 index 000000000..cdd718662 --- /dev/null +++ b/share/icons/edit-clone.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/edit-duplicate.svg b/share/icons/edit-duplicate.svg new file mode 100644 index 000000000..71b343ab1 --- /dev/null +++ b/share/icons/edit-duplicate.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/edit-paste-in-place.svg b/share/icons/edit-paste-in-place.svg new file mode 100644 index 000000000..225f7933b --- /dev/null +++ b/share/icons/edit-paste-in-place.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/edit-paste-style.svg b/share/icons/edit-paste-style.svg new file mode 100644 index 000000000..724d4c15d --- /dev/null +++ b/share/icons/edit-paste-style.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/edit-select-all-layers.svg b/share/icons/edit-select-all-layers.svg new file mode 100644 index 000000000..8c8bc4881 --- /dev/null +++ b/share/icons/edit-select-all-layers.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/edit-select-all.svg b/share/icons/edit-select-all.svg new file mode 100644 index 000000000..23c112a61 --- /dev/null +++ b/share/icons/edit-select-all.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/edit-select-invert.svg b/share/icons/edit-select-invert.svg new file mode 100644 index 000000000..8828c1e5d --- /dev/null +++ b/share/icons/edit-select-invert.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/edit-select-none.svg b/share/icons/edit-select-none.svg new file mode 100644 index 000000000..503302d2d --- /dev/null +++ b/share/icons/edit-select-none.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/edit-select-original.svg b/share/icons/edit-select-original.svg new file mode 100644 index 000000000..869ac9c37 --- /dev/null +++ b/share/icons/edit-select-original.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/edit-undo-history.svg b/share/icons/edit-undo-history.svg new file mode 100644 index 000000000..8f8589837 --- /dev/null +++ b/share/icons/edit-undo-history.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/exchange-positions-clockwise.svg b/share/icons/exchange-positions-clockwise.svg new file mode 100644 index 000000000..3c50d9f1b --- /dev/null +++ b/share/icons/exchange-positions-clockwise.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/exchange-positions-zorder.svg b/share/icons/exchange-positions-zorder.svg new file mode 100644 index 000000000..498c07f28 --- /dev/null +++ b/share/icons/exchange-positions-zorder.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/exchange-positions.svg b/share/icons/exchange-positions.svg new file mode 100644 index 000000000..765a88534 --- /dev/null +++ b/share/icons/exchange-positions.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/fill-rule-even-odd.svg b/share/icons/fill-rule-even-odd.svg new file mode 100644 index 000000000..15ac4fdcd --- /dev/null +++ b/share/icons/fill-rule-even-odd.svg @@ -0,0 +1,27 @@ + + + + + + + + diff --git a/share/icons/fill-rule-nonzero.svg b/share/icons/fill-rule-nonzero.svg new file mode 100644 index 000000000..228e2a511 --- /dev/null +++ b/share/icons/fill-rule-nonzero.svg @@ -0,0 +1,27 @@ + + + + + + + + diff --git a/share/icons/flatten_simplify.svg b/share/icons/flatten_simplify.svg new file mode 100644 index 000000000..42564eb76 --- /dev/null +++ b/share/icons/flatten_simplify.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/share/icons/format-text-direction-horizontal.svg b/share/icons/format-text-direction-horizontal.svg new file mode 100644 index 000000000..ecac387c4 --- /dev/null +++ b/share/icons/format-text-direction-horizontal.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/format-text-direction-r2l.svg b/share/icons/format-text-direction-r2l.svg new file mode 100644 index 000000000..22abacfcf --- /dev/null +++ b/share/icons/format-text-direction-r2l.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/format-text-direction-vertical-lr.svg b/share/icons/format-text-direction-vertical-lr.svg new file mode 100644 index 000000000..2ce3630f0 --- /dev/null +++ b/share/icons/format-text-direction-vertical-lr.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/format-text-direction-vertical.svg b/share/icons/format-text-direction-vertical.svg new file mode 100644 index 000000000..fb5b5f7fe --- /dev/null +++ b/share/icons/format-text-direction-vertical.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/g3735.svg b/share/icons/g3735.svg new file mode 100644 index 000000000..1d93c72d6 --- /dev/null +++ b/share/icons/g3735.svg @@ -0,0 +1,27 @@ + + + + + + + + diff --git a/share/icons/g7621-2.svg b/share/icons/g7621-2.svg new file mode 100644 index 000000000..be0b609d8 --- /dev/null +++ b/share/icons/g7621-2.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + diff --git a/share/icons/grid-axonometric.svg b/share/icons/grid-axonometric.svg new file mode 100644 index 000000000..5806aecb6 --- /dev/null +++ b/share/icons/grid-axonometric.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/grid-rectangular.svg b/share/icons/grid-rectangular.svg new file mode 100644 index 000000000..9f48b9837 --- /dev/null +++ b/share/icons/grid-rectangular.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + diff --git a/share/icons/guides.svg b/share/icons/guides.svg new file mode 100644 index 000000000..315acd951 --- /dev/null +++ b/share/icons/guides.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/help-contents.svg b/share/icons/help-contents.svg new file mode 100644 index 000000000..07eee6a85 --- /dev/null +++ b/share/icons/help-contents.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/help-keyborad-shortcuts.svg b/share/icons/help-keyborad-shortcuts.svg new file mode 100644 index 000000000..4a88a534a --- /dev/null +++ b/share/icons/help-keyborad-shortcuts.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/icons.svg b/share/icons/icons.svg deleted file mode 100644 index 229354cea..000000000 --- a/share/icons/icons.svg +++ /dev/null @@ -1,4340 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Created with Inkscape -http://www.inkscape.org/ -image/svg+xml - - - - -Inkscape Developers - - - - -Inkscape Developers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -inkscape:path-effect="#path-effect9860" striped for faster load - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -none - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -inkscape:path-effect="#path-effect9860" striped for faster load - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/share/icons/inkscape-logo.svg b/share/icons/inkscape-logo.svg new file mode 100644 index 000000000..7c1bc6a5e --- /dev/null +++ b/share/icons/inkscape-logo.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/interactive_simplify.svg b/share/icons/interactive_simplify.svg new file mode 100644 index 000000000..a617a6431 --- /dev/null +++ b/share/icons/interactive_simplify.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/share/icons/layer-bottom.svg b/share/icons/layer-bottom.svg new file mode 100644 index 000000000..1012d93e4 --- /dev/null +++ b/share/icons/layer-bottom.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/layer-delete.svg b/share/icons/layer-delete.svg new file mode 100644 index 000000000..c2055361d --- /dev/null +++ b/share/icons/layer-delete.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/layer-duplicate.svg b/share/icons/layer-duplicate.svg new file mode 100644 index 000000000..8a8cf38ec --- /dev/null +++ b/share/icons/layer-duplicate.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/layer-lower.svg b/share/icons/layer-lower.svg new file mode 100644 index 000000000..eeba28c24 --- /dev/null +++ b/share/icons/layer-lower.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/layer-new.svg b/share/icons/layer-new.svg new file mode 100644 index 000000000..62888dd35 --- /dev/null +++ b/share/icons/layer-new.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/layer-next.svg b/share/icons/layer-next.svg new file mode 100644 index 000000000..911515c06 --- /dev/null +++ b/share/icons/layer-next.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/layer-previous.svg b/share/icons/layer-previous.svg new file mode 100644 index 000000000..f5d1d7676 --- /dev/null +++ b/share/icons/layer-previous.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/layer-raise.svg b/share/icons/layer-raise.svg new file mode 100644 index 000000000..1951f4f3e --- /dev/null +++ b/share/icons/layer-raise.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/layer-rename.svg b/share/icons/layer-rename.svg new file mode 100644 index 000000000..d8aa22ef1 --- /dev/null +++ b/share/icons/layer-rename.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/layer-top.svg b/share/icons/layer-top.svg new file mode 100644 index 000000000..8871f8e3c --- /dev/null +++ b/share/icons/layer-top.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/mesh-gradient-fit.svg b/share/icons/mesh-gradient-fit.svg new file mode 100644 index 000000000..ff3fd8c92 --- /dev/null +++ b/share/icons/mesh-gradient-fit.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/share/icons/mesh-gradient.svg b/share/icons/mesh-gradient.svg new file mode 100644 index 000000000..45001fb69 --- /dev/null +++ b/share/icons/mesh-gradient.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/no-marker.svg b/share/icons/no-marker.svg new file mode 100644 index 000000000..7817e2fdc --- /dev/null +++ b/share/icons/no-marker.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/share/icons/node-add.svg b/share/icons/node-add.svg new file mode 100644 index 000000000..56a86a708 --- /dev/null +++ b/share/icons/node-add.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/share/icons/node-break.svg b/share/icons/node-break.svg new file mode 100644 index 000000000..b1feb292c --- /dev/null +++ b/share/icons/node-break.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + diff --git a/share/icons/node-delete-segment.svg b/share/icons/node-delete-segment.svg new file mode 100644 index 000000000..12d6025f7 --- /dev/null +++ b/share/icons/node-delete-segment.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/node-delete.svg b/share/icons/node-delete.svg new file mode 100644 index 000000000..212aa749c --- /dev/null +++ b/share/icons/node-delete.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/share/icons/node-join-segment.svg b/share/icons/node-join-segment.svg new file mode 100644 index 000000000..f57328c92 --- /dev/null +++ b/share/icons/node-join-segment.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/node-join.svg b/share/icons/node-join.svg new file mode 100644 index 000000000..d19d7c23c --- /dev/null +++ b/share/icons/node-join.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + diff --git a/share/icons/node-segment-curve.svg b/share/icons/node-segment-curve.svg new file mode 100644 index 000000000..99d2dcc0e --- /dev/null +++ b/share/icons/node-segment-curve.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/share/icons/node-segment-line.svg b/share/icons/node-segment-line.svg new file mode 100644 index 000000000..713181dff --- /dev/null +++ b/share/icons/node-segment-line.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/share/icons/node-transform.svg b/share/icons/node-transform.svg new file mode 100644 index 000000000..a71d986c1 --- /dev/null +++ b/share/icons/node-transform.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/share/icons/node-type-auto-smooth.svg b/share/icons/node-type-auto-smooth.svg new file mode 100644 index 000000000..2c445c6ef --- /dev/null +++ b/share/icons/node-type-auto-smooth.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/node-type-cusp.svg b/share/icons/node-type-cusp.svg new file mode 100644 index 000000000..b971c0fa8 --- /dev/null +++ b/share/icons/node-type-cusp.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/node-type-smooth.svg b/share/icons/node-type-smooth.svg new file mode 100644 index 000000000..c7b28995e --- /dev/null +++ b/share/icons/node-type-smooth.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/node-type-symmetric.svg b/share/icons/node-type-symmetric.svg new file mode 100644 index 000000000..bfdfbf9ca --- /dev/null +++ b/share/icons/node-type-symmetric.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + diff --git a/share/icons/node_insert_max_x.svg b/share/icons/node_insert_max_x.svg new file mode 100644 index 000000000..2353c116f --- /dev/null +++ b/share/icons/node_insert_max_x.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/share/icons/node_insert_max_y.svg b/share/icons/node_insert_max_y.svg new file mode 100644 index 000000000..752b55e54 --- /dev/null +++ b/share/icons/node_insert_max_y.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/share/icons/node_insert_min_x.svg b/share/icons/node_insert_min_x.svg new file mode 100644 index 000000000..09f51f6f3 --- /dev/null +++ b/share/icons/node_insert_min_x.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/share/icons/node_insert_min_y.svg b/share/icons/node_insert_min_y.svg new file mode 100644 index 000000000..b3fe7c7e1 --- /dev/null +++ b/share/icons/node_insert_min_y.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/share/icons/object-columns.svg b/share/icons/object-columns.svg new file mode 100644 index 000000000..0415e8444 --- /dev/null +++ b/share/icons/object-columns.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/object-fill.svg b/share/icons/object-fill.svg new file mode 100644 index 000000000..5ddaedfc9 --- /dev/null +++ b/share/icons/object-fill.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/object-flip-horizontal.svg b/share/icons/object-flip-horizontal.svg new file mode 100644 index 000000000..936c28b82 --- /dev/null +++ b/share/icons/object-flip-horizontal.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/object-flip-vertical.svg b/share/icons/object-flip-vertical.svg new file mode 100644 index 000000000..edb4e51b6 --- /dev/null +++ b/share/icons/object-flip-vertical.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/object-group.svg b/share/icons/object-group.svg new file mode 100644 index 000000000..041d883d1 --- /dev/null +++ b/share/icons/object-group.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/object-hidden.svg b/share/icons/object-hidden.svg new file mode 100644 index 000000000..aacac3bd8 --- /dev/null +++ b/share/icons/object-hidden.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/object-locked.svg b/share/icons/object-locked.svg new file mode 100644 index 000000000..49b90e819 --- /dev/null +++ b/share/icons/object-locked.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/object-rotate-left.svg b/share/icons/object-rotate-left.svg new file mode 100644 index 000000000..81ec5346d --- /dev/null +++ b/share/icons/object-rotate-left.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/object-rotate-right.svg b/share/icons/object-rotate-right.svg new file mode 100644 index 000000000..f1f1e3d0d --- /dev/null +++ b/share/icons/object-rotate-right.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/object-rows.svg b/share/icons/object-rows.svg new file mode 100644 index 000000000..888e7814e --- /dev/null +++ b/share/icons/object-rows.svg @@ -0,0 +1,218 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/object-stroke-style.svg b/share/icons/object-stroke-style.svg new file mode 100644 index 000000000..b1969b0f7 --- /dev/null +++ b/share/icons/object-stroke-style.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + diff --git a/share/icons/object-to-path.svg b/share/icons/object-to-path.svg new file mode 100644 index 000000000..99e22ec84 --- /dev/null +++ b/share/icons/object-to-path.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + diff --git a/share/icons/object-tweak-attract.svg b/share/icons/object-tweak-attract.svg new file mode 100644 index 000000000..a1393b277 --- /dev/null +++ b/share/icons/object-tweak-attract.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/object-tweak-blur.svg b/share/icons/object-tweak-blur.svg new file mode 100644 index 000000000..a77fe6254 --- /dev/null +++ b/share/icons/object-tweak-blur.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/object-tweak-duplicate.svg b/share/icons/object-tweak-duplicate.svg new file mode 100644 index 000000000..620950c7f --- /dev/null +++ b/share/icons/object-tweak-duplicate.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/object-tweak-jitter-color.svg b/share/icons/object-tweak-jitter-color.svg new file mode 100644 index 000000000..db5d9a476 --- /dev/null +++ b/share/icons/object-tweak-jitter-color.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/object-tweak-paint.svg b/share/icons/object-tweak-paint.svg new file mode 100644 index 000000000..2295bb9e0 --- /dev/null +++ b/share/icons/object-tweak-paint.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/object-tweak-push.svg b/share/icons/object-tweak-push.svg new file mode 100644 index 000000000..d7a6d9eef --- /dev/null +++ b/share/icons/object-tweak-push.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/object-tweak-randomize.svg b/share/icons/object-tweak-randomize.svg new file mode 100644 index 000000000..b7c191694 --- /dev/null +++ b/share/icons/object-tweak-randomize.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/object-tweak-rotate.svg b/share/icons/object-tweak-rotate.svg new file mode 100644 index 000000000..d7b1c4752 --- /dev/null +++ b/share/icons/object-tweak-rotate.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/object-tweak-shrink.svg b/share/icons/object-tweak-shrink.svg new file mode 100644 index 000000000..70a13d296 --- /dev/null +++ b/share/icons/object-tweak-shrink.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/object-ungroup-pop-selection.svg b/share/icons/object-ungroup-pop-selection.svg new file mode 100644 index 000000000..1a821cc4e --- /dev/null +++ b/share/icons/object-ungroup-pop-selection.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/object-ungroup.svg b/share/icons/object-ungroup.svg new file mode 100644 index 000000000..c303cd5b4 --- /dev/null +++ b/share/icons/object-ungroup.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/object-unlocked.svg b/share/icons/object-unlocked.svg new file mode 100644 index 000000000..76ed10ce6 --- /dev/null +++ b/share/icons/object-unlocked.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/object-visible.svg b/share/icons/object-visible.svg new file mode 100644 index 000000000..9016b9808 --- /dev/null +++ b/share/icons/object-visible.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/off.svg b/share/icons/off.svg new file mode 100644 index 000000000..ff332a7f8 --- /dev/null +++ b/share/icons/off.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/on.svg b/share/icons/on.svg new file mode 100644 index 000000000..b94952ccf --- /dev/null +++ b/share/icons/on.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/pack-less.svg b/share/icons/pack-less.svg new file mode 100644 index 000000000..84485a390 --- /dev/null +++ b/share/icons/pack-less.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + diff --git a/share/icons/pack-more.svg b/share/icons/pack-more.svg new file mode 100644 index 000000000..f7897c65d --- /dev/null +++ b/share/icons/pack-more.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/paint-gradient-conical.svg b/share/icons/paint-gradient-conical.svg new file mode 100644 index 000000000..4256a5310 --- /dev/null +++ b/share/icons/paint-gradient-conical.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + diff --git a/share/icons/paint-gradient-linear.svg b/share/icons/paint-gradient-linear.svg new file mode 100644 index 000000000..da4eac18d --- /dev/null +++ b/share/icons/paint-gradient-linear.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + diff --git a/share/icons/paint-gradient-mesh.svg b/share/icons/paint-gradient-mesh.svg new file mode 100644 index 000000000..b5082edea --- /dev/null +++ b/share/icons/paint-gradient-mesh.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + diff --git a/share/icons/paint-gradient-radial.svg b/share/icons/paint-gradient-radial.svg new file mode 100644 index 000000000..731bd2ba8 --- /dev/null +++ b/share/icons/paint-gradient-radial.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + diff --git a/share/icons/paint-none.svg b/share/icons/paint-none.svg new file mode 100644 index 000000000..f46b4ebd1 --- /dev/null +++ b/share/icons/paint-none.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/paint-order-fms.svg b/share/icons/paint-order-fms.svg new file mode 100644 index 000000000..b026b392b --- /dev/null +++ b/share/icons/paint-order-fms.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/paint-order-fsm.svg b/share/icons/paint-order-fsm.svg new file mode 100644 index 000000000..c25b2807d --- /dev/null +++ b/share/icons/paint-order-fsm.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/paint-order-mfs.svg b/share/icons/paint-order-mfs.svg new file mode 100644 index 000000000..e475aa29d --- /dev/null +++ b/share/icons/paint-order-mfs.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/paint-order-msf.svg b/share/icons/paint-order-msf.svg new file mode 100644 index 000000000..2adb29638 --- /dev/null +++ b/share/icons/paint-order-msf.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/paint-order-sfm.svg b/share/icons/paint-order-sfm.svg new file mode 100644 index 000000000..31b35ec5e --- /dev/null +++ b/share/icons/paint-order-sfm.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/paint-order-smf.svg b/share/icons/paint-order-smf.svg new file mode 100644 index 000000000..235a56f35 --- /dev/null +++ b/share/icons/paint-order-smf.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/paint-pattern.svg b/share/icons/paint-pattern.svg new file mode 100644 index 000000000..475fe87fe --- /dev/null +++ b/share/icons/paint-pattern.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/paint-solid.svg b/share/icons/paint-solid.svg new file mode 100644 index 000000000..c6b29e071 --- /dev/null +++ b/share/icons/paint-solid.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/share/icons/paint-swatch.svg b/share/icons/paint-swatch.svg new file mode 100644 index 000000000..914198c20 --- /dev/null +++ b/share/icons/paint-swatch.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/share/icons/paint-unknown.svg b/share/icons/paint-unknown.svg new file mode 100644 index 000000000..3537534f2 --- /dev/null +++ b/share/icons/paint-unknown.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/share/icons/path-break-apart.svg b/share/icons/path-break-apart.svg new file mode 100644 index 000000000..fe26a9063 --- /dev/null +++ b/share/icons/path-break-apart.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/share/icons/path-clip-edit.svg b/share/icons/path-clip-edit.svg new file mode 100644 index 000000000..d856597de --- /dev/null +++ b/share/icons/path-clip-edit.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + diff --git a/share/icons/path-combine.svg b/share/icons/path-combine.svg new file mode 100644 index 000000000..e88bc7d1f --- /dev/null +++ b/share/icons/path-combine.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + diff --git a/share/icons/path-cut.svg b/share/icons/path-cut.svg new file mode 100644 index 000000000..56f17170b --- /dev/null +++ b/share/icons/path-cut.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/share/icons/path-difference.svg b/share/icons/path-difference.svg new file mode 100644 index 000000000..09d8828e0 --- /dev/null +++ b/share/icons/path-difference.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/share/icons/path-division.svg b/share/icons/path-division.svg new file mode 100644 index 000000000..aa048c58e --- /dev/null +++ b/share/icons/path-division.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/path-effect-parameter-next.svg b/share/icons/path-effect-parameter-next.svg new file mode 100644 index 000000000..51d31e7e5 --- /dev/null +++ b/share/icons/path-effect-parameter-next.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + +inkscape:path-effect="#path-effect9860" striped for faster load + + + + + + + + + + + + + diff --git a/share/icons/path-exclusion.svg b/share/icons/path-exclusion.svg new file mode 100644 index 000000000..f9c8b42ad --- /dev/null +++ b/share/icons/path-exclusion.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + diff --git a/share/icons/path-inset.svg b/share/icons/path-inset.svg new file mode 100644 index 000000000..8d19edc3c --- /dev/null +++ b/share/icons/path-inset.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + diff --git a/share/icons/path-intersection.svg b/share/icons/path-intersection.svg new file mode 100644 index 000000000..cd61f73e1 --- /dev/null +++ b/share/icons/path-intersection.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/path-mask-edit.svg b/share/icons/path-mask-edit.svg new file mode 100644 index 000000000..0827d0239 --- /dev/null +++ b/share/icons/path-mask-edit.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/path-mode-bezier.svg b/share/icons/path-mode-bezier.svg new file mode 100644 index 000000000..d6561421e --- /dev/null +++ b/share/icons/path-mode-bezier.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + diff --git a/share/icons/path-mode-bspline.svg b/share/icons/path-mode-bspline.svg new file mode 100644 index 000000000..ca886f663 --- /dev/null +++ b/share/icons/path-mode-bspline.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + diff --git a/share/icons/path-mode-polyline-paraxial.svg b/share/icons/path-mode-polyline-paraxial.svg new file mode 100644 index 000000000..1a1ac52a9 --- /dev/null +++ b/share/icons/path-mode-polyline-paraxial.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/path-mode-polyline.svg b/share/icons/path-mode-polyline.svg new file mode 100644 index 000000000..5c0bd8ae0 --- /dev/null +++ b/share/icons/path-mode-polyline.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + diff --git a/share/icons/path-mode-spiro.svg b/share/icons/path-mode-spiro.svg new file mode 100644 index 000000000..abc3046b6 --- /dev/null +++ b/share/icons/path-mode-spiro.svg @@ -0,0 +1,27 @@ + + + + + + + + diff --git a/share/icons/path-offset-dynamic.svg b/share/icons/path-offset-dynamic.svg new file mode 100644 index 000000000..b494c1165 --- /dev/null +++ b/share/icons/path-offset-dynamic.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + diff --git a/share/icons/path-offset-linked.svg b/share/icons/path-offset-linked.svg new file mode 100644 index 000000000..6622b0cd5 --- /dev/null +++ b/share/icons/path-offset-linked.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + diff --git a/share/icons/path-outset.svg b/share/icons/path-outset.svg new file mode 100644 index 000000000..b1a04a6f3 --- /dev/null +++ b/share/icons/path-outset.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + diff --git a/share/icons/path-reverse.svg b/share/icons/path-reverse.svg new file mode 100644 index 000000000..36759e297 --- /dev/null +++ b/share/icons/path-reverse.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/share/icons/path-simplify.svg b/share/icons/path-simplify.svg new file mode 100644 index 000000000..69db4a3d9 --- /dev/null +++ b/share/icons/path-simplify.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + diff --git a/share/icons/path-tweak-attract.svg b/share/icons/path-tweak-attract.svg new file mode 100644 index 000000000..174924c18 --- /dev/null +++ b/share/icons/path-tweak-attract.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/path-tweak-grow.svg b/share/icons/path-tweak-grow.svg new file mode 100644 index 000000000..9f039cc5e --- /dev/null +++ b/share/icons/path-tweak-grow.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/path-tweak-push.svg b/share/icons/path-tweak-push.svg new file mode 100644 index 000000000..be97d0ebd --- /dev/null +++ b/share/icons/path-tweak-push.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/path-tweak-repel.svg b/share/icons/path-tweak-repel.svg new file mode 100644 index 000000000..c45443385 --- /dev/null +++ b/share/icons/path-tweak-repel.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/path-tweak-roughen.svg b/share/icons/path-tweak-roughen.svg new file mode 100644 index 000000000..0f512afa0 --- /dev/null +++ b/share/icons/path-tweak-roughen.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/path-tweak-shrink.svg b/share/icons/path-tweak-shrink.svg new file mode 100644 index 000000000..dad870ebc --- /dev/null +++ b/share/icons/path-tweak-shrink.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/path-union.svg b/share/icons/path-union.svg new file mode 100644 index 000000000..b7cec9068 --- /dev/null +++ b/share/icons/path-union.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + diff --git a/share/icons/perspective-parallel.svg b/share/icons/perspective-parallel.svg new file mode 100644 index 000000000..25286625b --- /dev/null +++ b/share/icons/perspective-parallel.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/share/icons/pixelart-trace.svg b/share/icons/pixelart-trace.svg new file mode 100644 index 000000000..49f81e224 --- /dev/null +++ b/share/icons/pixelart-trace.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/randomize.svg b/share/icons/randomize.svg new file mode 100644 index 000000000..895ad8baf --- /dev/null +++ b/share/icons/randomize.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/rectangle-make-corners-sharp.svg b/share/icons/rectangle-make-corners-sharp.svg new file mode 100644 index 000000000..fd0297a4d --- /dev/null +++ b/share/icons/rectangle-make-corners-sharp.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + diff --git a/share/icons/selection-bottom.svg b/share/icons/selection-bottom.svg new file mode 100644 index 000000000..917b23a4c --- /dev/null +++ b/share/icons/selection-bottom.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/selection-lower.svg b/share/icons/selection-lower.svg new file mode 100644 index 000000000..4a71173e1 --- /dev/null +++ b/share/icons/selection-lower.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/selection-make-bitmap-copy.svg b/share/icons/selection-make-bitmap-copy.svg new file mode 100644 index 000000000..6efe93903 --- /dev/null +++ b/share/icons/selection-make-bitmap-copy.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/selection-move-to-layer-above.svg b/share/icons/selection-move-to-layer-above.svg new file mode 100644 index 000000000..333d36c34 --- /dev/null +++ b/share/icons/selection-move-to-layer-above.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/selection-move-to-layer-below.svg b/share/icons/selection-move-to-layer-below.svg new file mode 100644 index 000000000..d37b3dc3e --- /dev/null +++ b/share/icons/selection-move-to-layer-below.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/selection-raise.svg b/share/icons/selection-raise.svg new file mode 100644 index 000000000..3589d9fdd --- /dev/null +++ b/share/icons/selection-raise.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/selection-top.svg b/share/icons/selection-top.svg new file mode 100644 index 000000000..464dbedf9 --- /dev/null +++ b/share/icons/selection-top.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/show-dialogs.svg b/share/icons/show-dialogs.svg new file mode 100644 index 000000000..9e1bec508 --- /dev/null +++ b/share/icons/show-dialogs.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/show-grid.svg b/share/icons/show-grid.svg new file mode 100644 index 000000000..08de34b3c --- /dev/null +++ b/share/icons/show-grid.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/show-guides.svg b/share/icons/show-guides.svg new file mode 100644 index 000000000..b2e97a94c --- /dev/null +++ b/share/icons/show-guides.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/show-node-handles.svg b/share/icons/show-node-handles.svg new file mode 100644 index 000000000..8b2ceeaec --- /dev/null +++ b/share/icons/show-node-handles.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + diff --git a/share/icons/show-path-outline.svg b/share/icons/show-path-outline.svg new file mode 100644 index 000000000..c2799dae5 --- /dev/null +++ b/share/icons/show-path-outline.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/share/icons/snap-bounding-box-center.svg b/share/icons/snap-bounding-box-center.svg new file mode 100644 index 000000000..b30bb115f --- /dev/null +++ b/share/icons/snap-bounding-box-center.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/snap-bounding-box-corners.svg b/share/icons/snap-bounding-box-corners.svg new file mode 100644 index 000000000..de8c5ac68 --- /dev/null +++ b/share/icons/snap-bounding-box-corners.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/snap-bounding-box-edges.svg b/share/icons/snap-bounding-box-edges.svg new file mode 100644 index 000000000..f52e611b8 --- /dev/null +++ b/share/icons/snap-bounding-box-edges.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/snap-bounding-box-midpoints.svg b/share/icons/snap-bounding-box-midpoints.svg new file mode 100644 index 000000000..d8876f62c --- /dev/null +++ b/share/icons/snap-bounding-box-midpoints.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/snap-bounding-box.svg b/share/icons/snap-bounding-box.svg new file mode 100644 index 000000000..aaa5ee1c0 --- /dev/null +++ b/share/icons/snap-bounding-box.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/snap-grid-guide-intersections.svg b/share/icons/snap-grid-guide-intersections.svg new file mode 100644 index 000000000..9d7c75391 --- /dev/null +++ b/share/icons/snap-grid-guide-intersections.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/share/icons/snap-nodes-center.svg b/share/icons/snap-nodes-center.svg new file mode 100644 index 000000000..8d32311a2 --- /dev/null +++ b/share/icons/snap-nodes-center.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + diff --git a/share/icons/snap-nodes-cusp.svg b/share/icons/snap-nodes-cusp.svg new file mode 100644 index 000000000..5a70303b9 --- /dev/null +++ b/share/icons/snap-nodes-cusp.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/share/icons/snap-nodes-intersection.svg b/share/icons/snap-nodes-intersection.svg new file mode 100644 index 000000000..040385288 --- /dev/null +++ b/share/icons/snap-nodes-intersection.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + diff --git a/share/icons/snap-nodes-midpoint.svg b/share/icons/snap-nodes-midpoint.svg new file mode 100644 index 000000000..9cfde3c72 --- /dev/null +++ b/share/icons/snap-nodes-midpoint.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/snap-nodes-path.svg b/share/icons/snap-nodes-path.svg new file mode 100644 index 000000000..9c1f053e2 --- /dev/null +++ b/share/icons/snap-nodes-path.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/snap-nodes-rotation-center.svg b/share/icons/snap-nodes-rotation-center.svg new file mode 100644 index 000000000..d3404ce64 --- /dev/null +++ b/share/icons/snap-nodes-rotation-center.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + diff --git a/share/icons/snap-nodes-smooth.svg b/share/icons/snap-nodes-smooth.svg new file mode 100644 index 000000000..7e7e3bae4 --- /dev/null +++ b/share/icons/snap-nodes-smooth.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/snap-nodes.svg b/share/icons/snap-nodes.svg new file mode 100644 index 000000000..e0eb50284 --- /dev/null +++ b/share/icons/snap-nodes.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/share/icons/snap-others.svg b/share/icons/snap-others.svg new file mode 100644 index 000000000..c626c47f3 --- /dev/null +++ b/share/icons/snap-others.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/snap-page.svg b/share/icons/snap-page.svg new file mode 100644 index 000000000..2977d253c --- /dev/null +++ b/share/icons/snap-page.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/snap-text-baseline.svg b/share/icons/snap-text-baseline.svg new file mode 100644 index 000000000..ef61aa879 --- /dev/null +++ b/share/icons/snap-text-baseline.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/snap.svg b/share/icons/snap.svg new file mode 100644 index 000000000..185bc99ed --- /dev/null +++ b/share/icons/snap.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + diff --git a/share/icons/spray-mode-clone.svg b/share/icons/spray-mode-clone.svg new file mode 100644 index 000000000..968d5b76e --- /dev/null +++ b/share/icons/spray-mode-clone.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/spray-mode-copy.svg b/share/icons/spray-mode-copy.svg new file mode 100644 index 000000000..828b8604b --- /dev/null +++ b/share/icons/spray-mode-copy.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/spray-mode-union.svg b/share/icons/spray-mode-union.svg new file mode 100644 index 000000000..cf1042e4b --- /dev/null +++ b/share/icons/spray-mode-union.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + diff --git a/share/icons/sticky_zoom.svg b/share/icons/sticky_zoom.svg new file mode 100644 index 000000000..0c9f9f0fa --- /dev/null +++ b/share/icons/sticky_zoom.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/stroke-cap-butt.svg b/share/icons/stroke-cap-butt.svg new file mode 100644 index 000000000..e51ecd565 --- /dev/null +++ b/share/icons/stroke-cap-butt.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + diff --git a/share/icons/stroke-cap-round.svg b/share/icons/stroke-cap-round.svg new file mode 100644 index 000000000..13a456f46 --- /dev/null +++ b/share/icons/stroke-cap-round.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + diff --git a/share/icons/stroke-cap-square.svg b/share/icons/stroke-cap-square.svg new file mode 100644 index 000000000..0a19da12f --- /dev/null +++ b/share/icons/stroke-cap-square.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + diff --git a/share/icons/stroke-join-bevel.svg b/share/icons/stroke-join-bevel.svg new file mode 100644 index 000000000..3756c17cf --- /dev/null +++ b/share/icons/stroke-join-bevel.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/stroke-join-miter.svg b/share/icons/stroke-join-miter.svg new file mode 100644 index 000000000..9f21bd726 --- /dev/null +++ b/share/icons/stroke-join-miter.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/stroke-join-round.svg b/share/icons/stroke-join-round.svg new file mode 100644 index 000000000..c04e578d0 --- /dev/null +++ b/share/icons/stroke-join-round.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/stroke-to-path.svg b/share/icons/stroke-to-path.svg new file mode 100644 index 000000000..3b24a1c26 --- /dev/null +++ b/share/icons/stroke-to-path.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + diff --git a/share/icons/swatches.svg b/share/icons/swatches.svg new file mode 100644 index 000000000..da80b32d7 --- /dev/null +++ b/share/icons/swatches.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/symbol-add.svg b/share/icons/symbol-add.svg new file mode 100644 index 000000000..77385a227 --- /dev/null +++ b/share/icons/symbol-add.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/symbol-bigger.svg b/share/icons/symbol-bigger.svg new file mode 100644 index 000000000..a5227518e --- /dev/null +++ b/share/icons/symbol-bigger.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/symbol-fit.svg b/share/icons/symbol-fit.svg new file mode 100644 index 000000000..1d0429091 --- /dev/null +++ b/share/icons/symbol-fit.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + diff --git a/share/icons/symbol-remove.svg b/share/icons/symbol-remove.svg new file mode 100644 index 000000000..7bb09f127 --- /dev/null +++ b/share/icons/symbol-remove.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/symbol-smaller.svg b/share/icons/symbol-smaller.svg new file mode 100644 index 000000000..f8657a8a7 --- /dev/null +++ b/share/icons/symbol-smaller.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + diff --git a/share/icons/symbols.svg b/share/icons/symbols.svg new file mode 100644 index 000000000..fe5b05d38 --- /dev/null +++ b/share/icons/symbols.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/symbols_old.svg b/share/icons/symbols_old.svg new file mode 100644 index 000000000..6370b5640 --- /dev/null +++ b/share/icons/symbols_old.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/share/icons/text-convert-to-regular.svg b/share/icons/text-convert-to-regular.svg new file mode 100644 index 000000000..63162ca12 --- /dev/null +++ b/share/icons/text-convert-to-regular.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/text-flow-into-frame.svg b/share/icons/text-flow-into-frame.svg new file mode 100644 index 000000000..9e4a25cb0 --- /dev/null +++ b/share/icons/text-flow-into-frame.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/text-orientation-auto.svg b/share/icons/text-orientation-auto.svg new file mode 100644 index 000000000..8e4428bac --- /dev/null +++ b/share/icons/text-orientation-auto.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/text-orientation-sideways.svg b/share/icons/text-orientation-sideways.svg new file mode 100644 index 000000000..97bb55173 --- /dev/null +++ b/share/icons/text-orientation-sideways.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/text-orientation-upright.svg b/share/icons/text-orientation-upright.svg new file mode 100644 index 000000000..5092b267b --- /dev/null +++ b/share/icons/text-orientation-upright.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/text-put-on-path.svg b/share/icons/text-put-on-path.svg new file mode 100644 index 000000000..1ac7eb9d5 --- /dev/null +++ b/share/icons/text-put-on-path.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + diff --git a/share/icons/text-remove-from-path.svg b/share/icons/text-remove-from-path.svg new file mode 100644 index 000000000..b7cc590f8 --- /dev/null +++ b/share/icons/text-remove-from-path.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + diff --git a/share/icons/text-unflow.svg b/share/icons/text-unflow.svg new file mode 100644 index 000000000..8782c72cb --- /dev/null +++ b/share/icons/text-unflow.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/text-unkern.svg b/share/icons/text-unkern.svg new file mode 100644 index 000000000..5fc671147 --- /dev/null +++ b/share/icons/text-unkern.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/text_horz_kern.svg b/share/icons/text_horz_kern.svg new file mode 100644 index 000000000..b117ab946 --- /dev/null +++ b/share/icons/text_horz_kern.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/text_letter_spacing.svg b/share/icons/text_letter_spacing.svg new file mode 100644 index 000000000..c0364d0ee --- /dev/null +++ b/share/icons/text_letter_spacing.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/text_line_spacing.svg b/share/icons/text_line_spacing.svg new file mode 100644 index 000000000..b564267d8 --- /dev/null +++ b/share/icons/text_line_spacing.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/text_outer_style.svg b/share/icons/text_outer_style.svg new file mode 100644 index 000000000..675007e8e --- /dev/null +++ b/share/icons/text_outer_style.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/text_remove_kerns.svg b/share/icons/text_remove_kerns.svg new file mode 100644 index 000000000..149406c10 --- /dev/null +++ b/share/icons/text_remove_kerns.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + diff --git a/share/icons/text_rotation.svg b/share/icons/text_rotation.svg new file mode 100644 index 000000000..8ec02441f --- /dev/null +++ b/share/icons/text_rotation.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/text_subscript.svg b/share/icons/text_subscript.svg new file mode 100644 index 000000000..2629eb5d2 --- /dev/null +++ b/share/icons/text_subscript.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/text_superscript.svg b/share/icons/text_superscript.svg new file mode 100644 index 000000000..bfe8c1e59 --- /dev/null +++ b/share/icons/text_superscript.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/text_vert_kern.svg b/share/icons/text_vert_kern.svg new file mode 100644 index 000000000..9868420da --- /dev/null +++ b/share/icons/text_vert_kern.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/text_word_spacing.svg b/share/icons/text_word_spacing.svg new file mode 100644 index 000000000..8862b1915 --- /dev/null +++ b/share/icons/text_word_spacing.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/toggle_vp_y.svg b/share/icons/toggle_vp_y.svg new file mode 100644 index 000000000..e239d9bc2 --- /dev/null +++ b/share/icons/toggle_vp_y.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/share/icons/toggle_vp_z.svg b/share/icons/toggle_vp_z.svg new file mode 100644 index 000000000..882b71b00 --- /dev/null +++ b/share/icons/toggle_vp_z.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/share/icons/tool-measure.svg b/share/icons/tool-measure.svg new file mode 100644 index 000000000..ff8050652 --- /dev/null +++ b/share/icons/tool-measure.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/tool-node-editor.svg b/share/icons/tool-node-editor.svg new file mode 100644 index 000000000..4dd4b8575 --- /dev/null +++ b/share/icons/tool-node-editor.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + diff --git a/share/icons/tool-pointer.svg b/share/icons/tool-pointer.svg new file mode 100644 index 000000000..c402bef55 --- /dev/null +++ b/share/icons/tool-pointer.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/share/icons/tool-spray.svg b/share/icons/tool-spray.svg new file mode 100644 index 000000000..efc5ef57b --- /dev/null +++ b/share/icons/tool-spray.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/tool-tweak.svg b/share/icons/tool-tweak.svg new file mode 100644 index 000000000..0e6403085 --- /dev/null +++ b/share/icons/tool-tweak.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/transform-affect-gradient.svg b/share/icons/transform-affect-gradient.svg new file mode 100644 index 000000000..b8c1acbf6 --- /dev/null +++ b/share/icons/transform-affect-gradient.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/transform-affect-pattern.svg b/share/icons/transform-affect-pattern.svg new file mode 100644 index 000000000..e7e51a2b0 --- /dev/null +++ b/share/icons/transform-affect-pattern.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + diff --git a/share/icons/transform-affect-rounded-corners.svg b/share/icons/transform-affect-rounded-corners.svg new file mode 100644 index 000000000..89567779d --- /dev/null +++ b/share/icons/transform-affect-rounded-corners.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + diff --git a/share/icons/transform-affect-stroke.svg b/share/icons/transform-affect-stroke.svg new file mode 100644 index 000000000..df88840a4 --- /dev/null +++ b/share/icons/transform-affect-stroke.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + diff --git a/share/icons/transform-move-horizontal.svg b/share/icons/transform-move-horizontal.svg new file mode 100644 index 000000000..602cbec62 --- /dev/null +++ b/share/icons/transform-move-horizontal.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/transform-move-vertical.svg b/share/icons/transform-move-vertical.svg new file mode 100644 index 000000000..7c9ab3348 --- /dev/null +++ b/share/icons/transform-move-vertical.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/transform-rotate.svg b/share/icons/transform-rotate.svg new file mode 100644 index 000000000..a1b0be7b0 --- /dev/null +++ b/share/icons/transform-rotate.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/transform-scale-horizontal.svg b/share/icons/transform-scale-horizontal.svg new file mode 100644 index 000000000..d2fb1b173 --- /dev/null +++ b/share/icons/transform-scale-horizontal.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/transform-scale-vertical.svg b/share/icons/transform-scale-vertical.svg new file mode 100644 index 000000000..6556439a2 --- /dev/null +++ b/share/icons/transform-scale-vertical.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/transform-skew-horizontal.svg b/share/icons/transform-skew-horizontal.svg new file mode 100644 index 000000000..ca6c9852b --- /dev/null +++ b/share/icons/transform-skew-horizontal.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/transform-skew-vertical.svg b/share/icons/transform-skew-vertical.svg new file mode 100644 index 000000000..87cbbad25 --- /dev/null +++ b/share/icons/transform-skew-vertical.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/view-fullscreen.svg b/share/icons/view-fullscreen.svg new file mode 100644 index 000000000..744119f09 --- /dev/null +++ b/share/icons/view-fullscreen.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/window-new.svg b/share/icons/window-new.svg new file mode 100644 index 000000000..251897288 --- /dev/null +++ b/share/icons/window-new.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/window-next.svg b/share/icons/window-next.svg new file mode 100644 index 000000000..35c55bc0f --- /dev/null +++ b/share/icons/window-next.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/window-previous.svg b/share/icons/window-previous.svg new file mode 100644 index 000000000..50f759ef6 --- /dev/null +++ b/share/icons/window-previous.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/xml-attribute-delete.svg b/share/icons/xml-attribute-delete.svg new file mode 100644 index 000000000..40421decd --- /dev/null +++ b/share/icons/xml-attribute-delete.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/xml-element-new.svg b/share/icons/xml-element-new.svg new file mode 100644 index 000000000..779698786 --- /dev/null +++ b/share/icons/xml-element-new.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/xml-node-delete.svg b/share/icons/xml-node-delete.svg new file mode 100644 index 000000000..186127b7c --- /dev/null +++ b/share/icons/xml-node-delete.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/xml-node-duplicate.svg b/share/icons/xml-node-duplicate.svg new file mode 100644 index 000000000..da1773265 --- /dev/null +++ b/share/icons/xml-node-duplicate.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/xml-text-new.svg b/share/icons/xml-text-new.svg new file mode 100644 index 000000000..e690f6c22 --- /dev/null +++ b/share/icons/xml-text-new.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/zoom-double-size.svg b/share/icons/zoom-double-size.svg new file mode 100644 index 000000000..4c9f422f9 --- /dev/null +++ b/share/icons/zoom-double-size.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/zoom-fit-drawing.svg b/share/icons/zoom-fit-drawing.svg new file mode 100644 index 000000000..6270f6585 --- /dev/null +++ b/share/icons/zoom-fit-drawing.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/zoom-fit-page.svg b/share/icons/zoom-fit-page.svg new file mode 100644 index 000000000..7a0db90f9 --- /dev/null +++ b/share/icons/zoom-fit-page.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/zoom-fit-selection.svg b/share/icons/zoom-fit-selection.svg new file mode 100644 index 000000000..248b9b3ec --- /dev/null +++ b/share/icons/zoom-fit-selection.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/zoom-fit-width.svg b/share/icons/zoom-fit-width.svg new file mode 100644 index 000000000..c12a54dc4 --- /dev/null +++ b/share/icons/zoom-fit-width.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/zoom-half-size.svg b/share/icons/zoom-half-size.svg new file mode 100644 index 000000000..b293b1f3f --- /dev/null +++ b/share/icons/zoom-half-size.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/zoom-in.svg b/share/icons/zoom-in.svg new file mode 100644 index 000000000..58379bd05 --- /dev/null +++ b/share/icons/zoom-in.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/zoom-next.svg b/share/icons/zoom-next.svg new file mode 100644 index 000000000..ab5e16abf --- /dev/null +++ b/share/icons/zoom-next.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/zoom-original.svg b/share/icons/zoom-original.svg new file mode 100644 index 000000000..553b01ea9 --- /dev/null +++ b/share/icons/zoom-original.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/zoom-out.svg b/share/icons/zoom-out.svg new file mode 100644 index 000000000..210053f4d --- /dev/null +++ b/share/icons/zoom-out.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/zoom-previous.svg b/share/icons/zoom-previous.svg new file mode 100644 index 000000000..69c83aa03 --- /dev/null +++ b/share/icons/zoom-previous.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/zoom.svg b/share/icons/zoom.svg new file mode 100644 index 000000000..4a9322568 --- /dev/null +++ b/share/icons/zoom.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/icon-size.h b/src/icon-size.h index d7a9c9b0b..8058e8da8 100644 --- a/src/icon-size.h +++ b/src/icon-size.h @@ -26,8 +26,6 @@ namespace Inkscape { ICON_SIZE_DIALOG = ::GTK_ICON_SIZE_DIALOG, ICON_SIZE_DECORATION }; - - GtkIconSize getRegisteredIconSize( IconSize size ); } // namespace Inkscape #endif // SEEN_ICON_SIZE_H diff --git a/src/live_effects/parameter/bool.cpp b/src/live_effects/parameter/bool.cpp index 954947cf4..f291a8104 100644 --- a/src/live_effects/parameter/bool.cpp +++ b/src/live_effects/parameter/bool.cpp @@ -9,7 +9,6 @@ #include "live_effects/effect.h" #include "svg/svg.h" #include "svg/stringstream.h" -#include "widgets/icon.h" #include "inkscape.h" #include "verbs.h" #include "helper-fns.h" diff --git a/src/live_effects/parameter/item.cpp b/src/live_effects/parameter/item.cpp index 7b40f4540..71134b118 100644 --- a/src/live_effects/parameter/item.cpp +++ b/src/live_effects/parameter/item.cpp @@ -18,7 +18,6 @@ #include "live_effects/effect.h" #include "svg/svg.h" -#include "widgets/icon.h" #include "selection-chemistry.h" #include "xml/repr.h" #include "desktop.h" @@ -109,7 +108,8 @@ Gtk::Widget * ItemParam::param_newWidget() { Gtk::HBox * _widget = Gtk::manage(new Gtk::HBox()); - Gtk::Widget* pIcon = Gtk::manage( sp_icon_get_icon( INKSCAPE_ICON("edit-clone"), Inkscape::ICON_SIZE_BUTTON) ); + Gtk::Image* pIcon = Gtk::manage(new Gtk::Image()); + pIcon->set_from_icon_name("edit-clone", Gtk::ICON_SIZE_BUTTON); Gtk::Button * pButton = Gtk::manage(new Gtk::Button()); Gtk::Label* pLabel = Gtk::manage(new Gtk::Label(param_label)); static_cast(_widget)->pack_start(*pLabel, true, true); diff --git a/src/live_effects/parameter/originalitem.cpp b/src/live_effects/parameter/originalitem.cpp index 053062128..81ab41c56 100644 --- a/src/live_effects/parameter/originalitem.cpp +++ b/src/live_effects/parameter/originalitem.cpp @@ -11,7 +11,6 @@ #include #include "live_effects/parameter/originalitem.h" -#include "widgets/icon.h" #include #include #include @@ -55,7 +54,8 @@ OriginalItemParam::param_newWidget() } { // Paste item to link button - Gtk::Widget *pIcon = Gtk::manage( sp_icon_get_icon( INKSCAPE_ICON("edit-paste"), Inkscape::ICON_SIZE_BUTTON) ); + Gtk::Image *pIcon = Gtk::manage(new Gtk::Image()); + pIcon->set_from_icon_name("edit-paste", Gtk::ICON_SIZE_BUTTON); Gtk::Button *pButton = Gtk::manage(new Gtk::Button()); pButton->set_relief(Gtk::RELIEF_NONE); pIcon->show(); @@ -67,7 +67,8 @@ OriginalItemParam::param_newWidget() } { // Select original button - Gtk::Widget *pIcon = Gtk::manage( sp_icon_get_icon("edit-select-original", Inkscape::ICON_SIZE_BUTTON) ); + Gtk::Image *pIcon = Gtk::manage(new Gtk::Image()); + pIcon->set_from_icon_name("edit-select-original", Gtk::ICON_SIZE_BUTTON); Gtk::Button *pButton = Gtk::manage(new Gtk::Button()); pButton->set_relief(Gtk::RELIEF_NONE); pIcon->show(); diff --git a/src/live_effects/parameter/originalpath.cpp b/src/live_effects/parameter/originalpath.cpp index 1e78f7fe1..62483d7fb 100644 --- a/src/live_effects/parameter/originalpath.cpp +++ b/src/live_effects/parameter/originalpath.cpp @@ -11,7 +11,6 @@ #include #include "live_effects/parameter/originalpath.h" -#include "widgets/icon.h" #include #include #include @@ -56,7 +55,8 @@ OriginalPathParam::param_newWidget() } { // Paste path to link button - Gtk::Widget *pIcon = Gtk::manage( sp_icon_get_icon( INKSCAPE_ICON("edit-clone"), Inkscape::ICON_SIZE_BUTTON) ); + Gtk::Image *pIcon = Gtk::manage(new Gtk::Image()); + pIcon->set_from_icon_name("edit-clone", Gtk::ICON_SIZE_BUTTON); Gtk::Button *pButton = Gtk::manage(new Gtk::Button()); pButton->set_relief(Gtk::RELIEF_NONE); pIcon->show(); @@ -68,7 +68,8 @@ OriginalPathParam::param_newWidget() } { // Select original button - Gtk::Widget *pIcon = Gtk::manage( sp_icon_get_icon("edit-select-original", Inkscape::ICON_SIZE_BUTTON) ); + Gtk::Image *pIcon = Gtk::manage(new Gtk::Image()); + pIcon->set_from_icon_name("edit-select-original", Gtk::ICON_SIZE_BUTTON); Gtk::Button *pButton = Gtk::manage(new Gtk::Button()); pButton->set_relief(Gtk::RELIEF_NONE); pIcon->show(); diff --git a/src/live_effects/parameter/originalpatharray.cpp b/src/live_effects/parameter/originalpatharray.cpp index 693821ed2..92859de05 100644 --- a/src/live_effects/parameter/originalpatharray.cpp +++ b/src/live_effects/parameter/originalpatharray.cpp @@ -20,7 +20,6 @@ #include "inkscape.h" #include "icon-size.h" -#include "widgets/icon.h" #include "ui/clipboard.h" #include "svg/svg.h" #include "svg/stringstream.h" @@ -144,7 +143,8 @@ Gtk::Widget* OriginalPathArrayParam::param_newWidget() { // Paste path to link button - Gtk::Widget *pIcon = Gtk::manage( sp_icon_get_icon("edit-clone", Inkscape::ICON_SIZE_BUTTON) ); + Gtk::Image *pIcon = Gtk::manage(new Gtk::Image()); + pIcon->set_from_icon_name("edit-clone", Gtk::ICON_SIZE_BUTTON); Gtk::Button *pButton = Gtk::manage(new Gtk::Button()); pButton->set_relief(Gtk::RELIEF_NONE); pIcon->show(); @@ -156,7 +156,8 @@ Gtk::Widget* OriginalPathArrayParam::param_newWidget() } { // Remove linked path - Gtk::Widget *pIcon = Gtk::manage( sp_icon_get_icon("gtk-remove", Inkscape::ICON_SIZE_BUTTON) ); + Gtk::Image *pIcon = Gtk::manage(new Gtk::Image()); + pIcon->set_from_icon_name("gtk-remove", Gtk::ICON_SIZE_BUTTON); Gtk::Button *pButton = Gtk::manage(new Gtk::Button()); pButton->set_relief(Gtk::RELIEF_NONE); pIcon->show(); @@ -168,7 +169,8 @@ Gtk::Widget* OriginalPathArrayParam::param_newWidget() } { // Move Down - Gtk::Widget *pIcon = Gtk::manage( sp_icon_get_icon( "gtk-go-down", Inkscape::ICON_SIZE_BUTTON) ); + Gtk::Image *pIcon = Gtk::manage(new Gtk::Image()); + pIcon->set_from_icon_name( "gtk-go-down", Gtk::ICON_SIZE_BUTTON); Gtk::Button *pButton = Gtk::manage(new Gtk::Button()); pButton->set_relief(Gtk::RELIEF_NONE); pIcon->show(); @@ -180,7 +182,8 @@ Gtk::Widget* OriginalPathArrayParam::param_newWidget() } { // Move Down - Gtk::Widget *pIcon = Gtk::manage( sp_icon_get_icon( "gtk-go-up", Inkscape::ICON_SIZE_BUTTON) ); + Gtk::Image *pIcon = Gtk::manage(new Gtk::Image()); + pIcon->set_from_icon_name( "gtk-go-up", Gtk::ICON_SIZE_BUTTON); Gtk::Button *pButton = Gtk::manage(new Gtk::Button()); pButton->set_relief(Gtk::RELIEF_NONE); pIcon->show(); diff --git a/src/live_effects/parameter/path.cpp b/src/live_effects/parameter/path.cpp index 54f5d93e8..ec011b855 100644 --- a/src/live_effects/parameter/path.cpp +++ b/src/live_effects/parameter/path.cpp @@ -22,7 +22,6 @@ #include <2geom/pathvector.h> #include <2geom/d2.h> -#include "widgets/icon.h" #include "selection-chemistry.h" #include "xml/repr.h" #include "desktop.h" @@ -187,10 +186,11 @@ PathParam::param_newWidget() Gtk::Label* pLabel = Gtk::manage(new Gtk::Label(param_label)); static_cast(_widget)->pack_start(*pLabel, true, true); pLabel->set_tooltip_text(param_tooltip); - Gtk::Widget * pIcon = NULL; + Gtk::Image * pIcon = NULL; Gtk::Button * pButton = NULL; if (_edit_button) { - pIcon = Gtk::manage( sp_icon_get_icon( INKSCAPE_ICON("tool-node-editor"), Inkscape::ICON_SIZE_BUTTON) ); + pIcon = Gtk::manage(new Gtk::Image()); + pIcon->set_from_icon_name( INKSCAPE_ICON("tool-node-editor"), Gtk::ICON_SIZE_BUTTON); pButton = Gtk::manage(new Gtk::Button()); pButton->set_relief(Gtk::RELIEF_NONE); pIcon->show(); @@ -202,7 +202,8 @@ PathParam::param_newWidget() } if (_copy_button) { - pIcon = Gtk::manage( sp_icon_get_icon( INKSCAPE_ICON("edit-copy"), Inkscape::ICON_SIZE_BUTTON) ); + pIcon = Gtk::manage(new Gtk::Image()); + pIcon->set_from_icon_name( INKSCAPE_ICON("edit-copy"), Gtk::ICON_SIZE_BUTTON); pButton = Gtk::manage(new Gtk::Button()); pButton->set_relief(Gtk::RELIEF_NONE); pIcon->show(); @@ -214,7 +215,8 @@ PathParam::param_newWidget() } if (_paste_button) { - pIcon = Gtk::manage( sp_icon_get_icon( INKSCAPE_ICON("edit-paste"), Inkscape::ICON_SIZE_BUTTON) ); + pIcon = Gtk::manage(new Gtk::Image()); + pIcon->set_from_icon_name( INKSCAPE_ICON("edit-paste"), Gtk::ICON_SIZE_BUTTON); pButton = Gtk::manage(new Gtk::Button()); pButton->set_relief(Gtk::RELIEF_NONE); pIcon->show(); @@ -225,7 +227,8 @@ PathParam::param_newWidget() pButton->set_tooltip_text(_("Paste path")); } if (_link_button) { - pIcon = Gtk::manage( sp_icon_get_icon( INKSCAPE_ICON("edit-clone"), Inkscape::ICON_SIZE_BUTTON) ); + pIcon = Gtk::manage(new Gtk::Image()); + pIcon->set_from_icon_name( INKSCAPE_ICON("edit-clone"), Gtk::ICON_SIZE_BUTTON); pButton = Gtk::manage(new Gtk::Button()); pButton->set_relief(Gtk::RELIEF_NONE); pIcon->show(); diff --git a/src/live_effects/parameter/point.cpp b/src/live_effects/parameter/point.cpp index 4ca88a6b8..331a86f81 100644 --- a/src/live_effects/parameter/point.cpp +++ b/src/live_effects/parameter/point.cpp @@ -9,7 +9,6 @@ #include "svg/svg.h" #include "svg/stringstream.h" #include "ui/widget/point.h" -#include "widgets/icon.h" #include "inkscape.h" #include "verbs.h" #include "knotholder.h" diff --git a/src/live_effects/parameter/text.cpp b/src/live_effects/parameter/text.cpp index d633666aa..f40708917 100644 --- a/src/live_effects/parameter/text.cpp +++ b/src/live_effects/parameter/text.cpp @@ -15,7 +15,6 @@ #include "live_effects/effect.h" #include "svg/svg.h" #include "svg/stringstream.h" -#include "widgets/icon.h" #include "inkscape.h" #include "verbs.h" #include "display/canvas-text.h" diff --git a/src/live_effects/parameter/togglebutton.cpp b/src/live_effects/parameter/togglebutton.cpp index eb40a7e41..6aad8b3a6 100644 --- a/src/live_effects/parameter/togglebutton.cpp +++ b/src/live_effects/parameter/togglebutton.cpp @@ -13,7 +13,6 @@ #include "svg/svg.h" #include "svg/stringstream.h" #include "selection.h" -#include "widgets/icon.h" #include "inkscape.h" #include "verbs.h" #include "helper-fns.h" @@ -26,7 +25,7 @@ ToggleButtonParam::ToggleButtonParam( const Glib::ustring& label, const Glib::us const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr, Effect* effect, bool default_value, const Glib::ustring& inactive_label, char const * _icon_active, char const * _icon_inactive, - Inkscape::IconSize _icon_size) + GtkIconSize _icon_size) : Parameter(label, tip, key, wr, effect), value(default_value), defvalue(default_value), inactive_label(inactive_label), _icon_active(_icon_active), _icon_inactive(_icon_inactive), _icon_size(_icon_size) { @@ -105,9 +104,9 @@ ToggleButtonParam::param_newWidget() gtk_widget_show(box_button); GtkWidget *icon_button = NULL; if(!value){ - icon_button = sp_icon_new(_icon_size, _icon_inactive); + icon_button = gtk_image_new_from_icon_name(_icon_inactive, _icon_size); } else { - icon_button = sp_icon_new(_icon_size, _icon_active); + icon_button = gtk_image_new_from_icon_name(_icon_active, _icon_size); } gtk_widget_show(icon_button); gtk_box_pack_start (GTK_BOX(box_button), icon_button, false, false, 1); @@ -153,11 +152,10 @@ ToggleButtonParam::refresh_button() if ( _icon_active ) { GdkPixbuf * icon_pixbuf = NULL; if(!value){ - icon_pixbuf = sp_pixbuf_new( _icon_size, _icon_inactive ); + gtk_image_set_from_icon_name (GTK_IMAGE(g_list_nth_data(childs, 0)), _icon_inactive, _icon_size); } else { - icon_pixbuf = sp_pixbuf_new( _icon_size, _icon_active ); + gtk_image_set_from_icon_name (GTK_IMAGE(g_list_nth_data(childs, 0)), _icon_active, _icon_size); } - gtk_image_set_from_pixbuf (GTK_IMAGE(g_list_nth_data(childs, 0)), icon_pixbuf); } } diff --git a/src/live_effects/parameter/togglebutton.h b/src/live_effects/parameter/togglebutton.h index d6ca15e75..02b9d5127 100644 --- a/src/live_effects/parameter/togglebutton.h +++ b/src/live_effects/parameter/togglebutton.h @@ -34,7 +34,7 @@ public: const Glib::ustring& inactive_label = "", char const * icon_active = NULL, char const * icon_inactive = NULL, - Inkscape::IconSize icon_size = Inkscape::ICON_SIZE_SMALL_TOOLBAR); + GtkIconSize icon_size = GTK_ICON_SIZE_SMALL_TOOLBAR); virtual ~ToggleButtonParam(); virtual Gtk::Widget * param_newWidget(); @@ -64,7 +64,7 @@ private: const Glib::ustring inactive_label; const char * _icon_active; const char * _icon_inactive; - Inkscape::IconSize _icon_size; + GtkIconSize _icon_size; Inkscape::UI::Widget::RegisteredToggleButton * checkwdg; sigc::signal _signal_toggled; diff --git a/src/main.cpp b/src/main.cpp index 7a786234e..6f7624cf7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -113,7 +113,6 @@ #include "main-cmdlineact.h" #include "main-cmdlinexact.h" -#include "widgets/icon.h" #include #include "verbs.h" @@ -1030,8 +1029,6 @@ sp_main_gui(int argc, char const **argv) // Set default window icon. Obeys the theme. Gtk::Window::set_default_icon_name("inkscape"); - // Do things that were previously in inkscape_gtk_stock_init(). - sp_icon_get_phys_size(GTK_ICON_SIZE_MENU); Inkscape::UI::Widget::Panel::prep(); bool create_new = true; diff --git a/src/ui/dialog/align-and-distribute.cpp b/src/ui/dialog/align-and-distribute.cpp index 1c88fc849..27bfa681f 100644 --- a/src/ui/dialog/align-and-distribute.cpp +++ b/src/ui/dialog/align-and-distribute.cpp @@ -41,7 +41,6 @@ #include "ui/tool/multi-path-manipulator.h" #include "ui/tool/control-point-selection.h" #include "verbs.h" -#include "widgets/icon.h" #include "sp-root.h" #include "document-undo.h" #include "desktop.h" @@ -64,7 +63,8 @@ Action::Action(const Glib::ustring &id, _id(id), _parent(parent) { - Gtk::Widget* pIcon = Gtk::manage( sp_icon_get_icon( _id, Inkscape::ICON_SIZE_LARGE_TOOLBAR) ); + Gtk::Image* pIcon = Gtk::manage(new Gtk::Image()); + pIcon->set_from_icon_name( _id, Gtk::ICON_SIZE_LARGE_TOOLBAR); Gtk::Button * pButton = Gtk::manage(new Gtk::Button()); pButton->set_relief(Gtk::RELIEF_NONE); pIcon->show(); diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp index 3cdcf594a..cef3c0c71 100644 --- a/src/ui/dialog/clonetiler.cpp +++ b/src/ui/dialog/clonetiler.cpp @@ -49,7 +49,6 @@ #include "ui/widget/spinbutton.h" #include "unclump.h" #include "verbs.h" -#include "widgets/icon.h" using Inkscape::DocumentUndo; using Inkscape::Util::unit_table; @@ -2678,7 +2677,7 @@ GtkWidget * CloneTiler::table_x_y_rand(int values) auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); - GtkWidget *i = sp_icon_new (Inkscape::ICON_SIZE_DECORATION, INKSCAPE_ICON("object-rows")); + GtkWidget *i = gtk_image_new_from_icon_name (INKSCAPE_ICON("object-rows"), GTK_ICON_SIZE_MENU); gtk_box_pack_start (GTK_BOX (hb), i, FALSE, FALSE, 2); GtkWidget *l = gtk_label_new (""); @@ -2692,7 +2691,7 @@ GtkWidget * CloneTiler::table_x_y_rand(int values) auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); - GtkWidget *i = sp_icon_new (Inkscape::ICON_SIZE_DECORATION, INKSCAPE_ICON("object-columns")); + GtkWidget *i = gtk_image_new_from_icon_name (INKSCAPE_ICON("object-columns"), GTK_ICON_SIZE_MENU); gtk_box_pack_start (GTK_BOX (hb), i, FALSE, FALSE, 2); GtkWidget *l = gtk_label_new (""); diff --git a/src/ui/dialog/cssdialog.cpp b/src/ui/dialog/cssdialog.cpp index 85c804b75..0443d7c44 100644 --- a/src/ui/dialog/cssdialog.cpp +++ b/src/ui/dialog/cssdialog.cpp @@ -13,7 +13,6 @@ #include "cssdialog.h" #include "ui/widget/addtoicon.h" -#include "widgets/icon.h" #include "verbs.h" #include "sp-object.h" #include "selection.h" @@ -122,7 +121,7 @@ void CssDialog::setDesktop(SPDesktop* desktop) void CssDialog::_styleButton(Gtk::Button& btn, char const* iconName, char const* tooltip) { - GtkWidget *child = sp_icon_new(Inkscape::ICON_SIZE_SMALL_TOOLBAR, iconName); + GtkWidget *child = gtk_image_new_from_icon_name(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_show(child); btn.add(*manage(Glib::wrap(child))); btn.set_relief(Gtk::RELIEF_NONE); diff --git a/src/ui/dialog/dock-behavior.cpp b/src/ui/dialog/dock-behavior.cpp index 02955b9a8..299584a31 100644 --- a/src/ui/dialog/dock-behavior.cpp +++ b/src/ui/dialog/dock-behavior.cpp @@ -19,7 +19,6 @@ #include "inkscape.h" #include "desktop.h" #include "ui/interface.h" -#include "widgets/icon.h" #include "ui/widget/dock.h" #include "verbs.h" #include "dialog.h" diff --git a/src/ui/dialog/document-properties.cpp b/src/ui/dialog/document-properties.cpp index 8593223c1..1b074bb0c 100644 --- a/src/ui/dialog/document-properties.cpp +++ b/src/ui/dialog/document-properties.cpp @@ -34,7 +34,6 @@ #include "ui/tools-switch.h" #include "ui/dialog/filedialog.h" #include "verbs.h" -#include "widgets/icon.h" #include "xml/node-event-vector.h" #include "rdf.h" @@ -74,7 +73,7 @@ static Inkscape::XML::NodeEventVector const _repr_events = { static void docprops_style_button(Gtk::Button& btn, char const* iconName) { - GtkWidget *child = sp_icon_new(Inkscape::ICON_SIZE_SMALL_TOOLBAR, iconName); + GtkWidget *child = gtk_image_new_from_icon_name(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_show( child ); btn.add(*Gtk::manage(Glib::wrap(child))); btn.set_relief(Gtk::RELIEF_NONE); @@ -1429,8 +1428,10 @@ DocumentProperties::_createPageTabLabel(const Glib::ustring& label, const char * { Gtk::HBox *_tab_label_box = Gtk::manage(new Gtk::HBox(false, 0)); _tab_label_box->set_spacing(4); - _tab_label_box->pack_start(*Glib::wrap(sp_icon_new(Inkscape::ICON_SIZE_DECORATION, - label_image))); + + auto img = Gtk::manage(new Gtk::Image()); + img->set_from_icon_name(label_image, Gtk::ICON_SIZE_MENU); + _tab_label_box->pack_start(*img); Gtk::Label *_tab_label = Gtk::manage(new Gtk::Label(label, true)); _tab_label_box->pack_start(*_tab_label); diff --git a/src/ui/dialog/fill-and-stroke.cpp b/src/ui/dialog/fill-and-stroke.cpp index 0b3b468e9..b271c951b 100644 --- a/src/ui/dialog/fill-and-stroke.cpp +++ b/src/ui/dialog/fill-and-stroke.cpp @@ -28,7 +28,6 @@ #include "ui/icon-names.h" #include "verbs.h" #include "widgets/fill-style.h" -#include "widgets/icon.h" #include "widgets/paint-selector.h" #include "widgets/stroke-style.h" @@ -173,8 +172,10 @@ Gtk::HBox& FillAndStroke::_createPageTabLabel(const Glib::ustring& label, const char *label_image) { Gtk::HBox *_tab_label_box = Gtk::manage(new Gtk::HBox(false, 4)); - _tab_label_box->pack_start(*Glib::wrap(sp_icon_new(Inkscape::ICON_SIZE_DECORATION, - label_image))); + + auto img = Gtk::manage(new Gtk::Image()); + img->set_from_icon_name(label_image, Gtk::ICON_SIZE_MENU); + _tab_label_box->pack_start(*img); Gtk::Label *_tab_label = Gtk::manage(new Gtk::Label(label, true)); _tab_label_box->pack_start(*_tab_label); diff --git a/src/ui/dialog/grid-arrange-tab.cpp b/src/ui/dialog/grid-arrange-tab.cpp index 9ec8d3148..5d7422279 100644 --- a/src/ui/dialog/grid-arrange-tab.cpp +++ b/src/ui/dialog/grid-arrange-tab.cpp @@ -28,7 +28,6 @@ #include "document.h" #include "document-undo.h" -#include "widgets/icon.h" #include "desktop.h" //#include "sp-item-transform.h" FIXME #include "ui/dialog/tile.h" // for Inkscape::UI::Dialog::ArrangeDialog diff --git a/src/ui/dialog/icon-preview.cpp b/src/ui/dialog/icon-preview.cpp index 19050fb1d..7b1e531b4 100644 --- a/src/ui/dialog/icon-preview.cpp +++ b/src/ui/dialog/icon-preview.cpp @@ -31,9 +31,12 @@ #include "desktop.h" +#include "display/cairo-utils.h" #include "display/drawing.h" +#include "display/drawing-context.h" #include "document.h" #include "inkscape.h" +#include "sp-namedview.h" #include "sp-root.h" #include "verbs.h" @@ -41,7 +44,6 @@ extern "C" { // takes doc, drawing, icon, and icon name to produce pixels -// this is defined in widgets/icon.cpp guchar * sp_icon_doc_icon( SPDocument *doc, Inkscape::Drawing &drawing, const gchar *name, unsigned int psize, unsigned &stride); @@ -428,6 +430,190 @@ void IconPreviewPanel::modeToggled() refreshPreview(); } +void overlayPixels(guchar *px, int width, int height, int stride, + unsigned r, unsigned g, unsigned b) +{ + int bytesPerPixel = 4; + int spacing = 4; + for ( int y = 0; y < height; y += spacing ) { + guchar *ptr = px + y * stride; + for ( int x = 0; x < width; x += spacing ) { + *(ptr++) = r; + *(ptr++) = g; + *(ptr++) = b; + *(ptr++) = 0xff; + + ptr += bytesPerPixel * (spacing - 1); + } + } + + if ( width > 1 && height > 1 ) { + // point at the last pixel + guchar *ptr = px + ((height-1) * stride) + ((width - 1) * bytesPerPixel); + + if ( width > 2 ) { + px[4] = r; + px[5] = g; + px[6] = b; + px[7] = 0xff; + + ptr[-12] = r; + ptr[-11] = g; + ptr[-10] = b; + ptr[-9] = 0xff; + } + + ptr[-4] = r; + ptr[-3] = g; + ptr[-2] = b; + ptr[-1] = 0xff; + + px[0 + stride] = r; + px[1 + stride] = g; + px[2 + stride] = b; + px[3 + stride] = 0xff; + + ptr[0 - stride] = r; + ptr[1 - stride] = g; + ptr[2 - stride] = b; + ptr[3 - stride] = 0xff; + + if ( height > 2 ) { + ptr[0 - stride * 3] = r; + ptr[1 - stride * 3] = g; + ptr[2 - stride * 3] = b; + ptr[3 - stride * 3] = 0xff; + } + } +} + +// takes doc, drawing, icon, and icon name to produce pixels +extern "C" guchar * +sp_icon_doc_icon( SPDocument *doc, Inkscape::Drawing &drawing, + gchar const *name, unsigned psize, + unsigned &stride) +{ + bool const dump = Inkscape::Preferences::get()->getBool("/debug/icons/dumpSvg"); + guchar *px = NULL; + + if (doc) { + SPObject *object = doc->getObjectById(name); + if (object && SP_IS_ITEM(object)) { + SPItem *item = SP_ITEM(object); + // Find bbox in document + Geom::OptRect dbox = item->documentVisualBounds(); + + if ( object->parent == NULL ) + { + dbox = Geom::Rect(Geom::Point(0, 0), + Geom::Point(doc->getWidth().value("px"), doc->getHeight().value("px"))); + } + + /* This is in document coordinates, i.e. pixels */ + if ( dbox ) { + /* Update to renderable state */ + double sf = 1.0; + drawing.root()->setTransform(Geom::Scale(sf)); + drawing.update(); + /* Item integer bbox in points */ + // NOTE: previously, each rect coordinate was rounded using floor(c + 0.5) + Geom::IntRect ibox = dbox->roundOutwards(); + + if ( dump ) { + g_message( " box --'%s' (%f,%f)-(%f,%f)", name, (double)ibox.left(), (double)ibox.top(), (double)ibox.right(), (double)ibox.bottom() ); + } + + /* Find button visible area */ + int width = ibox.width(); + int height = ibox.height(); + + if ( dump ) { + g_message( " vis --'%s' (%d,%d)", name, width, height ); + } + + { + int block = std::max(width, height); + if (block != static_cast(psize) ) { + if ( dump ) { + g_message(" resizing" ); + } + sf = (double)psize / (double)block; + + drawing.root()->setTransform(Geom::Scale(sf)); + drawing.update(); + + auto scaled_box = *dbox * Geom::Scale(sf); + ibox = scaled_box.roundOutwards(); + if ( dump ) { + g_message( " box2 --'%s' (%f,%f)-(%f,%f)", name, (double)ibox.left(), (double)ibox.top(), (double)ibox.right(), (double)ibox.bottom() ); + } + + /* Find button visible area */ + width = ibox.width(); + height = ibox.height(); + if ( dump ) { + g_message( " vis2 --'%s' (%d,%d)", name, width, height ); + } + } + } + + Geom::IntPoint pdim(psize, psize); + int dx, dy; + //dx = (psize - width) / 2; + //dy = (psize - height) / 2; + dx=dy=psize; + dx=(dx-width)/2; // watch out for psize, since 'unsigned'-'signed' can cause problems if the result is negative + dy=(dy-height)/2; + Geom::IntRect area = Geom::IntRect::from_xywh(ibox.min() - Geom::IntPoint(dx,dy), pdim); + /* Actual renderable area */ + Geom::IntRect ua = *Geom::intersect(ibox, area); + + if ( dump ) { + g_message( " area --'%s' (%f,%f)-(%f,%f)", name, (double)area.left(), (double)area.top(), (double)area.right(), (double)area.bottom() ); + g_message( " ua --'%s' (%f,%f)-(%f,%f)", name, (double)ua.left(), (double)ua.top(), (double)ua.right(), (double)ua.bottom() ); + } + + stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, psize); + + /* Set up pixblock */ + px = g_new(guchar, stride * psize); + memset(px, 0x00, stride * psize); + + /* Render */ + cairo_surface_t *s = cairo_image_surface_create_for_data(px, + CAIRO_FORMAT_ARGB32, psize, psize, stride); + Inkscape::DrawingContext dc(s, ua.min()); + + SPNamedView *nv = sp_document_namedview(doc, NULL); + float bg_r = SP_RGBA32_R_F(nv->pagecolor); + float bg_g = SP_RGBA32_G_F(nv->pagecolor); + float bg_b = SP_RGBA32_B_F(nv->pagecolor); + float bg_a = SP_RGBA32_A_F(nv->pagecolor); + + cairo_t *cr = cairo_create(s); + cairo_set_source_rgba(cr, bg_r, bg_g, bg_b, bg_a); + cairo_rectangle(cr, 0, 0, psize, psize); + cairo_fill(cr); + cairo_save(cr); + cairo_destroy(cr); + + drawing.render(dc, ua); + cairo_surface_destroy(s); + + // convert to GdkPixbuf format + convert_pixels_argb32_to_pixbuf(px, psize, psize, stride); + + if ( Inkscape::Preferences::get()->getBool("/debug/icons/overlaySvg") ) { + overlayPixels( px, psize, psize, stride, 0x00, 0x00, 0xff ); + } + } + } + } + + return px; +} // end of sp_icon_doc_icon() + + void IconPreviewPanel::renderPreview( SPObject* obj ) { SPDocument * doc = obj->document; diff --git a/src/ui/dialog/layers.cpp b/src/ui/dialog/layers.cpp index dd9d7ec25..be3b4af06 100644 --- a/src/ui/dialog/layers.cpp +++ b/src/ui/dialog/layers.cpp @@ -31,7 +31,6 @@ #include "ui/icon-names.h" #include "ui/widget/imagetoggler.h" #include "verbs.h" -#include "widgets/icon.h" #include "sp-root.h" #include "ui/tools/tool-base.h" #include "selection-chemistry.h" @@ -82,7 +81,7 @@ void LayersPanel::_styleButton( Gtk::Button& btn, SPDesktop *desktop, unsigned i bool set = false; if ( iconName ) { - GtkWidget *child = sp_icon_new( Inkscape::ICON_SIZE_SMALL_TOOLBAR, iconName ); + GtkWidget *child = gtk_image_new_from_icon_name( iconName, GTK_ICON_SIZE_SMALL_TOOLBAR ); gtk_widget_show( child ); btn.add( *Gtk::manage(Glib::wrap(child)) ); btn.set_relief(Gtk::RELIEF_NONE); @@ -94,7 +93,7 @@ void LayersPanel::_styleButton( Gtk::Button& btn, SPDesktop *desktop, unsigned i if ( verb ) { SPAction *action = verb->get_action(Inkscape::ActionContext(desktop)); if ( !set && action && action->image ) { - GtkWidget *child = sp_icon_new( Inkscape::ICON_SIZE_SMALL_TOOLBAR, action->image ); + GtkWidget *child = gtk_image_new_from_icon_name( action->image, GTK_ICON_SIZE_SMALL_TOOLBAR ); gtk_widget_show( child ); btn.add( *Gtk::manage(Glib::wrap(child)) ); set = true; @@ -118,7 +117,7 @@ Gtk::MenuItem& LayersPanel::_addPopupItem( SPDesktop *desktop, unsigned int code const char* label = 0; if ( iconName ) { - iconWidget = sp_icon_new( Inkscape::ICON_SIZE_MENU, iconName ); + iconWidget = gtk_image_new_from_icon_name( iconName, GTK_ICON_SIZE_MENU ); } if ( desktop ) { @@ -126,7 +125,7 @@ Gtk::MenuItem& LayersPanel::_addPopupItem( SPDesktop *desktop, unsigned int code if ( verb ) { SPAction *action = verb->get_action(Inkscape::ActionContext(desktop)); if ( !iconWidget && action && action->image ) { - iconWidget = sp_icon_new( Inkscape::ICON_SIZE_MENU, action->image ); + iconWidget = gtk_image_new_from_icon_name( action->image, GTK_ICON_SIZE_MENU ); } if ( action ) { diff --git a/src/ui/dialog/livepatheffect-editor.cpp b/src/ui/dialog/livepatheffect-editor.cpp index bb9b61504..98789f7b2 100644 --- a/src/ui/dialog/livepatheffect-editor.cpp +++ b/src/ui/dialog/livepatheffect-editor.cpp @@ -36,7 +36,6 @@ #include "ui/icon-names.h" #include "ui/widget/imagetoggler.h" #include "verbs.h" -#include "widgets/icon.h" #include "livepatheffect-add.h" namespace Inkscape { @@ -67,7 +66,7 @@ void lpeeditor_selection_modified (Inkscape::Selection * selection, guint /*flag static void lpe_style_button(Gtk::Button& btn, char const* iconName) { - GtkWidget *child = sp_icon_new(Inkscape::ICON_SIZE_SMALL_TOOLBAR, iconName); + GtkWidget *child = gtk_image_new_from_icon_name(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_show( child ); btn.add(*Gtk::manage(Glib::wrap(child))); btn.set_relief(Gtk::RELIEF_NONE); diff --git a/src/ui/dialog/objects.cpp b/src/ui/dialog/objects.cpp index fd78fec90..e76da241a 100644 --- a/src/ui/dialog/objects.cpp +++ b/src/ui/dialog/objects.cpp @@ -47,7 +47,6 @@ #include "ui/tools/node-tool.h" #include "verbs.h" #include "ui/widget/color-notebook.h" -#include "widgets/icon.h" #include "xml/node-observer.h" //#define DUMP_LAYERS 1 @@ -224,7 +223,7 @@ public: */ void ObjectsPanel::_styleButton(Gtk::Button& btn, char const* iconName, char const* tooltip) { - GtkWidget *child = sp_icon_new( Inkscape::ICON_SIZE_SMALL_TOOLBAR, iconName ); + GtkWidget *child = gtk_image_new_from_icon_name( iconName, GTK_ICON_SIZE_SMALL_TOOLBAR ); gtk_widget_show( child ); btn.add( *Gtk::manage(Glib::wrap(child)) ); btn.set_relief(Gtk::RELIEF_NONE); @@ -246,7 +245,7 @@ Gtk::MenuItem& ObjectsPanel::_addPopupItem( SPDesktop *desktop, unsigned int cod const char* label = 0; if ( iconName ) { - iconWidget = sp_icon_new( Inkscape::ICON_SIZE_MENU, iconName ); + iconWidget = gtk_image_new_from_icon_name( iconName, GTK_ICON_SIZE_MENU ); } if ( desktop ) { @@ -254,7 +253,7 @@ Gtk::MenuItem& ObjectsPanel::_addPopupItem( SPDesktop *desktop, unsigned int cod if ( verb ) { SPAction *action = verb->get_action(desktop); if ( !iconWidget && action && action->image ) { - iconWidget = sp_icon_new( Inkscape::ICON_SIZE_MENU, action->image ); + iconWidget = gtk_image_new_from_icon_name( action->image, GTK_ICON_SIZE_MENU ); } if ( action ) { diff --git a/src/ui/dialog/polar-arrange-tab.cpp b/src/ui/dialog/polar-arrange-tab.cpp index 9485b6ba3..b65a67e06 100644 --- a/src/ui/dialog/polar-arrange-tab.cpp +++ b/src/ui/dialog/polar-arrange-tab.cpp @@ -19,7 +19,6 @@ #include "document.h" #include "document-undo.h" -#include "widgets/icon.h" #include "desktop.h" #include "sp-ellipse.h" #include "sp-item-transform.h" diff --git a/src/ui/dialog/spellcheck.cpp b/src/ui/dialog/spellcheck.cpp index 045ce3459..4f7657f4f 100644 --- a/src/ui/dialog/spellcheck.cpp +++ b/src/ui/dialog/spellcheck.cpp @@ -13,7 +13,6 @@ */ #include "spellcheck.h" -#include "widgets/icon.h" #include "message-stack.h" #include "helper/window.h" diff --git a/src/ui/dialog/styledialog.cpp b/src/ui/dialog/styledialog.cpp index 8679659ce..73dd6937a 100644 --- a/src/ui/dialog/styledialog.cpp +++ b/src/ui/dialog/styledialog.cpp @@ -13,7 +13,6 @@ #include "styledialog.h" #include "ui/widget/addtoicon.h" -#include "widgets/icon.h" #include "verbs.h" #include "sp-object.h" #include "selection.h" @@ -1515,7 +1514,7 @@ bool StyleDialog::_delProperty(GdkEventButton *event) void StyleDialog::_styleButton(Gtk::Button& btn, char const* iconName, char const* tooltip) { - GtkWidget *child = sp_icon_new(Inkscape::ICON_SIZE_SMALL_TOOLBAR, iconName); + GtkWidget *child = gtk_image_new_from_icon_name(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_show(child); btn.add(*manage(Glib::wrap(child))); btn.set_relief(Gtk::RELIEF_NONE); diff --git a/src/ui/dialog/symbols.cpp b/src/ui/dialog/symbols.cpp index e9a13620b..16e0ca965 100644 --- a/src/ui/dialog/symbols.cpp +++ b/src/ui/dialog/symbols.cpp @@ -47,7 +47,6 @@ #include "sp-use.h" #include "sp-defs.h" #include "sp-symbol.h" -#include "widgets/icon.h" #ifdef WITH_LIBVISIO #include @@ -174,18 +173,22 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : scroller->set_hexpand(); table->attach(*Gtk::manage(tools),0,row,2,1); + auto addSymbolImage = Gtk::manage(new Gtk::Image()); + addSymbolImage->set_from_icon_name("symbol-add", Gtk::ICON_SIZE_SMALL_TOOLBAR); + addSymbol = Gtk::manage(new Gtk::Button()); - addSymbol->add(*Gtk::manage(Glib::wrap( - sp_icon_new (Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_ICON("symbol-add")))) ); + addSymbol->add(*addSymbolImage); addSymbol->set_tooltip_text(_("Add Symbol from the current document.")); addSymbol->set_relief( Gtk::RELIEF_NONE ); addSymbol->set_focus_on_click( false ); addSymbol->signal_clicked().connect(sigc::mem_fun(*this, &SymbolsDialog::insertSymbol)); tools->pack_start(* addSymbol, Gtk::PACK_SHRINK); + auto removeSymbolImage = Gtk::manage(new Gtk::Image()); + removeSymbolImage->set_from_icon_name("symbol-remove", Gtk::ICON_SIZE_SMALL_TOOLBAR); + removeSymbol = Gtk::manage(new Gtk::Button()); - removeSymbol->add(*Gtk::manage(Glib::wrap( - sp_icon_new (Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_ICON("symbol-remove")))) ); + removeSymbol->add(*removeSymbolImage); removeSymbol->set_tooltip_text(_("Remove Symbol from the current document.")); removeSymbol->set_relief( Gtk::RELIEF_NONE ); removeSymbol->set_focus_on_click( false ); @@ -197,18 +200,23 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : // Pack size (controls display area) pack_size = 2; // Default 32px + + auto packMoreImage = Gtk::manage(new Gtk::Image()); + packMoreImage->set_from_icon_name("pack-more", Gtk::ICON_SIZE_SMALL_TOOLBAR); + button = Gtk::manage(new Gtk::Button()); - button->add(*Gtk::manage(Glib::wrap( - sp_icon_new (Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_ICON("pack-more")))) ); + button->add(*packMoreImage); button->set_tooltip_text(_("Display more icons in row.")); button->set_relief( Gtk::RELIEF_NONE ); button->set_focus_on_click( false ); button->signal_clicked().connect(sigc::mem_fun(*this, &SymbolsDialog::packmore)); tools->pack_start(* button, Gtk::PACK_SHRINK); + auto packLessImage = Gtk::manage(new Gtk::Image()); + packLessImage->set_from_icon_name("pack-less", Gtk::ICON_SIZE_SMALL_TOOLBAR); + button = Gtk::manage(new Gtk::Button()); - button->add(*Gtk::manage(Glib::wrap( - sp_icon_new (Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_ICON("pack-less")))) ); + button->add(*packLessImage); button->set_tooltip_text(_("Display fewer icons in row.")); button->set_relief( Gtk::RELIEF_NONE ); button->set_focus_on_click( false ); @@ -216,9 +224,11 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : tools->pack_start(* button, Gtk::PACK_SHRINK); // Toggle scale to fit on/off + auto fitSymbolImage = Gtk::manage(new Gtk::Image()); + fitSymbolImage->set_from_icon_name("symbol-fit", Gtk::ICON_SIZE_SMALL_TOOLBAR); + fitSymbol = Gtk::manage(new Gtk::ToggleButton()); - fitSymbol->add(*Gtk::manage(Glib::wrap( - sp_icon_new (Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_ICON("symbol-fit")))) ); + fitSymbol->add(*fitSymbolImage); fitSymbol->set_tooltip_text(_("Toggle 'fit' symbols in icon space.")); fitSymbol->set_relief( Gtk::RELIEF_NONE ); fitSymbol->set_focus_on_click( false ); @@ -228,9 +238,11 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : // Render size (scales symbols within display area) scale_factor = 0; // Default 1:1 * pack_size/pack_size default + auto zoomOutImage = Gtk::manage(new Gtk::Image()); + zoomOutImage->set_from_icon_name("symbol-smaller", Gtk::ICON_SIZE_SMALL_TOOLBAR); + zoomOut = Gtk::manage(new Gtk::Button()); - zoomOut->add(*Gtk::manage(Glib::wrap( - sp_icon_new (Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_ICON("symbol-smaller")))) ); + zoomOut->add(*zoomOutImage); zoomOut->set_tooltip_text(_("Make symbols smaller by zooming out.")); zoomOut->set_relief( Gtk::RELIEF_NONE ); zoomOut->set_focus_on_click( false ); @@ -238,9 +250,11 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : zoomOut->signal_clicked().connect(sigc::mem_fun(*this, &SymbolsDialog::zoomout)); tools->pack_start(* zoomOut, Gtk::PACK_SHRINK); + auto zoomInImage = Gtk::manage(new Gtk::Image()); + zoomInImage->set_from_icon_name("symbol-bigger", Gtk::ICON_SIZE_SMALL_TOOLBAR); + zoomIn = Gtk::manage(new Gtk::Button()); - zoomIn->add(*Gtk::manage(Glib::wrap( - sp_icon_new (Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_ICON("symbol-bigger")))) ); + zoomIn->add(*zoomInImage); zoomIn->set_tooltip_text(_("Make symbols bigger by zooming in.")); zoomIn->set_relief( Gtk::RELIEF_NONE ); zoomIn->set_focus_on_click( false ); diff --git a/src/ui/dialog/tags.cpp b/src/ui/dialog/tags.cpp index dfe71bddb..b990ccfef 100644 --- a/src/ui/dialog/tags.cpp +++ b/src/ui/dialog/tags.cpp @@ -31,7 +31,6 @@ #include "ui/widget/layertypeicon.h" #include "ui/widget/addtoicon.h" #include "verbs.h" -#include "widgets/icon.h" #include "xml/node-observer.h" #include "sp-root.h" #include "ui/tools/tool-base.h" //"event-context.h" @@ -130,7 +129,7 @@ public: void TagsPanel::_styleButton(Gtk::Button& btn, char const* iconName, char const* tooltip) { - GtkWidget *child = sp_icon_new(Inkscape::ICON_SIZE_SMALL_TOOLBAR, iconName); + GtkWidget *child = gtk_image_new_from_icon_name(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_show(child); btn.add(*manage(Glib::wrap(child))); btn.set_relief(Gtk::RELIEF_NONE); @@ -144,7 +143,7 @@ Gtk::MenuItem& TagsPanel::_addPopupItem( SPDesktop *desktop, unsigned int code, const char* label = 0; if ( iconName ) { - iconWidget = sp_icon_new( Inkscape::ICON_SIZE_MENU, iconName ); + iconWidget = gtk_image_new_from_icon_name( iconName, GTK_ICON_SIZE_MENU ); } if ( desktop ) { @@ -152,7 +151,7 @@ Gtk::MenuItem& TagsPanel::_addPopupItem( SPDesktop *desktop, unsigned int code, if ( verb ) { SPAction *action = verb->get_action(desktop); if ( !iconWidget && action && action->image ) { - iconWidget = sp_icon_new( Inkscape::ICON_SIZE_MENU, action->image ); + iconWidget = gtk_image_new_from_icon_name( action->image, GTK_ICON_SIZE_MENU ); } if ( action ) { diff --git a/src/ui/dialog/text-edit.cpp b/src/ui/dialog/text-edit.cpp index 94f307828..c7d899f45 100644 --- a/src/ui/dialog/text-edit.cpp +++ b/src/ui/dialog/text-edit.cpp @@ -45,7 +45,6 @@ extern "C" { #include "verbs.h" #include "ui/interface.h" #include "svg/css-ostringstream.h" -#include "widgets/icon.h" #include "widgets/font-selector.h" #include #include @@ -103,26 +102,6 @@ TextEdit::TextEdit() layout_hbox.pack_start(text_sep, false, false, 10); - /* Line Spacing */ - /* Commented out as this does not handle non-percentage values - GtkWidget *px = sp_icon_new( Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_ICON("text_line_spacing") ); - layout_hbox.pack_start(*Gtk::manage(Glib::wrap(px)), false, false); - - spacing_combo = gtk_combo_box_text_new_with_entry (); - gtk_widget_set_size_request (spacing_combo, 90, -1); - - const gchar *spacings[] = {"50%", "80%", "90%", "100%", "110%", "120%", "130%", "140%", "150%", "200%", "300%", NULL}; - for (int i = 0; spacings[i]; i++) { - gtk_combo_box_text_append_text((GtkComboBoxText *) spacing_combo, spacings[i]); - } - - gtk_widget_set_tooltip_text (px, _("Spacing between baselines (percent of font size)")); - gtk_widget_set_tooltip_text (spacing_combo, _("Spacing between baselines (percent of font size)")); - layout_hbox.pack_start(*Gtk::manage(Glib::wrap(spacing_combo)), false, false); - layout_frame.set_padding(4,4,4,4); - layout_frame.add(layout_hbox); - */ - // Text start Offset { startOffset = gtk_combo_box_text_new_with_entry (); @@ -223,10 +202,7 @@ TextEdit::~TextEdit() void TextEdit::styleButton(Gtk::RadioButton *button, gchar const *tooltip, gchar const *icon_name, Gtk::RadioButton *group_button ) { - GtkWidget *icon = sp_icon_new( Inkscape::ICON_SIZE_SMALL_TOOLBAR, icon_name ); - if (!GTK_IS_IMAGE(icon)) { - icon = gtk_image_new_from_icon_name ( icon_name, GTK_ICON_SIZE_SMALL_TOOLBAR ); - } + GtkWidget *icon = gtk_image_new_from_icon_name( icon_name, GTK_ICON_SIZE_SMALL_TOOLBAR ); if (group_button) { Gtk::RadioButton::Group group = group_button->get_group(); diff --git a/src/ui/dialog/transformation.cpp b/src/ui/dialog/transformation.cpp index d209a450c..5ad1b9ec5 100644 --- a/src/ui/dialog/transformation.cpp +++ b/src/ui/dialog/transformation.cpp @@ -31,7 +31,6 @@ #include "sp-namedview.h" #include "sp-item-transform.h" #include "ui/icon-names.h" -#include "widgets/icon.h" namespace Inkscape { @@ -278,14 +277,18 @@ void Transformation::layoutPageRotate() _scalar_rotate.setDigits(3); _scalar_rotate.setIncrements(0.1, 1.0); - _counterclockwise_rotate.add(*manage( Glib::wrap( - sp_icon_new(Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_ICON("object-rotate-left"))))); + auto object_rotate_left_icon = Gtk::manage(new Gtk::Image()); + object_rotate_left_icon->set_from_icon_name("object-rotate-left", Gtk::ICON_SIZE_SMALL_TOOLBAR); + + _counterclockwise_rotate.add(*object_rotate_left_icon); _counterclockwise_rotate.set_mode(false); _counterclockwise_rotate.set_relief(Gtk::RELIEF_NONE); _counterclockwise_rotate.set_tooltip_text(_("Rotate in a counterclockwise direction")); - _clockwise_rotate.add(*manage( Glib::wrap( - sp_icon_new(Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_ICON("object-rotate-right"))))); + auto object_rotate_right_icon = Gtk::manage(new Gtk::Image()); + object_rotate_right_icon->set_from_icon_name("object-rotate-right", Gtk::ICON_SIZE_SMALL_TOOLBAR); + + _clockwise_rotate.add(*object_rotate_right_icon); _clockwise_rotate.set_mode(false); _clockwise_rotate.set_relief(Gtk::RELIEF_NONE); _clockwise_rotate.set_tooltip_text(_("Rotate in a clockwise direction")); diff --git a/src/ui/dialog/undo-history.cpp b/src/ui/dialog/undo-history.cpp index bf5bdc76d..3d6d71e9a 100644 --- a/src/ui/dialog/undo-history.cpp +++ b/src/ui/dialog/undo-history.cpp @@ -44,16 +44,13 @@ void CellRendererSPIcon::render_vfunc(const Cairo::RefPtr& cr, if ( !_icon_cache[_property_event_type] ) { Glib::ustring image_name = Inkscape::Verb::get(_property_event_type)->get_image(); - Gtk::Widget* icon = sp_icon_get_icon(image_name, Inkscape::ICON_SIZE_MENU); + Gtk::Image* icon = Gtk::manage(new Gtk::Image()); + icon->set_from_icon_name(image_name, Gtk::ICON_SIZE_MENU); if (icon) { // check icon type (inkscape, gtk, none) - if ( SP_IS_ICON(icon->gobj()) ) { - SPIcon* sp_icon = SP_ICON(icon->gobj()); - sp_icon_fetch_pixbuf(sp_icon); - _property_icon = Glib::wrap(sp_icon->pb, true); - } else if ( GTK_IS_IMAGE(icon->gobj()) ) { + if ( GTK_IS_IMAGE(icon->gobj()) ) { auto icon_theme = Gtk::IconTheme::get_default(); _property_icon = icon_theme->load_icon(image_name, 16); } else { diff --git a/src/ui/dialog/undo-history.h b/src/ui/dialog/undo-history.h index 48929a0d0..3efc25f15 100644 --- a/src/ui/dialog/undo-history.h +++ b/src/ui/dialog/undo-history.h @@ -24,7 +24,6 @@ #include "event-log.h" -#include "widgets/icon.h" #include "ui/dialog/desktop-tracker.h" class SPDesktop; diff --git a/src/ui/dialog/xml-tree.cpp b/src/ui/dialog/xml-tree.cpp index fa35b092a..d9ea73673 100644 --- a/src/ui/dialog/xml-tree.cpp +++ b/src/ui/dialog/xml-tree.cpp @@ -17,7 +17,6 @@ */ #include "xml-tree.h" -#include "widgets/icon.h" #include #include "desktop.h" @@ -109,57 +108,74 @@ XmlTree::XmlTree (void) : gtk_widget_set_tooltip_text( GTK_WIDGET(tree), _("Drag to reorder nodes") ); tree_toolbar.set_toolbar_style(Gtk::TOOLBAR_ICONS); - xml_element_new_button.set_icon_widget(*Gtk::manage(Glib::wrap( - sp_icon_new (Inkscape::ICON_SIZE_LARGE_TOOLBAR, INKSCAPE_ICON("xml-element-new")))) ); + + auto xml_element_new_icon = Gtk::manage(new Gtk::Image()); + xml_element_new_icon->set_from_icon_name("xml-element-new", Gtk::ICON_SIZE_LARGE_TOOLBAR); + + xml_element_new_button.set_icon_widget(*xml_element_new_icon); xml_element_new_button.set_tooltip_text(_("New element node")); xml_element_new_button.set_sensitive(false); tree_toolbar.add(xml_element_new_button); - xml_text_new_button.set_icon_widget(*Gtk::manage(Glib::wrap( - sp_icon_new (Inkscape::ICON_SIZE_LARGE_TOOLBAR, INKSCAPE_ICON("xml-text-new"))))); + auto xml_text_new_icon = Gtk::manage(new Gtk::Image()); + xml_text_new_icon->set_from_icon_name("xml-text-new", Gtk::ICON_SIZE_LARGE_TOOLBAR); + + xml_text_new_button.set_icon_widget(*xml_text_new_icon); xml_text_new_button.set_tooltip_text(_("New text node")); xml_text_new_button.set_sensitive(false); tree_toolbar.add(xml_text_new_button); - xml_node_duplicate_button.set_icon_widget(*Gtk::manage(Glib::wrap( - sp_icon_new (Inkscape::ICON_SIZE_LARGE_TOOLBAR, INKSCAPE_ICON("xml-node-duplicate"))))); + auto xml_node_duplicate_icon = Gtk::manage(new Gtk::Image()); + xml_node_duplicate_icon->set_from_icon_name("xml-node-duplicate", Gtk::ICON_SIZE_LARGE_TOOLBAR); + + xml_node_duplicate_button.set_icon_widget(*xml_node_duplicate_icon); xml_node_duplicate_button.set_tooltip_text(_("Duplicate node")); xml_node_duplicate_button.set_sensitive(false); tree_toolbar.add(xml_node_duplicate_button); tree_toolbar.add(separator); - xml_node_delete_button.set_icon_widget(*Gtk::manage(Glib::wrap( - sp_icon_new (Inkscape::ICON_SIZE_LARGE_TOOLBAR, INKSCAPE_ICON("xml-node-delete"))))); + auto xml_node_delete_icon = Gtk::manage(new Gtk::Image()); + xml_node_delete_icon->set_from_icon_name("xml-node-delete", Gtk::ICON_SIZE_LARGE_TOOLBAR); + + xml_node_delete_button.set_icon_widget(*xml_node_delete_icon); xml_node_delete_button.set_tooltip_text(Q_("nodeAsInXMLdialogTooltip|Delete node")); xml_node_delete_button.set_sensitive(false); tree_toolbar.add(xml_node_delete_button); tree_toolbar.add(separator2); - unindent_node_button.set_icon_widget(*Gtk::manage(Glib::wrap( - sp_icon_new (Inkscape::ICON_SIZE_LARGE_TOOLBAR, INKSCAPE_ICON("format-indent-less"))))); + auto format_indent_less_icon = Gtk::manage(new Gtk::Image()); + format_indent_less_icon->set_from_icon_name("format-indent-less", Gtk::ICON_SIZE_LARGE_TOOLBAR); + + unindent_node_button.set_icon_widget(*format_indent_less_icon); unindent_node_button.set_label(_("Unindent node")); unindent_node_button.set_tooltip_text(_("Unindent node")); unindent_node_button.set_sensitive(false); tree_toolbar.add(unindent_node_button); - indent_node_button.set_icon_widget(*Gtk::manage(Glib::wrap( - sp_icon_new (Inkscape::ICON_SIZE_LARGE_TOOLBAR, INKSCAPE_ICON("format-indent-more"))))); + auto format_indent_more_icon = Gtk::manage(new Gtk::Image()); + format_indent_more_icon->set_from_icon_name("format-indent-more", Gtk::ICON_SIZE_LARGE_TOOLBAR); + + indent_node_button.set_icon_widget(*format_indent_more_icon); indent_node_button.set_label(_("Indent node")); indent_node_button.set_tooltip_text(_("Indent node")); indent_node_button.set_sensitive(false); tree_toolbar.add(indent_node_button); - raise_node_button.set_icon_widget(*Gtk::manage(Glib::wrap( - sp_icon_new (Inkscape::ICON_SIZE_LARGE_TOOLBAR, INKSCAPE_ICON("go-up"))))); + auto go_up_icon = Gtk::manage(new Gtk::Image()); + go_up_icon->set_from_icon_name("go-up", Gtk::ICON_SIZE_LARGE_TOOLBAR); + + raise_node_button.set_icon_widget(*go_up_icon); raise_node_button.set_label(_("Raise node")); raise_node_button.set_tooltip_text(_("Raise node")); raise_node_button.set_sensitive(false); tree_toolbar.add(raise_node_button); - lower_node_button.set_icon_widget(*Gtk::manage(Glib::wrap( - sp_icon_new (Inkscape::ICON_SIZE_LARGE_TOOLBAR, INKSCAPE_ICON("go-down"))))); + auto go_down_icon = Gtk::manage(new Gtk::Image()); + go_down_icon->set_from_icon_name("go-down", Gtk::ICON_SIZE_LARGE_TOOLBAR); + + lower_node_button.set_icon_widget(*go_down_icon); lower_node_button.set_label(_("Lower node")); lower_node_button.set_tooltip_text(_("Lower node")); lower_node_button.set_sensitive(false); @@ -183,7 +199,10 @@ XmlTree::XmlTree (void) : attributes = SP_XMLVIEW_ATTR_LIST(sp_xmlview_attr_list_new(NULL)); attr_toolbar.set_toolbar_style(Gtk::TOOLBAR_ICONS); - xml_attribute_delete_button.set_icon_widget(*Gtk::manage(Glib::wrap(sp_icon_new (Inkscape::ICON_SIZE_LARGE_TOOLBAR, INKSCAPE_ICON("xml-attribute-delete"))))); + + auto xml_attribute_delete_icon = Gtk::manage(new Gtk::Image()); + xml_attribute_delete_icon->set_from_icon_name("xml-attribute-delete", Gtk::ICON_SIZE_LARGE_TOOLBAR); + xml_attribute_delete_button.set_icon_widget(*xml_attribute_delete_icon); xml_attribute_delete_button.set_tooltip_text(_("Delete attribute")); xml_attribute_delete_button.set_sensitive(false); attr_toolbar.add(xml_attribute_delete_button); diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index d1da47867..4246ae34e 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -36,7 +36,6 @@ #include "extension/db.h" #include "extension/effect.h" #include "extension/input.h" -#include "widgets/icon.h" #include "preferences.h" #include "shortcuts.h" #include "document.h" diff --git a/src/ui/widget/addtoicon.cpp b/src/ui/widget/addtoicon.cpp index 70516ed00..e5119fc60 100644 --- a/src/ui/widget/addtoicon.cpp +++ b/src/ui/widget/addtoicon.cpp @@ -16,7 +16,6 @@ #include -#include "widgets/icon.h" #include "widgets/toolbox.h" #include "ui/icon-names.h" #include "layertypeicon.h" @@ -33,7 +32,10 @@ AddToIcon::AddToIcon() : // _property_pixbuf_add(*this, "pixbuf_on", Glib::RefPtr(0)) { property_mode() = Gtk::CELL_RENDERER_MODE_ACTIVATABLE; - phys = sp_icon_get_phys_size((int)Inkscape::ICON_SIZE_BUTTON); + + gint width, height; + gtk_icon_size_lookup(GTK_ICON_SIZE_BUTTON, &width, &height); + phys = width; // Assumes that we have a square icon? // Glib::RefPtr icon_theme = Gtk::IconTheme::get_default(); // @@ -43,8 +45,6 @@ AddToIcon::AddToIcon() : // if (icon_theme->has_icon(_pixAddName)) { // _property_pixbuf_add = icon_theme->load_icon(_pixAddName, phys, (Gtk::IconLookupFlags)0); // } -// -// _property_pixbuf_add = Gtk::Widget:: set_pixbuf(); } @@ -104,8 +104,10 @@ void AddToIcon::set_pixbuf() { bool active = property_active().get_value(); - GdkPixbuf *pixbuf = sp_pixbuf_new(Inkscape::ICON_SIZE_BUTTON, active ? INKSCAPE_ICON("list-add") : INKSCAPE_ICON("edit-delete")); - property_pixbuf() = Glib::wrap(pixbuf); + auto icon_theme = Gtk::IconTheme::get_default(); + + property_pixbuf() = icon_theme->load_icon(active ? "list-add" : "edit-delete", + phys); } diff --git a/src/ui/widget/addtoicon.h b/src/ui/widget/addtoicon.h index 3b2228754..93d66c8d5 100644 --- a/src/ui/widget/addtoicon.h +++ b/src/ui/widget/addtoicon.h @@ -54,7 +54,7 @@ protected: private: - int phys; + int phys; ///< Physical size of the icon (px) // Glib::ustring _pixAddName; diff --git a/src/ui/widget/anchor-selector.cpp b/src/ui/widget/anchor-selector.cpp index 087e7375e..ddc25775d 100644 --- a/src/ui/widget/anchor-selector.cpp +++ b/src/ui/widget/anchor-selector.cpp @@ -8,15 +8,17 @@ */ #include "ui/widget/anchor-selector.h" -#include "widgets/icon.h" #include "ui/icon-names.h" +#include + namespace Inkscape { namespace UI { namespace Widget { void AnchorSelector::setupButton(const Glib::ustring& icon, Gtk::ToggleButton& button) { - Gtk::Widget* buttonIcon = Gtk::manage(sp_icon_get_icon(icon, Inkscape::ICON_SIZE_SMALL_TOOLBAR)); + Gtk::Image* buttonIcon = Gtk::manage(new Gtk::Image()); + buttonIcon->set_from_icon_name(icon, Gtk::ICON_SIZE_SMALL_TOOLBAR); buttonIcon->show(); button.set_relief(Gtk::RELIEF_NONE); diff --git a/src/ui/widget/clipmaskicon.cpp b/src/ui/widget/clipmaskicon.cpp index a1e3eaf82..c284c035c 100644 --- a/src/ui/widget/clipmaskicon.cpp +++ b/src/ui/widget/clipmaskicon.cpp @@ -15,7 +15,6 @@ #include -#include "widgets/icon.h" #include "widgets/toolbox.h" #include "ui/icon-names.h" #include "layertypeicon.h" @@ -37,18 +36,12 @@ ClipMaskIcon::ClipMaskIcon() : { property_mode() = Gtk::CELL_RENDERER_MODE_ACTIVATABLE; - phys = sp_icon_get_phys_size((int)Inkscape::ICON_SIZE_DECORATION); - Glib::RefPtr icon_theme = Gtk::IconTheme::get_default(); - if (!icon_theme->has_icon(_pixClipName)) { - Inkscape::queueIconPrerender( INKSCAPE_ICON(_pixClipName.data()), Inkscape::ICON_SIZE_DECORATION ); - } - if (!icon_theme->has_icon(_pixMaskName)) { - Inkscape::queueIconPrerender( INKSCAPE_ICON(_pixMaskName.data()), Inkscape::ICON_SIZE_DECORATION ); - } - if (!icon_theme->has_icon(_pixBothName)) { - Inkscape::queueIconPrerender( INKSCAPE_ICON(_pixBothName.data()), Inkscape::ICON_SIZE_DECORATION ); - } + gint width, height; + gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &width, &height); + phys = width; + + Glib::RefPtr icon_theme = Gtk::IconTheme::get_default(); if (icon_theme->has_icon(_pixClipName)) { _property_pixbuf_clip = icon_theme->load_icon(_pixClipName, phys, (Gtk::IconLookupFlags)0); diff --git a/src/ui/widget/color-notebook.cpp b/src/ui/widget/color-notebook.cpp index 33e22b59d..0c9402c99 100644 --- a/src/ui/widget/color-notebook.cpp +++ b/src/ui/widget/color-notebook.cpp @@ -19,7 +19,6 @@ #include "config.h" #endif -#include "widgets/icon.h" #include #include #include diff --git a/src/ui/widget/dock-item.cpp b/src/ui/widget/dock-item.cpp index d124854ae..d268be785 100644 --- a/src/ui/widget/dock-item.cpp +++ b/src/ui/widget/dock-item.cpp @@ -12,7 +12,6 @@ #include "desktop.h" #include "inkscape.h" #include "ui/icon-names.h" -#include "widgets/icon.h" #include #include @@ -43,9 +42,6 @@ DockItem::DockItem(Dock& dock, const Glib::ustring& name, const Glib::ustring& l if (!icon_name.empty()) { Glib::RefPtr iconTheme = Gtk::IconTheme::get_default(); - if (!iconTheme->has_icon(icon_name)) { - Inkscape::queueIconPrerender( INKSCAPE_ICON(icon_name.data()), Inkscape::ICON_SIZE_MENU ); - } if ( iconTheme->has_icon(icon_name) ) { int width = 0; int height = 0; diff --git a/src/ui/widget/highlight-picker.cpp b/src/ui/widget/highlight-picker.cpp index 561c1332a..3d8ab50ea 100644 --- a/src/ui/widget/highlight-picker.cpp +++ b/src/ui/widget/highlight-picker.cpp @@ -13,7 +13,6 @@ #include "display/cairo-utils.h" #include "highlight-picker.h" -#include "widgets/icon.h" namespace Inkscape { namespace UI { diff --git a/src/ui/widget/imagetoggler.cpp b/src/ui/widget/imagetoggler.cpp index 987cc67bb..81d0edd47 100644 --- a/src/ui/widget/imagetoggler.cpp +++ b/src/ui/widget/imagetoggler.cpp @@ -13,7 +13,6 @@ #include -#include "widgets/icon.h" #include "widgets/toolbox.h" #include "ui/icon-names.h" @@ -32,15 +31,12 @@ ImageToggler::ImageToggler( char const* on, char const* off) : _property_pixbuf_off(*this, "pixbuf_off", Glib::RefPtr(0)) { property_mode() = Gtk::CELL_RENDERER_MODE_ACTIVATABLE; - int phys = sp_icon_get_phys_size((int)Inkscape::ICON_SIZE_DECORATION); - Glib::RefPtr icon_theme = Gtk::IconTheme::get_default(); - if (!icon_theme->has_icon(_pixOnName)) { - Inkscape::queueIconPrerender( INKSCAPE_ICON(_pixOnName.data()), Inkscape::ICON_SIZE_DECORATION ); - } - if (!icon_theme->has_icon(_pixOffName)) { - Inkscape::queueIconPrerender( INKSCAPE_ICON(_pixOffName.data()), Inkscape::ICON_SIZE_DECORATION ); - } + gint width, height; + gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &width, &height); + int phys = width; + + Glib::RefPtr icon_theme = Gtk::IconTheme::get_default(); if (icon_theme->has_icon(_pixOnName)) { diff --git a/src/ui/widget/insertordericon.cpp b/src/ui/widget/insertordericon.cpp index 7ed1ed2e2..26913ff98 100644 --- a/src/ui/widget/insertordericon.cpp +++ b/src/ui/widget/insertordericon.cpp @@ -11,7 +11,6 @@ #include -#include "widgets/icon.h" #include "widgets/toolbox.h" #include "ui/icon-names.h" #include "layertypeicon.h" @@ -31,15 +30,12 @@ InsertOrderIcon::InsertOrderIcon() : { property_mode() = Gtk::CELL_RENDERER_MODE_ACTIVATABLE; - phys = sp_icon_get_phys_size((int)Inkscape::ICON_SIZE_DECORATION); - Glib::RefPtr icon_theme = Gtk::IconTheme::get_default(); - if (!icon_theme->has_icon(_pixTopName)) { - Inkscape::queueIconPrerender( INKSCAPE_ICON(_pixTopName.data()), Inkscape::ICON_SIZE_DECORATION ); - } - if (!icon_theme->has_icon(_pixBottomName)) { - Inkscape::queueIconPrerender( INKSCAPE_ICON(_pixBottomName.data()), Inkscape::ICON_SIZE_DECORATION ); - } + gint width, height; + gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &width, &height); + phys=width; + + Glib::RefPtr icon_theme = Gtk::IconTheme::get_default(); if (icon_theme->has_icon(_pixTopName)) { _property_pixbuf_top = icon_theme->load_icon(_pixTopName, phys, (Gtk::IconLookupFlags)0); diff --git a/src/ui/widget/labelled.cpp b/src/ui/widget/labelled.cpp index 6e3652830..d3dc6210f 100644 --- a/src/ui/widget/labelled.cpp +++ b/src/ui/widget/labelled.cpp @@ -14,8 +14,7 @@ #include "labelled.h" -/* For getting the Gtkmmified Icon manager */ -#include "widgets/icon.h" +#include #include namespace Inkscape { @@ -33,8 +32,9 @@ Labelled::Labelled(Glib::ustring const &label, Glib::ustring const &tooltip, { g_assert(g_utf8_validate(icon.c_str(), -1, NULL)); if (icon != "") { - _icon = sp_icon_get_icon(icon.c_str(), Inkscape::ICON_SIZE_LARGE_TOOLBAR); - pack_start(*Gtk::manage(_icon), Gtk::PACK_SHRINK); + _icon = Gtk::manage(new Gtk::Image()); + _icon->set_from_icon_name(icon, Gtk::ICON_SIZE_LARGE_TOOLBAR); + pack_start(*_icon, Gtk::PACK_SHRINK); } pack_start(*Gtk::manage(_label), Gtk::PACK_EXPAND_WIDGET, 6); pack_start(*Gtk::manage(_widget), Gtk::PACK_SHRINK, 6); diff --git a/src/ui/widget/labelled.h b/src/ui/widget/labelled.h index 88eb3ce19..824abf305 100644 --- a/src/ui/widget/labelled.h +++ b/src/ui/widget/labelled.h @@ -14,6 +14,7 @@ #include namespace Gtk { +class Image; class Label; } @@ -64,7 +65,7 @@ protected: Gtk::Widget *_widget; Gtk::Label *_label; Gtk::Label *_suffix; - Gtk::Widget *_icon; + Gtk::Image *_icon; }; } // namespace Widget diff --git a/src/ui/widget/layer-selector.cpp b/src/ui/widget/layer-selector.cpp index 4432a6e09..0332143b5 100644 --- a/src/ui/widget/layer-selector.cpp +++ b/src/ui/widget/layer-selector.cpp @@ -31,7 +31,6 @@ #include "util/filter-list.h" #include "util/reverse-list.h" #include "verbs.h" -#include "widgets/icon.h" #include "xml/node-event-vector.h" #include "widgets/gradient-vector.h" @@ -42,17 +41,19 @@ namespace { class AlternateIcons : public Gtk::HBox { public: - AlternateIcons(Inkscape::IconSize size, gchar const *a, gchar const *b) + AlternateIcons(Gtk::IconSize size, Glib::ustring const &a, Glib::ustring const &b) : _a(NULL), _b(NULL) { set_name("AlternateIcons"); - if (a) { - _a = Gtk::manage(sp_icon_get_icon(a, size)); + if (!a.empty()) { + _a = Gtk::manage(new Gtk::Image()); + _a->set_from_icon_name(a, size); _a->set_no_show_all(true); add(*_a); } - if (b) { - _b = Gtk::manage(sp_icon_get_icon(b, size)); + if (!b.empty()) { + _b = Gtk::manage(new Gtk::Image()); + _b->set_from_icon_name(b, size); _b->set_no_show_all(true); add(*_b); } @@ -80,8 +81,8 @@ public: } private: - Gtk::Widget *_a; - Gtk::Widget *_b; + Gtk::Image *_a; + Gtk::Image *_b; bool _state; }; @@ -98,7 +99,7 @@ LayerSelector::LayerSelector(SPDesktop *desktop) set_name("LayerSelector"); AlternateIcons *label; - label = Gtk::manage(new AlternateIcons(Inkscape::ICON_SIZE_DECORATION, + label = Gtk::manage(new AlternateIcons(Gtk::ICON_SIZE_MENU, INKSCAPE_ICON("object-visible"), INKSCAPE_ICON("object-hidden"))); _visibility_toggle.add(*label); _visibility_toggle.signal_toggled().connect( @@ -118,7 +119,7 @@ LayerSelector::LayerSelector(SPDesktop *desktop) _visibility_toggle.set_tooltip_text(_("Toggle current layer visibility")); pack_start(_visibility_toggle, Gtk::PACK_EXPAND_PADDING); - label = Gtk::manage(new AlternateIcons(Inkscape::ICON_SIZE_DECORATION, + label = Gtk::manage(new AlternateIcons(Gtk::ICON_SIZE_MENU, INKSCAPE_ICON("object-unlocked"), INKSCAPE_ICON("object-locked"))); _lock_toggle.add(*label); _lock_toggle.signal_toggled().connect( diff --git a/src/ui/widget/layertypeicon.cpp b/src/ui/widget/layertypeicon.cpp index df85f271a..679a95cd2 100644 --- a/src/ui/widget/layertypeicon.cpp +++ b/src/ui/widget/layertypeicon.cpp @@ -15,7 +15,6 @@ #include -#include "widgets/icon.h" #include "widgets/toolbox.h" #include "ui/icon-names.h" @@ -37,19 +36,11 @@ LayerTypeIcon::LayerTypeIcon() : { property_mode() = Gtk::CELL_RENDERER_MODE_ACTIVATABLE; - int phys = sp_icon_get_phys_size((int)Inkscape::ICON_SIZE_DECORATION); + gint width, height; + gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &width, &height); + int phys = width; Glib::RefPtr icon_theme = Gtk::IconTheme::get_default(); - if (!icon_theme->has_icon(_pixLayerName)) { - Inkscape::queueIconPrerender( INKSCAPE_ICON(_pixLayerName.data()), Inkscape::ICON_SIZE_DECORATION ); - } - if (!icon_theme->has_icon(_pixGroupName)) { - Inkscape::queueIconPrerender( INKSCAPE_ICON(_pixGroupName.data()), Inkscape::ICON_SIZE_DECORATION ); - } - if (!icon_theme->has_icon(_pixPathName)) { - Inkscape::queueIconPrerender( INKSCAPE_ICON(_pixPathName.data()), Inkscape::ICON_SIZE_DECORATION ); - } - if (icon_theme->has_icon(_pixLayerName)) { _property_pixbuf_layer = icon_theme->load_icon(_pixLayerName, phys, (Gtk::IconLookupFlags)0); } diff --git a/src/ui/widget/object-composite-settings.cpp b/src/ui/widget/object-composite-settings.cpp index 1727660c8..ca33a845c 100644 --- a/src/ui/widget/object-composite-settings.cpp +++ b/src/ui/widget/object-composite-settings.cpp @@ -24,7 +24,6 @@ #include "style.h" #include "svg/css-ostringstream.h" #include "verbs.h" -#include "widgets/icon.h" #include "display/sp-canvas.h" #include "ui/widget/style-subject.h" diff --git a/src/ui/widget/panel.cpp b/src/ui/widget/panel.cpp index dff92594b..9332fe0f9 100644 --- a/src/ui/widget/panel.cpp +++ b/src/ui/widget/panel.cpp @@ -46,7 +46,7 @@ static const int PANEL_SETTING_NEXTFREE = 5; void Panel::prep() { GtkIconSize sizes[] = { - Inkscape::getRegisteredIconSize(Inkscape::ICON_SIZE_DECORATION), + GTK_ICON_SIZE_MENU, GTK_ICON_SIZE_MENU, GTK_ICON_SIZE_SMALL_TOOLBAR, GTK_ICON_SIZE_BUTTON, @@ -270,7 +270,7 @@ void Panel::_init() gint height = 0; gtk_image_set_from_icon_name(_temp_arrow.gobj(), "pan-start-symbolic", - Inkscape::getRegisteredIconSize(Inkscape::ICON_SIZE_SMALL_TOOLBAR)); + GTK_ICON_SIZE_SMALL_TOOLBAR); _menu_popper.add(_temp_arrow); _menu_popper.signal_button_press_event().connect_notify(sigc::mem_fun(*this, &Panel::_popper)); } diff --git a/src/ui/widget/random.cpp b/src/ui/widget/random.cpp index ba3b025ba..237144c7c 100644 --- a/src/ui/widget/random.cpp +++ b/src/ui/widget/random.cpp @@ -15,11 +15,11 @@ #include "random.h" -#include "widgets/icon.h" #include #include +#include namespace Inkscape { namespace UI { @@ -70,7 +70,8 @@ void Random::setStartSeed(long newseed) void Random::addReseedButton() { - Gtk::Widget* pIcon = Gtk::manage( sp_icon_get_icon( "randomize", Inkscape::ICON_SIZE_BUTTON) ); + Gtk::Image* pIcon = Gtk::manage(new Gtk::Image()); + pIcon->set_from_icon_name( "randomize", Gtk::ICON_SIZE_BUTTON); Gtk::Button * pButton = Gtk::manage(new Gtk::Button()); pButton->set_relief(Gtk::RELIEF_NONE); pIcon->show(); diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt index 1184291f2..089d68b4e 100644 --- a/src/widgets/CMakeLists.txt +++ b/src/widgets/CMakeLists.txt @@ -21,7 +21,6 @@ set(widgets_SRC gradient-selector.cpp gradient-toolbar.cpp gradient-vector.cpp - icon.cpp ink-action.cpp ink-comboboxentry-action.cpp ink-radio-action.cpp @@ -78,7 +77,6 @@ set(widgets_SRC gradient-selector.h gradient-toolbar.h gradient-vector.h - icon.h ink-action.h ink-comboboxentry-action.h ink-radio-action.h diff --git a/src/widgets/arc-toolbar.cpp b/src/widgets/arc-toolbar.cpp index 56eeb8922..23e1eba1a 100644 --- a/src/widgets/arc-toolbar.cpp +++ b/src/widgets/arc-toolbar.cpp @@ -318,7 +318,7 @@ void sp_arc_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObjec Inkscape::Preferences *prefs = Inkscape::Preferences::get(); EgeAdjustmentAction* eact = 0; - Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); + GtkIconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); { diff --git a/src/widgets/box3d-toolbar.cpp b/src/widgets/box3d-toolbar.cpp index 95de28cf2..29a447afd 100644 --- a/src/widgets/box3d-toolbar.cpp +++ b/src/widgets/box3d-toolbar.cpp @@ -325,7 +325,7 @@ void box3d_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject _("State of VP in X direction"), _("Toggle VP in X direction between 'finite' and 'infinite' (=parallel)"), INKSCAPE_ICON("perspective-parallel"), - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); g_object_set_data( holder, "box3d_vp_x_state_action", act ); g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(box3d_vp_x_state_changed), box3d_angle_x ); @@ -364,7 +364,7 @@ void box3d_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject _("State of VP in Y direction"), _("Toggle VP in Y direction between 'finite' and 'infinite' (=parallel)"), INKSCAPE_ICON("perspective-parallel"), - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); g_object_set_data( holder, "box3d_vp_y_state_action", act ); g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(box3d_vp_y_state_changed), box3d_angle_y ); @@ -403,7 +403,7 @@ void box3d_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject _("State of VP in Z direction"), _("Toggle VP in Z direction between 'finite' and 'infinite' (=parallel)"), INKSCAPE_ICON("perspective-parallel"), - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); g_object_set_data( holder, "box3d_vp_z_state_action", act ); g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(box3d_vp_z_state_changed), box3d_angle_z ); diff --git a/src/widgets/button.cpp b/src/widgets/button.cpp index 485300a25..7dcfc9771 100644 --- a/src/widgets/button.cpp +++ b/src/widgets/button.cpp @@ -12,7 +12,6 @@ */ #include -#include "icon.h" #include "button.h" #include "helper/action-context.h" @@ -155,12 +154,12 @@ static void sp_button_perform_action(SPButton *button, gpointer /*data*/) } } -GtkWidget *sp_button_new(Inkscape::IconSize size, SPButtonType type, SPAction *action, SPAction *doubleclick_action) +GtkWidget *sp_button_new(GtkIconSize size, SPButtonType type, SPAction *action, SPAction *doubleclick_action) { SPButton *button = SP_BUTTON(g_object_new(SP_TYPE_BUTTON, NULL)); button->type = type; - button->lsize = CLAMP(size, Inkscape::ICON_SIZE_MENU, Inkscape::ICON_SIZE_DECORATION); + button->lsize = CLAMP(size, GTK_ICON_SIZE_MENU, GTK_ICON_SIZE_DIALOG); sp_button_set_action(button, action); if (doubleclick_action) @@ -212,7 +211,7 @@ static void sp_button_set_action(SPButton *button, SPAction *action) button->c_set_sensitive = action->signal_set_sensitive.connect( sigc::bind<0>(sigc::ptr_fun(>k_widget_set_sensitive), GTK_WIDGET(button))); if (action->image) { - child = sp_icon_new(button->lsize, action->image); + child = gtk_image_new_from_icon_name(action->image, button->lsize); gtk_widget_show(child); gtk_container_add(GTK_CONTAINER(button), child); } @@ -256,12 +255,11 @@ static void sp_button_set_composed_tooltip(GtkWidget *widget, SPAction *action) } } -GtkWidget *sp_button_new_from_data(Inkscape::IconSize size, SPButtonType type, Inkscape::UI::View::View *view, +GtkWidget *sp_button_new_from_data(GtkIconSize size, SPButtonType type, Inkscape::UI::View::View *view, const gchar *name, const gchar *tip) { - GtkWidget *button; SPAction *action = sp_action_new(Inkscape::ActionContext(view), name, name, tip, name, 0); - button = sp_button_new(size, type, action, NULL); + GtkWidget *button = sp_button_new(size, type, action, NULL); g_object_unref(action); return button; } diff --git a/src/widgets/button.h b/src/widgets/button.h index 2bceb5e97..94a956de3 100644 --- a/src/widgets/button.h +++ b/src/widgets/button.h @@ -42,7 +42,7 @@ struct SPBChoiceData { struct SPButton { GtkToggleButton widget; SPButtonType type; - Inkscape::IconSize lsize; + GtkIconSize lsize; unsigned int psize; SPAction *action; SPAction *doubleclick_action; @@ -59,11 +59,11 @@ struct SPButtonClass { GType sp_button_get_type (void); -GtkWidget *sp_button_new (Inkscape::IconSize size, SPButtonType type, SPAction *action, SPAction *doubleclick_action); +GtkWidget *sp_button_new (GtkIconSize size, SPButtonType type, SPAction *action, SPAction *doubleclick_action); void sp_button_toggle_set_down (SPButton *button, gboolean down); -GtkWidget *sp_button_new_from_data (Inkscape::IconSize size, +GtkWidget *sp_button_new_from_data (GtkIconSize size, SPButtonType type, Inkscape::UI::View::View *view, const gchar *name, diff --git a/src/widgets/calligraphy-toolbar.cpp b/src/widgets/calligraphy-toolbar.cpp index 031295ccd..7dabee11b 100644 --- a/src/widgets/calligraphy-toolbar.cpp +++ b/src/widgets/calligraphy-toolbar.cpp @@ -565,7 +565,7 @@ void sp_calligraphy_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions _("Trace Background"), _("Trace the lightness of the background by the width of the pen (white - minimum width, black - maximum width)"), INKSCAPE_ICON("draw-trace-background"), - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); PrefPusher *pusher = new PrefPusher(GTK_TOGGLE_ACTION(act), "/tools/calligraphic/tracebackground", update_presets_list, holder); g_signal_connect( holder, "destroy", G_CALLBACK(delete_prefspusher), pusher); @@ -578,7 +578,7 @@ void sp_calligraphy_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions _("Pressure"), _("Use the pressure of the input device to alter the width of the pen"), INKSCAPE_ICON("draw-use-pressure"), - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); PrefPusher *pusher = new PrefPusher(GTK_TOGGLE_ACTION(act), "/tools/calligraphic/usepressure", update_presets_list, holder); g_signal_connect( holder, "destroy", G_CALLBACK(delete_prefspusher), pusher); @@ -591,7 +591,7 @@ void sp_calligraphy_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions _("Tilt"), _("Use the tilt of the input device to alter the angle of the pen's nib"), INKSCAPE_ICON("draw-use-tilt"), - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); PrefPusher *pusher = new PrefPusher(GTK_TOGGLE_ACTION(act), "/tools/calligraphic/usetilt", update_presets_list, holder); g_signal_connect( holder, "destroy", G_CALLBACK(delete_prefspusher), pusher); @@ -622,7 +622,7 @@ void sp_calligraphy_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions _("Add/Edit Profile"), _("Add or edit calligraphic profile"), INKSCAPE_ICON("document-properties"), - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); g_object_set( inky, "short_label", _("Edit"), NULL ); g_signal_connect_after( G_OBJECT(inky), "activate", G_CALLBACK(sp_ddc_edit_profile), (GObject*)holder ); gtk_action_group_add_action( mainActions, GTK_ACTION(inky) ); diff --git a/src/widgets/connector-toolbar.cpp b/src/widgets/connector-toolbar.cpp index a078ecec4..9c4980f4c 100644 --- a/src/widgets/connector-toolbar.cpp +++ b/src/widgets/connector-toolbar.cpp @@ -299,7 +299,7 @@ static void sp_connector_toolbox_selection_changed(Inkscape::Selection *selectio void sp_connector_toolbox_prep( SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder ) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); + GtkIconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); { InkAction* inky = ink_action_new( "ConnectorAvoidAction", @@ -327,7 +327,7 @@ void sp_connector_toolbox_prep( SPDesktop *desktop, GtkActionGroup* mainActions, _("Orthogonal"), _("Make connector orthogonal or polyline"), INKSCAPE_ICON("connector-orthogonal"), - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); bool tbuttonstate = prefs->getBool("/tools/connector/orthogonal"); @@ -388,7 +388,7 @@ void sp_connector_toolbox_prep( SPDesktop *desktop, GtkActionGroup* mainActions, _("Downwards"), _("Make connectors with end-markers (arrows) point downwards"), INKSCAPE_ICON("distribute-graph-directed"), - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); bool tbuttonstate = prefs->getBool("/tools/connector/directedlayout"); @@ -404,7 +404,7 @@ void sp_connector_toolbox_prep( SPDesktop *desktop, GtkActionGroup* mainActions, _("Remove overlaps"), _("Do not allow overlapping shapes"), INKSCAPE_ICON("distribute-remove-overlaps"), - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); bool tbuttonstate = prefs->getBool("/tools/connector/avoidoverlaplayout"); diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index ce4c5936c..2479fa453 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -351,7 +351,7 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) ToolboxFactory::setOrientation( dtw->tool_toolbox, GTK_ORIENTATION_VERTICAL ); gtk_box_pack_start( GTK_BOX(dtw->hbox), dtw->tool_toolbox, FALSE, TRUE, 0 ); // Lock guides button - dtw->guides_lock = sp_button_new_from_data( Inkscape::ICON_SIZE_DECORATION, + dtw->guides_lock = sp_button_new_from_data( GTK_ICON_SIZE_MENU, SP_BUTTON_TYPE_TOGGLE, NULL, INKSCAPE_ICON("object-locked"), @@ -410,7 +410,7 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) dtw->vscrollbar_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); // Sticky zoom button - dtw->sticky_zoom = sp_button_new_from_data ( Inkscape::ICON_SIZE_DECORATION, + dtw->sticky_zoom = sp_button_new_from_data ( GTK_ICON_SIZE_MENU, SP_BUTTON_TYPE_TOGGLE, NULL, INKSCAPE_ICON("zoom-original"), @@ -435,7 +435,7 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) tip = act->tip; } } - dtw->cms_adjust = sp_button_new_from_data( Inkscape::ICON_SIZE_DECORATION, + dtw->cms_adjust = sp_button_new_from_data( GTK_ICON_SIZE_MENU, SP_BUTTON_TYPE_TOGGLE, NULL, INKSCAPE_ICON("color-management"), @@ -543,7 +543,6 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) dtw->layer_selector = new Inkscape::Widgets::LayerSelector(NULL); // FIXME: need to unreference on container destruction to avoid leak dtw->layer_selector->reference(); - //dtw->layer_selector->set_size_request(-1, SP_ICON_SIZE_BUTTON); gtk_box_pack_start(GTK_BOX(dtw->statusbar), GTK_WIDGET(dtw->layer_selector->gobj()), FALSE, FALSE, 1); // Select Status diff --git a/src/widgets/dropper-toolbar.cpp b/src/widgets/dropper-toolbar.cpp index 4e26a99a0..7a9cf1779 100644 --- a/src/widgets/dropper-toolbar.cpp +++ b/src/widgets/dropper-toolbar.cpp @@ -90,7 +90,7 @@ void sp_dropper_toolbox_prep(SPDesktop * /*desktop*/, GtkActionGroup* mainAction _("Pick opacity"), _("Pick both the color and the alpha (transparency) under cursor; otherwise, pick only the visible color premultiplied by alpha"), NULL, - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); g_object_set( act, "short_label", _("Pick"), NULL ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); g_object_set_data( holder, "pick_action", act ); @@ -103,7 +103,7 @@ void sp_dropper_toolbox_prep(SPDesktop * /*desktop*/, GtkActionGroup* mainAction _("Assign opacity"), _("If alpha was picked, assign it to selection as fill or stroke transparency"), NULL, - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); g_object_set( act, "short_label", _("Assign"), NULL ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); g_object_set_data( holder, "set_action", act ); diff --git a/src/widgets/ege-adjustment-action.cpp b/src/widgets/ege-adjustment-action.cpp index 6678d1e5a..e4f041bd1 100644 --- a/src/widgets/ege-adjustment-action.cpp +++ b/src/widgets/ege-adjustment-action.cpp @@ -42,7 +42,6 @@ #include #include -#include "widgets/icon.h" #include #include "icon-size.h" @@ -115,7 +114,7 @@ struct _EgeAdjustmentActionPrivate GList* descriptions; gchar* appearance; gchar* iconId; - Inkscape::IconSize iconSize; + GtkIconSize iconSize; Inkscape::UI::Widget::UnitTracker *unitTracker; }; @@ -232,9 +231,9 @@ static void ege_adjustment_action_class_init( EgeAdjustmentActionClass* klass ) g_param_spec_int( "iconSize", "Icon Size", "The size the icon", - (int)Inkscape::ICON_SIZE_MENU, - (int)Inkscape::ICON_SIZE_DECORATION, - (int)Inkscape::ICON_SIZE_SMALL_TOOLBAR, + (int)GTK_ICON_SIZE_MENU, + (int)GTK_ICON_SIZE_DIALOG, + (int)GTK_ICON_SIZE_SMALL_TOOLBAR, (GParamFlags)(G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT) ) ); g_object_class_install_property( objClass, @@ -272,7 +271,7 @@ static void ege_adjustment_action_init( EgeAdjustmentAction* action ) action->private_data->descriptions = 0; action->private_data->appearance = 0; action->private_data->iconId = 0; - action->private_data->iconSize = Inkscape::ICON_SIZE_SMALL_TOOLBAR; + action->private_data->iconSize = GTK_ICON_SIZE_SMALL_TOOLBAR; action->private_data->unitTracker = NULL; } @@ -463,7 +462,7 @@ void ege_adjustment_action_set_property( GObject* obj, guint propId, const GValu case PROP_ICON_SIZE: { - action->private_data->iconSize = (Inkscape::IconSize)g_value_get_int( value ); + action->private_data->iconSize = (GtkIconSize)g_value_get_int( value ); } break; @@ -857,7 +856,7 @@ static GtkWidget* create_tool_item( GtkAction* action ) /* Use an icon if available or use short-label */ if ( act->private_data->iconId && strcmp( act->private_data->iconId, "" ) != 0 ) { - GtkWidget* icon = sp_icon_new( act->private_data->iconSize, act->private_data->iconId ); + GtkWidget* icon = gtk_image_new_from_icon_name( act->private_data->iconId, act->private_data->iconSize ); gtk_box_pack_start( GTK_BOX(hb), icon, FALSE, FALSE, 0 ); } else { GtkWidget* lbl = gtk_label_new( g_value_get_string( &value ) ? g_value_get_string( &value ) : "wwww" ); diff --git a/src/widgets/eraser-toolbar.cpp b/src/widgets/eraser-toolbar.cpp index 7377cdc00..b592b8ace 100644 --- a/src/widgets/eraser-toolbar.cpp +++ b/src/widgets/eraser-toolbar.cpp @@ -134,7 +134,7 @@ static void sp_toogle_break_apart( GtkToggleAction* act, gpointer data ) void sp_eraser_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder) { - Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); + GtkIconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); gint eraser_mode = FALSE; { @@ -202,7 +202,7 @@ void sp_eraser_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb _("Eraser Pressure"), _("Use the pressure of the input device to alter the width of the pen"), INKSCAPE_ICON("draw-use-pressure"), - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); PrefPusher *pusher = new PrefPusher(GTK_TOGGLE_ACTION(act), "/tools/eraser/usepressure", update_presets_list, holder); g_signal_connect( holder, "destroy", G_CALLBACK(delete_prefspusher), pusher); diff --git a/src/widgets/gradient-selector.cpp b/src/widgets/gradient-selector.cpp index 569f66c2b..99ef9f19b 100644 --- a/src/widgets/gradient-selector.cpp +++ b/src/widgets/gradient-selector.cpp @@ -29,7 +29,6 @@ #include "verbs.h" #include "helper/action.h" #include "preferences.h" -#include "widgets/icon.h" #include @@ -98,7 +97,7 @@ static void sp_gradient_selector_class_init(SPGradientSelectorClass *klass) static void gradsel_style_button(GtkWidget *gtkbtn, char const *iconName) { Gtk::Button *btn = Glib::wrap(GTK_BUTTON(gtkbtn)); - GtkWidget *child = sp_icon_new(Inkscape::ICON_SIZE_SMALL_TOOLBAR, iconName); + GtkWidget *child = gtk_image_new_from_icon_name(iconName, GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_show(child); btn->add(*manage(Glib::wrap(child))); btn->set_relief(Gtk::RELIEF_NONE); diff --git a/src/widgets/gradient-toolbar.cpp b/src/widgets/gradient-toolbar.cpp index 8474327ca..196264315 100644 --- a/src/widgets/gradient-toolbar.cpp +++ b/src/widgets/gradient-toolbar.cpp @@ -1026,7 +1026,7 @@ static void gradient_toolbox_check_ec(SPDesktop* dt, Inkscape::UI::Tools::ToolBa */ void sp_gradient_toolbox_prep(SPDesktop * desktop, GtkActionGroup* mainActions, GObject* holder) { - Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); + GtkIconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); /* New gradient linear or radial */ { @@ -1221,7 +1221,7 @@ void sp_gradient_toolbox_prep(SPDesktop * desktop, GtkActionGroup* mainActions, _("Link gradients"), _("Link gradients to change all related gradients"), INKSCAPE_ICON("object-unlocked"), - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); g_object_set( itact, "short_label", "Lock", NULL ); g_signal_connect_after( G_OBJECT(itact), "toggled", G_CALLBACK(gr_linked_changed), desktop) ; gtk_action_group_add_action( mainActions, GTK_ACTION(itact) ); diff --git a/src/widgets/icon.cpp b/src/widgets/icon.cpp deleted file mode 100644 index 885deaab7..000000000 --- a/src/widgets/icon.cpp +++ /dev/null @@ -1,1651 +0,0 @@ -/** \file - * SPIcon: Generic icon widget - */ -/* - * Author: - * Lauris Kaplinski - * Jon A. Cruz - * Abhishek Sharma - * - * Copyright (C) 2002 Lauris Kaplinski - * - * Released under GNU GPL, read the file 'COPYING' for more information - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include -#include -#include -#include -#include -#include -#include -#include <2geom/transforms.h> - -#include "path-prefix.h" -#include "preferences.h" -#include "inkscape.h" -#include "document.h" -#include "display/cairo-utils.h" -#include "display/drawing-context.h" -#include "display/drawing-item.h" -#include "display/drawing.h" -#include "io/sys.h" -#include "sp-root.h" -#include "sp-namedview.h" -#include "util/units.h" - -#include "icon.h" -#include "ui/icon-names.h" - -struct IconImpl { - static GtkWidget *newFull( Inkscape::IconSize lsize, gchar const *name ); - - static void dispose(GObject *object); - - static void reset(SPIcon *icon); - static void clear(SPIcon *icon); - - static void sizeRequest(GtkWidget *widget, GtkRequisition *requisition); - - static void getPreferredWidth(GtkWidget *widget, - gint *minimal_width, - gint *natural_width); - - static void getPreferredHeight(GtkWidget *widget, - gint *minimal_height, - gint *natural_height); - - static void sizeAllocate(GtkWidget *widget, GtkAllocation *allocation); - static gboolean draw(GtkWidget *widget, cairo_t *cr); - - static void screenChanged( GtkWidget *widget, GdkScreen *previous_screen ); - static void styleSet( GtkWidget *widget, GtkStyle *previous_style ); - static void themeChanged( SPIcon *icon ); - - static int getPhysSize(int size); - static void fetchPixbuf( SPIcon *icon ); - - static gboolean prerenderTask(gpointer data); - static void addPreRender( GtkIconSize lsize, gchar const *name ); - static GdkPixbuf* renderup( gchar const* name, Inkscape::IconSize lsize, unsigned psize ); - - - static GdkPixbuf *loadPixmap(gchar const *name, unsigned lsize, unsigned psize); - static GdkPixbuf *loadSvg(std::list const &names, GtkIconSize lsize, unsigned psize); - - static void overlayPixels( guchar *px, int width, int height, int stride, - unsigned r, unsigned g, unsigned b ); - - static void injectCustomSize(); - - static void imageMapCB(GtkWidget* widget, gpointer user_data); - static void imageMapNamedCB(GtkWidget* widget, gpointer user_data); - static bool prerenderIcon(gchar const *name, GtkIconSize lsize, unsigned psize); - - - static std::list &icons_svg_paths(); - static guchar *load_svg_pixels(std::list const &names, - unsigned psize, unsigned &stride); - - static std::string fileEscape( std::string const & str ); - - static void validateCache(); - static void setupLegacyNaming(); - -private: - static const std::string magicNumber; - static std::map legacyNames; -}; - -const std::string IconImpl::magicNumber = "1.0"; -std::map IconImpl::legacyNames; - - -static bool sizeDirty = true; - -static bool sizeMapDone = false; -static GtkIconSize iconSizeLookup[] = { - GTK_ICON_SIZE_INVALID, - GTK_ICON_SIZE_MENU, - GTK_ICON_SIZE_SMALL_TOOLBAR, - GTK_ICON_SIZE_LARGE_TOOLBAR, - GTK_ICON_SIZE_BUTTON, - GTK_ICON_SIZE_DND, - GTK_ICON_SIZE_DIALOG, - GTK_ICON_SIZE_MENU, // for Inkscape::ICON_SIZE_DECORATION -}; - -class IconCacheItem -{ -public: - IconCacheItem( GtkIconSize lsize, GdkPixbuf* pb ) : - _lsize( lsize ), - _pb( pb ) - {} - GtkIconSize _lsize; - GdkPixbuf* _pb; -}; - -static std::map > iconSetCache; -static std::set internalNames; - -G_DEFINE_TYPE(SPIcon, sp_icon, GTK_TYPE_WIDGET); - -static void -sp_icon_class_init(SPIconClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS(klass); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); - - object_class->dispose = IconImpl::dispose; - - widget_class->get_preferred_width = IconImpl::getPreferredWidth; - widget_class->get_preferred_height = IconImpl::getPreferredHeight; - widget_class->draw = IconImpl::draw; - widget_class->size_allocate = IconImpl::sizeAllocate; - widget_class->screen_changed = IconImpl::screenChanged; - widget_class->style_set = IconImpl::styleSet; -} - -static void -sp_icon_init(SPIcon *icon) -{ - gtk_widget_set_has_window (GTK_WIDGET (icon), FALSE); - icon->lsize = Inkscape::ICON_SIZE_BUTTON; - icon->psize = 0; - icon->name = NULL; - icon->pb = NULL; -} - -void IconImpl::dispose(GObject *object) -{ - SPIcon *icon = SP_ICON(object); - clear(icon); - if ( icon->name ) { - g_free( icon->name ); - icon->name = NULL; - } - - (G_OBJECT_CLASS(sp_icon_parent_class))->dispose(object); -} - -void IconImpl::reset( SPIcon *icon ) -{ - icon->psize = 0; - clear(icon); -} - -void IconImpl::clear( SPIcon *icon ) -{ - if (icon->pb) { - g_object_unref(G_OBJECT(icon->pb)); - icon->pb = NULL; - } -} - -void IconImpl::sizeRequest(GtkWidget *widget, GtkRequisition *requisition) -{ - SPIcon const *icon = SP_ICON(widget); - - int const size = ( icon->psize - ? icon->psize - : getPhysSize(icon->lsize) ); - requisition->width = size; - requisition->height = size; -} - -void IconImpl::getPreferredWidth(GtkWidget *widget, gint *minimal_width, gint *natural_width) -{ - GtkRequisition requisition; - sizeRequest(widget, &requisition); - *minimal_width = *natural_width = requisition.width; -} - -void IconImpl::getPreferredHeight(GtkWidget *widget, gint *minimal_height, gint *natural_height) -{ - GtkRequisition requisition; - sizeRequest(widget, &requisition); - *minimal_height = *natural_height = requisition.height; -} - -void IconImpl::sizeAllocate(GtkWidget *widget, GtkAllocation *allocation) -{ - gtk_widget_set_allocation(widget, allocation); - - if (gtk_widget_is_drawable(widget)) { - gtk_widget_queue_draw(widget); - } -} - -// GTK3 Only, Doesn't actually seem to be used. -gboolean IconImpl::draw(GtkWidget *widget, cairo_t* cr) -{ - SPIcon *icon = SP_ICON(widget); - if ( !icon->pb ) { - fetchPixbuf( icon ); - } - - GdkPixbuf *image = icon->pb; - bool unref_image = false; - - /* copied from the expose function of GtkImage */ - if (gtk_widget_get_state_flags (GTK_WIDGET(icon)) != GTK_STATE_FLAG_NORMAL && image) { - std::cerr << "IconImpl::draw: No image, creating fallback" << std::endl; - - GtkIconTheme *icon_theme = gtk_icon_theme_get_default(); - image = gtk_icon_theme_load_icon (icon_theme, - "gtk-image", - 32, - (GtkIconLookupFlags)0, - NULL); - - unref_image = true; - } - - if (image) { - GtkAllocation allocation; - GtkRequisition requisition; - gtk_widget_get_allocation(widget, &allocation); - gtk_widget_get_preferred_size(widget, &requisition, NULL); - - int x = floor(allocation.x + ((allocation.width - requisition.width) * 0.5)); - int y = floor(allocation.y + ((allocation.height - requisition.height) * 0.5)); - int width = gdk_pixbuf_get_width(image); - int height = gdk_pixbuf_get_height(image); - // Limit drawing to when we actually have something. Avoids some crashes. - if ( (width > 0) && (height > 0) ) { - gdk_cairo_set_source_pixbuf(cr, image, x, y); - cairo_paint(cr); - } - } - - if (unref_image) { - g_object_unref(G_OBJECT(image)); - } - - return TRUE; -} - -// PUBLIC CALL: -void sp_icon_fetch_pixbuf( SPIcon *icon ) -{ - return IconImpl::fetchPixbuf(icon); -} - -void IconImpl::fetchPixbuf( SPIcon *icon ) -{ - if ( icon ) { - if ( !icon->pb ) { - icon->psize = getPhysSize(icon->lsize); - icon->pb = renderup(icon->name, icon->lsize, icon->psize); - } - } -} - -GdkPixbuf* IconImpl::renderup( gchar const* name, Inkscape::IconSize lsize, unsigned psize ) { - GtkIconTheme *theme = gtk_icon_theme_get_default(); - - GdkPixbuf *pb = NULL; - if (gtk_icon_theme_has_icon(theme, name)) { - pb = gtk_icon_theme_load_icon(theme, name, psize, (GtkIconLookupFlags) 0, NULL); - } - if (!pb) { - std::list names; - names.push_back(name); - if ( legacyNames.find(name) != legacyNames.end() ) { - if ( Inkscape::Preferences::get()->getBool("/debug/icons/dumpSvg") ) { - g_message("Checking fallback [%s]->[%s]", name, legacyNames[name].c_str()); - } - names.push_back(legacyNames[name]); - } - - pb = loadSvg( names, Inkscape::getRegisteredIconSize(lsize), psize ); - - // if this was loaded from SVG, add it as a builtin icon - if (pb) { - gtk_icon_theme_add_builtin_icon(name, psize, pb); - } - } - if (!pb) { - pb = loadPixmap( name, lsize, psize ); - } - if ( !pb ) { - // TODO: We should do something more useful if we can't load the image. - g_warning ("failed to load icon '%s'", name); - } - return pb; -} - -void IconImpl::screenChanged( GtkWidget *widget, GdkScreen *previous_screen ) -{ - if ( GTK_WIDGET_CLASS( sp_icon_parent_class )->screen_changed ) { - GTK_WIDGET_CLASS( sp_icon_parent_class )->screen_changed( widget, previous_screen ); - } - SPIcon *icon = SP_ICON(widget); - themeChanged(icon); -} - -void IconImpl::styleSet( GtkWidget *widget, GtkStyle *previous_style ) -{ - if ( GTK_WIDGET_CLASS( sp_icon_parent_class )->style_set ) { - GTK_WIDGET_CLASS( sp_icon_parent_class )->style_set( widget, previous_style ); - } - SPIcon *icon = SP_ICON(widget); - themeChanged(icon); -} - -void IconImpl::themeChanged( SPIcon *icon ) -{ - bool const dump = Inkscape::Preferences::get()->getBool("/debug/icons/dumpSvg"); - if ( dump ) { - g_message("Got a change bump for this icon"); - } - sizeDirty = true; - reset(icon); - gtk_widget_queue_draw( GTK_WIDGET(icon) ); -} - -std::string IconImpl::fileEscape( std::string const & str ) -{ - std::string result; - result.reserve(str.size()); - for ( size_t i = 0; i < str.size(); ++i ) { - char ch = str[i]; - if ( (0x20 <= ch) && !(0x80 & ch) ) { - result += ch; - } else { - result += "\\x"; - gchar *tmp = g_strdup_printf("%02X", (0x0ff & ch)); - result += tmp; - g_free(tmp); - } - } - return result; -} - -static bool isSizedSubdir( std::string const &name ) -{ - bool isSized = false; - if ( (name.size() > 2) && (name.size() & 1) ) { // needs to be an odd length 3 or more - size_t mid = (name.size() - 1) / 2; - if ( (name[mid] == 'x') && (name.substr(0, mid) == name.substr(mid + 1)) ) { - isSized = true; - for ( size_t i = 0; (i < mid) && isSized; ++i ) { - isSized &= g_ascii_isdigit(name[i]); - } - } - } - return isSized; -} - -void IconImpl::validateCache() -{ - std::list &sources = icons_svg_paths(); - std::string iconCacheDir = Glib::build_filename(Glib::build_filename(Glib::get_user_cache_dir(), "inkscape"), "icons"); - std::string iconCacheFile = Glib::build_filename( iconCacheDir, "cache.info" ); - - std::vector filesFound; - - for (std::list::iterator i = sources.begin(); i != sources.end(); ++i) { - gchar const* potentialFile = *i; - if ( Glib::file_test(potentialFile, Glib::FILE_TEST_EXISTS) && Glib::file_test(potentialFile, Glib::FILE_TEST_IS_REGULAR) ) { - filesFound.push_back(*i); - } - } - - unsigned long lastSeen = 0; - std::ostringstream out; - out << "Inkscape cache v" << std::hex << magicNumber << std::dec << std::endl; - out << "Sourcefiles: " << filesFound.size() << std::endl; - for ( std::vector::iterator it = filesFound.begin(); it != filesFound.end(); ++it ) { - GStatBuf st; - memset(&st, 0, sizeof(st)); - if ( !g_stat(it->c_str(), &st) ) { - unsigned long when = st.st_mtime; - lastSeen = std::max(lastSeen, when); - out << std::hex << when << std::dec << " " << fileEscape(*it) << std::endl; - } else { - out << "0 " << fileEscape(*it) << std::endl; - } - } - std::string wanted = out.str(); - - std::string present; - { - gchar *contents = NULL; - if ( g_file_get_contents(iconCacheFile.c_str(), &contents, 0, 0) ) { - if ( contents ) { - present = contents; - } - g_free(contents); - contents = NULL; - } - } - bool cacheValid = (present == wanted); - - if ( cacheValid ) { - // Check if any cached rasters are out of date - Glib::Dir dir(iconCacheDir); - for ( Glib::DirIterator it = dir.begin(); cacheValid && (it != dir.end()); ++it ) { - if ( isSizedSubdir(*it) ) { - std::string subdirName = Glib::build_filename( iconCacheDir, *it ); - if ( Glib::file_test(subdirName, Glib::FILE_TEST_IS_DIR) ) { - Glib::Dir subdir(subdirName); - for ( Glib::DirIterator subit = subdir.begin(); cacheValid && (subit != subdir.end()); ++subit ) { - std::string fullpath = Glib::build_filename( subdirName, *subit ); - if ( Glib::file_test(fullpath, Glib::FILE_TEST_EXISTS) && !Glib::file_test(fullpath, Glib::FILE_TEST_IS_DIR) ) { - GStatBuf st; - memset(&st, 0, sizeof(st)); - if ( !g_stat(fullpath.c_str(), &st) ) { - unsigned long when = st.st_mtime; - if ( when < lastSeen ) { - cacheValid = false; - } - } - } - } - } - } - } - } - - if ( !cacheValid ) { - if ( Glib::file_test(iconCacheDir, Glib::FILE_TEST_EXISTS) ) { - // Purge existing icons, but not possible future sub-directories. - if ( Glib::file_test(iconCacheDir, Glib::FILE_TEST_IS_DIR) ) { - Glib::Dir dir(iconCacheDir); - for ( Glib::DirIterator it = dir.begin(); it != dir.end(); ++it ) { - if ( isSizedSubdir(*it) ) { - std::string subdirName = Glib::build_filename( iconCacheDir, *it ); - if ( Glib::file_test(subdirName, Glib::FILE_TEST_IS_DIR) ) { - Glib::Dir subdir(subdirName); - for ( Glib::DirIterator subit = subdir.begin(); subit != subdir.end(); ++subit ) { - std::string fullpath = Glib::build_filename( subdirName, *subit ); - if ( Glib::file_test(fullpath, Glib::FILE_TEST_EXISTS) && !Glib::file_test(fullpath, Glib::FILE_TEST_IS_DIR) ) { - g_remove(fullpath.c_str()); - } - } - g_rmdir( subdirName.c_str() ); - } - } - } - } - } else { - g_mkdir_with_parents( iconCacheDir.c_str(), 0x1ED ); - } - - if ( g_file_set_contents(iconCacheFile.c_str(), wanted.c_str(), wanted.size(), 0) ) { - // Caching may proceed - } else { - g_warning("Unable to write cache info file."); - } - } -} - -static Glib::ustring icon_cache_key(Glib::ustring const &name, unsigned psize); -static GdkPixbuf *get_cached_pixbuf(Glib::ustring const &key); - -void IconImpl::setupLegacyNaming() { - legacyNames["document-import"] ="file_import"; - legacyNames["document-export"] ="file_export"; - legacyNames["document-import-ocal"] ="ocal_import"; - legacyNames["document-export-ocal"] ="ocal_export"; - legacyNames["document-metadata"] ="document_metadata"; - legacyNames["dialog-input-devices"] ="input_devices"; - legacyNames["edit-duplicate"] ="edit_duplicate"; - legacyNames["edit-clone"] ="edit_clone"; - legacyNames["edit-clone-unlink"] ="edit_unlink_clone"; - legacyNames["edit-select-original"] ="edit_select_original"; - legacyNames["edit-undo-history"] ="edit_undo_history"; - legacyNames["edit-paste-in-place"] ="selection_paste_in_place"; - legacyNames["edit-paste-style"] ="selection_paste_style"; - legacyNames["selection-make-bitmap-copy"] ="selection_bitmap"; - legacyNames["edit-select-all"] ="selection_select_all"; - legacyNames["edit-select-all-layers"] ="selection_select_all_in_all_layers"; - legacyNames["edit-select-invert"] ="selection_invert"; - legacyNames["edit-select-none"] ="selection_deselect"; - legacyNames["dialog-xml-editor"] ="xml_editor"; - legacyNames["zoom-original"] ="zoom_1_to_1"; - legacyNames["zoom-half-size"] ="zoom_1_to_2"; - legacyNames["zoom-double-size"] ="zoom_2_to_1"; - legacyNames["zoom-fit-selection"] ="zoom_select"; - legacyNames["zoom-fit-drawing"] ="zoom_draw"; - legacyNames["zoom-fit-page"] ="zoom_page"; - legacyNames["zoom-fit-width"] ="zoom_pagewidth"; - legacyNames["zoom-previous"] ="zoom_previous"; - legacyNames["zoom-next"] ="zoom_next"; - legacyNames["zoom-in"] ="zoom_in"; - legacyNames["zoom-out"] ="zoom_out"; - legacyNames["show-grid"] ="grid"; - legacyNames["show-guides"] ="guides"; - legacyNames["color-management"] ="color_management"; - legacyNames["show-dialogs"] ="dialog_toggle"; - legacyNames["dialog-messages"] ="messages"; - legacyNames["dialog-scripts"] ="scripts"; - legacyNames["window-previous"] ="window_previous"; - legacyNames["window-next"] ="window_next"; - legacyNames["dialog-icon-preview"] ="view_icon_preview"; - legacyNames["window-new"] ="view_new"; - legacyNames["view-fullscreen"] ="fullscreen"; - legacyNames["layer-new"] ="new_layer"; - legacyNames["layer-rename"] ="rename_layer"; - legacyNames["layer-previous"] ="switch_to_layer_above"; - legacyNames["layer-next"] ="switch_to_layer_below"; - legacyNames["selection-move-to-layer-above"] ="move_selection_above"; - legacyNames["selection-move-to-layer-below"] ="move_selection_below"; - legacyNames["layer-raise"] ="raise_layer"; - legacyNames["layer-lower"] ="lower_layer"; - legacyNames["layer-top"] ="layer_to_top"; - legacyNames["layer-bottom"] ="layer_to_bottom"; - legacyNames["layer-delete"] ="delete_layer"; - legacyNames["dialog-layers"] ="layers"; - legacyNames["dialog-fill-and-stroke"] ="fill_and_stroke"; - legacyNames["dialog-object-properties"] ="dialog_item_properties"; - legacyNames["object-group"] ="selection_group"; - legacyNames["object-ungroup"] ="selection_ungroup"; - legacyNames["selection-raise"] ="selection_up"; - legacyNames["selection-lower"] ="selection_down"; - legacyNames["selection-top"] ="selection_top"; - legacyNames["selection-bottom"] ="selection_bot"; - legacyNames["object-rotate-left"] ="object_rotate_90_CCW"; - legacyNames["object-rotate-right"] ="object_rotate_90_CW"; - legacyNames["object-flip-horizontal"] ="object_flip_hor"; - legacyNames["object-flip-vertical"] ="object_flip_ver"; - legacyNames["dialog-transform"] ="object_trans"; - legacyNames["dialog-align-and-distribute"] ="object_align"; - legacyNames["dialog-rows-and-columns"] ="grid_arrange"; - legacyNames["object-to-path"] ="object_tocurve"; - legacyNames["stroke-to-path"] ="stroke_tocurve"; - legacyNames["bitmap-trace"] ="selection_trace"; - legacyNames["path-union"] ="union"; - legacyNames["path-difference"] ="difference"; - legacyNames["path-intersection"] ="intersection"; - legacyNames["path-exclusion"] ="exclusion"; - legacyNames["path-division"] ="division"; - legacyNames["path-cut"] ="cut_path"; - legacyNames["path-combine"] ="selection_combine"; - legacyNames["path-break-apart"] ="selection_break"; - legacyNames["path-outset"] ="outset_path"; - legacyNames["path-inset"] ="inset_path"; - legacyNames["path-offset-dynamic"] ="dynamic_offset"; - legacyNames["path-offset-linked"] ="linked_offset"; - legacyNames["path-simplify"] ="simplify"; - legacyNames["path-reverse"] ="selection_reverse"; - legacyNames["dialog-text-and-font"] ="object_font"; - legacyNames["text-put-on-path"] ="put_on_path"; - legacyNames["text-remove-from-path"] ="remove_from_path"; - legacyNames["text-flow-into-frame"] ="flow_into_frame"; - legacyNames["text-unflow"] ="unflow"; - legacyNames["text-convert-to-regular"] ="convert_to_text"; - legacyNames["text-unkern"] ="remove_manual_kerns"; - legacyNames["help-keyboard-shortcuts"] ="help_keys"; - legacyNames["help-contents"] ="help_tutorials"; - legacyNames["inkscape-logo"] ="inkscape_options"; - legacyNames["dialog-memory"] ="about_memory"; - legacyNames["tool-pointer"] ="draw_select"; - legacyNames["tool-node-editor"] ="draw_node"; - legacyNames["tool-tweak"] ="draw_tweak"; - legacyNames["zoom"] ="draw_zoom"; - legacyNames["draw-rectangle"] ="draw_rect"; - legacyNames["draw-cuboid"] ="draw_3dbox"; - legacyNames["draw-ellipse"] ="draw_arc"; - legacyNames["draw-polygon-star"] ="draw_star"; - legacyNames["draw-spiral"] ="draw_spiral"; - legacyNames["draw-freehand"] ="draw_freehand"; - legacyNames["draw-path"] ="draw_pen"; - legacyNames["draw-calligraphic"] ="draw_calligraphic"; - legacyNames["draw-eraser"] ="draw_erase"; - legacyNames["color-fill"] ="draw_paintbucket"; - legacyNames["draw-text"] ="draw_text"; - legacyNames["draw-connector"] ="draw_connector"; - legacyNames["color-gradient"] ="draw_gradient"; - legacyNames["color-picker"] ="draw_dropper"; - legacyNames["transform-affect-stroke"] ="transform_stroke"; - legacyNames["transform-affect-rounded-corners"] ="transform_corners"; - legacyNames["transform-affect-gradient"] ="transform_gradient"; - legacyNames["transform-affect-pattern"] ="transform_pattern"; - legacyNames["node-add"] ="node_insert"; - legacyNames["node-delete"] ="node_delete"; - legacyNames["node-join"] ="node_join"; - legacyNames["node-break"] ="node_break"; - legacyNames["node-join-segment"] ="node_join_segment"; - legacyNames["node-delete-segment"] ="node_delete_segment"; - legacyNames["node-type-cusp"] ="node_cusp"; - legacyNames["node-type-smooth"] ="node_smooth"; - legacyNames["node-type-symmetric"] ="node_symmetric"; - legacyNames["node-type-auto-smooth"] ="node_auto"; - legacyNames["node-segment-curve"] ="node_curve"; - legacyNames["node-segment-line"] ="node_line"; - legacyNames["show-node-handles"] ="nodes_show_handles"; - legacyNames["path-effect-parameter-next"] ="edit_next_parameter"; - legacyNames["show-path-outline"] ="nodes_show_helperpath"; - legacyNames["path-clip-edit"] ="nodeedit-clippath"; - legacyNames["path-mask-edit"] ="nodeedit-mask"; - legacyNames["node-type-cusp"] ="node_cusp"; - legacyNames["object-tweak-push"] ="tweak_move_mode"; - legacyNames["object-tweak-attract"] ="tweak_move_mode_inout"; - legacyNames["object-tweak-randomize"] ="tweak_move_mode_jitter"; - legacyNames["object-tweak-shrink"] ="tweak_scale_mode"; - legacyNames["object-tweak-rotate"] ="tweak_rotate_mode"; - legacyNames["object-tweak-duplicate"] ="tweak_moreless_mode"; - legacyNames["object-tweak-push"] ="tweak_move_mode"; - legacyNames["path-tweak-push"] ="tweak_push_mode"; - legacyNames["path-tweak-shrink"] ="tweak_shrink_mode"; - legacyNames["path-tweak-attract"] ="tweak_attract_mode"; - legacyNames["path-tweak-roughen"] ="tweak_roughen_mode"; - legacyNames["object-tweak-paint"] ="tweak_colorpaint_mode"; - legacyNames["object-tweak-jitter-color"] ="tweak_colorjitter_mode"; - legacyNames["object-tweak-blur"] ="tweak_blur_mode"; - legacyNames["rectangle-make-corners-sharp"] ="squared_corner"; - legacyNames["perspective-parallel"] ="toggle_vp_x"; - legacyNames["draw-ellipse-whole"] ="reset_circle"; - legacyNames["draw-ellipse-segment"] ="circle_closed_arc"; - legacyNames["draw-ellipse-arc"] ="circle_open_arc"; - legacyNames["draw-polygon"] ="star_flat"; - legacyNames["draw-star"] ="star_angled"; - legacyNames["path-mode-bezier"] ="bezier_mode"; - legacyNames["path-mode-spiro"] ="spiro_splines_mode"; - legacyNames["path-mode-bspline"] ="bspline_mode"; - legacyNames["path-mode-polyline"] ="polylines_mode"; - legacyNames["path-mode-polyline-paraxial"] ="paraxial_lines_mode"; - legacyNames["draw-use-tilt"] ="guse_tilt"; - legacyNames["draw-use-pressure"] ="guse_pressure"; - legacyNames["draw-trace-background"] ="trace_background"; - legacyNames["draw-eraser-delete-objects"] ="delete_object"; - legacyNames["format-text-direction-vertical"] ="writing_mode_tb"; - legacyNames["format-text-direction-horizontal"] ="writing_mode_lr"; - legacyNames["connector-avoid"] ="connector_avoid"; - legacyNames["connector-ignore"] ="connector_ignore"; - legacyNames["object-fill"] ="controls_fill"; - legacyNames["object-stroke"] ="controls_stroke"; - legacyNames["snap"] ="toggle_snap_global"; - legacyNames["snap-bounding-box"] ="toggle_snap_bbox"; - legacyNames["snap-bounding-box-edges"] ="toggle_snap_to_bbox_path"; - legacyNames["snap-bounding-box-corners"] ="toggle_snap_to_bbox_node"; - legacyNames["snap-bounding-box-midpoints"] ="toggle_snap_to_bbox_edge_midpoints"; - legacyNames["snap-bounding-box-center"] ="toggle_snap_to_bbox_midpoints"; - legacyNames["snap-nodes"] ="toggle_snap_nodes"; - legacyNames["snap-nodes-path"] ="toggle_snap_to_paths"; - legacyNames["snap-nodes-cusp"] ="toggle_snap_to_nodes"; - legacyNames["snap-nodes-smooth"] ="toggle_snap_to_smooth_nodes"; - legacyNames["snap-nodes-midpoint"] ="toggle_snap_to_midpoints"; - legacyNames["snap-nodes-intersection"] ="toggle_snap_to_path_intersections"; - legacyNames["snap-nodes-center"] ="toggle_snap_to_bbox_midpoints-3"; - legacyNames["snap-nodes-rotation-center"] ="toggle_snap_center"; - legacyNames["snap-page"] ="toggle_snap_page_border"; - legacyNames["snap-grid-guide-intersections"] ="toggle_snap_grid_guide_intersections"; - legacyNames["align-horizontal-right-to-anchor"] ="al_left_out"; - legacyNames["align-horizontal-left"] ="al_left_in"; - legacyNames["align-horizontal-center"] ="al_center_hor"; - legacyNames["align-horizontal-right"] ="al_right_in"; - legacyNames["align-horizontal-left-to-anchor"] ="al_right_out"; - legacyNames["align-horizontal-baseline"] ="al_baselines_vert"; - legacyNames["align-vertical-bottom-to-anchor"] ="al_top_out"; - legacyNames["align-vertical-top"] ="al_top_in"; - legacyNames["align-vertical-center"] ="al_center_ver"; - legacyNames["align-vertical-bottom"] ="al_bottom_in"; - legacyNames["align-vertical-top-to-anchor"] ="al_bottom_out"; - legacyNames["align-vertical-baseline"] ="al_baselines_hor"; - legacyNames["distribute-horizontal-left"] ="distribute_left"; - legacyNames["distribute-horizontal-center"] ="distribute_hcentre"; - legacyNames["distribute-horizontal-right"] ="distribute_right"; - legacyNames["distribute-horizontal-baseline"] ="distribute_baselines_hor"; - legacyNames["distribute-vertical-bottom"] ="distribute_bottom"; - legacyNames["distribute-vertical-center"] ="distribute_vcentre"; - legacyNames["distribute-vertical-top"] ="distribute_top"; - legacyNames["distribute-vertical-baseline"] ="distribute_baselines_vert"; - legacyNames["distribute-randomize"] ="distribute_randomize"; - legacyNames["distribute-unclump"] ="unclump"; - legacyNames["distribute-graph"] ="graph_layout"; - legacyNames["distribute-graph-directed"] ="directed_graph"; - legacyNames["distribute-remove-overlaps"] ="remove_overlaps"; - legacyNames["align-horizontal-node"] ="node_valign"; - legacyNames["align-vertical-node"] ="node_halign"; - legacyNames["distribute-vertical-node"] ="node_vdistribute"; - legacyNames["distribute-horizontal-node"] ="node_hdistribute"; - legacyNames["xml-element-new"] ="add_xml_element_node"; - legacyNames["xml-text-new"] ="add_xml_text_node"; - legacyNames["xml-node-delete"] ="delete_xml_node"; - legacyNames["xml-node-duplicate"] ="duplicate_xml_node"; - legacyNames["xml-attribute-delete"] ="delete_xml_attribute"; - legacyNames["transform-move-horizontal"] ="arrows_hor"; - legacyNames["transform-move-vertical"] ="arrows_ver"; - legacyNames["transform-scale-horizontal"] ="transform_scale_hor"; - legacyNames["transform-scale-vertical"] ="transform_scale_ver"; - legacyNames["transform-skew-horizontal"] ="transform_scew_hor"; - legacyNames["transform-skew-vertical"] ="transform_scew_ver"; - legacyNames["object-fill"] ="properties_fill"; - legacyNames["object-stroke"] ="properties_stroke_paint"; - legacyNames["object-stroke-style"] ="properties_stroke"; - legacyNames["paint-none"] ="fill_none"; - legacyNames["paint-solid"] ="fill_solid"; - legacyNames["paint-gradient-linear"] ="fill_gradient"; - legacyNames["paint-gradient-radial"] ="fill_radial"; - legacyNames["paint-pattern"] ="fill_pattern"; - legacyNames["paint-unknown"] ="fill_unset"; - legacyNames["fill-rule-even-odd"] ="fillrule_evenodd"; - legacyNames["fill-rule-nonzero"] ="fillrule_nonzero"; - legacyNames["stroke-join-miter"] ="join_miter"; - legacyNames["stroke-join-bevel"] ="join_bevel"; - legacyNames["stroke-join-round"] ="join_round"; - legacyNames["stroke-cap-butt"] ="cap_butt"; - legacyNames["stroke-cap-square"] ="cap_square"; - legacyNames["stroke-cap-round"] ="cap_round"; - legacyNames["guides"] ="guide"; - legacyNames["grid-rectangular"] ="grid_xy"; - legacyNames["grid-axonometric"] ="grid_axonom"; - legacyNames["object-visible"] ="visible"; - legacyNames["object-hidden"] ="hidden"; - legacyNames["object-unlocked"] ="lock_unlocked"; - legacyNames["object-locked"] ="width_height_lock"; - legacyNames["zoom"] ="sticky_zoom"; -} - -GtkWidget *IconImpl::newFull( Inkscape::IconSize lsize, gchar const *name ) -{ - static bool dump = Inkscape::Preferences::get()->getBool("/debug/icons/dumpGtk"); - - GtkWidget *widget = NULL; - gint trySize = CLAMP( static_cast(lsize), 0, static_cast(G_N_ELEMENTS(iconSizeLookup) - 1) ); - if (trySize != lsize ) { - std::cerr << "GtkWidget *IconImple::newFull(): lsize != trySize: lsize: " << lsize - << " try Size: " << trySize << " " << (name?name:"NULL") << std::endl; - } - if ( !sizeMapDone ) { - injectCustomSize(); - } - GtkIconSize mappedSize = iconSizeLookup[trySize]; - - if ( legacyNames.empty() ) { - setupLegacyNaming(); - } - - GtkWidget *img = gtk_image_new_from_icon_name( name, mappedSize ); - if ( dump ) { - g_message("gtk_image_new_from_icon_name( '%s', %d ) = %p", name, mappedSize, img); - GtkImageType thing = gtk_image_get_storage_type(GTK_IMAGE(img)); - g_message(" Type is %d %s", (int)thing, (thing == GTK_IMAGE_EMPTY ? "Empty" : "ok")); - } - - if ( img ) { - GtkImageType type = gtk_image_get_storage_type( GTK_IMAGE(img) ); - if ( type == GTK_IMAGE_ICON_NAME ) { - widget = GTK_WIDGET(img); - img = NULL; - - // Add a hook to render if set visible before prerender is done. - g_signal_connect( G_OBJECT(widget), "map", G_CALLBACK(imageMapNamedCB), GINT_TO_POINTER(0) ); - - if ( Inkscape::Preferences::get()->getBool("/options/iconrender/named_nodelay") ) { - int psize = getPhysSize(lsize); - // std::cout << " name: " << name << " size: " << psize << std::endl; - prerenderIcon(name, mappedSize, psize); - } else { - addPreRender( mappedSize, name ); - } - } else { - if ( dump ) { - g_message( "skipped gtk '%s' %d (not GTK_IMAGE_ICON_NAME)", name, lsize ); - } - //g_object_unref(G_OBJECT(img)); - img = NULL; - } - } - - if ( !widget ) { - //g_message("Creating an SPIcon instance for %s:%d", name, (int)lsize); - SPIcon *icon = SP_ICON(g_object_new(SP_TYPE_ICON, NULL)); - icon->lsize = lsize; - icon->name = g_strdup(name); - icon->psize = getPhysSize(lsize); - - widget = GTK_WIDGET(icon); - } - - return widget; -} - -// PUBLIC CALL: -GtkWidget *sp_icon_new( Inkscape::IconSize lsize, gchar const *name ) -{ - return IconImpl::newFull( lsize, name ); -} - -// PUBLIC CALL for when you REALLY need a pixbuf -GdkPixbuf *sp_pixbuf_new( Inkscape::IconSize lsize, gchar const *name ) -{ - int psize = IconImpl::getPhysSize(lsize); - return IconImpl::renderup(name, lsize, psize); -} - -// PUBLIC CALL: -Gtk::Widget *sp_icon_get_icon( Glib::ustring const &oid, Inkscape::IconSize size ) -{ - Gtk::Widget *result = NULL; - GtkWidget *widget = IconImpl::newFull( static_cast(Inkscape::getRegisteredIconSize(size)), oid.c_str() ); - - if ( widget ) { - if ( GTK_IS_IMAGE(widget) ) { - GtkImage *img = GTK_IMAGE(widget); - result = Glib::wrap( img ); - } else { - result = Glib::wrap( widget ); - } - } - - return result; -} - -void IconImpl::injectCustomSize() -{ - // TODO - still need to handle the case of theme changes and resize, especially as we can't re-register a string. - if ( !sizeMapDone ) - { - bool dump = Inkscape::Preferences::get()->getBool("/debug/icons/dumpDefault"); - gint width = 0; - gint height = 0; - if ( gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &width, &height ) ) { - gint newWidth = ((width * 3) / 4); - gint newHeight = ((height * 3) / 4); - GtkIconSize newSizeEnum = gtk_icon_size_register( "inkscape-decoration", newWidth, newHeight ); - if ( newSizeEnum ) { - if ( dump ) { - g_message("Registered (%d, %d) <= (%d, %d) as index %d", newWidth, newHeight, width, height, newSizeEnum); - } - guint index = static_cast(Inkscape::ICON_SIZE_DECORATION); - if ( index < G_N_ELEMENTS(iconSizeLookup) ) { - iconSizeLookup[index] = newSizeEnum; - } else if ( dump ) { - g_message("size lookup array too small to store entry"); - } - } - } - sizeMapDone = true; - } -} - -GtkIconSize Inkscape::getRegisteredIconSize( Inkscape::IconSize size ) -{ - GtkIconSize other = GTK_ICON_SIZE_MENU; - IconImpl::injectCustomSize(); - size = CLAMP( size, Inkscape::ICON_SIZE_MENU, Inkscape::ICON_SIZE_DECORATION ); - if ( size == Inkscape::ICON_SIZE_DECORATION ) { - other = gtk_icon_size_from_name("inkscape-decoration"); - } else { - other = static_cast(size); - } - - return other; -} - - -// PUBLIC CALL: -int sp_icon_get_phys_size(int size) -{ - return IconImpl::getPhysSize(size); -} - -int IconImpl::getPhysSize(int size) -{ - static bool init = false; - static int lastSys[Inkscape::ICON_SIZE_DECORATION + 1]; - static int vals[Inkscape::ICON_SIZE_DECORATION + 1]; - - size = CLAMP( size, static_cast(GTK_ICON_SIZE_MENU), static_cast(Inkscape::ICON_SIZE_DECORATION) ); - - if ( !sizeMapDone ) { - injectCustomSize(); - } - - if ( sizeDirty && init ) { - GtkIconSize const gtkSizes[] = { - GTK_ICON_SIZE_MENU, - GTK_ICON_SIZE_SMALL_TOOLBAR, - GTK_ICON_SIZE_LARGE_TOOLBAR, - GTK_ICON_SIZE_BUTTON, - GTK_ICON_SIZE_DND, - GTK_ICON_SIZE_DIALOG, - static_cast(Inkscape::ICON_SIZE_DECORATION) < G_N_ELEMENTS(iconSizeLookup) ? - iconSizeLookup[static_cast(Inkscape::ICON_SIZE_DECORATION)] : - GTK_ICON_SIZE_MENU - }; - for (unsigned i = 0; i < G_N_ELEMENTS(gtkSizes) && init; ++i) { - guint const val_ix = (gtkSizes[i] <= GTK_ICON_SIZE_DIALOG) ? (guint)gtkSizes[i] : (guint)Inkscape::ICON_SIZE_DECORATION; - - g_assert( val_ix < G_N_ELEMENTS(vals) ); - - gint width = 0; - gint height = 0; - if ( gtk_icon_size_lookup(gtkSizes[i], &width, &height ) ) { - init &= (lastSys[val_ix] == std::max(width, height)); - } - } - } - - if ( !init ) { - sizeDirty = false; - bool dump = Inkscape::Preferences::get()->getBool("/debug/icons/dumpDefault"); - if ( dump ) { - g_message( "Default icon sizes:" ); - } - memset( vals, 0, sizeof(vals) ); - memset( lastSys, 0, sizeof(lastSys) ); - GtkIconSize const gtkSizes[] = { - GTK_ICON_SIZE_MENU, - GTK_ICON_SIZE_SMALL_TOOLBAR, - GTK_ICON_SIZE_LARGE_TOOLBAR, - GTK_ICON_SIZE_BUTTON, - GTK_ICON_SIZE_DND, - GTK_ICON_SIZE_DIALOG, - static_cast(Inkscape::ICON_SIZE_DECORATION) < G_N_ELEMENTS(iconSizeLookup) ? - iconSizeLookup[static_cast(Inkscape::ICON_SIZE_DECORATION)] : - GTK_ICON_SIZE_MENU - }; - gchar const *const names[] = { - "GTK_ICON_SIZE_MENU", - "GTK_ICON_SIZE_SMALL_TOOLBAR", - "GTK_ICON_SIZE_LARGE_TOOLBAR", - "GTK_ICON_SIZE_BUTTON", - "GTK_ICON_SIZE_DND", - "GTK_ICON_SIZE_DIALOG", - "inkscape-decoration" - }; - - for (unsigned i = 0; i < G_N_ELEMENTS(gtkSizes); ++i) { - guint const val_ix = (gtkSizes[i] <= GTK_ICON_SIZE_DIALOG) ? (guint)gtkSizes[i] : (guint)Inkscape::ICON_SIZE_DECORATION; - - g_assert( val_ix < G_N_ELEMENTS(vals) ); - - gint width = 0; - gint height = 0; - bool used = false; - if ( gtk_icon_size_lookup(gtkSizes[i], &width, &height ) ) { - vals[val_ix] = std::max(width, height); - lastSys[val_ix] = vals[val_ix]; - used = true; - } - if (dump) { - g_message(" =-- %u size:%d %c(%d, %d) '%s'", - i, gtkSizes[i], - ( used ? ' ' : 'X' ), width, height, names[i]); - } - - // The following is needed due to this documented behavior of gtk_icon_size_lookup: - // "The rendered pixbuf may not even correspond to the width/height returned by - // gtk_icon_size_lookup(), because themes are free to render the pixbuf however - // they like, including changing the usual size." - gchar const *id = INKSCAPE_ICON("document-open"); - GtkIconTheme *icon_theme = gtk_icon_theme_get_default(); - GdkPixbuf *pb = gtk_icon_theme_load_icon (icon_theme, - id, - vals[val_ix], - (GtkIconLookupFlags)0, - NULL); - if (pb) { - width = gdk_pixbuf_get_width(pb); - height = gdk_pixbuf_get_height(pb); - int newSize = std::max( width, height ); - // TODO perhaps check a few more stock icons to get a range on sizes. - if ( newSize > 0 ) { - vals[val_ix] = newSize; - } - if (dump) { - g_message(" %u size:%d (%d, %d)", i, gtkSizes[i], width, height); - } - - g_object_unref(G_OBJECT(pb)); - } - } - init = true; - } - - return vals[size]; -} - - - -GdkPixbuf *IconImpl::loadPixmap(gchar const *name, unsigned /*lsize*/, unsigned psize) -{ - gchar *path = g_strdup_printf("%s/%s.png", INKSCAPE_PIXMAPDIR, name); - // TODO: bulia, please look over - gsize bytesRead = 0; - gsize bytesWritten = 0; - GError *error = NULL; - gchar *localFilename = g_filename_from_utf8( path, - -1, - &bytesRead, - &bytesWritten, - &error); - GdkPixbuf *pb = gdk_pixbuf_new_from_file(localFilename, NULL); - g_free(localFilename); - g_free(path); - if (!pb) { - path = g_strdup_printf("%s/%s.xpm", INKSCAPE_PIXMAPDIR, name); - // TODO: bulia, please look over - gsize bytesRead = 0; - gsize bytesWritten = 0; - GError *error = NULL; - gchar *localFilename = g_filename_from_utf8( path, - -1, - &bytesRead, - &bytesWritten, - &error); - pb = gdk_pixbuf_new_from_file(localFilename, NULL); - g_free(localFilename); - g_free(path); - } - - if (pb) { - if (!gdk_pixbuf_get_has_alpha(pb)) { - gdk_pixbuf_add_alpha(pb, FALSE, 0, 0, 0); - } - - if ( ( static_cast(gdk_pixbuf_get_width(pb)) != psize ) - || ( static_cast(gdk_pixbuf_get_height(pb)) != psize ) ) { - GdkPixbuf *spb = gdk_pixbuf_scale_simple(pb, psize, psize, GDK_INTERP_HYPER); - g_object_unref(G_OBJECT(pb)); - pb = spb; - } - } - - return pb; -} - -static Geom::IntRect round_rect(Geom::Rect const &r) -{ - using Geom::X; - using Geom::Y; - Geom::IntPoint a, b; - a[X] = round(r.left()); - a[Y] = round(r.top()); - b[X] = round(r.right()); - b[Y] = round(r.bottom()); - Geom::IntRect ret(a, b); - return ret; -} - -// takes doc, drawing, icon, and icon name to produce pixels -extern "C" guchar * -sp_icon_doc_icon( SPDocument *doc, Inkscape::Drawing &drawing, - gchar const *name, unsigned psize, - unsigned &stride) -{ - bool const dump = Inkscape::Preferences::get()->getBool("/debug/icons/dumpSvg"); - guchar *px = NULL; - - if (doc) { - SPObject *object = doc->getObjectById(name); - if (object && SP_IS_ITEM(object)) { - SPItem *item = SP_ITEM(object); - // Find bbox in document - Geom::OptRect dbox = item->documentVisualBounds(); - - if ( object->parent == NULL ) - { - dbox = Geom::Rect(Geom::Point(0, 0), - Geom::Point(doc->getWidth().value("px"), doc->getHeight().value("px"))); - } - - /* This is in document coordinates, i.e. pixels */ - if ( dbox ) { - /* Update to renderable state */ - double sf = 1.0; - drawing.root()->setTransform(Geom::Scale(sf)); - drawing.update(); - /* Item integer bbox in points */ - // NOTE: previously, each rect coordinate was rounded using floor(c + 0.5) - Geom::IntRect ibox = round_rect(*dbox); - - if ( dump ) { - g_message( " box --'%s' (%f,%f)-(%f,%f)", name, (double)ibox.left(), (double)ibox.top(), (double)ibox.right(), (double)ibox.bottom() ); - } - - /* Find button visible area */ - int width = ibox.width(); - int height = ibox.height(); - - if ( dump ) { - g_message( " vis --'%s' (%d,%d)", name, width, height ); - } - - { - int block = std::max(width, height); - if (block != static_cast(psize) ) { - if ( dump ) { - g_message(" resizing" ); - } - sf = (double)psize / (double)block; - - drawing.root()->setTransform(Geom::Scale(sf)); - drawing.update(); - - ibox = round_rect(*dbox * Geom::Scale(sf)); - if ( dump ) { - g_message( " box2 --'%s' (%f,%f)-(%f,%f)", name, (double)ibox.left(), (double)ibox.top(), (double)ibox.right(), (double)ibox.bottom() ); - } - - /* Find button visible area */ - width = ibox.width(); - height = ibox.height(); - if ( dump ) { - g_message( " vis2 --'%s' (%d,%d)", name, width, height ); - } - } - } - - Geom::IntPoint pdim(psize, psize); - int dx, dy; - //dx = (psize - width) / 2; - //dy = (psize - height) / 2; - dx=dy=psize; - dx=(dx-width)/2; // watch out for psize, since 'unsigned'-'signed' can cause problems if the result is negative - dy=(dy-height)/2; - Geom::IntRect area = Geom::IntRect::from_xywh(ibox.min() - Geom::IntPoint(dx,dy), pdim); - /* Actual renderable area */ - Geom::IntRect ua = *Geom::intersect(ibox, area); - - if ( dump ) { - g_message( " area --'%s' (%f,%f)-(%f,%f)", name, (double)area.left(), (double)area.top(), (double)area.right(), (double)area.bottom() ); - g_message( " ua --'%s' (%f,%f)-(%f,%f)", name, (double)ua.left(), (double)ua.top(), (double)ua.right(), (double)ua.bottom() ); - } - - stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, psize); - - /* Set up pixblock */ - px = g_new(guchar, stride * psize); - memset(px, 0x00, stride * psize); - - /* Render */ - cairo_surface_t *s = cairo_image_surface_create_for_data(px, - CAIRO_FORMAT_ARGB32, psize, psize, stride); - Inkscape::DrawingContext dc(s, ua.min()); - - SPNamedView *nv = sp_document_namedview(doc, NULL); - float bg_r = SP_RGBA32_R_F(nv->pagecolor); - float bg_g = SP_RGBA32_G_F(nv->pagecolor); - float bg_b = SP_RGBA32_B_F(nv->pagecolor); - float bg_a = SP_RGBA32_A_F(nv->pagecolor); - - cairo_t *cr = cairo_create(s); - cairo_set_source_rgba(cr, bg_r, bg_g, bg_b, bg_a); - cairo_rectangle(cr, 0, 0, psize, psize); - cairo_fill(cr); - cairo_save(cr); - cairo_destroy(cr); - - drawing.render(dc, ua); - cairo_surface_destroy(s); - - // convert to GdkPixbuf format - convert_pixels_argb32_to_pixbuf(px, psize, psize, stride); - - if ( Inkscape::Preferences::get()->getBool("/debug/icons/overlaySvg") ) { - IconImpl::overlayPixels( px, psize, psize, stride, 0x00, 0x00, 0xff ); - } - } - } - } - - return px; -} // end of sp_icon_doc_icon() - - - -class SVGDocCache -{ -public: - SVGDocCache( SPDocument *doc ) - : doc(doc) - , visionkey(SPItem::display_key_new(1)) - { - doc->doRef(); - doc->ensureUpToDate(); - drawing.setRoot(doc->getRoot()->invoke_show(drawing, visionkey, SP_ITEM_SHOW_DISPLAY )); - } - ~SVGDocCache() { - doc->getRoot()->invoke_hide(visionkey); - doc->doUnref(); - } - SPDocument *doc; - Inkscape::Drawing drawing; - unsigned visionkey; -}; - -static std::map doc_cache; -static std::map pb_cache; - -Glib::ustring icon_cache_key(Glib::ustring const & name, unsigned psize) -{ - Glib::ustring key = name; - key += ":"; - key += psize; - return key; -} - -GdkPixbuf *get_cached_pixbuf(Glib::ustring const &key) { - GdkPixbuf* pb = NULL; - std::map::iterator found = pb_cache.find(key); - if ( found != pb_cache.end() ) { - pb = found->second; - } - return pb; -} - -std::list &IconImpl::icons_svg_paths() -{ - static std::list sources; - static bool initialized = false; - if (!initialized) { - // Fall back from user prefs dir into system locations. - gchar *userdir = Inkscape::Application::profile_path("icons"); - sources.push_back(g_build_filename(userdir,"icons.svg", NULL)); - sources.push_back(g_build_filename(INKSCAPE_PIXMAPDIR, "icons.svg", NULL)); - g_free(userdir); - initialized = true; - } - return sources; -} - -// this function renders icons from icons.svg and returns the pixels. -guchar *IconImpl::load_svg_pixels(std::list const &names, - unsigned psize, unsigned &stride) -{ - bool const dump = Inkscape::Preferences::get()->getBool("/debug/icons/dumpSvg"); - std::list &sources = icons_svg_paths(); - - // Try each document in turn until we successfully load the icon from one - guchar *px = NULL; - for (std::list::iterator i = sources.begin(); (i != sources.end()) && !px; ++i) { - gchar *doc_filename = *i; - SVGDocCache *info = NULL; - - // Did we already load this doc? - Glib::ustring key(doc_filename); - { - std::map::iterator i = doc_cache.find(key); - if ( i != doc_cache.end() ) { - info = i->second; - } - } - - // Try to load from document. - if (!info && Inkscape::IO::file_test( doc_filename, G_FILE_TEST_IS_REGULAR ) ) { - SPDocument *doc = SPDocument::createNewDoc( doc_filename, FALSE ); - if ( doc ) { - if ( dump ) { - g_message("Loaded icon file %s", doc_filename); - } - // store into the cache - info = new SVGDocCache(doc); - doc_cache[key] = info; - } - } - if (info) { - for (std::list::const_iterator it = names.begin(); !px && (it != names.end()); ++it ) { - px = sp_icon_doc_icon( info->doc, info->drawing, it->c_str(), psize, stride ); - } - } - } - - return px; -} - -static void addToIconSet(GdkPixbuf* pb, gchar const* name, GtkIconSize lsize, unsigned psize) { - Glib::RefPtr icon_theme = Gtk::IconTheme::get_default(); - bool icon_found = icon_theme->has_icon(name); - if ( !icon_found ) { - Gtk::IconTheme::add_builtin_icon( name, psize, Glib::wrap(pb) ); - static bool dump = Inkscape::Preferences::get()->getBool("/debug/icons/dumpGtk"); - if (dump) { - g_message(" set in a builtin for %s:%d:%d", name, lsize, psize); - } - } -} - -void Inkscape::queueIconPrerender( Glib::ustring const &name, Inkscape::IconSize lsize ) -{ - gboolean themedFound = gtk_icon_theme_has_icon(gtk_icon_theme_get_default(), name.c_str()); - if ( !themedFound ) { - gint trySize = CLAMP( static_cast(lsize), 0, static_cast(G_N_ELEMENTS(iconSizeLookup) - 1) ); - if ( !sizeMapDone ) { - IconImpl::injectCustomSize(); - } - GtkIconSize mappedSize = iconSizeLookup[trySize]; - - int psize = IconImpl::getPhysSize(lsize); - // TODO place in a queue that is triggered by other map events - IconImpl::prerenderIcon(name.c_str(), mappedSize, psize); - } -} - -static std::map sizePaths; - -static std::string getDestDir( unsigned psize ) -{ - if ( sizePaths.find(psize) == sizePaths.end() ) { - gchar *tmp = g_strdup_printf("%dx%d", psize, psize); - sizePaths[psize] = tmp; - g_free(tmp); - } - - return sizePaths[psize]; -} - -// returns true if icon needed preloading, false if nothing was done -bool IconImpl::prerenderIcon(gchar const *name, GtkIconSize lsize, unsigned psize) -{ - bool loadNeeded = false; - static bool useCache = Inkscape::Preferences::get()->getBool("/debug/icons/useCache", true); - static bool cacheValidated = false; - if (!cacheValidated) { - cacheValidated = true; - if ( useCache ) { - validateCache(); - } - } - - Glib::ustring key = icon_cache_key(name, psize); - if ( !get_cached_pixbuf(key) ) { - static bool dump = Inkscape::Preferences::get()->getBool("/debug/icons/dumpGtk"); - if ((internalNames.find(name) != internalNames.end()) - || (!gtk_icon_theme_has_icon(gtk_icon_theme_get_default(), name))) { - if (dump) { - g_message("prerenderIcon [%s] %d:%d", name, lsize, psize); - } - - std::string potentialFile; - bool dataLoaded = false; - if ( useCache ) { - // In file encoding: - std::string iconCacheDir = Glib::build_filename(Glib::build_filename(Glib::get_user_cache_dir(), "inkscape"), "icons"); - std::string subpart = getDestDir(psize); - std::string subdir = Glib::build_filename( iconCacheDir, subpart ); - if ( !Glib::file_test(subdir, Glib::FILE_TEST_EXISTS) ) { - g_mkdir_with_parents( subdir.c_str(), 0x1ED ); - } - potentialFile = Glib::build_filename( subdir, name ); - potentialFile += ".png"; - - if ( Glib::file_test(potentialFile, Glib::FILE_TEST_EXISTS) && Glib::file_test(potentialFile, Glib::FILE_TEST_IS_REGULAR) ) { - bool badFile = false; - try { - Glib::RefPtr pb = Gdk::Pixbuf::create_from_file(potentialFile); - if (pb) { - dataLoaded = true; - GdkPixbuf *obj = pb->gobj(); - g_object_ref(obj); - pb_cache[key] = obj; - addToIconSet(obj, name, lsize, psize); - loadNeeded = true; - if (internalNames.find(name) == internalNames.end()) { - internalNames.insert(name); - } - } - } catch ( Glib::FileError &ex ) { - //g_warning("FileError [%s]", ex.what().c_str()); - badFile = true; - } catch ( Gdk::PixbufError &ex ) { - //g_warning("PixbufError [%s]", ex.what().c_str()); - // Invalid contents. Remove cached item - badFile = true; - } - if ( badFile ) { - g_remove(potentialFile.c_str()); - } - } - } - - if (!dataLoaded) { - std::list names; - names.push_back(name); - if ( legacyNames.find(name) != legacyNames.end() ) { - names.push_back(legacyNames[name]); - if ( dump ) { - g_message("load_svg_pixels([%s] = %s, %d, %d)", name, legacyNames[name].c_str(), lsize, psize); - } - } - unsigned stride; - guchar* px = load_svg_pixels(names, psize, stride); - if (px) { - GdkPixbuf* pb = gdk_pixbuf_new_from_data( px, GDK_COLORSPACE_RGB, TRUE, 8, - psize, psize, stride, - reinterpret_cast(g_free), NULL ); - pb_cache[key] = pb; - addToIconSet(pb, name, lsize, psize); - loadNeeded = true; - if (internalNames.find(name) == internalNames.end()) { - internalNames.insert(name); - } - if (useCache) { - g_object_ref(pb); - Glib::RefPtr ppp = Glib::wrap(pb); - try { - ppp->save( potentialFile, "png" ); - } catch ( Glib::FileError &ex ) { - //g_warning("FileError [%s]", ex.what().c_str()); - } catch ( Gdk::PixbufError &ex ) { - //g_warning("PixbufError [%s]", ex.what().c_str()); - } - } - } else if (dump) { - g_message("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX error!!! pixels not found for '%s'", name); - } - } - } - else if (dump) { - g_message("prerenderIcon [%s] %d NOT!!!!!!", name, psize); - } - } - return loadNeeded; -} - -GdkPixbuf *IconImpl::loadSvg(std::list const &names, GtkIconSize lsize, unsigned psize) -{ - Glib::ustring key = icon_cache_key(*names.begin(), psize); - - // did we already load this icon at this scale/size? - GdkPixbuf* pb = get_cached_pixbuf(key); - if (!pb) { - unsigned stride; - guchar *px = load_svg_pixels(names, psize, stride); - if (px) { - pb = gdk_pixbuf_new_from_data(px, GDK_COLORSPACE_RGB, TRUE, 8, - psize, psize, stride, - (GdkPixbufDestroyNotify)g_free, NULL); - pb_cache[key] = pb; - addToIconSet(pb, names.begin()->c_str(), lsize, psize); - } - } - - if ( pb ) { - // increase refcount since we're handing out ownership - g_object_ref(G_OBJECT(pb)); - } - return pb; -} - -void IconImpl::overlayPixels(guchar *px, int width, int height, int stride, - unsigned r, unsigned g, unsigned b) -{ - int bytesPerPixel = 4; - int spacing = 4; - for ( int y = 0; y < height; y += spacing ) { - guchar *ptr = px + y * stride; - for ( int x = 0; x < width; x += spacing ) { - *(ptr++) = r; - *(ptr++) = g; - *(ptr++) = b; - *(ptr++) = 0xff; - - ptr += bytesPerPixel * (spacing - 1); - } - } - - if ( width > 1 && height > 1 ) { - // point at the last pixel - guchar *ptr = px + ((height-1) * stride) + ((width - 1) * bytesPerPixel); - - if ( width > 2 ) { - px[4] = r; - px[5] = g; - px[6] = b; - px[7] = 0xff; - - ptr[-12] = r; - ptr[-11] = g; - ptr[-10] = b; - ptr[-9] = 0xff; - } - - ptr[-4] = r; - ptr[-3] = g; - ptr[-2] = b; - ptr[-1] = 0xff; - - px[0 + stride] = r; - px[1 + stride] = g; - px[2 + stride] = b; - px[3 + stride] = 0xff; - - ptr[0 - stride] = r; - ptr[1 - stride] = g; - ptr[2 - stride] = b; - ptr[3 - stride] = 0xff; - - if ( height > 2 ) { - ptr[0 - stride * 3] = r; - ptr[1 - stride * 3] = g; - ptr[2 - stride * 3] = b; - ptr[3 - stride * 3] = 0xff; - } - } -} - -class preRenderItem -{ -public: - preRenderItem( GtkIconSize lsize, gchar const *name ) : - _lsize( lsize ), - _name( name ) - {} - GtkIconSize _lsize; - Glib::ustring _name; -}; - - -static std::vector pendingRenders; -static bool callbackHooked = false; - -void IconImpl::addPreRender( GtkIconSize lsize, gchar const *name ) -{ - if ( !callbackHooked ) - { - callbackHooked = true; - g_idle_add_full( G_PRIORITY_LOW, &prerenderTask, NULL, NULL ); - } - - pendingRenders.push_back(preRenderItem(lsize, name)); -} - -gboolean IconImpl::prerenderTask(gpointer /*data*/) { - if ( Inkscape::Application::isCrashing() ) { - // stop - } else if (!pendingRenders.empty()) { - bool workDone = false; - do { - preRenderItem single = pendingRenders.front(); - pendingRenders.erase(pendingRenders.begin()); - int psize = getPhysSize(single._lsize); - workDone = prerenderIcon(single._name.c_str(), single._lsize, psize); - } while (!pendingRenders.empty() && !workDone); - } - - if (!Inkscape::Application::isCrashing() && !pendingRenders.empty()) { - return TRUE; - } else { - callbackHooked = false; - return FALSE; - } -} - - -void IconImpl::imageMapCB(GtkWidget* widget, gpointer user_data) -{ - gchar const* id = NULL; - GtkIconSize size = GTK_ICON_SIZE_INVALID; - gtk_image_get_icon_name(GTK_IMAGE(widget), &id, &size); - GtkIconSize lsize = static_cast(GPOINTER_TO_INT(user_data)); - if ( id ) { - int psize = getPhysSize(lsize); - g_message("imageMapCB(%p) for [%s]:%d:%d", widget, id, lsize, psize); - for ( std::vector::iterator it = pendingRenders.begin(); it != pendingRenders.end(); ++it ) { - if ( (it->_name == id) && (it->_lsize == lsize) ) { - prerenderIcon(id, lsize, psize); - pendingRenders.erase(it); - g_message(" prerender for %s:%d:%d", id, lsize, psize); - if (lsize != size) { - int psize = getPhysSize(size); - prerenderIcon(id, size, psize); - } - break; - } - } - } - - g_signal_handlers_disconnect_by_func(widget, (gpointer)imageMapCB, user_data); -} - -void IconImpl::imageMapNamedCB(GtkWidget* widget, gpointer user_data) -{ - GtkImage* img = GTK_IMAGE(widget); - gchar const* iconName = NULL; - GtkIconSize size = GTK_ICON_SIZE_INVALID; - gtk_image_get_icon_name(img, &iconName, &size); - if ( iconName ) { - GtkImageType type = gtk_image_get_storage_type( GTK_IMAGE(img) ); - if ( type == GTK_IMAGE_ICON_NAME ) { - - GtkIconSize iconSize = GTK_ICON_SIZE_INVALID; - gchar const* iconName_two = NULL; - { - g_object_get(G_OBJECT(widget), - "icon-name", &iconName_two, - "icon-size", &iconSize, - NULL); - } - - for ( std::vector::iterator it = pendingRenders.begin(); it != pendingRenders.end(); ++it ) { - /// @todo fix pointer string comparison here!!! "it->_name == iconName_two", that seems very bug-prone - if ( (it->_name == iconName_two) && (it->_lsize == iconSize) ) { - int psize = getPhysSize(iconSize); - prerenderIcon(iconName_two, iconSize, psize); - pendingRenders.erase(it); - break; - } - } - - gtk_image_set_from_icon_name(img, "", iconSize); - gtk_image_set_from_icon_name(img, iconName_two, iconSize); - } else { - g_warning("UNEXPECTED TYPE of %d", (int)type); - } - } - - g_signal_handlers_disconnect_by_func(widget, (gpointer)imageMapNamedCB, user_data); -} - - -/* - 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/widgets/icon.h b/src/widgets/icon.h deleted file mode 100644 index 5838d8de4..000000000 --- a/src/widgets/icon.h +++ /dev/null @@ -1,71 +0,0 @@ -#ifndef SEEN_SP_ICON_H -#define SEEN_SP_ICON_H - -/* - * Generic icon widget - * - * Author: - * Lauris Kaplinski - * Jon A. Cruz - * - * Copyright (C) 2002 Lauris Kaplinski - * Copyright (C) 2010 Authors - * - * Released under GNU GPL, read the file 'COPYING' for more information - */ - -#include -#include "icon-size.h" - -#define SP_TYPE_ICON sp_icon_get_type() -#define SP_ICON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_ICON, SPIcon)) -#define SP_IS_ICON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_ICON)) - -namespace Glib { -class ustring; -} - -struct SPIconClass { - GtkWidgetClass parent_class; -}; - -GType sp_icon_get_type() G_GNUC_CONST; - -struct SPIcon { - GtkWidget widget; - - Inkscape::IconSize lsize; - int psize; - gchar *name; - - GdkPixbuf *pb; - - friend class SPIconImpl; -}; - - -GtkWidget *sp_icon_new( Inkscape::IconSize size, const gchar *name ); -GdkPixbuf *sp_pixbuf_new( Inkscape::IconSize size, const gchar *name ); - -// Might return a wrapped SPIcon, or Gtk::Image -Gtk::Widget *sp_icon_get_icon( const Glib::ustring &oid, Inkscape::IconSize size = Inkscape::ICON_SIZE_BUTTON ); - -void sp_icon_fetch_pixbuf( SPIcon *icon ); -int sp_icon_get_phys_size(int size); - -namespace Inkscape { - void queueIconPrerender( Glib::ustring const &oid, Inkscape::IconSize size = Inkscape::ICON_SIZE_BUTTON ); -} - -#endif // SEEN_SP_ICON_H - -/* - 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/widgets/ink-action.cpp b/src/widgets/ink-action.cpp index 8859306f1..dae214656 100644 --- a/src/widgets/ink-action.cpp +++ b/src/widgets/ink-action.cpp @@ -1,5 +1,4 @@ #include "ink-action.h" -#include "widgets/icon.h" #include @@ -13,7 +12,7 @@ static GtkWidget* ink_action_create_tool_item( GtkAction* action ); struct _InkActionPrivate { gchar* iconId; - Inkscape::IconSize iconSize; + GtkIconSize iconSize; }; #define INK_ACTION_GET_PRIVATE( o ) ( G_TYPE_INSTANCE_GET_PRIVATE( (o), INK_ACTION_TYPE, InkActionPrivate ) ) @@ -52,9 +51,9 @@ static void ink_action_class_init( InkActionClass* klass ) g_param_spec_int( "iconSize", "Icon Size", "The size the icon", - (int)Inkscape::ICON_SIZE_MENU, - (int)Inkscape::ICON_SIZE_DECORATION, - (int)Inkscape::ICON_SIZE_SMALL_TOOLBAR, + (int)GTK_ICON_SIZE_MENU, + (int)GTK_ICON_SIZE_DIALOG, + (int)GTK_ICON_SIZE_SMALL_TOOLBAR, (GParamFlags)(G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT) ) ); g_type_class_add_private( klass, sizeof(InkActionClass) ); @@ -65,7 +64,7 @@ static void ink_action_init( InkAction* action ) { action->private_data = INK_ACTION_GET_PRIVATE( action ); action->private_data->iconId = 0; - action->private_data->iconSize = Inkscape::ICON_SIZE_SMALL_TOOLBAR; + action->private_data->iconSize = GTK_ICON_SIZE_SMALL_TOOLBAR; } static void ink_action_finalize( GObject* obj ) @@ -82,7 +81,7 @@ InkAction* ink_action_new( const gchar *name, const gchar *label, const gchar *tooltip, const gchar *inkId, - Inkscape::IconSize size ) + GtkIconSize size ) { GObject* obj = (GObject*)g_object_new( INK_ACTION_TYPE, "name", name, @@ -134,7 +133,7 @@ void ink_action_set_property( GObject* obj, guint propId, const GValue *value, G case PROP_INK_SIZE: { - action->private_data->iconSize = (Inkscape::IconSize)g_value_get_int( value ); + action->private_data->iconSize = (GtkIconSize)g_value_get_int( value ); } break; @@ -148,33 +147,7 @@ void ink_action_set_property( GObject* obj, guint propId, const GValue *value, G static GtkWidget* ink_action_create_menu_item( GtkAction* action ) { InkAction* act = INK_ACTION( action ); - GtkWidget* item = 0; - - if ( act->private_data->iconId ) { - gchar* label = 0; - g_object_get( G_OBJECT(act), "label", &label, NULL ); - item = gtk_image_menu_item_new_with_mnemonic( label ); - - GtkWidget* child = sp_icon_new( Inkscape::ICON_SIZE_MENU, act->private_data->iconId ); - // TODO this work-around is until SPIcon will live properly inside of a popup menu - if ( SP_IS_ICON(child) ) { - SPIcon* icon = SP_ICON(child); - sp_icon_fetch_pixbuf( icon ); - GdkPixbuf* target = icon->pb; - if ( target ) { - child = gtk_image_new_from_pixbuf( target ); - gtk_widget_set_sensitive(child, gtk_action_is_sensitive(action)); - gtk_widget_destroy( GTK_WIDGET(icon) ); - } - } - gtk_widget_show_all( child ); - gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM(item), child ); - - g_free( label ); - label = 0; - } else { - item = GTK_ACTION_CLASS(ink_action_parent_class)->create_menu_item( action ); - } + GtkWidget* item = GTK_ACTION_CLASS(ink_action_parent_class)->create_menu_item( action ); return item; } @@ -188,7 +161,7 @@ static GtkWidget* ink_action_create_tool_item( GtkAction* action ) if ( GTK_IS_TOOL_BUTTON(item) ) { GtkToolButton* button = GTK_TOOL_BUTTON(item); - GtkWidget* child = sp_icon_new( act->private_data->iconSize, act->private_data->iconId ); + GtkWidget* child = gtk_image_new_from_icon_name( act->private_data->iconId, act->private_data->iconSize ); gtk_tool_button_set_icon_widget( button, child ); } else { // For now trigger a warning but don't do anything else diff --git a/src/widgets/ink-action.h b/src/widgets/ink-action.h index 738212c61..99786c878 100644 --- a/src/widgets/ink-action.h +++ b/src/widgets/ink-action.h @@ -37,7 +37,7 @@ InkAction* ink_action_new( const gchar *name, const gchar *label, const gchar *tooltip, const gchar *inkId, - Inkscape::IconSize size ); + GtkIconSize size ); G_END_DECLS diff --git a/src/widgets/ink-radio-action.cpp b/src/widgets/ink-radio-action.cpp index 2113819c3..e2bf828ce 100644 --- a/src/widgets/ink-radio-action.cpp +++ b/src/widgets/ink-radio-action.cpp @@ -10,7 +10,7 @@ static GtkWidget* ink_radio_action_create_tool_item( GtkAction* action ); struct _InkRadioActionPrivate { gchar* iconId; - Inkscape::IconSize iconSize; + GtkIconSize iconSize; }; #define INK_RADIO_ACTION_GET_PRIVATE( o ) ( G_TYPE_INSTANCE_GET_PRIVATE( (o), INK_RADIO_ACTION_TYPE, InkRadioActionPrivate ) ) @@ -49,9 +49,9 @@ static void ink_radio_action_class_init( InkRadioActionClass* klass ) g_param_spec_int( "iconSize", "Icon Size", "The size the icon", - (int)Inkscape::ICON_SIZE_MENU, - (int)Inkscape::ICON_SIZE_DECORATION, - (int)Inkscape::ICON_SIZE_SMALL_TOOLBAR, + (int)GTK_ICON_SIZE_MENU, + (int)GTK_ICON_SIZE_DIALOG, + (int)GTK_ICON_SIZE_SMALL_TOOLBAR, (GParamFlags)(G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT) ) ); g_type_class_add_private( klass, sizeof(InkRadioActionClass) ); @@ -62,7 +62,7 @@ static void ink_radio_action_init( InkRadioAction* action ) { action->private_data = INK_RADIO_ACTION_GET_PRIVATE( action ); action->private_data->iconId = 0; - action->private_data->iconSize = Inkscape::ICON_SIZE_SMALL_TOOLBAR; + action->private_data->iconSize = GTK_ICON_SIZE_SMALL_TOOLBAR; } static void ink_radio_action_finalize( GObject* obj ) @@ -78,14 +78,14 @@ InkRadioAction* ink_radio_action_new( const gchar *name, const gchar *label, const gchar *tooltip, const gchar *inkId, - Inkscape::IconSize size ) + GtkIconSize size ) { GObject* obj = (GObject*)g_object_new( INK_RADIO_ACTION_TYPE, "name", name, "label", label, "tooltip", tooltip, "iconId", inkId, - "iconSize", Inkscape::getRegisteredIconSize(size), + "iconSize", size, NULL ); InkRadioAction* action = INK_RADIO_ACTION( obj ); @@ -130,7 +130,7 @@ void ink_radio_action_set_property( GObject* obj, guint propId, const GValue *va case PROP_INK_SIZE: { - action->private_data->iconSize = (Inkscape::IconSize)g_value_get_int( value ); + action->private_data->iconSize = (GtkIconSize)g_value_get_int( value ); } break; @@ -157,7 +157,7 @@ static GtkWidget* ink_radio_action_create_tool_item( GtkAction* action ) if ( GTK_IS_TOOL_BUTTON(item) ) { GtkToolButton* button = GTK_TOOL_BUTTON(item); - GtkWidget* child = sp_icon_new( act->private_data->iconSize, act->private_data->iconId ); + GtkWidget* child = gtk_image_new_from_icon_name( act->private_data->iconId, act->private_data->iconSize ); gtk_widget_set_hexpand(child, FALSE); gtk_widget_set_vexpand(child, FALSE); gtk_tool_button_set_icon_widget(button, child); diff --git a/src/widgets/ink-radio-action.h b/src/widgets/ink-radio-action.h index c1f059c4f..52afa0cb8 100644 --- a/src/widgets/ink-radio-action.h +++ b/src/widgets/ink-radio-action.h @@ -3,8 +3,6 @@ #include -#include "icon.h" - G_BEGIN_DECLS #define INK_RADIO_ACTION_TYPE ( ink_radio_action_get_type() ) @@ -35,7 +33,7 @@ InkRadioAction* ink_radio_action_new( const gchar *name, const gchar *label, const gchar *tooltip, const gchar *inkId, - Inkscape::IconSize size ); + GtkIconSize size ); G_END_DECLS diff --git a/src/widgets/ink-toggle-action.cpp b/src/widgets/ink-toggle-action.cpp index 3eed974dc..c091a2e0d 100644 --- a/src/widgets/ink-toggle-action.cpp +++ b/src/widgets/ink-toggle-action.cpp @@ -1,5 +1,4 @@ #include "ink-toggle-action.h" -#include "icon.h" static void ink_toggle_action_finalize( GObject* obj ); static void ink_toggle_action_get_property( GObject* obj, guint propId, GValue* value, GParamSpec * pspec ); @@ -13,7 +12,7 @@ static void ink_toggle_action_update_icon( InkToggleAction* action ); struct _InkToggleActionPrivate { gchar* iconId; - Inkscape::IconSize iconSize; + GtkIconSize iconSize; }; #define INK_TOGGLE_ACTION_GET_PRIVATE( o ) ( G_TYPE_INSTANCE_GET_PRIVATE( (o), INK_TOGGLE_ACTION_TYPE, InkToggleActionPrivate ) ) @@ -65,7 +64,7 @@ static void ink_toggle_action_init( InkToggleAction* action ) { action->private_data = INK_TOGGLE_ACTION_GET_PRIVATE( action ); action->private_data->iconId = 0; - action->private_data->iconSize = Inkscape::ICON_SIZE_SMALL_TOOLBAR; + action->private_data->iconSize = GTK_ICON_SIZE_SMALL_TOOLBAR; } static void ink_toggle_action_finalize( GObject* obj ) @@ -81,7 +80,7 @@ InkToggleAction* ink_toggle_action_new( const gchar *name, const gchar *label, const gchar *tooltip, const gchar *inkId, - Inkscape::IconSize size, + GtkIconSize size, SPAttributeEnum attr) { GObject* obj = (GObject*)g_object_new( INK_TOGGLE_ACTION_TYPE, @@ -89,7 +88,7 @@ InkToggleAction* ink_toggle_action_new( const gchar *name, "label", label, "tooltip", tooltip, "iconId", inkId, - "iconSize", Inkscape::getRegisteredIconSize(size), + "iconSize", size, //"SP_ATTR_INKSCAPE", attr, // Why doesn't this work and do I need to use g_object_set_data below? NULL ); @@ -138,7 +137,7 @@ void ink_toggle_action_set_property( GObject* obj, guint propId, const GValue *v case PROP_INK_SIZE: { - action->private_data->iconSize = (Inkscape::IconSize)g_value_get_int( value ); + action->private_data->iconSize = (GtkIconSize)g_value_get_int( value ); } break; @@ -164,7 +163,7 @@ static GtkWidget* ink_toggle_action_create_tool_item( GtkAction* action ) if ( GTK_IS_TOOL_BUTTON(item) ) { GtkToolButton* button = GTK_TOOL_BUTTON(item); if ( act->private_data->iconId ) { - GtkWidget* child = sp_icon_new( act->private_data->iconSize, act->private_data->iconId ); + GtkWidget* child = gtk_image_new_from_icon_name( act->private_data->iconId, act->private_data->iconSize ); gtk_widget_set_hexpand(child, FALSE); gtk_widget_set_vexpand(child, FALSE); @@ -196,7 +195,7 @@ static void ink_toggle_action_update_icon( InkToggleAction* action ) if ( GTK_IS_TOOL_BUTTON(proxies->data) ) { GtkToolButton* button = GTK_TOOL_BUTTON(proxies->data); - GtkWidget* child = sp_icon_new( action->private_data->iconSize, action->private_data->iconId ); + GtkWidget* child = gtk_image_new_from_icon_name( action->private_data->iconId, action->private_data->iconSize ); gtk_widget_set_hexpand(child, FALSE); gtk_widget_set_vexpand(child, FALSE); gtk_widget_show_all(child); diff --git a/src/widgets/ink-toggle-action.h b/src/widgets/ink-toggle-action.h index 8e9d5e257..9130b9f9f 100644 --- a/src/widgets/ink-toggle-action.h +++ b/src/widgets/ink-toggle-action.h @@ -35,7 +35,7 @@ InkToggleAction* ink_toggle_action_new( const gchar *name, const gchar *label, const gchar *tooltip, const gchar *inkId, - Inkscape::IconSize size, + GtkIconSize size, SPAttributeEnum attr = SP_ATTR_INVALID); G_END_DECLS diff --git a/src/widgets/ink-tool-menu-action.cpp b/src/widgets/ink-tool-menu-action.cpp index 29d8dc92f..44c09147b 100644 --- a/src/widgets/ink-tool-menu-action.cpp +++ b/src/widgets/ink-tool-menu-action.cpp @@ -21,7 +21,7 @@ ink_tool_menu_action_new (const gchar *name, const gchar *label, const gchar *tooltip, const gchar *inkId, - Inkscape::IconSize size ) + GtkIconSize size ) { g_return_val_if_fail (name != NULL, NULL); diff --git a/src/widgets/ink-tool-menu-action.h b/src/widgets/ink-tool-menu-action.h index be04489d3..c34aa1322 100644 --- a/src/widgets/ink-tool-menu-action.h +++ b/src/widgets/ink-tool-menu-action.h @@ -34,7 +34,7 @@ InkToolMenuAction* ink_tool_menu_action_new( const gchar *name, const gchar *label, const gchar *tooltip, const gchar *inkId, - Inkscape::IconSize size ); + GtkIconSize size ); G_END_DECLS diff --git a/src/widgets/lpe-toolbar.cpp b/src/widgets/lpe-toolbar.cpp index c714aba10..d03be1b44 100644 --- a/src/widgets/lpe-toolbar.cpp +++ b/src/widgets/lpe-toolbar.cpp @@ -328,7 +328,7 @@ void sp_lpetool_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GO _("Show limiting bounding box"), _("Show bounding box (used to cut infinite lines)"), "show-bounding-box", - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(lpetool_toggle_show_bbox), desktop ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool( "/tools/lpetool/show_bbox", true ) ); @@ -340,7 +340,7 @@ void sp_lpetool_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GO _("Get limiting bounding box from selection"), _("Set limiting bounding box (used to cut infinite lines) to the bounding box of current selection"), "draw-geometry-set-bounding-box", - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(lpetool_toggle_set_bbox), desktop ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), FALSE ); @@ -369,7 +369,7 @@ void sp_lpetool_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GO _("Display measuring info"), _("Display measuring info for selected items"), "draw-geometry-show-measuring-info", - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(lpetool_toggle_show_measuring_info), holder ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool( "/tools/lpetool/show_measuring_info", true ) ); @@ -390,7 +390,7 @@ void sp_lpetool_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GO _("Open LPE dialog"), _("Open LPE dialog (to adapt parameters numerically)"), "dialog-geometry", - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(lpetool_open_lpe_dialog), desktop ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), FALSE ); diff --git a/src/widgets/measure-toolbar.cpp b/src/widgets/measure-toolbar.cpp index 066c3fbfa..fc6cfdb11 100644 --- a/src/widgets/measure-toolbar.cpp +++ b/src/widgets/measure-toolbar.cpp @@ -266,7 +266,7 @@ void sp_measure_toolbox_prep(SPDesktop * desktop, GtkActionGroup* mainActions, G g_object_set_data( holder, "tracker", tracker ); EgeAdjustmentAction *eact = 0; - Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); + GtkIconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); /* Font Size */ { diff --git a/src/widgets/mesh-toolbar.cpp b/src/widgets/mesh-toolbar.cpp index 0ca1cc027..666d29fc4 100644 --- a/src/widgets/mesh-toolbar.cpp +++ b/src/widgets/mesh-toolbar.cpp @@ -375,7 +375,7 @@ static void mesh_toolbox_watch_ec(SPDesktop* dt, Inkscape::UI::Tools::ToolBase* */ void sp_mesh_toolbox_prep(SPDesktop * desktop, GtkActionGroup* mainActions, GObject* holder) { - Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); + GtkIconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); EgeAdjustmentAction* eact = 0; diff --git a/src/widgets/node-toolbar.cpp b/src/widgets/node-toolbar.cpp index 31efaa0b4..b1346ed89 100644 --- a/src/widgets/node-toolbar.cpp +++ b/src/widgets/node-toolbar.cpp @@ -332,7 +332,7 @@ void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObje tracker->setActiveUnit(&doc_units); g_object_set_data( holder, "tracker", tracker ); - Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); + GtkIconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); { InkToolMenuAction* inky = ink_tool_menu_action_new( "NodeInsertAction", diff --git a/src/widgets/paint-selector.cpp b/src/widgets/paint-selector.cpp index 855371ddd..27fe4b63a 100644 --- a/src/widgets/paint-selector.cpp +++ b/src/widgets/paint-selector.cpp @@ -27,7 +27,6 @@ #include "widgets/swatch-selector.h" #include "sp-pattern.h" #include -#include "widgets/icon.h" #include "widgets/widget-sizes.h" #include "xml/repr.h" @@ -236,7 +235,7 @@ sp_paint_selector_init(SPPaintSelector *psel) // TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/painting.html#FillRuleProperty gtk_widget_set_tooltip_text(psel->evenodd, _("Any path self-intersections or subpaths create holes in the fill (fill-rule: evenodd)")); g_object_set_data(G_OBJECT(psel->evenodd), "mode", GUINT_TO_POINTER(SPPaintSelector::FILLRULE_EVENODD)); - w = sp_icon_new(Inkscape::ICON_SIZE_DECORATION, INKSCAPE_ICON("fill-rule-even-odd")); + w = gtk_image_new_from_icon_name("fill-rule-even-odd", GTK_ICON_SIZE_MENU); gtk_container_add(GTK_CONTAINER(psel->evenodd), w); gtk_box_pack_start(GTK_BOX(psel->fillrulebox), psel->evenodd, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(psel->evenodd), "toggled", G_CALLBACK(sp_paint_selector_fillrule_toggled), psel); @@ -247,7 +246,7 @@ sp_paint_selector_init(SPPaintSelector *psel) // TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/painting.html#FillRuleProperty gtk_widget_set_tooltip_text(psel->nonzero, _("Fill is solid unless a subpath is counterdirectional (fill-rule: nonzero)")); g_object_set_data(G_OBJECT(psel->nonzero), "mode", GUINT_TO_POINTER(SPPaintSelector::FILLRULE_NONZERO)); - w = sp_icon_new(Inkscape::ICON_SIZE_DECORATION, INKSCAPE_ICON("fill-rule-nonzero")); + w = gtk_image_new_from_icon_name("fill-rule-nonzero", GTK_ICON_SIZE_MENU); gtk_container_add(GTK_CONTAINER(psel->nonzero), w); gtk_box_pack_start(GTK_BOX(psel->fillrulebox), psel->nonzero, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(psel->nonzero), "toggled", G_CALLBACK(sp_paint_selector_fillrule_toggled), psel); @@ -316,7 +315,7 @@ static GtkWidget *sp_paint_selector_style_button_add(SPPaintSelector *psel, gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(b), FALSE); g_object_set_data(G_OBJECT(b), "mode", GUINT_TO_POINTER(mode)); - w = sp_icon_new(Inkscape::ICON_SIZE_BUTTON, pixmap); + w = gtk_image_new_from_icon_name(pixmap, GTK_ICON_SIZE_BUTTON); gtk_widget_show(w); gtk_container_add(GTK_CONTAINER(b), w); diff --git a/src/widgets/paintbucket-toolbar.cpp b/src/widgets/paintbucket-toolbar.cpp index e2212b64f..1d5fb81e1 100644 --- a/src/widgets/paintbucket-toolbar.cpp +++ b/src/widgets/paintbucket-toolbar.cpp @@ -210,7 +210,7 @@ void sp_paintbucket_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions _("Defaults"), _("Reset paint bucket parameters to defaults (use Inkscape Preferences > Tools to change defaults)"), INKSCAPE_ICON("edit-clear"), - Inkscape::ICON_SIZE_SMALL_TOOLBAR); + GTK_ICON_SIZE_SMALL_TOOLBAR); g_signal_connect_after( G_OBJECT(inky), "activate", G_CALLBACK(paintbucket_defaults), holder ); gtk_action_group_add_action( mainActions, GTK_ACTION(inky) ); gtk_action_set_sensitive( GTK_ACTION(inky), TRUE ); diff --git a/src/widgets/pencil-toolbar.cpp b/src/widgets/pencil-toolbar.cpp index 96733cb22..918a54991 100644 --- a/src/widgets/pencil-toolbar.cpp +++ b/src/widgets/pencil-toolbar.cpp @@ -91,7 +91,7 @@ static void sp_add_freehand_mode_toggle(GtkActionGroup* mainActions, GObject* ho { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); guint freehandMode = prefs->getInt(( tool_is_pencil ? "/tools/freehand/pencil/freehand-mode" : "/tools/freehand/pen/freehand-mode" ), 0); - Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); + GtkIconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); { GtkListStore* model = gtk_list_store_new( 3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING ); @@ -398,7 +398,7 @@ void sp_pencil_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb _("Defaults"), _("Reset pencil parameters to defaults (use Inkscape Preferences > Tools to change defaults)"), INKSCAPE_ICON("edit-clear"), - Inkscape::ICON_SIZE_SMALL_TOOLBAR ); + GTK_ICON_SIZE_SMALL_TOOLBAR ); g_signal_connect_after( G_OBJECT(inky), "activate", G_CALLBACK(sp_pencil_tb_defaults), holder ); gtk_action_group_add_action( mainActions, GTK_ACTION(inky) ); } @@ -409,7 +409,7 @@ void sp_pencil_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb _("LPE based interactive simplify"), _("LPE based interactive simplify"), INKSCAPE_ICON("interactive_simplify"), - Inkscape::ICON_SIZE_SMALL_TOOLBAR ); + GTK_ICON_SIZE_SMALL_TOOLBAR ); gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(itact), prefs->getInt("/tools/freehand/pencil/simplify", 0) ); g_signal_connect_after( G_OBJECT(itact), "toggled", G_CALLBACK(freehand_simplify_lpe), holder) ; gtk_action_group_add_action( mainActions, GTK_ACTION(itact) ); @@ -420,7 +420,7 @@ void sp_pencil_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb _("LPE simplify flatten"), _("LPE simplify flatten"), INKSCAPE_ICON("flatten_simplify"), - Inkscape::ICON_SIZE_SMALL_TOOLBAR ); + GTK_ICON_SIZE_SMALL_TOOLBAR ); g_signal_connect_after( G_OBJECT(inky), "activate", G_CALLBACK(sp_simplify_flatten), holder ); gtk_action_group_add_action( mainActions, GTK_ACTION(inky) ); g_object_set_data( holder, "flatten_simplify", inky ); diff --git a/src/widgets/rect-toolbar.cpp b/src/widgets/rect-toolbar.cpp index 67947c1fd..de599cbfb 100644 --- a/src/widgets/rect-toolbar.cpp +++ b/src/widgets/rect-toolbar.cpp @@ -289,7 +289,7 @@ static void rect_toolbox_watch_ec(SPDesktop* dt, Inkscape::UI::Tools::ToolBase* void sp_rect_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder) { EgeAdjustmentAction* eact = 0; - Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); + GtkIconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); { EgeOutputAction* act = ege_output_action_new( "RectStateAction", _("New:"), "", 0 ); diff --git a/src/widgets/select-toolbar.cpp b/src/widgets/select-toolbar.cpp index 2ac7447dd..0932589d2 100644 --- a/src/widgets/select-toolbar.cpp +++ b/src/widgets/select-toolbar.cpp @@ -40,7 +40,6 @@ #include "ui/icon-names.h" #include "ui/widget/unit-tracker.h" #include "verbs.h" -#include "widgets/icon.h" #include "widgets/sp-widget.h" #include "widgets/widget-sizes.h" @@ -345,7 +344,7 @@ static void trigger_sp_action( GtkAction* /*act*/, gpointer user_data ) } } -static GtkAction* create_action_for_verb( Inkscape::Verb* verb, Inkscape::UI::View::View* view, Inkscape::IconSize size ) +static GtkAction* create_action_for_verb( Inkscape::Verb* verb, Inkscape::UI::View::View* view, GtkIconSize size ) { GtkAction* act = 0; @@ -355,15 +354,13 @@ static GtkAction* create_action_for_verb( Inkscape::Verb* verb, Inkscape::UI::Vi g_signal_connect( G_OBJECT(inky), "activate", G_CALLBACK(trigger_sp_action), targetAction ); - Inkscape::queueIconPrerender( verb->get_image(), size ); - return act; } void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder) { Inkscape::UI::View::View *view = desktop; - Inkscape::IconSize secondarySize = Inkscape::UI::ToolboxFactory::prefToSize("/toolbox/secondary", 1); + GtkIconSize secondarySize = Inkscape::UI::ToolboxFactory::prefToSize("/toolbox/secondary", 1); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); GtkAction* act = 0; @@ -492,7 +489,7 @@ void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb _("Lock width and height"), _("When locked, change both width and height by the same proportion"), INKSCAPE_ICON("object-unlocked"), - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); g_object_set( itact, "short_label", "Lock", NULL ); g_object_set_data( G_OBJECT(spw), "lock", itact ); g_signal_connect_after( G_OBJECT(itact), "toggled", G_CALLBACK(toggle_lock), desktop) ; diff --git a/src/widgets/spiral-toolbar.cpp b/src/widgets/spiral-toolbar.cpp index 98d21c84d..ef9f5bce8 100644 --- a/src/widgets/spiral-toolbar.cpp +++ b/src/widgets/spiral-toolbar.cpp @@ -225,7 +225,7 @@ static void sp_spiral_toolbox_selection_changed(Inkscape::Selection *selection, void sp_spiral_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder) { EgeAdjustmentAction* eact = 0; - Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); + GtkIconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); { EgeOutputAction* act = ege_output_action_new( "SpiralStateAction", _("New:"), "", 0 ); diff --git a/src/widgets/spray-toolbar.cpp b/src/widgets/spray-toolbar.cpp index f456bc763..2a56d81cb 100644 --- a/src/widgets/spray-toolbar.cpp +++ b/src/widgets/spray-toolbar.cpp @@ -287,7 +287,7 @@ static void sp_toggle_pick_inverse_value( GtkToggleAction* act, gpointer data ) void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder) { - Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); + GtkIconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); { /* Width */ @@ -311,7 +311,7 @@ void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObj _("Pressure"), _("Use the pressure of the input device to alter the width of spray area"), INKSCAPE_ICON("draw-use-pressure"), - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); gtk_action_group_add_action( mainActions, GTK_ACTION(act) ); PrefPusher *pusher = new PrefPusher(GTK_TOGGLE_ACTION(act), "/tools/spray/usepressurewidth"); g_signal_connect(holder, "destroy", G_CALLBACK(delete_prefspusher), pusher); @@ -427,7 +427,7 @@ void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObj _("Pressure"), _("Use the pressure of the input device to alter the amount of sprayed objects"), INKSCAPE_ICON("draw-use-pressure"), - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); gtk_action_group_add_action( mainActions, GTK_ACTION(act) ); PrefPusher *pusher = new PrefPusher(GTK_TOGGLE_ACTION(act), "/tools/spray/usepressurepopulation"); g_signal_connect(holder, "destroy", G_CALLBACK(delete_prefspusher), pusher); @@ -476,7 +476,7 @@ void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObj _("Pressure"), _("Use the pressure of the input device to alter the scale of new items"), INKSCAPE_ICON("draw-use-pressure"), - Inkscape::ICON_SIZE_DECORATION); + GTK_ICON_SIZE_MENU); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/spray/usepressurescale", false) ); g_object_set_data( holder, "usepressurescale", act ); g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_toggle_pressure_scale), holder) ; diff --git a/src/widgets/star-toolbar.cpp b/src/widgets/star-toolbar.cpp index 8f667a656..657b38f18 100644 --- a/src/widgets/star-toolbar.cpp +++ b/src/widgets/star-toolbar.cpp @@ -436,7 +436,7 @@ static void star_toolbox_watch_ec(SPDesktop* dt, Inkscape::UI::Tools::ToolBase* void sp_star_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder) { - Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); + GtkIconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); { EgeOutputAction* act = ege_output_action_new( "StarStateAction", _("New:"), "", 0 ); @@ -562,7 +562,7 @@ void sp_star_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObje _("Defaults"), _("Reset shape parameters to defaults (use Inkscape Preferences > Tools to change defaults)"), INKSCAPE_ICON("edit-clear"), - Inkscape::ICON_SIZE_SMALL_TOOLBAR); + GTK_ICON_SIZE_SMALL_TOOLBAR); g_signal_connect_after( G_OBJECT(inky), "activate", G_CALLBACK(sp_stb_defaults), holder ); gtk_action_group_add_action( mainActions, GTK_ACTION(inky) ); gtk_action_set_sensitive( GTK_ACTION(inky), TRUE ); diff --git a/src/widgets/stroke-marker-selector.cpp b/src/widgets/stroke-marker-selector.cpp index 3f81bef5c..96994741c 100644 --- a/src/widgets/stroke-marker-selector.cpp +++ b/src/widgets/stroke-marker-selector.cpp @@ -54,13 +54,8 @@ MarkerComboBox::MarkerComboBox(gchar const *id, int l) : set_cell_data_func(image_renderer, sigc::mem_fun(*this, &MarkerComboBox::prepareImageRenderer)); gtk_combo_box_set_row_separator_func(GTK_COMBO_BOX(gobj()), MarkerComboBox::separator_cb, NULL, NULL); - Glib::ustring no_marker("no-marker"); - Glib::RefPtr iconTheme = Gtk::IconTheme::get_default(); - if (!iconTheme->has_icon(no_marker)) { - Inkscape::queueIconPrerender( INKSCAPE_ICON(no_marker.data()), Inkscape::ICON_SIZE_SMALL_TOOLBAR ); - } - empty_image = new Gtk::Image( Glib::wrap( - sp_pixbuf_new( Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_ICON(no_marker.data()) ) ) ); + empty_image = new Gtk::Image(); + empty_image->set_from_icon_name("no-marker", Gtk::ICON_SIZE_SMALL_TOOLBAR); sandbox = ink_markers_preview_doc (); desktop = SP_ACTIVE_DESKTOP; diff --git a/src/widgets/stroke-style.cpp b/src/widgets/stroke-style.cpp index de3e98297..3115a32db 100644 --- a/src/widgets/stroke-style.cpp +++ b/src/widgets/stroke-style.cpp @@ -111,8 +111,9 @@ StrokeStyle::StrokeStyleButton::StrokeStyleButton(Gtk::RadioButtonGroup &grp, { show(); set_mode(false); - - Gtk::Widget *px = Gtk::manage(Glib::wrap(sp_icon_new(Inkscape::ICON_SIZE_LARGE_TOOLBAR, icon))); + + auto px = Gtk::manage(new Gtk::Image()); + px->set_from_icon_name(icon, Gtk::ICON_SIZE_LARGE_TOOLBAR); g_assert(px != NULL); px->show(); add(*px); diff --git a/src/widgets/stroke-style.h b/src/widgets/stroke-style.h index cdd825c7d..b8eaec8e8 100644 --- a/src/widgets/stroke-style.h +++ b/src/widgets/stroke-style.h @@ -52,7 +52,6 @@ #include "svg/css-ostringstream.h" #include "ui/cache/svg_preview_cache.h" #include "ui/icon-names.h" -#include "widgets/icon.h" #include "widgets/paint-selector.h" #include "widgets/sp-widget.h" #include "widgets/spw-utilities.h" diff --git a/src/widgets/text-toolbar.cpp b/src/widgets/text-toolbar.cpp index efa5527e4..bf05448eb 100644 --- a/src/widgets/text-toolbar.cpp +++ b/src/widgets/text-toolbar.cpp @@ -1706,7 +1706,7 @@ static void text_toolbox_watch_ec(SPDesktop* dt, Inkscape::UI::Tools::ToolBase* void sp_text_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); + GtkIconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); /* Font family */ { diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index 65c54f0ce..09550a2e6 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -41,7 +41,6 @@ #include "document-undo.h" #include "widgets/ege-adjustment-action.h" #include "../helper/action.h" -#include "icon.h" #include "ink-action.h" #include "ink-toggle-action.h" #include "../inkscape.h" @@ -120,12 +119,12 @@ enum BarId { static GtkWidget *sp_empty_toolbox_new(SPDesktop *desktop); -Inkscape::IconSize ToolboxFactory::prefToSize( Glib::ustring const &path, int base ) { - static Inkscape::IconSize sizeChoices[] = { - Inkscape::ICON_SIZE_LARGE_TOOLBAR, - Inkscape::ICON_SIZE_SMALL_TOOLBAR, - Inkscape::ICON_SIZE_MENU, - Inkscape::ICON_SIZE_DIALOG +GtkIconSize ToolboxFactory::prefToSize( Glib::ustring const &path, int base ) { + static GtkIconSize sizeChoices[] = { + GTK_ICON_SIZE_LARGE_TOOLBAR, + GTK_ICON_SIZE_SMALL_TOOLBAR, + GTK_ICON_SIZE_MENU, + GTK_ICON_SIZE_DIALOG }; Inkscape::Preferences *prefs = Inkscape::Preferences::get(); int index = prefs->getIntLimited( path, base, 0, G_N_ELEMENTS(sizeChoices) ); @@ -244,7 +243,7 @@ static void update_aux_toolbox(SPDesktop *desktop, ToolBase *eventcontext, GtkWi static void setup_commands_toolbox(GtkWidget *toolbox, SPDesktop *desktop); static void update_commands_toolbox(SPDesktop *desktop, ToolBase *eventcontext, GtkWidget *toolbox); -static GtkToolItem * sp_toolbox_button_item_new_from_verb_with_doubleclick( GtkWidget *t, Inkscape::IconSize size, SPButtonType type, +static GtkToolItem * sp_toolbox_button_item_new_from_verb_with_doubleclick( GtkWidget *t, GtkIconSize size, SPButtonType type, Inkscape::Verb *verb, Inkscape::Verb *doubleclick_verb, Inkscape::UI::View::View *view); @@ -301,11 +300,6 @@ VerbAction::~VerbAction() Gtk::Widget* VerbAction::create_menu_item_vfunc() { -// First call in to get the icon rendered if present in SVG - Gtk::Widget *widget = sp_icon_get_icon( get_icon_name(), Inkscape::ICON_SIZE_MENU ); - delete widget; - widget = 0; - Gtk::Widget* widg = Gtk::Action::create_menu_item_vfunc(); // g_message("create_menu_item_vfunc() = %p for '%s'", widg, verb->get_id()); return widg; @@ -314,7 +308,7 @@ Gtk::Widget* VerbAction::create_menu_item_vfunc() Gtk::Widget* VerbAction::create_tool_item_vfunc() { // Gtk::Widget* widg = Gtk::Action::create_tool_item_vfunc(); - Inkscape::IconSize toolboxSize = ToolboxFactory::prefToSize("/toolbox/tools/small"); + GtkIconSize toolboxSize = ToolboxFactory::prefToSize("/toolbox/tools/small"); GtkWidget* toolbox = 0; GtkToolItem *button_toolitem = sp_toolbox_button_item_new_from_verb_with_doubleclick( toolbox, toolboxSize, SP_BUTTON_TYPE_TOGGLE, @@ -452,7 +446,7 @@ void delete_prefspusher(GObject * /*obj*/, PrefPusher *watcher ) // ------------------------------------------------------ -GtkToolItem * sp_toolbox_button_item_new_from_verb_with_doubleclick(GtkWidget *t, Inkscape::IconSize size, SPButtonType type, +GtkToolItem * sp_toolbox_button_item_new_from_verb_with_doubleclick(GtkWidget *t, GtkIconSize size, SPButtonType type, Inkscape::Verb *verb, Inkscape::Verb *doubleclick_verb, Inkscape::UI::View::View *view) { @@ -504,7 +498,7 @@ static void trigger_sp_action( GtkAction* /*act*/, gpointer user_data ) } } -static GtkAction* create_action_for_verb( Inkscape::Verb* verb, Inkscape::UI::View::View* view, Inkscape::IconSize size ) +static GtkAction* create_action_for_verb( Inkscape::Verb* verb, Inkscape::UI::View::View* view, GtkIconSize size ) { GtkAction* act = 0; @@ -584,7 +578,7 @@ static Glib::RefPtr create_or_fetch_actions( SPDesktop* deskto SP_VERB_ZOOM_SELECTION }; - Inkscape::IconSize toolboxSize = ToolboxFactory::prefToSize("/toolbox/small"); + GtkIconSize toolboxSize = ToolboxFactory::prefToSize("/toolbox/small"); Glib::RefPtr mainActions; if (desktop == NULL) { @@ -853,7 +847,7 @@ static void setupToolboxCommon( GtkWidget *toolbox, gtk_toolbar_set_style( GTK_TOOLBAR(toolBar), GTK_TOOLBAR_ICONS ); } - Inkscape::IconSize toolboxSize = ToolboxFactory::prefToSize(sizePref); + GtkIconSize toolboxSize = ToolboxFactory::prefToSize(sizePref); gtk_toolbar_set_icon_size( GTK_TOOLBAR(toolBar), static_cast(toolboxSize) ); GtkPositionType pos = static_cast(GPOINTER_TO_INT(g_object_get_data( G_OBJECT(toolbox), HANDLE_POS_MARK ))); @@ -1039,7 +1033,7 @@ void setup_aux_toolbox(GtkWidget *toolbox, SPDesktop *desktop) gtk_toolbar_set_style( GTK_TOOLBAR(toolBar), GTK_TOOLBAR_ICONS ); } - Inkscape::IconSize toolboxSize = ToolboxFactory::prefToSize("/toolbox/small"); + GtkIconSize toolboxSize = ToolboxFactory::prefToSize("/toolbox/small"); gtk_toolbar_set_icon_size( GTK_TOOLBAR(toolBar), static_cast(toolboxSize) ); gtk_widget_set_hexpand(toolBar, TRUE); gtk_grid_attach( GTK_GRID(holder), toolBar, 0, 0, 1, 1); @@ -1230,7 +1224,7 @@ void setup_snap_toolbox(GtkWidget *toolbox, SPDesktop *desktop) { Glib::RefPtr mainActions = create_or_fetch_actions(desktop); - Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); + GtkIconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); { // TODO: This is a cludge. On the one hand we have verbs+actions, diff --git a/src/widgets/toolbox.h b/src/widgets/toolbox.h index db9130034..09178ec2f 100644 --- a/src/widgets/toolbox.h +++ b/src/widgets/toolbox.h @@ -61,7 +61,7 @@ public: static void updateSnapToolbox(SPDesktop *desktop, Inkscape::UI::Tools::ToolBase *eventcontext, GtkWidget *toolbox); - static Inkscape::IconSize prefToSize(Glib::ustring const &path, int base = 0 ); + static GtkIconSize prefToSize(Glib::ustring const &path, int base = 0 ); private: ToolboxFactory(); diff --git a/src/widgets/tweak-toolbar.cpp b/src/widgets/tweak-toolbar.cpp index a6b8ba436..6a2847c68 100644 --- a/src/widgets/tweak-toolbar.cpp +++ b/src/widgets/tweak-toolbar.cpp @@ -117,7 +117,7 @@ static void tweak_toggle_doo(GtkToggleAction *act, gpointer /*data*/) { void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder) { - Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); + GtkIconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); { @@ -286,7 +286,7 @@ void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObj _("Hue"), _("In color mode, act on objects' hue"), NULL, - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); //TRANSLATORS: "H" here stands for hue g_object_set( act, "short_label", C_("Hue", "H"), NULL ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); @@ -302,7 +302,7 @@ void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObj _("Saturation"), _("In color mode, act on objects' saturation"), NULL, - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); //TRANSLATORS: "S" here stands for Saturation g_object_set( act, "short_label", C_("Saturation", "S"), NULL ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); @@ -318,7 +318,7 @@ void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObj _("Lightness"), _("In color mode, act on objects' lightness"), NULL, - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); //TRANSLATORS: "L" here stands for Lightness g_object_set( act, "short_label", C_("Lightness", "L"), NULL ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); @@ -334,7 +334,7 @@ void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObj _("Opacity"), _("In color mode, act on objects' opacity"), NULL, - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); //TRANSLATORS: "O" here stands for Opacity g_object_set( act, "short_label", C_("Opacity", "O"), NULL ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); @@ -372,7 +372,7 @@ void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObj _("Pressure"), _("Use the pressure of the input device to alter the force of tweak action"), INKSCAPE_ICON("draw-use-pressure"), - Inkscape::ICON_SIZE_DECORATION ); + GTK_ICON_SIZE_MENU ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_tweak_pressure_state_changed), NULL); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/tweak/usepressure", true) ); -- cgit v1.2.3 From 301acc32ee97b589fe192a586e63429c532fbc68 Mon Sep 17 00:00:00 2001 From: Alexander Valavanis Date: Thu, 29 Jun 2017 13:49:29 +0200 Subject: Add missing icon --- share/icons/object-stroke.svg | 94 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 share/icons/object-stroke.svg diff --git a/share/icons/object-stroke.svg b/share/icons/object-stroke.svg new file mode 100644 index 000000000..ad43a6a6a --- /dev/null +++ b/share/icons/object-stroke.svg @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + -- cgit v1.2.3 From dcf65cc76fdaf74ebc33810c06e8ecd59fe652ce Mon Sep 17 00:00:00 2001 From: Martin Owens Date: Thu, 29 Jun 2017 14:05:52 +0200 Subject: Add replacements for themedir for osx and win32 --- src/path-prefix.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/path-prefix.h b/src/path-prefix.h index e54a80f28..77fd90da5 100644 --- a/src/path-prefix.h +++ b/src/path-prefix.h @@ -64,6 +64,7 @@ # define INKSCAPE_PATTERNSDIR WIN32_DATADIR("patterns") # define INKSCAPE_SCREENSDIR WIN32_DATADIR("screens") # define INKSCAPE_SYMBOLSDIR WIN32_DATADIR("symbols") +# define INKSCAPE_THEMEDIR INKSCAPE_PIXMAPDIR # define INKSCAPE_TUTORIALSDIR WIN32_DATADIR("tutorials") # define INKSCAPE_TEMPLATESDIR WIN32_DATADIR("templates") # define INKSCAPE_UIDIR WIN32_DATADIR("ui") @@ -86,6 +87,7 @@ # define INKSCAPE_PATTERNSDIR "Contents/Resources/share/inkscape/patterns" # define INKSCAPE_SCREENSDIR "Contents/Resources/share/inkscape/screens" # define INKSCAPE_SYMBOLSDIR "Contents/Resources/share/inkscape/symbols" +# define INKSCAPE_THEMEDIR INKSCAPE_PIXMAPDIR # define INKSCAPE_TUTORIALSDIR "Contents/Resources/share/inkscape/tutorials" # define INKSCAPE_TEMPLATESDIR "Contents/Resources/share/inkscape/templates" # define INKSCAPE_UIDIR "Contents/Resources/share/inkscape/ui" -- cgit v1.2.3 From ac56c675aaa6d3c1f3550d0e3f1b25ff1eeb866c Mon Sep 17 00:00:00 2001 From: Alexander Valavanis Date: Thu, 29 Jun 2017 15:06:13 +0200 Subject: Dock: Rm unnecessary enum --- src/ui/dialog/dock-behavior.cpp | 4 ++-- src/ui/widget/dock-item.cpp | 12 ++++++------ src/ui/widget/dock-item.h | 14 ++------------ src/ui/widget/dock.cpp | 5 +++-- src/ui/widget/dock.h | 2 +- 5 files changed, 14 insertions(+), 23 deletions(-) diff --git a/src/ui/dialog/dock-behavior.cpp b/src/ui/dialog/dock-behavior.cpp index 299584a31..0c8bb3194 100644 --- a/src/ui/dialog/dock-behavior.cpp +++ b/src/ui/dialog/dock-behavior.cpp @@ -39,9 +39,9 @@ DockBehavior::DockBehavior(Dialog &dialog) : static_cast( Inkscape::Preferences::get()->getInt(_dialog._prefs_path + "/state", UI::Widget::DockItem::DOCKED_STATE)), - static_cast( + static_cast( Inkscape::Preferences::get()->getInt(_dialog._prefs_path + "/placement", - UI::Widget::DockItem::TOP))) + GDL_DOCK_TOP))) { // Connect signals diff --git a/src/ui/widget/dock-item.cpp b/src/ui/widget/dock-item.cpp index d268be785..60ea03fb7 100644 --- a/src/ui/widget/dock-item.cpp +++ b/src/ui/widget/dock-item.cpp @@ -21,7 +21,7 @@ namespace UI { namespace Widget { DockItem::DockItem(Dock& dock, const Glib::ustring& name, const Glib::ustring& long_name, - const Glib::ustring& icon_name, State state, Placement placement) : + const Glib::ustring& icon_name, State state, GdlDockPlacement placement) : _dock(dock), _prev_state(state), _prev_position(0), @@ -70,7 +70,7 @@ DockItem::DockItem(Dock& dock, const Glib::ustring& name, const Glib::ustring& l signal_delete_event().connect(sigc::mem_fun(*this, &Inkscape::UI::Widget::DockItem::_onDeleteEvent)); signal_realize().connect(sigc::mem_fun(*this, &Inkscape::UI::Widget::DockItem::_onRealize)); - _dock.addItem(*this, ( _prev_state == FLOATING_STATE || _prev_state == ICONIFIED_FLOATING_STATE ) ? FLOATING : placement); + _dock.addItem(*this, ( _prev_state == FLOATING_STATE || _prev_state == ICONIFIED_FLOATING_STATE ) ? GDL_DOCK_FLOATING : placement); if (_prev_state == ICONIFIED_FLOATING_STATE || _prev_state == ICONIFIED_DOCKED_STATE) { iconify(); @@ -214,16 +214,16 @@ DockItem::getPrevState() const return _prev_state; } -DockItem::Placement +GdlDockPlacement DockItem::getPlacement() const { - GdlDockPlacement placement = (GdlDockPlacement)TOP; + GdlDockPlacement placement = GDL_DOCK_TOP; GdlDockObject *parent = gdl_dock_object_get_parent_object (GDL_DOCK_OBJECT(_gdl_dock_item)); if (parent) { gdl_dock_object_child_placement(parent, GDL_DOCK_OBJECT(_gdl_dock_item), &placement); } - return (Placement)placement; + return placement; } void @@ -258,7 +258,7 @@ DockItem::present() show(); } // tabbed - else if (getPlacement() == CENTER) { + else if (getPlacement() == GDL_DOCK_CENTER) { int i = gtk_notebook_page_num(GTK_NOTEBOOK(gtk_widget_get_parent(_gdl_dock_item)), GTK_WIDGET (_gdl_dock_item)); if (i >= 0) diff --git a/src/ui/widget/dock-item.h b/src/ui/widget/dock-item.h index 2df45b207..b5f6c13af 100644 --- a/src/ui/widget/dock-item.h +++ b/src/ui/widget/dock-item.h @@ -45,18 +45,8 @@ public: ICONIFIED_DOCKED_STATE, // item iconified in its assigned dock from dock ICONIFIED_FLOATING_STATE}; // item iconified in its assigned dock from float - enum Placement { - NONE = GDL_DOCK_NONE, - TOP = GDL_DOCK_TOP, - BOTTOM = GDL_DOCK_BOTTOM, - RIGHT = GDL_DOCK_RIGHT, - LEFT = GDL_DOCK_LEFT, - CENTER = GDL_DOCK_CENTER, - FLOATING = GDL_DOCK_FLOATING - }; - DockItem(Dock& dock, const Glib::ustring& name, const Glib::ustring& long_name, - const Glib::ustring& icon_name, State state, Placement placement); + const Glib::ustring& icon_name, State state, GdlDockPlacement placement); ~DockItem(); @@ -80,7 +70,7 @@ public: bool isIconified() const; State getState() const; State getPrevState() const; - Placement getPlacement() const; + GdlDockPlacement getPlacement() const; Gtk::Window *getWindow(); //< gives the parent window, if the dock item has one (i.e. it's floating) diff --git a/src/ui/widget/dock.cpp b/src/ui/widget/dock.cpp index b2dec401f..7dfad9582 100644 --- a/src/ui/widget/dock.cpp +++ b/src/ui/widget/dock.cpp @@ -124,12 +124,13 @@ Dock::~Dock() g_free(_gdl_dock_bar); } -void Dock::addItem(DockItem& item, DockItem::Placement placement) +void Dock::addItem(DockItem& item, GdlDockPlacement placement) { _dock_items.push_back(&item); + gdl_dock_add_item(GDL_DOCK(_gdl_dock), GDL_DOCK_ITEM(item.gobj()), - (GdlDockPlacement)placement); + placement); // FIXME: This is a hack to prevent the dock from expanding the main window, this can't be done // initially as the paned doesn't exist. diff --git a/src/ui/widget/dock.h b/src/ui/widget/dock.h index 74b072d22..6258a06e3 100644 --- a/src/ui/widget/dock.h +++ b/src/ui/widget/dock.h @@ -37,7 +37,7 @@ public: Dock(Gtk::Orientation orientation=Gtk::ORIENTATION_VERTICAL); ~Dock(); - void addItem(DockItem& item, DockItem::Placement placement); + void addItem(DockItem& item, GdlDockPlacement placement); Gtk::Widget& getWidget(); //< return the top widget Gtk::Paned *getParentPaned(); -- cgit v1.2.3 From 54fa1347a2ead6cc79a679a97b39addc1feaea38 Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Thu, 29 Jun 2017 15:28:06 +0200 Subject: glade WIP --- share/ui/CMakeLists.txt | 2 +- share/ui/filter-editor.glade | 381 ++++++++++++++++++++++++++++++++++++++++ src/ui/dialog/filter-editor.cpp | 61 ++++--- src/ui/dialog/filter-editor.h | 14 +- 4 files changed, 423 insertions(+), 35 deletions(-) create mode 100644 share/ui/filter-editor.glade diff --git a/share/ui/CMakeLists.txt b/share/ui/CMakeLists.txt index 80bcd1b5d..e3eb742b2 100644 --- a/share/ui/CMakeLists.txt +++ b/share/ui/CMakeLists.txt @@ -1,3 +1,3 @@ -file(GLOB _FILES "*.xml" "*.rc" "*.css" "*.ui") +file(GLOB _FILES "*.xml" "*.rc" "*.css" "*.ui" "*.glade") install(FILES ${_FILES} DESTINATION ${INKSCAPE_SHARE_INSTALL}/ui) diff --git a/share/ui/filter-editor.glade b/share/ui/filter-editor.glade new file mode 100644 index 000000000..908e0d7e3 --- /dev/null +++ b/share/ui/filter-editor.glade @@ -0,0 +1,381 @@ + + + + + + + + + + + + + + + + + + test1 + a + False + + + + test2 + b + False + + + + test3 + c + False + + + + + + False + + + + + + + + + + + + whatever + + + second choice + + + + + True + False + vertical + + + True + False + + + True + False + + filter1 + filter2 + + + + True + True + 0 + + + + + True + False + FER: + + + False + True + 1 + + + + + True + False + X: + + + False + True + 2 + + + + + True + True + number + vertical + -0.10000000000000001 + + + False + True + 3 + + + + + True + False + Y: + + + False + True + 4 + + + + + True + True + vertical + + + False + True + 5 + + + + + True + False + W: + + + False + True + 6 + + + + + True + True + vertical + + + False + True + 7 + + + + + True + False + H: + + + False + True + 8 + + + + + True + True + vertical + + + False + True + 9 + + + + + False + True + 0 + + + + + True + True + + + True + False + vertical + + + True + True + FilterStore + False + True + True + True + True + + + + + + fixed + Effect + + + + 0 + + + + + + + fixed + Name + + + + 1 + + + + + + + fixed + Origin(s) + True + + + FilterStore1 + 0 + + + + + + + True + True + 0 + + + + + True + False + + + True + False + + + True + True + 0 + + + + + Add + True + True + True + + + False + True + 1 + + + + + False + False + end + 1 + + + + + True + True + + + + + True + False + vertical + + + True + False + + + True + True + 0 + + + + + + + + True + False + + + True + False + gtk-dialog-info + 6 + + + False + False + 0 + + + + + True + False + This effect does this and that. + + + True + True + 1 + + + + + True + True + 2 + + + + + True + True + + + + + True + True + 1 + + + + + True + False + FilterStore1 + 0 + 0 + + diff --git a/src/ui/dialog/filter-editor.cpp b/src/ui/dialog/filter-editor.cpp index bf4fbdf99..31723506d 100644 --- a/src/ui/dialog/filter-editor.cpp +++ b/src/ui/dialog/filter-editor.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include "desktop.h" @@ -55,39 +56,53 @@ #include "verbs.h" #include "io/sys.h" +#include "io/resource.h" #include "selection-chemistry.h" -#include -#include -#include +#include -using namespace Inkscape::Filters; +#include +using namespace Inkscape::Filters; +using namespace Inkscape::IO::Resource; namespace Inkscape::UI::Dialog { -FilterEditorDialog::FilterEditorDialog() { +FilterEditorDialog::FilterEditorDialog() : UI::Widget::Panel("", "/dialogs/filtereffects", SP_VERB_DIALOG_FILTER_EFFECTS) +{ - builder = Gtk::Builder::create_from_file("/home/mc/Desktop/test.glade"); - builder->get_widget("FilterEditor", FilterEditor); - builder->get_widget("FilterList", FilterList); - builder->get_widget("FilterFERX", FilterFERX); - builder->get_widget("FilterFERY", FilterFERY); - builder->get_widget("FilterFERH", FilterFERH); - builder->get_widget("FilterFERW", FilterFERW); - builder->get_widget("FilterPreview",FilterPreview); - builder->get_widget("FilterStore", FilterStore); - builder->get_widget("FilterPrimitiveDescImage", FilterPrimitiveDescImage); - //builder->get_widget("FilterPrimitiveParameters",FilterPrimitiveParameters); - builder->get_widget("FilterPrimitiveDescText", FilterPrimitiveDescText); - builder->get_widget("FilterPrimitiveList", FilterPrimitiveList); - builder->get_widget("FilterPrimitiveAdd", FilterPrimitiveAdd); - if (!(FilterList && FilterFERX && FilterFERY && FilterFERH && FilterFERW && FilterPreview - && FilterStore && FilterPrimitiveDescImage && FilterPrimitiveDescText && FilterPrimitiveList - && FilterPrimitiveAdd )) { - g_warning("Some widget does not exist!"); + const std::string req_widgets[] = {"FilterEditor", "FilterList", "FilterFERX", "FilterFERY", "FilterFERH", "FilterFERW", "FilterPreview", "FilterPrimitiveDescImage", "FilterPrimitiveList", "FilterPrimitiveDescText", "FilterPrimitiveAdd"}; + Glib::ustring gladefile = get_filename(UIS, "filter-editor.glade"); + try { + builder = Gtk::Builder::create_from_file(gladefile); + } catch(const Glib::Error& ex) { + g_warning("Glade file loading failed for filter effect dialog"); + return; } + + Gtk::Object* test; + for(std::string w:req_widgets) { + builder->get_widget(w,test); + if(!test){ + g_warning("Required widget %s does not exist", w); + return; + } + } + + builder->get_widget("FilterEditor", FilterEditor); _getContents()->add(*FilterEditor); +//test + Gtk::ComboBox *OptionList; + builder->get_widget("OptionList",OptionList); + FilterStore = builder->get_object("FilterStore"); + Glib::RefPtr fs = Glib::RefPtr::cast_static(FilterStore); + Gtk::TreeModel::Row row = *(fs->append()); + row[3]=OptionList; + + + + + } FilterEditorDialog::~FilterEditorDialog(){} diff --git a/src/ui/dialog/filter-editor.h b/src/ui/dialog/filter-editor.h index 1ca4e1760..6acb83f02 100644 --- a/src/ui/dialog/filter-editor.h +++ b/src/ui/dialog/filter-editor.h @@ -9,8 +9,8 @@ * Released under GNU GPL. Read the file 'COPYING' for more information. */ -#ifndef INKSCAPE_UI_DIALOG_FILTER_EFFECTS_H -#define INKSCAPE_UI_DIALOG_FILTER_EFFECTS_H +#ifndef INKSCAPE_UI_DIALOG_FILTER_EDITOR_H +#define INKSCAPE_UI_DIALOG_FILTER_EDITOR_H #include "attributes.h" #include "ui/widget/panel.h" @@ -44,15 +44,7 @@ public: // void set_attrs_locked(const bool); private: Glib::RefPtr builder; - Gtk::ComboBoxText *FilterList; - Gtk::SpinButton *FilterFERX, *FilterFERY, *FilterFERW, *FilterFERH; - Gtk::DrawingArea *FilterPreview; - Gtk::Image *FilterPrimitiveDescImage; - Gtk::Box *FilterPrimitiveParameters; - Gtk::Label *FilterPrimitiveDescText; - Gtk::ComboBox *FilterPrimitiveList; - Gtk::Button *FilterPrimitiveAdd; - Gtk::ListStore *FilterStore; + Glib::RefPtr FilterStore; Gtk::Box *FilterEditor; }; } -- cgit v1.2.3 From d0dd42c6b365170d3113251cf87d7ebb74c7ef3e Mon Sep 17 00:00:00 2001 From: Alexander Valavanis Date: Thu, 29 Jun 2017 15:31:52 +0200 Subject: interface: Rm unused function --- src/ui/interface.cpp | 29 ----------------------------- 1 file changed, 29 deletions(-) diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index 4246ae34e..a0ee5c72b 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -136,8 +136,6 @@ static void sp_ui_menu_item_set_name(GtkWidget *data, Glib::ustring const &name); static void sp_recent_open(GtkRecentChooser *, gpointer); -static void injectRenamedIcons(); - static const int MIN_ONSCREEN_DISTANCE = 50; void @@ -1441,33 +1439,6 @@ sp_ui_menu_item_set_name(GtkWidget *data, Glib::ustring const &name) } } } - -void injectRenamedIcons() -{ - Glib::RefPtr iconTheme = Gtk::IconTheme::get_default(); - - std::vector< std::pair > renamed; - renamed.push_back(std::make_pair("gtk-file", "document-x-generic")); - renamed.push_back(std::make_pair("gtk-directory", "folder")); - - for ( std::vector< std::pair >::iterator it = renamed.begin(); it < renamed.end(); ++it ) { - bool hasIcon = iconTheme->has_icon(it->first); - bool hasSecondIcon = iconTheme->has_icon(it->second); - - if ( !hasIcon && hasSecondIcon ) { - Glib::ArrayHandle sizes = iconTheme->get_icon_sizes(it->second); - for ( Glib::ArrayHandle::iterator it2 = sizes.begin(); it2 < sizes.end(); ++it2 ) { - Glib::RefPtr pb = iconTheme->load_icon( it->second, *it2 ); - if ( pb ) { - // install a private copy of the pixbuf to avoid pinning a theme - Glib::RefPtr pbCopy = pb->copy(); - Gtk::IconTheme::add_builtin_icon( it->first, *it2, pbCopy ); - } - } - } - } -} - /* Local Variables: mode:c++ -- cgit v1.2.3 From f05f5f873a44b5c1ac7b75e85e73e3799aea201f Mon Sep 17 00:00:00 2001 From: Alexander Valavanis Date: Thu, 29 Jun 2017 15:37:19 +0200 Subject: previewholder: Rm unused (and wrongly constructed) var --- src/ui/previewholder.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ui/previewholder.cpp b/src/ui/previewholder.cpp index 6fec65124..e294bd408 100644 --- a/src/ui/previewholder.cpp +++ b/src/ui/previewholder.cpp @@ -149,7 +149,6 @@ void PreviewHolder::addPreview( Previewable* preview ) auto target = kids[childCount - (j + 1)]; int col2 = j % width; int row2 = j / width; - Glib::RefPtr handle(target); _insides->remove( *target ); target->set_hexpand(); -- cgit v1.2.3 From aac1f9ebe22ef8bfcc8941977563e6a0a429ecb8 Mon Sep 17 00:00:00 2001 From: Alexander Valavanis Date: Thu, 29 Jun 2017 16:04:38 +0200 Subject: Use Gtk orientable widgets --- src/ui/dialog/grid-arrange-tab.cpp | 4 ++++ src/ui/dialog/grid-arrange-tab.h | 20 ++++++++------------ src/ui/dialog/styledialog.cpp | 2 ++ src/ui/dialog/styledialog.h | 6 +++--- 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/ui/dialog/grid-arrange-tab.cpp b/src/ui/dialog/grid-arrange-tab.cpp index 5d7422279..bb8fc564a 100644 --- a/src/ui/dialog/grid-arrange-tab.cpp +++ b/src/ui/dialog/grid-arrange-tab.cpp @@ -610,6 +610,7 @@ GridArrangeTab::GridArrangeTab(ArrangeDialog *parent) NoOfRowsLabel.set_text_with_mnemonic(_("_Rows:")); NoOfRowsLabel.set_mnemonic_widget(NoOfRowsSpinner); + NoOfRowsBox.set_orientation(Gtk::ORIENTATION_VERTICAL); NoOfRowsBox.pack_start(NoOfRowsLabel, false, false, MARGIN); NoOfRowsSpinner.set_digits(0); @@ -640,6 +641,7 @@ GridArrangeTab::GridArrangeTab(ArrangeDialog *parent) /*#### Label for X ####*/ padXByYLabel.set_label(" "); + XByYLabelVBox.set_orientation(Gtk::ORIENTATION_VERTICAL); XByYLabelVBox.pack_start(padXByYLabel, false, false, MARGIN); XByYLabel.set_markup(" × "); XByYLabelVBox.pack_start(XByYLabel, false, false, MARGIN); @@ -650,6 +652,7 @@ GridArrangeTab::GridArrangeTab(ArrangeDialog *parent) NoOfColsLabel.set_text_with_mnemonic(_("_Columns:")); NoOfColsLabel.set_mnemonic_widget(NoOfColsSpinner); + NoOfColsBox.set_orientation(Gtk::ORIENTATION_VERTICAL); NoOfColsBox.pack_start(NoOfColsLabel, false, false, MARGIN); NoOfColsSpinner.set_digits(0); @@ -676,6 +679,7 @@ GridArrangeTab::GridArrangeTab(ArrangeDialog *parent) SpinsHBox.pack_start(NoOfColsBox, false, false, MARGIN); + TileBox.set_orientation(Gtk::ORIENTATION_VERTICAL); TileBox.pack_start(SpinsHBox, false, false, MARGIN); VertAlign = prefs->getInt("/dialogs/gridtiler/VertAlign", 1); diff --git a/src/ui/dialog/grid-arrange-tab.h b/src/ui/dialog/grid-arrange-tab.h index 891849f1a..93bc38218 100644 --- a/src/ui/dialog/grid-arrange-tab.h +++ b/src/ui/dialog/grid-arrange-tab.h @@ -73,7 +73,7 @@ private: bool userHidden; bool updating; - Gtk::VBox TileBox; + Gtk::Box TileBox; Gtk::Button *TileOkButton; Gtk::Button *TileCancelButton; @@ -81,22 +81,22 @@ private: Gtk::Label SelectionContentsLabel; - Gtk::HBox AlignHBox; - Gtk::HBox SpinsHBox; + Gtk::Box AlignHBox; + Gtk::Box SpinsHBox; // Number per Row - Gtk::VBox NoOfColsBox; + Gtk::Box NoOfColsBox; Gtk::Label NoOfColsLabel; Inkscape::UI::Widget::SpinButton NoOfColsSpinner; bool AutoRowSize; Gtk::CheckButton RowHeightButton; - Gtk::VBox XByYLabelVBox; + Gtk::Box XByYLabelVBox; Gtk::Label padXByYLabel; Gtk::Label XByYLabel; // Number per Column - Gtk::VBox NoOfRowsBox; + Gtk::Box NoOfRowsBox; Gtk::Label NoOfRowsLabel; Inkscape::UI::Widget::SpinButton NoOfRowsSpinner; bool AutoColSize; @@ -121,15 +121,11 @@ private: bool ManualSpacing; // Row height - Gtk::VBox RowHeightVBox; - Gtk::HBox RowHeightBox; - Gtk::Label RowHeightLabel; + Gtk::Box RowHeightBox; Inkscape::UI::Widget::SpinButton RowHeightSpinner; // Column width - Gtk::VBox ColumnWidthVBox; - Gtk::HBox ColumnWidthBox; - Gtk::Label ColumnWidthLabel; + Gtk::Box ColumnWidthBox; Inkscape::UI::Widget::SpinButton ColumnWidthSpinner; }; diff --git a/src/ui/dialog/styledialog.cpp b/src/ui/dialog/styledialog.cpp index 73dd6937a..3642c0168 100644 --- a/src/ui/dialog/styledialog.cpp +++ b/src/ui/dialog/styledialog.cpp @@ -264,7 +264,9 @@ StyleDialog::StyleDialog() : _treeView.set_expander_column(*(_treeView.get_column(1))); // Pack widgets + _paned.set_orientation(Gtk::ORIENTATION_VERTICAL); _paned.pack1(_mainBox, Gtk::SHRINK); + _mainBox.set_orientation(Gtk::ORIENTATION_VERTICAL); _mainBox.pack_start(_scrolledWindow, Gtk::PACK_EXPAND_WIDGET); _scrolledWindow.add(_treeView); _scrolledWindow.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); diff --git a/src/ui/dialog/styledialog.h b/src/ui/dialog/styledialog.h index dbbc1e480..03932e3cc 100644 --- a/src/ui/dialog/styledialog.h +++ b/src/ui/dialog/styledialog.h @@ -108,9 +108,9 @@ private: Glib::RefPtr _store; // Widgets - Gtk::VPaned _paned; - Gtk::VBox _mainBox; - Gtk::HBox _buttonBox; + Gtk::Paned _paned; + Gtk::Box _mainBox; + Gtk::Box _buttonBox; Gtk::ScrolledWindow _scrolledWindow; Gtk::Button* del; Gtk::Button* create; -- cgit v1.2.3 From 5f15e100da0ce70052d1953f53f57d183a0bc9ce Mon Sep 17 00:00:00 2001 From: Martin Owens Date: Thu, 29 Jun 2017 16:39:55 +0200 Subject: Add caching to io resources path construction --- src/io/resource.cpp | 6 +++++- src/io/resource.h | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/io/resource.cpp b/src/io/resource.cpp index ffe612e43..73dc7117e 100644 --- a/src/io/resource.cpp +++ b/src/io/resource.cpp @@ -20,7 +20,6 @@ #include "config.h" #endif -#include // g_assert() #include "path-prefix.h" #include "io/sys.h" #include "io/resource.h" @@ -49,6 +48,7 @@ gchar *_get_path(Domain domain, Type type, char const *filename) case ICONS: temp = INKSCAPE_PIXMAPDIR; break; case KEYS: temp = INKSCAPE_KEYSDIR; break; case MARKERS: temp = INKSCAPE_MARKERSDIR; break; + case NONE: g_assert_not_reached(); break; case PALETTES: temp = INKSCAPE_PALETTESDIR; break; case PATTERNS: temp = INKSCAPE_PATTERNSDIR; break; case SCREENS: temp = INKSCAPE_SCREENSDIR; break; @@ -71,6 +71,9 @@ gchar *_get_path(Domain domain, Type type, char const *filename) } path = g_strdup(temp); } break; + case CACHE: { + path = g_build_filename(g_get_user_cache_dir(), "inkscape", NULL); + } break; case USER: { char const *name=NULL; switch (type) { @@ -80,6 +83,7 @@ gchar *_get_path(Domain domain, Type type, char const *filename) case ICONS: name = "icons"; break; case KEYS: name = "keys"; break; case MARKERS: name = "markers"; break; + case NONE: name = ""; break; case PALETTES: name = "palettes"; break; case PATTERNS: name = "patterns"; break; case SYMBOLS: name = "symbols"; break; diff --git a/src/io/resource.h b/src/io/resource.h index 8b60775b5..0ea5ab4f0 100644 --- a/src/io/resource.h +++ b/src/io/resource.h @@ -17,6 +17,7 @@ #ifndef SEEN_INKSCAPE_IO_RESOURCE_H #define SEEN_INKSCAPE_IO_RESOURCE_H +#include #include "util/share.h" namespace Inkscape { @@ -35,6 +36,7 @@ enum Type { ICONS, KEYS, MARKERS, + NONE, PALETTES, PATTERNS, SCREENS, @@ -49,6 +51,7 @@ enum Type { enum Domain { SYSTEM, CREATE, + CACHE, USER }; -- cgit v1.2.3 From d6f76e4dd17525bf257a9f0e513e7f9fd4373b79 Mon Sep 17 00:00:00 2001 From: Alexander Valavanis Date: Thu, 29 Jun 2017 16:48:37 +0200 Subject: Rm remaining imagemenuitem usage --- src/ui/dialog/layers.cpp | 35 +++++++++++++++++++---------------- src/ui/dialog/objects.cpp | 38 +++++++++++++++++++++----------------- src/ui/dialog/tags.cpp | 4 ++-- 3 files changed, 42 insertions(+), 35 deletions(-) diff --git a/src/ui/dialog/layers.cpp b/src/ui/dialog/layers.cpp index be3b4af06..7a650b034 100644 --- a/src/ui/dialog/layers.cpp +++ b/src/ui/dialog/layers.cpp @@ -15,7 +15,6 @@ #include "layers.h" #include -#include #include #include @@ -113,11 +112,12 @@ void LayersPanel::_styleButton( Gtk::Button& btn, SPDesktop *desktop, unsigned i Gtk::MenuItem& LayersPanel::_addPopupItem( SPDesktop *desktop, unsigned int code, char const* iconName, char const* fallback, int id ) { - GtkWidget* iconWidget = 0; + Gtk::Image *iconWidget = nullptr; const char* label = 0; if ( iconName ) { - iconWidget = gtk_image_new_from_icon_name( iconName, GTK_ICON_SIZE_MENU ); + iconWidget = Gtk::manage(new Gtk::Image()); + iconWidget->set_from_icon_name( iconName, Gtk::ICON_SIZE_MENU ); } if ( desktop ) { @@ -125,7 +125,8 @@ Gtk::MenuItem& LayersPanel::_addPopupItem( SPDesktop *desktop, unsigned int code if ( verb ) { SPAction *action = verb->get_action(Inkscape::ActionContext(desktop)); if ( !iconWidget && action && action->image ) { - iconWidget = gtk_image_new_from_icon_name( action->image, GTK_ICON_SIZE_MENU ); + iconWidget = Gtk::manage(new Gtk::Image()); + iconWidget->set_from_icon_name( action->image, Gtk::ICON_SIZE_MENU ); } if ( action ) { @@ -138,21 +139,23 @@ Gtk::MenuItem& LayersPanel::_addPopupItem( SPDesktop *desktop, unsigned int code label = fallback; } - Gtk::Widget* wrapped = 0; - if ( iconWidget ) { - wrapped = Gtk::manage(Glib::wrap(iconWidget)); - wrapped->show(); - } - - - Gtk::MenuItem* item = 0; + auto box = Gtk::manage(new Gtk::Box()); + Gtk::MenuItem* item = Gtk::manage(new Gtk::MenuItem()); - if (wrapped) { - item = Gtk::manage(new Gtk::ImageMenuItem(*wrapped, label, true)); - } else { - item = Gtk::manage(new Gtk::MenuItem(label, true)); + if (iconWidget) { + box->pack_start(*iconWidget, false, true, 0); + } + else { + Gtk::Label *fake_icon = Gtk::manage(new Gtk::Label("")); + box->pack_start(*fake_icon, false, true, 0); } + Gtk::Label *menu_label = Gtk::manage(new Gtk::Label(label, true)); + menu_label->set_xalign(0.0); + box->pack_start(*menu_label, true, true, 0); + item->add(*box); + item->show_all(); + item->signal_activate().connect(sigc::bind(sigc::mem_fun(*this, &LayersPanel::_takeAction), id)); _popupMenu.append(*item); diff --git a/src/ui/dialog/objects.cpp b/src/ui/dialog/objects.cpp index e76da241a..4b673b8b7 100644 --- a/src/ui/dialog/objects.cpp +++ b/src/ui/dialog/objects.cpp @@ -241,23 +241,25 @@ void ObjectsPanel::_styleButton(Gtk::Button& btn, char const* iconName, char con */ Gtk::MenuItem& ObjectsPanel::_addPopupItem( SPDesktop *desktop, unsigned int code, char const* iconName, char const* fallback, int id ) { - GtkWidget* iconWidget = 0; + Gtk::Image *iconWidget = nullptr; const char* label = 0; if ( iconName ) { - iconWidget = gtk_image_new_from_icon_name( iconName, GTK_ICON_SIZE_MENU ); + iconWidget = Gtk::manage(new Gtk::Image()); + iconWidget->set_from_icon_name( iconName, Gtk::ICON_SIZE_MENU ); } if ( desktop ) { Verb *verb = Verb::get( code ); if ( verb ) { - SPAction *action = verb->get_action(desktop); + SPAction *action = verb->get_action(Inkscape::ActionContext(desktop)); if ( !iconWidget && action && action->image ) { - iconWidget = gtk_image_new_from_icon_name( action->image, GTK_ICON_SIZE_MENU ); + iconWidget = Gtk::manage(new Gtk::Image()); + iconWidget->set_from_icon_name( action->image, Gtk::ICON_SIZE_MENU ); } if ( action ) { - // label = action->name; + label = action->name; } } } @@ -266,21 +268,23 @@ Gtk::MenuItem& ObjectsPanel::_addPopupItem( SPDesktop *desktop, unsigned int cod label = fallback; } - Gtk::Widget* wrapped = 0; - if ( iconWidget ) { - wrapped = Gtk::manage(Glib::wrap(iconWidget)); - wrapped->show(); - } - - - Gtk::MenuItem* item = 0; + auto box = Gtk::manage(new Gtk::Box()); + Gtk::MenuItem* item = Gtk::manage(new Gtk::MenuItem()); - if (wrapped) { - item = Gtk::manage(new Gtk::ImageMenuItem(*wrapped, label, true)); - } else { - item = Gtk::manage(new Gtk::MenuItem(label, true)); + if (iconWidget) { + box->pack_start(*iconWidget, false, true, 0); + } + else { + Gtk::Label *fake_icon = Gtk::manage(new Gtk::Label("")); + box->pack_start(*fake_icon, false, true, 0); } + Gtk::Label *menu_label = Gtk::manage(new Gtk::Label(label, true)); + menu_label->set_xalign(0.0); + box->pack_start(*menu_label, true, true, 0); + item->add(*box); + item->show_all(); + item->signal_activate().connect(sigc::bind(sigc::mem_fun(*this, &ObjectsPanel::_takeAction), id)); _popupMenu.append(*item); diff --git a/src/ui/dialog/tags.cpp b/src/ui/dialog/tags.cpp index b990ccfef..176719995 100644 --- a/src/ui/dialog/tags.cpp +++ b/src/ui/dialog/tags.cpp @@ -155,7 +155,7 @@ Gtk::MenuItem& TagsPanel::_addPopupItem( SPDesktop *desktop, unsigned int code, } if ( action ) { - label = action->name; + // label = action->name; } } } @@ -166,7 +166,7 @@ Gtk::MenuItem& TagsPanel::_addPopupItem( SPDesktop *desktop, unsigned int code, Gtk::Widget* wrapped = 0; if ( iconWidget ) { - wrapped = manage(Glib::wrap(iconWidget)); + wrapped = Gtk::manage(Glib::wrap(iconWidget)); wrapped->show(); } -- cgit v1.2.3 From c17493926fb4a86dbc44752a6769fdd98fe5883a Mon Sep 17 00:00:00 2001 From: Alexander Valavanis Date: Thu, 29 Jun 2017 17:09:47 +0200 Subject: knot-properties: Use Gtk::Grid --- src/ui/dialog/knot-properties.cpp | 18 +++++++++--------- src/ui/dialog/knot-properties.h | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/ui/dialog/knot-properties.cpp b/src/ui/dialog/knot-properties.cpp index 954fe2a66..9008d943a 100644 --- a/src/ui/dialog/knot-properties.cpp +++ b/src/ui/dialog/knot-properties.cpp @@ -45,14 +45,15 @@ KnotPropertiesDialog::KnotPropertiesDialog() { Gtk::Box *mainVBox = get_vbox(); - _layout_table.set_spacings(4); - _layout_table.resize (2, 2); + _layout_table.set_row_spacing(4); + _layout_table.set_column_spacing(4); _unit_name = ""; // Layer name widgets _knot_x_entry.set_activates_default(true); _knot_x_entry.set_digits(4); _knot_x_entry.set_increments(1,1); _knot_x_entry.set_range(-G_MAXDOUBLE, G_MAXDOUBLE); + _knot_x_entry.set_hexpand(); _knot_x_label.set_label(_("Position X:")); _knot_x_label.set_alignment(1.0, 0.5); @@ -60,16 +61,15 @@ KnotPropertiesDialog::KnotPropertiesDialog() _knot_y_entry.set_digits(4); _knot_y_entry.set_increments(1,1); _knot_y_entry.set_range(-G_MAXDOUBLE, G_MAXDOUBLE); - _knot_y_label.set_label(_("Position Y:")); + _knot_y_entry.set_hexpand(); + _knot_y_label.set_label(_("Position Y:")); _knot_y_label.set_alignment(1.0, 0.5); - _layout_table.attach(_knot_x_label, - 0, 1, 0, 1, Gtk::FILL, Gtk::FILL); - _layout_table.attach(_knot_x_entry, - 1, 2, 0, 1, Gtk::FILL | Gtk::EXPAND, Gtk::FILL); + _layout_table.attach(_knot_x_label, 0, 0, 1, 1); + _layout_table.attach(_knot_x_entry, 1, 0, 1, 1); - _layout_table.attach(_knot_y_label, 0, 1, 1, 2, Gtk::FILL, Gtk::FILL); - _layout_table.attach(_knot_y_entry, 1, 2, 1, 2, Gtk::FILL | Gtk::EXPAND, Gtk::FILL); + _layout_table.attach(_knot_y_label, 0, 1, 1, 1); + _layout_table.attach(_knot_y_entry, 1, 1, 1, 1); mainVBox->pack_start(_layout_table, true, true, 4); diff --git a/src/ui/dialog/knot-properties.h b/src/ui/dialog/knot-properties.h index f6157168f..1297eae1f 100644 --- a/src/ui/dialog/knot-properties.h +++ b/src/ui/dialog/knot-properties.h @@ -13,9 +13,9 @@ #define INKSCAPE_DIALOG_KNOT_PROPERTIES_H #include +#include #include #include -#include #include <2geom/point.h> #include "knot.h" #include "ui/tools/measure-tool.h" @@ -45,7 +45,7 @@ protected: Gtk::SpinButton _knot_x_entry; Gtk::Label _knot_y_label; Gtk::SpinButton _knot_y_entry; - Gtk::Table _layout_table; + Gtk::Grid _layout_table; bool _position_visible; Gtk::Button _close_button; -- cgit v1.2.3 From d79cc2caf65007ac9d1d59886785ded5d5ac44a8 Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Thu, 29 Jun 2017 17:38:42 +0200 Subject: Allows one to use Super, Hyper and Meta key modifiers in shortcuts --- .gitignore | 1 + src/helper/window.cpp | 6 ++++++ src/shortcuts.cpp | 21 +++++++++++++++++++++ src/shortcuts.h | 13 +++++++++---- 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index a56790eb5..8d7ae7a81 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ share/*/*.h *.old *.swp +*~ diff --git a/src/helper/window.cpp b/src/helper/window.cpp index 98e886a38..270f9a3c8 100644 --- a/src/helper/window.cpp +++ b/src/helper/window.cpp @@ -23,6 +23,12 @@ static bool on_window_key_press(GdkEventKey* event) shortcut = Inkscape::UI::Tools::get_group0_keyval (event) | ( event->state & GDK_SHIFT_MASK ? SP_SHORTCUT_SHIFT_MASK : 0 ) | + ( event->state & GDK_SUPER_MASK ? + SP_SHORTCUT_SUPER_MASK : 0 ) | + ( event->state & GDK_HYPER_MASK ? + SP_SHORTCUT_HYPER_MASK : 0 ) | + ( event->state & GDK_META_MASK ? + SP_SHORTCUT_META_MASK : 0 ) | ( event->state & GDK_CONTROL_MASK ? SP_SHORTCUT_CONTROL_MASK : 0 ) | ( event->state & GDK_MOD1_MASK ? diff --git a/src/shortcuts.cpp b/src/shortcuts.cpp index f8a647040..0cb0285f8 100644 --- a/src/shortcuts.cpp +++ b/src/shortcuts.cpp @@ -122,6 +122,12 @@ unsigned int sp_gdkmodifier_to_shortcut(guint accel_key, Gdk::ModifierType gdkmo SP_SHORTCUT_SHIFT_MASK : 0 ) | ( gdkmodifier & GDK_CONTROL_MASK ? SP_SHORTCUT_CONTROL_MASK : 0 ) | + ( gdkmodifier & GDK_SUPER_MASK ? + SP_SHORTCUT_SUPER_MASK : 0 ) | + ( gdkmodifier & GDK_HYPER_MASK ? + SP_SHORTCUT_HYPER_MASK : 0 ) | + ( gdkmodifier & GDK_META_MASK ? + SP_SHORTCUT_META_MASK : 0 ) | ( gdkmodifier & GDK_MOD1_MASK ? SP_SHORTCUT_ALT_MASK : 0 ); @@ -138,6 +144,12 @@ Glib::ustring sp_shortcut_to_label(unsigned int const shortcut) { modifiers += "Shift,"; if (shortcut & SP_SHORTCUT_ALT_MASK) modifiers += "Alt,"; + if (shortcut & SP_SHORTCUT_SUPER_MASK) + modifiers += "Super,"; + if (shortcut & SP_SHORTCUT_HYPER_MASK) + modifiers += "Hyper,"; + if (shortcut & SP_SHORTCUT_META_MASK) + modifiers += "Meta,"; if(modifiers.length() > 0 && modifiers.find(',',modifiers.length()-1)!=modifiers.npos) { @@ -607,6 +619,12 @@ static void read_shortcuts_file(char const *filename, bool const is_user_set) { modifiers |= SP_SHORTCUT_SHIFT_MASK; } else if (!strcmp(mod, "Alt")) { modifiers |= SP_SHORTCUT_ALT_MASK; + } else if (!strcmp(mod, "Super")) { + modifiers |= SP_SHORTCUT_SUPER_MASK; + } else if (!strcmp(mod, "Hyper")) { + modifiers |= SP_SHORTCUT_HYPER_MASK; + } else if (!strcmp(mod, "Meta")) { + modifiers |= SP_SHORTCUT_META_MASK; } else { g_warning("Unknown modifier %s for %s", mod, verb_name); } @@ -694,6 +712,9 @@ sp_shortcut_get_modifiers(unsigned int const shortcut) return static_cast( ((shortcut & SP_SHORTCUT_SHIFT_MASK) ? GDK_SHIFT_MASK : 0) | ((shortcut & SP_SHORTCUT_CONTROL_MASK) ? GDK_CONTROL_MASK : 0) | + ((shortcut & SP_SHORTCUT_SUPER_MASK) ? GDK_SUPER_MASK : 0) | + ((shortcut & SP_SHORTCUT_HYPER_MASK) ? GDK_HYPER_MASK : 0) | + ((shortcut & SP_SHORTCUT_META_MASK) ? GDK_META_MASK : 0) | ((shortcut & SP_SHORTCUT_ALT_MASK) ? GDK_MOD1_MASK : 0) ); } diff --git a/src/shortcuts.h b/src/shortcuts.h index f24a82603..fb36dfd11 100644 --- a/src/shortcuts.h +++ b/src/shortcuts.h @@ -12,6 +12,8 @@ #include #include +#include + typedef struct _GtkAccelGroup GtkAccelGroup; typedef struct _GtkWidget GtkWidget; @@ -27,10 +29,13 @@ namespace Inkscape { /* We define high-bit mask for packing into single int */ -#define SP_SHORTCUT_SHIFT_MASK (1 << 24) -#define SP_SHORTCUT_CONTROL_MASK (1 << 25) -#define SP_SHORTCUT_ALT_MASK (1 << 26) -#define SP_SHORTCUT_MODIFIER_MASK (SP_SHORTCUT_SHIFT_MASK|SP_SHORTCUT_CONTROL_MASK|SP_SHORTCUT_ALT_MASK) +#define SP_SHORTCUT_SHIFT_MASK GDK_MODIFIER_RESERVED_20_MASK +#define SP_SHORTCUT_CONTROL_MASK GDK_MODIFIER_RESERVED_21_MASK +#define SP_SHORTCUT_ALT_MASK GDK_MODIFIER_RESERVED_22_MASK +#define SP_SHORTCUT_SUPER_MASK GDK_MODIFIER_RESERVED_23_MASK +#define SP_SHORTCUT_HYPER_MASK GDK_MODIFIER_RESERVED_24_MASK +#define SP_SHORTCUT_META_MASK GDK_MODIFIER_RESERVED_25_MASK +#define SP_SHORTCUT_MODIFIER_MASK (SP_SHORTCUT_SHIFT_MASK|SP_SHORTCUT_CONTROL_MASK|SP_SHORTCUT_ALT_MASK|SP_SHORTCUT_SUPER_MASK|SP_SHORTCUT_HYPER_MASK|SP_SHORTCUT_META_MASK) /* Returns true if action was performed */ -- cgit v1.2.3 From 93917d399e898ad73fc5652d70d4763050ca90cc Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Thu, 29 Jun 2017 17:58:59 +0200 Subject: Disable "new" filter editor --- src/ui/dialog/filter-editor.cpp | 1 - src/verbs.cpp | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/ui/dialog/filter-editor.cpp b/src/ui/dialog/filter-editor.cpp index 31723506d..4e7402853 100644 --- a/src/ui/dialog/filter-editor.cpp +++ b/src/ui/dialog/filter-editor.cpp @@ -97,7 +97,6 @@ FilterEditorDialog::FilterEditorDialog() : UI::Widget::Panel("", "/dialogs/filte FilterStore = builder->get_object("FilterStore"); Glib::RefPtr fs = Glib::RefPtr::cast_static(FilterStore); Gtk::TreeModel::Row row = *(fs->append()); - row[3]=OptionList; diff --git a/src/verbs.cpp b/src/verbs.cpp index 0085d6549..22ded60b3 100644 --- a/src/verbs.cpp +++ b/src/verbs.cpp @@ -2234,7 +2234,7 @@ void DialogVerb::perform(SPAction *action, void *data) dt->_dlg_mgr->showDialog("LivePathEffect"); break; case SP_VERB_DIALOG_FILTER_EFFECTS: - dt->_dlg_mgr->showDialog("FilterEditorDialog"); + dt->_dlg_mgr->showDialog("FilterEffectsDialog"); break; case SP_VERB_DIALOG_SVG_FONTS: dt->_dlg_mgr->showDialog("SvgFontsDialog"); -- cgit v1.2.3 From 258904bc7102d6edae51aa09d7e1fa47ebc06b2a Mon Sep 17 00:00:00 2001 From: Martin Owens Date: Thu, 29 Jun 2017 18:04:34 +0200 Subject: Filter editor fix for gcc 5 --- src/ui/dialog/filter-editor.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/ui/dialog/filter-editor.cpp b/src/ui/dialog/filter-editor.cpp index 4e7402853..730f8175c 100644 --- a/src/ui/dialog/filter-editor.cpp +++ b/src/ui/dialog/filter-editor.cpp @@ -65,7 +65,9 @@ using namespace Inkscape::Filters; using namespace Inkscape::IO::Resource; -namespace Inkscape::UI::Dialog { +namespace Inkscape { +namespace UI { +namespace Dialog { FilterEditorDialog::FilterEditorDialog() : UI::Widget::Panel("", "/dialogs/filtereffects", SP_VERB_DIALOG_FILTER_EFFECTS) { @@ -110,7 +112,9 @@ FilterEditorDialog::~FilterEditorDialog(){} -} // namespace Inkscape::UI::Dialog +} // Never put these namespaces together unless you are using gcc 6+ +} +} // P.S. This is for Inkscape::UI::Dialog /* Local Variables: -- cgit v1.2.3 From 47d4199fcf2b032a02bf23c80c3b2c9f3155c5c5 Mon Sep 17 00:00:00 2001 From: Alexander Valavanis Date: Thu, 29 Jun 2017 18:13:30 +0200 Subject: aboutbox: Gtk3 fixes --- CMakeScripts/DefineDependsandFlags.cmake | 24 ++++++++++++++++++++++++ config.h.cmake | 6 ++++++ src/ui/dialog/aboutbox.cpp | 27 +++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) diff --git a/CMakeScripts/DefineDependsandFlags.cmake b/CMakeScripts/DefineDependsandFlags.cmake index 1fead418a..a98ebcf2b 100644 --- a/CMakeScripts/DefineDependsandFlags.cmake +++ b/CMakeScripts/DefineDependsandFlags.cmake @@ -258,6 +258,30 @@ set(TRY_GTKSPELL ON) set (WITH_GTKMM_3_10 ON) endif() + # Check whether we can use new features in Gtkmm 3.12 + # TODO: Drop this test and bump the version number in the GTK test above + # as soon as all supported distributions provide Gtkmm >= 3.12 + pkg_check_modules(GTKMM_3_12 + gtkmm-3.0>=3.12, + ) + + if("${GTKMM_3_12_FOUND}") + message("Using Gtkmm 3.12 build") + set (WITH_GTKMM_3_12 ON) + endif() + + # Check whether we can use new features in Gtkmm 3.16 + # TODO: Drop this test and bump the version number in the GTK test above + # as soon as all supported distributions provide Gtkmm >= 3.16 + pkg_check_modules(GTKMM_3_16 + gtkmm-3.0>=3.16, + ) + + if("${GTKMM_3_16_FOUND}") + message("Using Gtkmm 3.16 build") + set (WITH_GTKMM_3_16 ON) + endif() + # Check whether we can use new features in Gtkmm 3.22 # TODO: Drop this test and bump the version number in the GTK test above # as soon as all supported distributions provide Gtkmm >= 3.22 diff --git a/config.h.cmake b/config.h.cmake index 2cd660d87..134f7539d 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -56,6 +56,12 @@ /* Build with Gtkmm 3.10.x or higher */ #cmakedefine WITH_GTKMM_3_10 1 +/* Build with Gtkmm 3.12.x or higher */ +#cmakedefine WITH_GTKMM_3_12 1 + +/* Build with Gtkmm 3.16.x or higher */ +#cmakedefine WITH_GTKMM_3_16 1 + /* Build with Gtkmm 3.22.x or higher */ #cmakedefine WITH_GTKMM_3_22 1 diff --git a/src/ui/dialog/aboutbox.cpp b/src/ui/dialog/aboutbox.cpp index 805bfb562..9b99dde6b 100644 --- a/src/ui/dialog/aboutbox.cpp +++ b/src/ui/dialog/aboutbox.cpp @@ -107,8 +107,21 @@ AboutBox::AboutBox() : Gtk::Dialog(_("About Inkscape")) { g_strdup_printf("Inkscape %s", Inkscape::version_string); label->set_markup(label_text); + +#if WITH_GTKMM_3_10 + label->set_halign(Gtk::ALIGN_END); + label->set_valign(Gtk::ALIGN_CENTER); +#else label->set_alignment(Gtk::ALIGN_END, Gtk::ALIGN_CENTER); +#endif + +#if WITH_GTKMM_3_12 + label->set_margin_start(5); + label->set_margin_end(5); +#else label->set_padding(5,0); +#endif + g_free(label_text); label->set_selectable(true); label->show(); @@ -118,8 +131,22 @@ AboutBox::AboutBox() : Gtk::Dialog(_("About Inkscape")) { "https://www.inkscape.org"; link->set_markup(website_link); + +#if WITH_GTKMM_3_10 + link->set_halign(Gtk::ALIGN_END); +#else link->set_alignment(Gtk::ALIGN_END); +#endif + +#if WITH_GTKMM_3_12 + label->set_margin_start(5); + label->set_margin_end(5); + label->set_margin_top(5); + label->set_margin_bottom(5); +#else link->set_padding(5,5); +#endif + link->set_selectable(true); link->show(); -- cgit v1.2.3 From f55448431e934bf29bb9a983711d204614db7cc7 Mon Sep 17 00:00:00 2001 From: Martin Owens Date: Fri, 30 Jun 2017 05:58:14 +0200 Subject: Hackfest: Refactor cursors so the hot spot is inside the xpm --- src/color.h | 1 + src/desktop-events.cpp | 2 +- src/pixmaps/cursor-3dbox.xpm | 2 +- src/pixmaps/cursor-arc.xpm | 38 -------- src/pixmaps/cursor-arrow.xpm | 38 -------- src/pixmaps/cursor-attract.xpm | 38 -------- src/pixmaps/cursor-calligraphy.xpm | 2 +- src/pixmaps/cursor-color.xpm | 38 -------- src/pixmaps/cursor-connector.xpm | 2 +- src/pixmaps/cursor-crosshairs.xpm | 2 +- src/pixmaps/cursor-dropper-f.xpm | 2 +- src/pixmaps/cursor-dropper-s.xpm | 2 +- src/pixmaps/cursor-ellipse.xpm | 2 +- src/pixmaps/cursor-eraser.xpm | 2 +- src/pixmaps/cursor-gradient-add.xpm | 2 +- src/pixmaps/cursor-gradient.xpm | 2 +- src/pixmaps/cursor-measure.xpm | 2 +- src/pixmaps/cursor-node-d.xpm | 2 +- src/pixmaps/cursor-node-m.xpm | 38 -------- src/pixmaps/cursor-node.xpm | 2 +- src/pixmaps/cursor-paintbucket.xpm | 2 +- src/pixmaps/cursor-pen.xpm | 2 +- src/pixmaps/cursor-pencil.xpm | 2 +- src/pixmaps/cursor-push.xpm | 38 -------- src/pixmaps/cursor-rect.xpm | 2 +- src/pixmaps/cursor-repel.xpm | 38 -------- src/pixmaps/cursor-roughen.xpm | 38 -------- src/pixmaps/cursor-select-d.xpm | 2 +- src/pixmaps/cursor-select-m.xpm | 2 +- src/pixmaps/cursor-select.xpm | 2 +- src/pixmaps/cursor-spiral.xpm | 2 +- src/pixmaps/cursor-spray-move.xpm | 2 +- src/pixmaps/cursor-spray.xpm | 2 +- src/pixmaps/cursor-star.xpm | 2 +- src/pixmaps/cursor-text-insert.xpm | 2 +- src/pixmaps/cursor-text.xpm | 2 +- src/pixmaps/cursor-thicken.xpm | 38 -------- src/pixmaps/cursor-thin.xpm | 38 -------- src/pixmaps/cursor-tweak-attract.xpm | 38 ++++++++ src/pixmaps/cursor-tweak-color.xpm | 38 ++++++++ src/pixmaps/cursor-tweak-less.xpm | 2 +- src/pixmaps/cursor-tweak-more.xpm | 2 +- src/pixmaps/cursor-tweak-move-in.xpm | 2 +- src/pixmaps/cursor-tweak-move-jitter.xpm | 2 +- src/pixmaps/cursor-tweak-move-out.xpm | 2 +- src/pixmaps/cursor-tweak-move.xpm | 2 +- src/pixmaps/cursor-tweak-push.xpm | 38 ++++++++ src/pixmaps/cursor-tweak-repel.xpm | 38 ++++++++ src/pixmaps/cursor-tweak-rotate-clockwise.xpm | 2 +- .../cursor-tweak-rotate-counterclockwise.xpm | 2 +- src/pixmaps/cursor-tweak-roughen.xpm | 38 ++++++++ src/pixmaps/cursor-tweak-scale-down.xpm | 2 +- src/pixmaps/cursor-tweak-scale-up.xpm | 2 +- src/pixmaps/cursor-tweak-thicken.xpm | 38 ++++++++ src/pixmaps/cursor-tweak-thin.xpm | 38 ++++++++ src/pixmaps/cursor-zoom-out.xpm | 2 +- src/pixmaps/cursor-zoom.xpm | 2 +- src/sp-cursor.cpp | 106 +++++++++++---------- src/sp-cursor.h | 3 +- src/ui/tools/arc-tool.cpp | 2 +- src/ui/tools/box3d-tool.cpp | 2 +- src/ui/tools/calligraphic-tool.cpp | 2 +- src/ui/tools/connector-tool.cpp | 2 +- src/ui/tools/dropper-tool.cpp | 6 +- src/ui/tools/dynamic-base.cpp | 4 +- src/ui/tools/dynamic-base.h | 2 +- src/ui/tools/eraser-tool.cpp | 2 +- src/ui/tools/flood-tool.cpp | 2 +- src/ui/tools/freehand-base.cpp | 4 +- src/ui/tools/freehand-base.h | 2 +- src/ui/tools/gradient-tool.cpp | 2 +- src/ui/tools/lpe-tool.cpp | 2 +- src/ui/tools/measure-tool.cpp | 2 +- src/ui/tools/mesh-tool.cpp | 2 +- src/ui/tools/node-tool.cpp | 6 +- src/ui/tools/pen-tool.cpp | 6 +- src/ui/tools/pen-tool.h | 2 +- src/ui/tools/pencil-tool.cpp | 2 +- src/ui/tools/rect-tool.cpp | 2 +- src/ui/tools/select-tool.cpp | 6 +- src/ui/tools/spiral-tool.cpp | 2 +- src/ui/tools/spray-tool.cpp | 2 +- src/ui/tools/star-tool.cpp | 2 +- src/ui/tools/text-tool.cpp | 6 +- src/ui/tools/tool-base.cpp | 55 ++++------- src/ui/tools/tool-base.h | 5 +- src/ui/tools/tweak-tool.cpp | 16 ++-- src/ui/tools/zoom-tool.cpp | 2 +- 88 files changed, 424 insertions(+), 562 deletions(-) delete mode 100644 src/pixmaps/cursor-arc.xpm delete mode 100644 src/pixmaps/cursor-arrow.xpm delete mode 100644 src/pixmaps/cursor-attract.xpm delete mode 100644 src/pixmaps/cursor-color.xpm delete mode 100644 src/pixmaps/cursor-node-m.xpm delete mode 100644 src/pixmaps/cursor-push.xpm delete mode 100644 src/pixmaps/cursor-repel.xpm delete mode 100644 src/pixmaps/cursor-roughen.xpm delete mode 100644 src/pixmaps/cursor-thicken.xpm delete mode 100644 src/pixmaps/cursor-thin.xpm create mode 100644 src/pixmaps/cursor-tweak-attract.xpm create mode 100644 src/pixmaps/cursor-tweak-color.xpm create mode 100644 src/pixmaps/cursor-tweak-push.xpm create mode 100644 src/pixmaps/cursor-tweak-repel.xpm create mode 100644 src/pixmaps/cursor-tweak-roughen.xpm create mode 100644 src/pixmaps/cursor-tweak-thicken.xpm create mode 100644 src/pixmaps/cursor-tweak-thin.xpm diff --git a/src/color.h b/src/color.h index 887daf66b..02a4fc90f 100644 --- a/src/color.h +++ b/src/color.h @@ -30,6 +30,7 @@ typedef unsigned int guint32; // uint is guaranteed to hold up to 2^32 − 1 #define SP_RGBA32_A_F(v) SP_COLOR_U_TO_F (SP_RGBA32_A_U (v)) #define SP_RGBA32_U_COMPOSE(r,g,b,a) ((((r) & 0xff) << 24) | (((g) & 0xff) << 16) | (((b) & 0xff) << 8) | ((a) & 0xff)) #define SP_RGBA32_F_COMPOSE(r,g,b,a) SP_RGBA32_U_COMPOSE (SP_COLOR_F_TO_U (r), SP_COLOR_F_TO_U (g), SP_COLOR_F_TO_U (b), SP_COLOR_F_TO_U (a)) +#define SP_RGBA32_C_COMPOSE(c,o) SP_RGBA32_U_COMPOSE(SP_RGBA32_R_U(c),SP_RGBA32_G_U(c),SP_RGBA32_B_U(c),SP_COLOR_F_TO_U(o)) struct SVGICCColor; diff --git a/src/desktop-events.cpp b/src/desktop-events.cpp index 5fef8cbfc..894087c8c 100644 --- a/src/desktop-events.cpp +++ b/src/desktop-events.cpp @@ -521,7 +521,7 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data) GdkCursor *guide_cursor = gdk_cursor_new_for_display(display, cursor_type); if(guide->getLocked()){ - guide_cursor = sp_cursor_new_from_xpm(cursor_select_xpm , 1, 1); + guide_cursor = sp_cursor_from_xpm(cursor_select_xpm); } gdk_window_set_cursor(gtk_widget_get_window (GTK_WIDGET(desktop->getCanvas())), guide_cursor); g_object_unref(guide_cursor); diff --git a/src/pixmaps/cursor-3dbox.xpm b/src/pixmaps/cursor-3dbox.xpm index 3fda78ef1..c7fcb9248 100644 --- a/src/pixmaps/cursor-3dbox.xpm +++ b/src/pixmaps/cursor-3dbox.xpm @@ -1,6 +1,6 @@ /* XPM */ static const char * cursor_3dbox_xpm[] = { -"32 32 3 1", +"32 32 3 1 4 4", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-arc.xpm b/src/pixmaps/cursor-arc.xpm deleted file mode 100644 index cbf6a9e30..000000000 --- a/src/pixmaps/cursor-arc.xpm +++ /dev/null @@ -1,38 +0,0 @@ -/* XPM */ -static char const *cursor_arc_xpm[] = { -"32 32 3 1", -" c None", -". c #FFFFFF", -"+ c #000000", -" ... ", -" .+. ", -" .+. ", -"....+.... ", -".+++ +++. ", -"....+.... ", -" .+. ", -" .+. ..... ", -" ... .+++.... ", -" .+..+++.. ", -" .+.....+.. ", -" .+......+.. ", -" ..+.......+. ", -" ...++.......+. ", -" ...++.........+. ", -" ...++..........+.. ", -" .++...........+.. ", -" ...++......+++.. ", -" ...++++++.... ", -" ........ ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" "}; diff --git a/src/pixmaps/cursor-arrow.xpm b/src/pixmaps/cursor-arrow.xpm deleted file mode 100644 index 963656a92..000000000 --- a/src/pixmaps/cursor-arrow.xpm +++ /dev/null @@ -1,38 +0,0 @@ -/* XPM */ -static char const *cursor_arrow_xpm[] = { -"32 32 3 1", -" c None", -". c #FFFFFF", -"+ c #000000", -" .. ", -".++.. ", -".+ ++.. ", -" .+ ++.. ", -" .+ ++.. ", -" .+ ++. ", -" .+ +. ", -" .+ +. ", -" .+ +. ", -" .+ +. ", -" .+ + +. ", -" .++.+ +. ", -" .. .+ +. ", -" .+ +. ", -" .+ +. ", -" .+ +. ", -" .+ +. ", -" .+ +. ", -" .+. ", -" . ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" "}; diff --git a/src/pixmaps/cursor-attract.xpm b/src/pixmaps/cursor-attract.xpm deleted file mode 100644 index 56033b287..000000000 --- a/src/pixmaps/cursor-attract.xpm +++ /dev/null @@ -1,38 +0,0 @@ -/* XPM */ -static char const *cursor_attract_xpm[] = { -"32 32 3 1", -" c None", -". c #FFFFFF", -"+ c #000000", -" ... ", -" .+. ", -" .+. ", -"....+.... ", -".+++ +++. ", -"....+.... ", -" .+. ", -" .+. ", -" ... ", -" ..... .... ", -" .++++.. ..++++ ", -" .....++.....++.... ", -" .......+++++...... ", -" .++++.........++++ ", -" .....++.....++.... ", -" ..+++++.. ", -" ....... ", -" ....... ", -" ..+++++.. ", -" .....++.....++.... ", -" .++++.........++++ ", -" .......+++++...... ", -" .....++.....++.... ", -" .++++.. ..++++ ", -" ..... .... ", -" ", -" ", -" ", -" ", -" ", -" ", -" "}; diff --git a/src/pixmaps/cursor-calligraphy.xpm b/src/pixmaps/cursor-calligraphy.xpm index 52c4f76cb..193bd6196 100644 --- a/src/pixmaps/cursor-calligraphy.xpm +++ b/src/pixmaps/cursor-calligraphy.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const *cursor_calligraphy_xpm[] = { -"32 32 3 1", +"32 32 3 1 4 4", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-color.xpm b/src/pixmaps/cursor-color.xpm deleted file mode 100644 index 327028ba8..000000000 --- a/src/pixmaps/cursor-color.xpm +++ /dev/null @@ -1,38 +0,0 @@ -/* XPM */ -static char const *cursor_color_xpm[] = { -"32 32 3 1", -" c None", -". c #FFFFFF", -"+ c #000000", -" ... ", -" .+. ", -" .+. ", -"....+.... ", -".+++ +++. ", -"....+.... ", -" .+. ", -" .+. ......... ", -" ... ........... ", -" .......+....... ", -" ...+.+..+.+.... ", -" .......+.+..+.... ", -" ....+.++.+.+...+... ", -" ....+..+.+++++..... ", -" .....+++++.+..+.... ", -" ...+..+.++++++.+... ", -" ....++.+++.+.+..... ", -" .....++.+++++.++... ", -" ...+..++.++.+...... ", -" ....+..++.+.++.+... ", -" ......+..+.+....... ", -" ......+.+.+.+.... ", -" ...+........... ", -" .....+..+...... ", -" ........... ", -" ......... ", -" ", -" ", -" ", -" ", -" ", -" "}; diff --git a/src/pixmaps/cursor-connector.xpm b/src/pixmaps/cursor-connector.xpm index ddff5cdf5..86e8d1753 100644 --- a/src/pixmaps/cursor-connector.xpm +++ b/src/pixmaps/cursor-connector.xpm @@ -1,6 +1,6 @@ /* XPM */ static const char * cursor_connector_xpm[] = { -"32 32 3 1", +"32 32 3 1 1 1", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-crosshairs.xpm b/src/pixmaps/cursor-crosshairs.xpm index 8c7554523..407b76048 100644 --- a/src/pixmaps/cursor-crosshairs.xpm +++ b/src/pixmaps/cursor-crosshairs.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const *cursor_crosshairs_xpm[] = { -"32 32 3 1", +"32 32 3 1 7 7", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-dropper-f.xpm b/src/pixmaps/cursor-dropper-f.xpm index 3bf1e80e1..e5602d94b 100644 --- a/src/pixmaps/cursor-dropper-f.xpm +++ b/src/pixmaps/cursor-dropper-f.xpm @@ -1,6 +1,6 @@ /* XPM */ static const char * cursor_dropper_f_xpm[] = { -"32 32 3 1", +"32 32 3 1 5 5", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-dropper-s.xpm b/src/pixmaps/cursor-dropper-s.xpm index 1a12934d8..2a80f3600 100644 --- a/src/pixmaps/cursor-dropper-s.xpm +++ b/src/pixmaps/cursor-dropper-s.xpm @@ -1,6 +1,6 @@ /* XPM */ static const char * cursor_dropper_s_xpm[] = { -"32 32 3 1", +"32 32 3 1 5 5", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-ellipse.xpm b/src/pixmaps/cursor-ellipse.xpm index b0f20d18c..83a820f49 100644 --- a/src/pixmaps/cursor-ellipse.xpm +++ b/src/pixmaps/cursor-ellipse.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const *cursor_ellipse_xpm[] = { -"32 32 5 1", +"32 32 5 1 4 4", " c None", ". c #FFFFFF", "% c Stroke", diff --git a/src/pixmaps/cursor-eraser.xpm b/src/pixmaps/cursor-eraser.xpm index dbe730291..b3f8f2d84 100644 --- a/src/pixmaps/cursor-eraser.xpm +++ b/src/pixmaps/cursor-eraser.xpm @@ -1,6 +1,6 @@ /* XPM */ static const char * cursor_eraser_xpm[] = { -"32 32 3 1", +"32 32 3 1 4 4", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-gradient-add.xpm b/src/pixmaps/cursor-gradient-add.xpm index d1fe8ed95..ea8341bb2 100644 --- a/src/pixmaps/cursor-gradient-add.xpm +++ b/src/pixmaps/cursor-gradient-add.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const *cursor_gradient_add_xpm[] = { -"32 32 3 1", +"32 32 3 1 4 4", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-gradient.xpm b/src/pixmaps/cursor-gradient.xpm index a7be769f5..92c9a9a15 100644 --- a/src/pixmaps/cursor-gradient.xpm +++ b/src/pixmaps/cursor-gradient.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const *cursor_gradient_xpm[] = { -"32 32 3 1", +"32 32 3 1 4 4", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-measure.xpm b/src/pixmaps/cursor-measure.xpm index 2a28579c6..9f6497c65 100644 --- a/src/pixmaps/cursor-measure.xpm +++ b/src/pixmaps/cursor-measure.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const *cursor_measure_xpm[] = { -"32 32 3 1", +"32 32 3 1 4 4", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-node-d.xpm b/src/pixmaps/cursor-node-d.xpm index 7e177bff4..e28bc73d3 100644 --- a/src/pixmaps/cursor-node-d.xpm +++ b/src/pixmaps/cursor-node-d.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const *cursor_node_d_xpm[] = { -"32 32 3 1", +"32 32 3 1 1 1", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-node-m.xpm b/src/pixmaps/cursor-node-m.xpm deleted file mode 100644 index 08574bfb0..000000000 --- a/src/pixmaps/cursor-node-m.xpm +++ /dev/null @@ -1,38 +0,0 @@ -/* XPM */ -static char const *cursor_node_m_xpm[] = { -"32 32 3 1", -" g None", -". g #FFFFFF", -"+ g #000000", -" . ", -".+. ", -" .+. ", -" .++. ", -" .++. ", -" .+++. ", -" .+++. ", -" .++++. ", -" .++++. ", -" .+++++. ", -" .+++++. ", -" .++++++. +++ ", -" .+++++. +.+..+ ", -" .+++.. +..+..++++ ", -" .+. +..+..+..+ ", -" . +..+..+..++ ", -" +++..+..+..+.+ ", -" +..+..+..+..+.+ ", -" +..+..+..+..+.+ ", -" +..+..+..+..+.+ ", -" +.............+ ", -" +............+ ", -" +...........+ ", -" +..........+ ", -" +.........+ ", -" +........+ ", -" +.......+ ", -" +.......+ ", -" +++++++++ ", -" ", -" ", -" "}; diff --git a/src/pixmaps/cursor-node.xpm b/src/pixmaps/cursor-node.xpm index 6daae6bda..4d3bd9407 100644 --- a/src/pixmaps/cursor-node.xpm +++ b/src/pixmaps/cursor-node.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const *cursor_node_xpm[] = { -"32 32 3 1", +"32 32 3 1 1 1", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-paintbucket.xpm b/src/pixmaps/cursor-paintbucket.xpm index 11ffd6ed1..0c6767f75 100644 --- a/src/pixmaps/cursor-paintbucket.xpm +++ b/src/pixmaps/cursor-paintbucket.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const *cursor_paintbucket_xpm[] = { -"32 32 3 1", +"32 32 3 1 11 30", " c None", ". c #000000", "+ c #FFFFFF", diff --git a/src/pixmaps/cursor-pen.xpm b/src/pixmaps/cursor-pen.xpm index 11512e03f..79b68e9ba 100644 --- a/src/pixmaps/cursor-pen.xpm +++ b/src/pixmaps/cursor-pen.xpm @@ -1,6 +1,6 @@ /* XPM */ static const char * cursor_pen_xpm[] = { -"32 32 3 1", +"32 32 3 1 4 4", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-pencil.xpm b/src/pixmaps/cursor-pencil.xpm index 4e7b03776..92c6331ab 100644 --- a/src/pixmaps/cursor-pencil.xpm +++ b/src/pixmaps/cursor-pencil.xpm @@ -1,6 +1,6 @@ /* XPM */ static const char * cursor_pencil_xpm[] = { -"32 32 3 1", +"32 32 3 1 4 4", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-push.xpm b/src/pixmaps/cursor-push.xpm deleted file mode 100644 index ba05369a8..000000000 --- a/src/pixmaps/cursor-push.xpm +++ /dev/null @@ -1,38 +0,0 @@ -/* XPM */ -static char const *cursor_push_xpm[] = { -"32 32 3 1", -" c None", -". c #FFFFFF", -"+ c #000000", -" ... ", -" .+. ", -" .+. ", -"....+.... ", -".+++ +++. ", -"....+.... ", -" .+. ", -" .+. ... ", -" ... ..... ", -" ..+++.. ", -" ..+...+.. ", -" .....++. .++.... ", -" .++++.. ..++++ ", -" ..... ... .... ", -" ..... ", -" ..+++.. ", -" ..+...+.. ", -" .....++. .++.... ", -" .++++.. ..++++ ", -" ..... .... ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" "}; diff --git a/src/pixmaps/cursor-rect.xpm b/src/pixmaps/cursor-rect.xpm index 69007bc77..e54b7ce4f 100644 --- a/src/pixmaps/cursor-rect.xpm +++ b/src/pixmaps/cursor-rect.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const *cursor_rect_xpm[] = { -"32 32 5 1", +"32 32 5 1 4 4", " c None", ". c #FFFFFF", "% c Stroke", diff --git a/src/pixmaps/cursor-repel.xpm b/src/pixmaps/cursor-repel.xpm deleted file mode 100644 index d365cddc3..000000000 --- a/src/pixmaps/cursor-repel.xpm +++ /dev/null @@ -1,38 +0,0 @@ -/* XPM */ -static char const *cursor_repel_xpm[] = { -"32 32 3 1", -" c None", -". c #FFFFFF", -"+ c #000000", -" ... ", -" .+. ", -" .+. ", -"....+.... ", -".+++ +++. ", -"....+.... ", -" .+. ", -" .+. ", -" ... ....... ", -" ..+++++.. ", -" .....++.....++..... ", -" .++++.........++++. ", -" .......+++++....... ", -" .....++.....++..... ", -" .++++.. ..++++. ", -" ..... ..... ", -" ", -" ..... ..... ", -" .++++.. ..++++. ", -" .....++.....++..... ", -" .......+++++....... ", -" .++++.........++++. ", -" .....++.....++..... ", -" ..+++++.. ", -" ....... ", -" ", -" ", -" ", -" ", -" ", -" ", -" "}; diff --git a/src/pixmaps/cursor-roughen.xpm b/src/pixmaps/cursor-roughen.xpm deleted file mode 100644 index 5adafbbd2..000000000 --- a/src/pixmaps/cursor-roughen.xpm +++ /dev/null @@ -1,38 +0,0 @@ -/* XPM */ -static char const *cursor_roughen_xpm[] = { -"32 32 3 1", -" c None", -". c #FFFFFF", -"+ c #000000", -" ... ", -" .+. ", -" .+. ", -"....+.... ", -".+++ +++. ", -"....+.... ", -" .+. ", -" .+. ", -" ... ... ", -" ....+... ", -" . .+ +..+... ", -" ...+.+++.+..+.+... ", -" .++.+..+ . .+++++ ", -" ... . ..... ", -" ", -" ", -" .. ", -" ........++.. ..... ", -" .++++..+ +...++++ ", -" .....++.+..+++.... ", -" ......+.. ", -" ... ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" "}; diff --git a/src/pixmaps/cursor-select-d.xpm b/src/pixmaps/cursor-select-d.xpm index 501816da0..e84e4de9f 100644 --- a/src/pixmaps/cursor-select-d.xpm +++ b/src/pixmaps/cursor-select-d.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const *cursor_select_d_xpm[] = { -"32 32 3 1", +"32 32 3 1 1 1", " c None", ". c #000000", "+ c #FFFFFF", diff --git a/src/pixmaps/cursor-select-m.xpm b/src/pixmaps/cursor-select-m.xpm index 439639c8f..8dd8fb076 100644 --- a/src/pixmaps/cursor-select-m.xpm +++ b/src/pixmaps/cursor-select-m.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const *cursor_select_m_xpm[] = { -"32 32 3 1", +"32 32 3 1 1 1", " c None", ". c #000000", "+ c #FFFFFF", diff --git a/src/pixmaps/cursor-select.xpm b/src/pixmaps/cursor-select.xpm index 569573618..36b40c6c5 100644 --- a/src/pixmaps/cursor-select.xpm +++ b/src/pixmaps/cursor-select.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const *cursor_select_xpm[] = { -"32 32 3 1", +"32 32 3 1 1 1", " c None", ". c #000000", "+ c #FFFFFF", diff --git a/src/pixmaps/cursor-spiral.xpm b/src/pixmaps/cursor-spiral.xpm index db6f9d2ec..1eaef1e8c 100644 --- a/src/pixmaps/cursor-spiral.xpm +++ b/src/pixmaps/cursor-spiral.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const *cursor_spiral_xpm[] = { -"32 32 3 1", +"32 32 3 1 4 4", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-spray-move.xpm b/src/pixmaps/cursor-spray-move.xpm index ad898b3a5..0c918392a 100644 --- a/src/pixmaps/cursor-spray-move.xpm +++ b/src/pixmaps/cursor-spray-move.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const * cursor_spray_move_xpm[] = { -"32 32 3 1", +"32 32 3 1 4 4", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-spray.xpm b/src/pixmaps/cursor-spray.xpm index 9ccefee4f..19a40997c 100644 --- a/src/pixmaps/cursor-spray.xpm +++ b/src/pixmaps/cursor-spray.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const * cursor_spray_xpm[] = { -"32 32 3 1", +"32 32 3 1 4 4", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-star.xpm b/src/pixmaps/cursor-star.xpm index eedf448e4..c9f2e85e7 100644 --- a/src/pixmaps/cursor-star.xpm +++ b/src/pixmaps/cursor-star.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const *cursor_star_xpm[] = { -"32 32 5 1", +"32 32 5 1 4 4", " c None", ". c #FFFFFF", "% c Stroke", diff --git a/src/pixmaps/cursor-text-insert.xpm b/src/pixmaps/cursor-text-insert.xpm index d72c59686..488791e2e 100644 --- a/src/pixmaps/cursor-text-insert.xpm +++ b/src/pixmaps/cursor-text-insert.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const *cursor_text_insert_xpm[] = { -"32 32 3 1", +"32 32 3 1 7 10", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-text.xpm b/src/pixmaps/cursor-text.xpm index 46098db30..6d74ae305 100644 --- a/src/pixmaps/cursor-text.xpm +++ b/src/pixmaps/cursor-text.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const *cursor_text_xpm[] = { -"32 32 3 1", +"32 32 3 1 7 7", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-thicken.xpm b/src/pixmaps/cursor-thicken.xpm deleted file mode 100644 index ab76c6c8c..000000000 --- a/src/pixmaps/cursor-thicken.xpm +++ /dev/null @@ -1,38 +0,0 @@ -/* XPM */ -static char const *cursor_thicken_xpm[] = { -"32 32 3 1", -" c None", -". c #FFFFFF", -"+ c #000000", -" ... ", -" .+. ", -" .+. ", -"....+.... ", -".+++ +++. ", -"....+.... ", -" .+. ", -" .+. ... ", -" ... ..... ", -" ..+++.. ", -" ..+...+.. ", -" .....++. .++.... ", -" .++++.. ..++++ ", -" ..... .... ", -" ", -" ", -" ", -" ..... .... ", -" .++++.. ..++++ ", -" .....++. .++.... ", -" ..+...+.. ", -" ..+++.. ", -" ..... ", -" ... ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" "}; diff --git a/src/pixmaps/cursor-thin.xpm b/src/pixmaps/cursor-thin.xpm deleted file mode 100644 index 16a32311d..000000000 --- a/src/pixmaps/cursor-thin.xpm +++ /dev/null @@ -1,38 +0,0 @@ -/* XPM */ -static char const *cursor_thin_xpm[] = { -"32 32 3 1", -" c None", -". c #FFFFFF", -"+ c #000000", -" ... ", -" .+. ", -" .+. ", -"....+.... ", -".+++ +++. ", -"....+.... ", -" .+. ", -" .+. ", -" ... ..... .... ", -" ...... ..... ", -" .++++.. ..++++ ", -" .....++.....++.... ", -" ..+++++.. ", -" ..... ", -" ", -" ", -" ..... ", -" ..+++++.. ", -" .....++.....++.... ", -" .++++.. ..++++ ", -" ...... ..... ", -" ..... .... ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" "}; diff --git a/src/pixmaps/cursor-tweak-attract.xpm b/src/pixmaps/cursor-tweak-attract.xpm new file mode 100644 index 000000000..264360b2e --- /dev/null +++ b/src/pixmaps/cursor-tweak-attract.xpm @@ -0,0 +1,38 @@ +/* XPM */ +static char const *cursor_attract_xpm[] = { +"32 32 3 1 4 4", +" c None", +". c #FFFFFF", +"+ c #000000", +" ... ", +" .+. ", +" .+. ", +"....+.... ", +".+++ +++. ", +"....+.... ", +" .+. ", +" .+. ", +" ... ", +" ..... .... ", +" .++++.. ..++++ ", +" .....++.....++.... ", +" .......+++++...... ", +" .++++.........++++ ", +" .....++.....++.... ", +" ..+++++.. ", +" ....... ", +" ....... ", +" ..+++++.. ", +" .....++.....++.... ", +" .++++.........++++ ", +" .......+++++...... ", +" .....++.....++.... ", +" .++++.. ..++++ ", +" ..... .... ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/src/pixmaps/cursor-tweak-color.xpm b/src/pixmaps/cursor-tweak-color.xpm new file mode 100644 index 000000000..4bce642d6 --- /dev/null +++ b/src/pixmaps/cursor-tweak-color.xpm @@ -0,0 +1,38 @@ +/* XPM */ +static char const *cursor_color_xpm[] = { +"32 32 3 1 4 4", +" c None", +". c #FFFFFF", +"+ c #000000", +" ... ", +" .+. ", +" .+. ", +"....+.... ", +".+++ +++. ", +"....+.... ", +" .+. ", +" .+. ......... ", +" ... ........... ", +" .......+....... ", +" ...+.+..+.+.... ", +" .......+.+..+.... ", +" ....+.++.+.+...+... ", +" ....+..+.+++++..... ", +" .....+++++.+..+.... ", +" ...+..+.++++++.+... ", +" ....++.+++.+.+..... ", +" .....++.+++++.++... ", +" ...+..++.++.+...... ", +" ....+..++.+.++.+... ", +" ......+..+.+....... ", +" ......+.+.+.+.... ", +" ...+........... ", +" .....+..+...... ", +" ........... ", +" ......... ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/src/pixmaps/cursor-tweak-less.xpm b/src/pixmaps/cursor-tweak-less.xpm index 6c065ba62..c669bca77 100644 --- a/src/pixmaps/cursor-tweak-less.xpm +++ b/src/pixmaps/cursor-tweak-less.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const * cursor_tweak_less_xpm[] = { -"32 32 3 1", +"32 32 3 1 4 4", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-tweak-more.xpm b/src/pixmaps/cursor-tweak-more.xpm index 0e80bb9c5..6321ce940 100644 --- a/src/pixmaps/cursor-tweak-more.xpm +++ b/src/pixmaps/cursor-tweak-more.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const * cursor_tweak_more_xpm[] = { -"32 32 3 1", +"32 32 3 1 4 4", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-tweak-move-in.xpm b/src/pixmaps/cursor-tweak-move-in.xpm index 11ee4c3e1..d80fa03c6 100644 --- a/src/pixmaps/cursor-tweak-move-in.xpm +++ b/src/pixmaps/cursor-tweak-move-in.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const * cursor_tweak_move_in_xpm[] = { -"32 32 3 1", +"32 32 3 1 4 4", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-tweak-move-jitter.xpm b/src/pixmaps/cursor-tweak-move-jitter.xpm index 1f2b1d26a..7f0f8114d 100644 --- a/src/pixmaps/cursor-tweak-move-jitter.xpm +++ b/src/pixmaps/cursor-tweak-move-jitter.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const * cursor_tweak_move_jitter_xpm[] = { -"32 32 3 1", +"32 32 3 1 4 4", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-tweak-move-out.xpm b/src/pixmaps/cursor-tweak-move-out.xpm index 7d4569dfe..1fa0293bb 100644 --- a/src/pixmaps/cursor-tweak-move-out.xpm +++ b/src/pixmaps/cursor-tweak-move-out.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const * cursor_tweak_move_out_xpm[] = { -"32 32 3 1", +"32 32 3 1 4 4", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-tweak-move.xpm b/src/pixmaps/cursor-tweak-move.xpm index e44028f6c..67b10980b 100644 --- a/src/pixmaps/cursor-tweak-move.xpm +++ b/src/pixmaps/cursor-tweak-move.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const * cursor_tweak_move_xpm[] = { -"32 32 3 1", +"32 32 3 1 4 4", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-tweak-push.xpm b/src/pixmaps/cursor-tweak-push.xpm new file mode 100644 index 000000000..bf331e58d --- /dev/null +++ b/src/pixmaps/cursor-tweak-push.xpm @@ -0,0 +1,38 @@ +/* XPM */ +static char const *cursor_push_xpm[] = { +"32 32 3 1 4 4", +" c None", +". c #FFFFFF", +"+ c #000000", +" ... ", +" .+. ", +" .+. ", +"....+.... ", +".+++ +++. ", +"....+.... ", +" .+. ", +" .+. ... ", +" ... ..... ", +" ..+++.. ", +" ..+...+.. ", +" .....++. .++.... ", +" .++++.. ..++++ ", +" ..... ... .... ", +" ..... ", +" ..+++.. ", +" ..+...+.. ", +" .....++. .++.... ", +" .++++.. ..++++ ", +" ..... .... ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/src/pixmaps/cursor-tweak-repel.xpm b/src/pixmaps/cursor-tweak-repel.xpm new file mode 100644 index 000000000..5dccefdb8 --- /dev/null +++ b/src/pixmaps/cursor-tweak-repel.xpm @@ -0,0 +1,38 @@ +/* XPM */ +static char const *cursor_repel_xpm[] = { +"32 32 3 1 4 4", +" c None", +". c #FFFFFF", +"+ c #000000", +" ... ", +" .+. ", +" .+. ", +"....+.... ", +".+++ +++. ", +"....+.... ", +" .+. ", +" .+. ", +" ... ....... ", +" ..+++++.. ", +" .....++.....++..... ", +" .++++.........++++. ", +" .......+++++....... ", +" .....++.....++..... ", +" .++++.. ..++++. ", +" ..... ..... ", +" ", +" ..... ..... ", +" .++++.. ..++++. ", +" .....++.....++..... ", +" .......+++++....... ", +" .++++.........++++. ", +" .....++.....++..... ", +" ..+++++.. ", +" ....... ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/src/pixmaps/cursor-tweak-rotate-clockwise.xpm b/src/pixmaps/cursor-tweak-rotate-clockwise.xpm index 20bad59af..ecbbde820 100644 --- a/src/pixmaps/cursor-tweak-rotate-clockwise.xpm +++ b/src/pixmaps/cursor-tweak-rotate-clockwise.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const * cursor_tweak_rotate_clockwise_xpm[] = { -"32 32 3 1", +"32 32 3 1 4 4", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-tweak-rotate-counterclockwise.xpm b/src/pixmaps/cursor-tweak-rotate-counterclockwise.xpm index c5fcc70e8..a3c220842 100644 --- a/src/pixmaps/cursor-tweak-rotate-counterclockwise.xpm +++ b/src/pixmaps/cursor-tweak-rotate-counterclockwise.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const * cursor_tweak_rotate_counterclockwise_xpm[] = { -"32 32 3 1", +"32 32 3 1 4 4", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-tweak-roughen.xpm b/src/pixmaps/cursor-tweak-roughen.xpm new file mode 100644 index 000000000..1581b95fa --- /dev/null +++ b/src/pixmaps/cursor-tweak-roughen.xpm @@ -0,0 +1,38 @@ +/* XPM */ +static char const *cursor_roughen_xpm[] = { +"32 32 3 1 4 4", +" c None", +". c #FFFFFF", +"+ c #000000", +" ... ", +" .+. ", +" .+. ", +"....+.... ", +".+++ +++. ", +"....+.... ", +" .+. ", +" .+. ", +" ... ... ", +" ....+... ", +" . .+ +..+... ", +" ...+.+++.+..+.+... ", +" .++.+..+ . .+++++ ", +" ... . ..... ", +" ", +" ", +" .. ", +" ........++.. ..... ", +" .++++..+ +...++++ ", +" .....++.+..+++.... ", +" ......+.. ", +" ... ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/src/pixmaps/cursor-tweak-scale-down.xpm b/src/pixmaps/cursor-tweak-scale-down.xpm index cfd804aab..b1b15af17 100644 --- a/src/pixmaps/cursor-tweak-scale-down.xpm +++ b/src/pixmaps/cursor-tweak-scale-down.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const * cursor_tweak_scale_down_xpm[] = { -"32 32 3 1", +"32 32 3 1 4 4", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-tweak-scale-up.xpm b/src/pixmaps/cursor-tweak-scale-up.xpm index 547346f4c..dcc73c122 100644 --- a/src/pixmaps/cursor-tweak-scale-up.xpm +++ b/src/pixmaps/cursor-tweak-scale-up.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const * cursor_tweak_scale_up_xpm[] = { -"32 32 3 1", +"32 32 3 1 4 4", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-tweak-thicken.xpm b/src/pixmaps/cursor-tweak-thicken.xpm new file mode 100644 index 000000000..ba7a2dfb8 --- /dev/null +++ b/src/pixmaps/cursor-tweak-thicken.xpm @@ -0,0 +1,38 @@ +/* XPM */ +static char const *cursor_thicken_xpm[] = { +"32 32 3 1 4 4", +" c None", +". c #FFFFFF", +"+ c #000000", +" ... ", +" .+. ", +" .+. ", +"....+.... ", +".+++ +++. ", +"....+.... ", +" .+. ", +" .+. ... ", +" ... ..... ", +" ..+++.. ", +" ..+...+.. ", +" .....++. .++.... ", +" .++++.. ..++++ ", +" ..... .... ", +" ", +" ", +" ", +" ..... .... ", +" .++++.. ..++++ ", +" .....++. .++.... ", +" ..+...+.. ", +" ..+++.. ", +" ..... ", +" ... ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/src/pixmaps/cursor-tweak-thin.xpm b/src/pixmaps/cursor-tweak-thin.xpm new file mode 100644 index 000000000..7d10fe7e9 --- /dev/null +++ b/src/pixmaps/cursor-tweak-thin.xpm @@ -0,0 +1,38 @@ +/* XPM */ +static char const *cursor_thin_xpm[] = { +"32 32 3 1 4 4", +" c None", +". c #FFFFFF", +"+ c #000000", +" ... ", +" .+. ", +" .+. ", +"....+.... ", +".+++ +++. ", +"....+.... ", +" .+. ", +" .+. ", +" ... ..... .... ", +" ...... ..... ", +" .++++.. ..++++ ", +" .....++.....++.... ", +" ..+++++.. ", +" ..... ", +" ", +" ", +" ..... ", +" ..+++++.. ", +" .....++.....++.... ", +" .++++.. ..++++ ", +" ...... ..... ", +" ..... .... ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/src/pixmaps/cursor-zoom-out.xpm b/src/pixmaps/cursor-zoom-out.xpm index c8ddf48a2..8f35ad049 100644 --- a/src/pixmaps/cursor-zoom-out.xpm +++ b/src/pixmaps/cursor-zoom-out.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const *cursor_zoom_out_xpm[] = { -"32 32 3 1", +"32 32 3 1 6 6", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/pixmaps/cursor-zoom.xpm b/src/pixmaps/cursor-zoom.xpm index 0def57427..e869239d6 100644 --- a/src/pixmaps/cursor-zoom.xpm +++ b/src/pixmaps/cursor-zoom.xpm @@ -1,6 +1,6 @@ /* XPM */ static char const *cursor_zoom_xpm[] = { -"32 32 3 1", +"32 32 3 1 6 6", " c None", ". c #FFFFFF", "+ c #000000", diff --git a/src/sp-cursor.cpp b/src/sp-cursor.cpp index 4b9f1cc2d..78bfc9075 100644 --- a/src/sp-cursor.cpp +++ b/src/sp-cursor.cpp @@ -54,82 +54,92 @@ struct RGBA { } }; -GdkPixbuf *sp_cursor_pixbuf_from_xpm(char const *const *xpm, GdkColor const& black, GdkColor const& white, guint32 fill, guint32 stroke) +GdkCursor *sp_cursor_from_xpm(char const *const *xpm, GdkColor *black, GdkColor *white, guint32 fill, guint32 stroke) { + GdkPixbuf *pixbuf; + GdkCursor *cursor; + GdkDisplay *display = gdk_display_get_default(); + int height = 0; int width = 0; int colors = 0; int pix = 0; + int hot_x = 0; + int hot_y = 0; std::stringstream ss (std::stringstream::in | std::stringstream::out); ss << xpm[0]; ss >> height; ss >> width; ss >> colors; ss >> pix; + ss >> hot_x; + ss >> hot_y; - std::map colorMap; + if (gdk_display_supports_cursor_alpha(display) && gdk_display_supports_cursor_color(display)) { + std::map colorMap; - for (int i = 0; i < colors; i++) { + for (int i = 0; i < colors; i++) { - char const *p = xpm[1 + i]; - g_assert(*p >=0); - unsigned char const ccode = (guchar) *p; + char const *p = xpm[1 + i]; + g_assert(*p >=0); + unsigned char const ccode = (guchar) *p; - p++; - while (isspace(*p)) { p++; - } - p++; - while (isspace(*p)) { + while (isspace(*p)) { + p++; + } p++; + while (isspace(*p)) { + p++; + } + + if (strcmp(p, "Fill") == 0) { + colorMap[ccode] = RGBA(SP_RGBA32_R_U(fill), SP_RGBA32_G_U(fill), SP_RGBA32_B_U(fill), SP_RGBA32_A_U(fill)); + } else if (strcmp(p, "Stroke") == 0) { + colorMap[ccode] = RGBA(SP_RGBA32_R_U(stroke), SP_RGBA32_G_U(stroke), SP_RGBA32_B_U(stroke), SP_RGBA32_A_U(stroke)); + } else if (black && strcmp(p, "#000000") == 0) { + colorMap[ccode] = RGBA(black->red, black->green, black->blue, 255); + } else if (white && strcmp(p, "#FFFFFF") == 0) { + colorMap[ccode] = RGBA(white->red, white->green, white->blue, 255); + } else if (p[0] == '#') { + GdkRGBA color; + if (gdk_rgba_parse(&color, p)) { + colorMap[ccode] = RGBA(color.red * 255, color.green * 255, color.blue * 255, color.alpha * 255); + } else { + colorMap[ccode] = RGBA(); + } + } else { // Catches 'None' + colorMap[ccode] = RGBA(); + } } - if (strcmp(p, "None") == 0) { - colorMap[ccode] = RGBA(); - } else if (strcmp(p, "Fill") == 0) { - colorMap[ccode] = RGBA(SP_RGBA32_R_U(fill), SP_RGBA32_G_U(fill), SP_RGBA32_B_U(fill), SP_RGBA32_A_U(fill)); - } else if (strcmp(p, "Stroke") == 0) { - colorMap[ccode] = RGBA(SP_RGBA32_R_U(stroke), SP_RGBA32_G_U(stroke), SP_RGBA32_B_U(stroke), SP_RGBA32_A_U(stroke)); - } else if (strcmp(p, "#000000") == 0) { - colorMap[ccode] = RGBA(black.red, black.green, black.blue, 255); - } else if (strcmp(p, "#FFFFFF") == 0) { - colorMap[ccode] = RGBA(white.red, white.green, white.blue, 255); - } else { - colorMap[ccode] = RGBA(); - } - } + guint32 *pixmap_buffer = new guint32[width * height]; - guint32 *pixmap_buffer = new guint32[width * height]; - - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) { - std::map::const_iterator it = colorMap.find(xpm[1 + colors + y][x]); - pixmap_buffer[y * width + x] = (it == colorMap.end()) ? 0u : it->second; + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + std::map::const_iterator it = colorMap.find(xpm[1 + colors + y][x]); + pixmap_buffer[y * width + x] = (it == colorMap.end()) ? 0u : it->second; + } } - } #if G_BYTE_ORDER == G_BIG_ENDIAN - for (int i = 0, n = width * height; i < n; i++) { - guint32 v = pixmap_buffer[i]; - pixmap_buffer[i] = ((v & 0xFF) << 24) | (((v >> 8) & 0xFF) << 16) | (((v >> 16) & 0xFF) << 8) | ((v >> 24) & 0xFF); - } + for (int i = 0, n = width * height; i < n; i++) { + guint32 v = pixmap_buffer[i]; + pixmap_buffer[i] = ((v & 0xFF) << 24) | (((v >> 8) & 0xFF) << 16) | (((v >> 16) & 0xFF) << 8) | ((v >> 24) & 0xFF); + } #endif - return gdk_pixbuf_new_from_data(reinterpret_cast(pixmap_buffer), GDK_COLORSPACE_RGB, TRUE, 8, width, height, width * sizeof(guint32), free_cursor_data, NULL); -} - -GdkCursor *sp_cursor_new_from_xpm(char const *const *xpm, int hot_x, int hot_y) -{ - GdkCursor *cursor = 0; - GdkPixbuf *pixbuf = gdk_pixbuf_new_from_xpm_data((const gchar **)xpm); - - if (pixbuf) { - cursor = gdk_cursor_new_from_pixbuf(gdk_display_get_default(), - pixbuf, hot_x, hot_y); + pixbuf = gdk_pixbuf_new_from_data(reinterpret_cast(pixmap_buffer), GDK_COLORSPACE_RGB, TRUE, 8, width, height, width * sizeof(guint32), free_cursor_data, NULL); + } else { + pixbuf = gdk_pixbuf_new_from_xpm_data((const gchar **)xpm); + } + if (pixbuf != NULL) { + cursor = gdk_cursor_new_from_pixbuf(display, pixbuf, hot_x, hot_y); g_object_unref(pixbuf); + } else { + g_warning("Failed to load cursor from xpm!"); } - return cursor; } diff --git a/src/sp-cursor.h b/src/sp-cursor.h index c0b8b46a3..6579d6a16 100644 --- a/src/sp-cursor.h +++ b/src/sp-cursor.h @@ -6,8 +6,7 @@ typedef struct _GdkPixbuf GdkPixbuf; typedef struct _GdkCursor GdkCursor; typedef struct _GdkColor GdkColor; -GdkPixbuf* sp_cursor_pixbuf_from_xpm(char const *const *xpm, GdkColor const& black, GdkColor const& white, guint32 fill, guint32 stroke); -GdkCursor *sp_cursor_new_from_xpm(char const *const *xpm, int hot_x, int hot_y); +GdkCursor* sp_cursor_from_xpm(char const *const *xpm, GdkColor *black=NULL, GdkColor *white=NULL, guint32 fill=0, guint32 stroke=0); #endif diff --git a/src/ui/tools/arc-tool.cpp b/src/ui/tools/arc-tool.cpp index 6652f7ab5..01e0c3e00 100644 --- a/src/ui/tools/arc-tool.cpp +++ b/src/ui/tools/arc-tool.cpp @@ -59,7 +59,7 @@ const std::string ArcTool::prefsPath = "/tools/shapes/arc"; ArcTool::ArcTool() - : ToolBase(cursor_ellipse_xpm, 4, 4) + : ToolBase(cursor_ellipse_xpm) , arc(NULL) { } diff --git a/src/ui/tools/box3d-tool.cpp b/src/ui/tools/box3d-tool.cpp index 425695a2c..276385335 100644 --- a/src/ui/tools/box3d-tool.cpp +++ b/src/ui/tools/box3d-tool.cpp @@ -54,7 +54,7 @@ const std::string& Box3dTool::getPrefsPath() { const std::string Box3dTool::prefsPath = "/tools/shapes/3dbox"; Box3dTool::Box3dTool() - : ToolBase(cursor_3dbox_xpm, 4, 4) + : ToolBase(cursor_3dbox_xpm) , _vpdrag(NULL) , box3d(NULL) , ctrl_dragged(false) diff --git a/src/ui/tools/calligraphic-tool.cpp b/src/ui/tools/calligraphic-tool.cpp index 7228a52bc..266375caa 100644 --- a/src/ui/tools/calligraphic-tool.cpp +++ b/src/ui/tools/calligraphic-tool.cpp @@ -88,7 +88,7 @@ const std::string& CalligraphicTool::getPrefsPath() { const std::string CalligraphicTool::prefsPath = "/tools/calligraphic"; CalligraphicTool::CalligraphicTool() - : DynamicBase(cursor_calligraphy_xpm, 4, 4) + : DynamicBase(cursor_calligraphy_xpm) , keep_selected(true) , hatch_spacing(0) , hatch_spacing_step(0) diff --git a/src/ui/tools/connector-tool.cpp b/src/ui/tools/connector-tool.cpp index 7e6fb4b72..29be4831a 100644 --- a/src/ui/tools/connector-tool.cpp +++ b/src/ui/tools/connector-tool.cpp @@ -145,7 +145,7 @@ const std::string& ConnectorTool::getPrefsPath() { const std::string ConnectorTool::prefsPath = "/tools/connector"; ConnectorTool::ConnectorTool() - : ToolBase(cursor_connector_xpm, 1, 1) + : ToolBase(cursor_connector_xpm) , selection(NULL) , npoints(0) , state(SP_CONNECTOR_CONTEXT_IDLE) diff --git a/src/ui/tools/dropper-tool.cpp b/src/ui/tools/dropper-tool.cpp index 99177dc75..bd341262b 100644 --- a/src/ui/tools/dropper-tool.cpp +++ b/src/ui/tools/dropper-tool.cpp @@ -60,7 +60,7 @@ const std::string& DropperTool::getPrefsPath() { const std::string DropperTool::prefsPath = "/tools/dropper"; DropperTool::DropperTool() - : ToolBase(cursor_dropper_f_xpm, 5, 5) + : ToolBase(cursor_dropper_f_xpm) , R(0) , G(0) , B(0) @@ -70,8 +70,8 @@ DropperTool::DropperTool() , area(NULL) , centre(0, 0) { - cursor_dropper_fill = sp_cursor_new_from_xpm(cursor_dropper_f_xpm , 5, 5); - cursor_dropper_stroke = sp_cursor_new_from_xpm(cursor_dropper_s_xpm , 5, 5); + cursor_dropper_fill = sp_cursor_from_xpm(cursor_dropper_f_xpm); + cursor_dropper_stroke = sp_cursor_from_xpm(cursor_dropper_s_xpm); } DropperTool::~DropperTool() { diff --git a/src/ui/tools/dynamic-base.cpp b/src/ui/tools/dynamic-base.cpp index 6627a470e..bb4989333 100644 --- a/src/ui/tools/dynamic-base.cpp +++ b/src/ui/tools/dynamic-base.cpp @@ -18,8 +18,8 @@ namespace Inkscape { namespace UI { namespace Tools { -DynamicBase::DynamicBase(gchar const *const *cursor_shape, gint hot_x, gint hot_y) - : ToolBase(cursor_shape, hot_x, hot_y) +DynamicBase::DynamicBase(gchar const *const *cursor_shape) + : ToolBase(cursor_shape) , accumulated(NULL) , segments(NULL) , currentshape(NULL) diff --git a/src/ui/tools/dynamic-base.h b/src/ui/tools/dynamic-base.h index 095af8f88..e270052f3 100644 --- a/src/ui/tools/dynamic-base.h +++ b/src/ui/tools/dynamic-base.h @@ -38,7 +38,7 @@ namespace Tools { class DynamicBase : public ToolBase { public: - DynamicBase(gchar const *const *cursor_shape, gint hot_x, gint hot_y); + DynamicBase(gchar const *const *cursor_shape); virtual ~DynamicBase(); virtual void set(const Inkscape::Preferences::Entry& val); diff --git a/src/ui/tools/eraser-tool.cpp b/src/ui/tools/eraser-tool.cpp index ae312e054..b4246b9cc 100644 --- a/src/ui/tools/eraser-tool.cpp +++ b/src/ui/tools/eraser-tool.cpp @@ -93,7 +93,7 @@ const std::string& EraserTool::getPrefsPath() { const std::string EraserTool::prefsPath = "/tools/eraser"; EraserTool::EraserTool() - : DynamicBase(cursor_eraser_xpm, 4, 4) + : DynamicBase(cursor_eraser_xpm) , nowidth(false) { } diff --git a/src/ui/tools/flood-tool.cpp b/src/ui/tools/flood-tool.cpp index 6e1d085aa..f6f9b4355 100644 --- a/src/ui/tools/flood-tool.cpp +++ b/src/ui/tools/flood-tool.cpp @@ -98,7 +98,7 @@ Glib::ustring gap_init[4] = { const std::vector FloodTool::gap_list( gap_init, gap_init+4 ); FloodTool::FloodTool() - : ToolBase(cursor_paintbucket_xpm, 11, 30) + : ToolBase(cursor_paintbucket_xpm) , item(NULL) { // TODO: Why does the flood tool use a hardcoded tolerance instead of a pref? diff --git a/src/ui/tools/freehand-base.cpp b/src/ui/tools/freehand-base.cpp index 4af70a816..8a5ef0aad 100644 --- a/src/ui/tools/freehand-base.cpp +++ b/src/ui/tools/freehand-base.cpp @@ -63,8 +63,8 @@ static void spdc_flush_white(FreehandBase *dc, SPCurve *gc); static void spdc_reset_white(FreehandBase *dc); static void spdc_free_colors(FreehandBase *dc); -FreehandBase::FreehandBase(gchar const *const *cursor_shape, gint hot_x, gint hot_y) - : ToolBase(cursor_shape, hot_x, hot_y) +FreehandBase::FreehandBase(gchar const *const *cursor_shape) + : ToolBase(cursor_shape) , selection(NULL) , grab(NULL) , attach(false) diff --git a/src/ui/tools/freehand-base.h b/src/ui/tools/freehand-base.h index 3ee4cd7d0..a3069aa09 100644 --- a/src/ui/tools/freehand-base.h +++ b/src/ui/tools/freehand-base.h @@ -44,7 +44,7 @@ namespace Tools { class FreehandBase : public ToolBase { public: - FreehandBase(gchar const *const *cursor_shape, gint hot_x, gint hot_y); + FreehandBase(gchar const *const *cursor_shape); virtual ~FreehandBase(); Inkscape::Selection *selection; diff --git a/src/ui/tools/gradient-tool.cpp b/src/ui/tools/gradient-tool.cpp index 750596808..95d940bd6 100644 --- a/src/ui/tools/gradient-tool.cpp +++ b/src/ui/tools/gradient-tool.cpp @@ -58,7 +58,7 @@ const std::string GradientTool::prefsPath = "/tools/gradient"; GradientTool::GradientTool() - : ToolBase(cursor_gradient_xpm, 4, 4) + : ToolBase(cursor_gradient_xpm) , cursor_addnode(false) , node_added(false) // TODO: Why are these connections stored as pointers? diff --git a/src/ui/tools/lpe-tool.cpp b/src/ui/tools/lpe-tool.cpp index 29e4c9e74..35e6d14a0 100644 --- a/src/ui/tools/lpe-tool.cpp +++ b/src/ui/tools/lpe-tool.cpp @@ -68,7 +68,7 @@ const std::string& LpeTool::getPrefsPath() { const std::string LpeTool::prefsPath = "/tools/lpetool"; LpeTool::LpeTool() - : PenTool(cursor_crosshairs_xpm, 7, 7) + : PenTool(cursor_crosshairs_xpm) , shape_editor(NULL) , canvas_bbox(NULL) , mode(Inkscape::LivePathEffect::BEND_PATH) diff --git a/src/ui/tools/measure-tool.cpp b/src/ui/tools/measure-tool.cpp index 98b2c7d03..7f3c99716 100644 --- a/src/ui/tools/measure-tool.cpp +++ b/src/ui/tools/measure-tool.cpp @@ -322,7 +322,7 @@ void createAngleDisplayCurve(SPDesktop *desktop, Geom::Point const ¢er, Geom boost::optional explicit_base_tmp = boost::none; MeasureTool::MeasureTool() - : ToolBase(cursor_measure_xpm, 4, 4) + : ToolBase(cursor_measure_xpm) , grabbed(NULL) { SPDesktop *desktop = SP_ACTIVE_DESKTOP; diff --git a/src/ui/tools/mesh-tool.cpp b/src/ui/tools/mesh-tool.cpp index ac43b6c9d..d79741270 100644 --- a/src/ui/tools/mesh-tool.cpp +++ b/src/ui/tools/mesh-tool.cpp @@ -72,7 +72,7 @@ const std::string MeshTool::prefsPath = "/tools/mesh"; // TODO: The gradient tool class looks like a 1:1 copy. MeshTool::MeshTool() - : ToolBase(cursor_gradient_xpm, 4, 4) + : ToolBase(cursor_gradient_xpm) , cursor_addnode(false) , node_added(false) , show_handles(true) diff --git a/src/ui/tools/node-tool.cpp b/src/ui/tools/node-tool.cpp index 0c948c91c..08aacf805 100644 --- a/src/ui/tools/node-tool.cpp +++ b/src/ui/tools/node-tool.cpp @@ -118,7 +118,7 @@ const std::string NodeTool::prefsPath = "/tools/nodes"; SPCanvasGroup *create_control_group(SPDesktop *d); NodeTool::NodeTool() - : ToolBase(cursor_node_xpm, 1, 1) + : ToolBase(cursor_node_xpm) , _selected_nodes(NULL) , _multipath(NULL) , edit_clipping_paths(false) @@ -773,14 +773,10 @@ void NodeTool::mouseover_changed(Inkscape::UI::ControlPoint *p) { if (cdp && !this->cursor_drag) { this->cursor_shape = cursor_node_d_xpm; - this->hot_x = 1; - this->hot_y = 1; this->sp_event_context_update_cursor(); this->cursor_drag = true; } else if (!cdp && this->cursor_drag) { this->cursor_shape = cursor_node_xpm; - this->hot_x = 1; - this->hot_y = 1; this->sp_event_context_update_cursor(); this->cursor_drag = false; } diff --git a/src/ui/tools/pen-tool.cpp b/src/ui/tools/pen-tool.cpp index caf6faec2..265ddf2ea 100644 --- a/src/ui/tools/pen-tool.cpp +++ b/src/ui/tools/pen-tool.cpp @@ -81,7 +81,7 @@ const std::string& PenTool::getPrefsPath() { const std::string PenTool::prefsPath = "/tools/freehand/pen"; PenTool::PenTool() - : FreehandBase(cursor_pen_xpm, 4, 4) + : FreehandBase(cursor_pen_xpm) , p() , npoints(0) , mode(MODE_CLICK) @@ -100,8 +100,8 @@ PenTool::PenTool() { } -PenTool::PenTool(gchar const *const *cursor_shape, gint hot_x, gint hot_y) - : FreehandBase(cursor_shape, hot_x, hot_y) +PenTool::PenTool(gchar const *const *cursor_shape) + : FreehandBase(cursor_shape) , p() , npoints(0) , mode(MODE_CLICK) diff --git a/src/ui/tools/pen-tool.h b/src/ui/tools/pen-tool.h index 5a21e3bac..7e5483358 100644 --- a/src/ui/tools/pen-tool.h +++ b/src/ui/tools/pen-tool.h @@ -23,7 +23,7 @@ namespace Tools { class PenTool : public FreehandBase { public: PenTool(); - PenTool(gchar const *const *cursor_shape, gint hot_x, gint hot_y); + PenTool(gchar const *const *cursor_shape); virtual ~PenTool(); enum Mode { diff --git a/src/ui/tools/pencil-tool.cpp b/src/ui/tools/pencil-tool.cpp index ec2874823..99b8103c3 100644 --- a/src/ui/tools/pencil-tool.cpp +++ b/src/ui/tools/pencil-tool.cpp @@ -57,7 +57,7 @@ const std::string& PencilTool::getPrefsPath() { const std::string PencilTool::prefsPath = "/tools/freehand/pencil"; PencilTool::PencilTool() - : FreehandBase(cursor_pencil_xpm, 4, 4) + : FreehandBase(cursor_pencil_xpm) , p() , npoints(0) , state(SP_PENCIL_CONTEXT_IDLE) diff --git a/src/ui/tools/rect-tool.cpp b/src/ui/tools/rect-tool.cpp index 272531945..8eaae2f7b 100644 --- a/src/ui/tools/rect-tool.cpp +++ b/src/ui/tools/rect-tool.cpp @@ -52,7 +52,7 @@ const std::string& RectTool::getPrefsPath() { const std::string RectTool::prefsPath = "/tools/shapes/rect"; RectTool::RectTool() - : ToolBase(cursor_rect_xpm, 4, 4) + : ToolBase(cursor_rect_xpm) , rect(NULL) , rx(0) , ry(0) diff --git a/src/ui/tools/select-tool.cpp b/src/ui/tools/select-tool.cpp index 927b8a3d4..fca2173ca 100644 --- a/src/ui/tools/select-tool.cpp +++ b/src/ui/tools/select-tool.cpp @@ -81,7 +81,7 @@ sp_load_handles(int start, int count, char const **xpm) { SelectTool::SelectTool() // Don't load a default cursor - : ToolBase(NULL, 0, 0) + : ToolBase(NULL) , dragging(false) , moved(false) , button_press_shift(false) @@ -94,8 +94,8 @@ SelectTool::SelectTool() , _describer(NULL) { // cursors in select context - CursorSelectMouseover = sp_cursor_new_from_xpm(cursor_select_m_xpm , 1, 1); - CursorSelectDragging = sp_cursor_new_from_xpm(cursor_select_d_xpm , 1, 1); + CursorSelectMouseover = sp_cursor_from_xpm(cursor_select_m_xpm); + CursorSelectDragging = sp_cursor_from_xpm(cursor_select_d_xpm); // selection handles sp_load_handles(0, 2, handle_scale_xpm); diff --git a/src/ui/tools/spiral-tool.cpp b/src/ui/tools/spiral-tool.cpp index 0ba08853e..08c35b9b0 100644 --- a/src/ui/tools/spiral-tool.cpp +++ b/src/ui/tools/spiral-tool.cpp @@ -51,7 +51,7 @@ const std::string& SpiralTool::getPrefsPath() { const std::string SpiralTool::prefsPath = "/tools/shapes/spiral"; SpiralTool::SpiralTool() - : ToolBase(cursor_spiral_xpm, 4, 4) + : ToolBase(cursor_spiral_xpm) , spiral(NULL) , revo(3) , exp(1) diff --git a/src/ui/tools/spray-tool.cpp b/src/ui/tools/spray-tool.cpp index ad006627c..f3e7e6d3c 100644 --- a/src/ui/tools/spray-tool.cpp +++ b/src/ui/tools/spray-tool.cpp @@ -137,7 +137,7 @@ static void sp_spray_scale_rel(Geom::Point c, SPDesktop */*desktop*/, SPItem *it } SprayTool::SprayTool() - : ToolBase(cursor_spray_xpm, 4, 4, false) + : ToolBase(cursor_spray_xpm, false) , pressure(TC_DEFAULT_PRESSURE) , dragging(false) , usepressurewidth(false) diff --git a/src/ui/tools/star-tool.cpp b/src/ui/tools/star-tool.cpp index ddee08189..18992d87a 100644 --- a/src/ui/tools/star-tool.cpp +++ b/src/ui/tools/star-tool.cpp @@ -57,7 +57,7 @@ const std::string& StarTool::getPrefsPath() { const std::string StarTool::prefsPath = "/tools/shapes/star"; StarTool::StarTool() - : ToolBase(cursor_star_xpm, 4, 4) + : ToolBase(cursor_star_xpm) , star(NULL) , magnitude(5) , proportion(0.5) diff --git a/src/ui/tools/text-tool.cpp b/src/ui/tools/text-tool.cpp index 649bbb045..9091b455e 100644 --- a/src/ui/tools/text-tool.cpp +++ b/src/ui/tools/text-tool.cpp @@ -76,7 +76,7 @@ const std::string TextTool::prefsPath = "/tools/text"; TextTool::TextTool() - : ToolBase(cursor_text_xpm, 7, 7) + : ToolBase(cursor_text_xpm) , imc(NULL) , text(NULL) , pdoc(0, 0) @@ -359,8 +359,6 @@ bool TextTool::item_handler(SPItem* item, GdkEvent* event) { sp_canvas_item_show(this->indicator); this->cursor_shape = cursor_text_insert_xpm; - this->hot_x = 7; - this->hot_y = 10; this->sp_event_context_update_cursor(); sp_text_context_update_text_selection(this); @@ -548,8 +546,6 @@ bool TextTool::root_handler(GdkEvent* event) { this->over_text = 0; // update cursor and statusbar: we are not over a text object now this->cursor_shape = cursor_text_xpm; - this->hot_x = 7; - this->hot_y = 7; this->sp_event_context_update_cursor(); desktop->event_context->defaultMessageContext()->clear(); } diff --git a/src/ui/tools/tool-base.cpp b/src/ui/tools/tool-base.cpp index 9231db7c8..0467b984e 100644 --- a/src/ui/tools/tool-base.cpp +++ b/src/ui/tools/tool-base.cpp @@ -86,7 +86,7 @@ SPDesktop const& ToolBase::getDesktop() const { return *desktop; } -ToolBase::ToolBase(gchar const *const *cursor_shape, gint hot_x, gint hot_y, bool uses_snap) +ToolBase::ToolBase(gchar const *const *cursor_shape, bool uses_snap) : pref_observer(NULL) , cursor(NULL) , xp(0) @@ -104,8 +104,6 @@ ToolBase::ToolBase(gchar const *const *cursor_shape, gint hot_x, gint hot_y, boo , desktop(NULL) , _uses_snap(uses_snap) , cursor_shape(cursor_shape) - , hot_x(hot_x) - , hot_y(hot_y) { } @@ -154,44 +152,24 @@ void ToolBase::sp_event_context_set_cursor(GdkCursorType cursor_type) { void ToolBase::sp_event_context_update_cursor() { GtkWidget *w = GTK_WIDGET(this->desktop->getCanvas()); if (gtk_widget_get_window (w)) { - GtkStyle *style = gtk_widget_get_style(w); - /* fixme: */ if (this->cursor_shape) { - GdkDisplay *display = gdk_display_get_default(); - if (gdk_display_supports_cursor_alpha(display) && gdk_display_supports_cursor_color(display)) { - bool fillHasColor=false, strokeHasColor=false; - guint32 fillColor = sp_desktop_get_color_tool(this->desktop, this->getPrefsPath(), true, &fillHasColor); - guint32 strokeColor = sp_desktop_get_color_tool(this->desktop, this->getPrefsPath(), false, &strokeHasColor); - double fillOpacity = fillHasColor ? sp_desktop_get_opacity_tool(this->desktop, this->getPrefsPath(), true) : 0; - double strokeOpacity = strokeHasColor ? sp_desktop_get_opacity_tool(this->desktop, this->getPrefsPath(), false) : 0; - - GdkPixbuf *pixbuf = sp_cursor_pixbuf_from_xpm( - this->cursor_shape, - style->black, style->white, - SP_RGBA32_U_COMPOSE(SP_RGBA32_R_U(fillColor),SP_RGBA32_G_U(fillColor),SP_RGBA32_B_U(fillColor),SP_COLOR_F_TO_U(fillOpacity)), - SP_RGBA32_U_COMPOSE(SP_RGBA32_R_U(strokeColor),SP_RGBA32_G_U(strokeColor),SP_RGBA32_B_U(strokeColor),SP_COLOR_F_TO_U(strokeOpacity)) - ); - if (pixbuf != NULL) { - if (this->cursor) { - g_object_unref(this->cursor); - } - this->cursor = gdk_cursor_new_from_pixbuf(display, pixbuf, this->hot_x, this->hot_y); - g_object_unref(pixbuf); - } - } else { - GdkPixbuf *pixbuf = gdk_pixbuf_new_from_xpm_data((const gchar **)this->cursor_shape); - - if (pixbuf) { - if (this->cursor) { - g_object_unref(this->cursor); - } - this->cursor = gdk_cursor_new_from_pixbuf(display, - pixbuf, this->hot_x, this->hot_y); - g_object_unref(pixbuf); - } + if(this->cursor) { + g_object_unref(this->cursor); } + + bool fillHasColor=false, strokeHasColor=false; + guint32 fillColor = sp_desktop_get_color_tool(this->desktop, this->getPrefsPath(), true, &fillHasColor); + guint32 strokeColor = sp_desktop_get_color_tool(this->desktop, this->getPrefsPath(), false, &strokeHasColor); + double fillOpacity = fillHasColor ? sp_desktop_get_opacity_tool(this->desktop, this->getPrefsPath(), true) : 0; + double strokeOpacity = strokeHasColor ? sp_desktop_get_opacity_tool(this->desktop, this->getPrefsPath(), false) : 0; + + this->cursor = sp_cursor_from_xpm( + this->cursor_shape, &style->black, &style->white, + SP_RGBA32_C_COMPOSE(fillColor, fillOpacity), + SP_RGBA32_C_COMPOSE(strokeColor, strokeOpacity) + ); } gdk_window_set_cursor(gtk_widget_get_window (w), this->cursor); gdk_flush(); @@ -208,8 +186,7 @@ void ToolBase::sp_event_context_update_cursor() { void ToolBase::setup() { this->pref_observer = new ToolPrefObserver(this->getPrefsPath(), this); Inkscape::Preferences::get()->addObserver(*(this->pref_observer)); - - this->sp_event_context_update_cursor(); + this->sp_event_context_update_cursor(); } /** diff --git a/src/ui/tools/tool-base.h b/src/ui/tools/tool-base.h index 3d22fc66f..b0140cecb 100644 --- a/src/ui/tools/tool-base.h +++ b/src/ui/tools/tool-base.h @@ -144,7 +144,7 @@ public: void enableGrDrag (bool enable=true); bool deleteSelectedDrag(bool just_one); - ToolBase(gchar const *const *cursor_shape, gint hot_x, gint hot_y, bool uses_snap = true); + ToolBase(gchar const *const *cursor_shape, bool uses_snap=true); virtual ~ToolBase(); @@ -224,9 +224,6 @@ protected: /// An xpm containing the shape of the tool's cursor. gchar const *const *cursor_shape; - /// The cursor's hot spot - gint hot_x, hot_y; - bool sp_event_context_knot_mouseover() const; private: diff --git a/src/ui/tools/tweak-tool.cpp b/src/ui/tools/tweak-tool.cpp index ff5d623c2..dcd9413fb 100644 --- a/src/ui/tools/tweak-tool.cpp +++ b/src/ui/tools/tweak-tool.cpp @@ -38,13 +38,13 @@ #include "pixmaps/cursor-tweak-rotate-counterclockwise.xpm" #include "pixmaps/cursor-tweak-more.xpm" #include "pixmaps/cursor-tweak-less.xpm" -#include "pixmaps/cursor-thin.xpm" -#include "pixmaps/cursor-thicken.xpm" -#include "pixmaps/cursor-attract.xpm" -#include "pixmaps/cursor-repel.xpm" -#include "pixmaps/cursor-push.xpm" -#include "pixmaps/cursor-roughen.xpm" -#include "pixmaps/cursor-color.xpm" +#include "pixmaps/cursor-tweak-thin.xpm" +#include "pixmaps/cursor-tweak-thicken.xpm" +#include "pixmaps/cursor-tweak-attract.xpm" +#include "pixmaps/cursor-tweak-repel.xpm" +#include "pixmaps/cursor-tweak-push.xpm" +#include "pixmaps/cursor-tweak-roughen.xpm" +#include "pixmaps/cursor-tweak-color.xpm" #include "context-fns.h" #include "inkscape.h" #include "splivarot.h" @@ -92,7 +92,7 @@ const std::string& TweakTool::getPrefsPath() { const std::string TweakTool::prefsPath = "/tools/tweak"; TweakTool::TweakTool() - : ToolBase(cursor_push_xpm, 4, 4) + : ToolBase(cursor_push_xpm) , pressure(TC_DEFAULT_PRESSURE) , dragging(false) , usepressure(false) diff --git a/src/ui/tools/zoom-tool.cpp b/src/ui/tools/zoom-tool.cpp index d40d2e969..8ba0c17b3 100644 --- a/src/ui/tools/zoom-tool.cpp +++ b/src/ui/tools/zoom-tool.cpp @@ -36,7 +36,7 @@ const std::string& ZoomTool::getPrefsPath() { const std::string ZoomTool::prefsPath = "/tools/zoom"; ZoomTool::ZoomTool() - : ToolBase(cursor_zoom_xpm, 6, 6) + : ToolBase(cursor_zoom_xpm) , grabbed(NULL) , escaped(false) { -- cgit v1.2.3 From c4243660541b1b36d24048d4296bc3d5b5bf6d94 Mon Sep 17 00:00:00 2001 From: Martin Owens Date: Fri, 30 Jun 2017 06:49:48 +0200 Subject: Hackfest: Show dropper color in cursor, while moving the mouse. --- src/pixmaps/cursor-dropper-f.xpm | 19 ++++++----- src/pixmaps/cursor-dropper-s.xpm | 17 +++++----- src/ui/tools/dropper-tool.cpp | 73 +++++++++++++++++----------------------- src/ui/tools/dropper-tool.h | 5 +++ 4 files changed, 54 insertions(+), 60 deletions(-) diff --git a/src/pixmaps/cursor-dropper-f.xpm b/src/pixmaps/cursor-dropper-f.xpm index e5602d94b..2804f6614 100644 --- a/src/pixmaps/cursor-dropper-f.xpm +++ b/src/pixmaps/cursor-dropper-f.xpm @@ -1,19 +1,20 @@ /* XPM */ static const char * cursor_dropper_f_xpm[] = { -"32 32 3 1 5 5", +"32 32 4 1 5 5", " c None", +"@ c Fill", ". c #FFFFFF", "+ c #000000", " ... ............", " .+. .++++++++++.", -" .+. .+........+.", -" .+. .+........+.", -".... .... .+........+.", -".+++ +++. .+........+.", -".... .... .+........+.", -" .+. .+........+.", -" .+. .... .+........+.", -" .+. .+++. .+........+.", +" .+. .+@@@@@@@@+.", +" .+. .+@@@@@@@@+.", +".... .... .+@@@@@@@@+.", +".+++ +++. .+@@@@@@@@+.", +".... .... .+@@@@@@@@+.", +" .+. .+@@@@@@@@+.", +" .+. .... .+@@@@@@@@+.", +" .+. .+++. .+@@@@@@@@+.", " ... .+..+. .++++++++++.", " .++..+. ............", " .++..+. ", diff --git a/src/pixmaps/cursor-dropper-s.xpm b/src/pixmaps/cursor-dropper-s.xpm index 2a80f3600..975895963 100644 --- a/src/pixmaps/cursor-dropper-s.xpm +++ b/src/pixmaps/cursor-dropper-s.xpm @@ -2,19 +2,20 @@ static const char * cursor_dropper_s_xpm[] = { "32 32 3 1 5 5", " c None", +"@ c Fill", ". c #FFFFFF", "+ c #000000", " ... ............", -" .+. .+++.++.+++.", -" .+. .+........+.", -" .+. .+. .+.", +" .+. .@@@.@@.@@@.", +" .+. .@........@.", +" .+. .@. .@.", ".... .... ... ...", -".+++ +++. .+. .+.", -".... .... .+. .+.", +".+++ +++. .@. .@.", +".... .... .@. .@.", " .+. ... ...", -" .+. .... .+. .+.", -" .+. .+++. .+........+.", -" ... .+..+. .+++.++.+++.", +" .+. .... .@. .@.", +" .+. .+++. .@........@.", +" ... .+..+. .@@@.@@.@@@.", " .++..+. ............", " .++..+. ", " .++..+. ", diff --git a/src/ui/tools/dropper-tool.cpp b/src/ui/tools/dropper-tool.cpp index bd341262b..a409e249e 100644 --- a/src/ui/tools/dropper-tool.cpp +++ b/src/ui/tools/dropper-tool.cpp @@ -46,9 +46,6 @@ using Inkscape::DocumentUndo; -static GdkCursor *cursor_dropper_fill = NULL; -static GdkCursor *cursor_dropper_stroke = NULL; - namespace Inkscape { namespace UI { namespace Tools { @@ -70,8 +67,6 @@ DropperTool::DropperTool() , area(NULL) , centre(0, 0) { - cursor_dropper_fill = sp_cursor_from_xpm(cursor_dropper_f_xpm); - cursor_dropper_stroke = sp_cursor_from_xpm(cursor_dropper_s_xpm); } DropperTool::~DropperTool() { @@ -117,16 +112,6 @@ void DropperTool::finish() { this->area = NULL; } - if (cursor_dropper_fill) { - g_object_unref(cursor_dropper_fill); - cursor_dropper_fill = NULL; - } - - if (cursor_dropper_stroke) { - g_object_unref(cursor_dropper_stroke); - cursor_dropper_fill = NULL; - } - ToolBase::finish(); } @@ -149,6 +134,7 @@ bool DropperTool::root_handler(GdkEvent* event) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); int ret = FALSE; + int draw_cursor = DONT_REDRAW_CURSOR; int pick = prefs->getInt("/tools/dropper/pick", SP_DROPPER_PICK_VISIBLE); bool setalpha = prefs->getBool("/tools/dropper/setalpha", true); @@ -174,14 +160,6 @@ bool DropperTool::root_handler(GdkEvent* event) { break; } else if (!this->space_panning) { // otherwise, constantly calculate color no matter is any button pressed or not - - // If one time pick with stroke set the pixmap - if (prefs->getBool("/tools/dropper/onetimepick", false) && prefs->getInt("/dialogs/fillstroke/page", 0) == 1) { - //TODO Only set when not set already - GdkWindow* window = gtk_widget_get_window(GTK_WIDGET(desktop->getCanvas())); - gdk_window_set_cursor(window, cursor_dropper_stroke); - } - double rw = 0.0; double R(0), G(0), B(0), A(0); @@ -242,10 +220,17 @@ bool DropperTool::root_handler(GdkEvent* event) { } // remember color - this->R = R; - this->G = G; - this->B = B; - this->alpha = A; + if(R != this->R || G != this->G || B != this->B || A != this->alpha) { + this->R = R; + this->G = G; + this->B = B; + this->alpha = A; + if(!(event->button.state & GDK_SHIFT_MASK)) { + draw_cursor = DRAW_FILL_CURSOR; + } else { + draw_cursor = DRAW_STROKE_CURSOR; + } + } // status message double alpha_to_set = setalpha? this->alpha : 1.0; @@ -278,11 +263,10 @@ bool DropperTool::root_handler(GdkEvent* event) { if (event->button.button == 1 && !this->space_panning) { sp_canvas_item_hide(this->area); this->dragging = false; - - if (this->grabbed) { - sp_canvas_item_ungrab(this->grabbed, event->button.time); - this->grabbed = NULL; - } + if (this->grabbed) { + sp_canvas_item_ungrab(this->grabbed, event->button.time); + this->grabbed = NULL; + } double alpha_to_set = setalpha? this->alpha : 1.0; @@ -302,8 +286,7 @@ bool DropperTool::root_handler(GdkEvent* event) { // REJON: set aux. toolbar input to hex color! if (event->button.state & GDK_SHIFT_MASK) { - GdkWindow* window = gtk_widget_get_window(GTK_WIDGET(desktop->getCanvas())); - gdk_window_set_cursor(window, cursor_dropper_stroke); + draw_cursor = DRAW_STROKE_CURSOR; } if (!(desktop->getSelection()->isEmpty())) { @@ -340,11 +323,7 @@ bool DropperTool::root_handler(GdkEvent* event) { desktop->getSelection()->clear(); case GDK_KEY_Shift_L: case GDK_KEY_Shift_R: - if (!desktop->isWaitingCursor() && !prefs->getBool("/tools/dropper/onetimepick", false)) { - GdkWindow* window = gtk_widget_get_window(GTK_WIDGET(desktop->getCanvas())); - gdk_window_set_cursor(window, cursor_dropper_stroke); - } - + draw_cursor = DRAW_STROKE_CURSOR; break; default: break; @@ -355,10 +334,7 @@ bool DropperTool::root_handler(GdkEvent* event) { switch (get_group0_keyval(&event->key)) { case GDK_KEY_Shift_L: case GDK_KEY_Shift_R: - if (!desktop->isWaitingCursor() && !prefs->getBool("/tools/dropper/onetimepick", false)) { - GdkWindow* window = gtk_widget_get_window(GTK_WIDGET(desktop->getCanvas())); - gdk_window_set_cursor(window, cursor_dropper_fill); - } + draw_cursor = DRAW_FILL_CURSOR; break; default: @@ -370,6 +346,17 @@ bool DropperTool::root_handler(GdkEvent* event) { break; } + if(draw_cursor != DONT_REDRAW_CURSOR && !desktop->isWaitingCursor() && !prefs->getBool("/tools/dropper/onetimepick", false)) { + GdkCursor *cursor; + if(draw_cursor == DRAW_FILL_CURSOR) { + cursor = sp_cursor_from_xpm(cursor_dropper_f_xpm, NULL, NULL, this->get_color()); + } else if(draw_cursor == DRAW_STROKE_CURSOR) { + cursor = sp_cursor_from_xpm(cursor_dropper_s_xpm, NULL, NULL, this->get_color()); + } + GdkWindow* window = gtk_widget_get_window(GTK_WIDGET(desktop->getCanvas())); + gdk_window_set_cursor(window, cursor); + } + if (!ret) { ret = ToolBase::root_handler(event); } diff --git a/src/ui/tools/dropper-tool.h b/src/ui/tools/dropper-tool.h index cfeb91dab..85675501c 100644 --- a/src/ui/tools/dropper-tool.h +++ b/src/ui/tools/dropper-tool.h @@ -25,6 +25,11 @@ enum { SP_DROPPER_PICK_VISIBLE, SP_DROPPER_PICK_ACTUAL }; +enum { + DONT_REDRAW_CURSOR, + DRAW_FILL_CURSOR, + DRAW_STROKE_CURSOR +}; namespace Inkscape { namespace UI { -- cgit v1.2.3 From 41e2d5f26df1ab8e5949338901e3b4ed096a022c Mon Sep 17 00:00:00 2001 From: "cajhne@gmail.com" Date: Fri, 30 Jun 2017 11:23:31 +0000 Subject: Upload New File --- src/pixmaps/cursor-dropping-f.xpm | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/pixmaps/cursor-dropping-f.xpm diff --git a/src/pixmaps/cursor-dropping-f.xpm b/src/pixmaps/cursor-dropping-f.xpm new file mode 100644 index 000000000..8490ba795 --- /dev/null +++ b/src/pixmaps/cursor-dropping-f.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static const char * cursor_dropping_f_xpm[] = { +"32 32 4 1 5 5", +" c None", +". c #FFFFFF", +"+ c #000000", +"@ s Fill", +" ... ............", +" .+. .++++++++++.", +" .+. .+@@@@@@@@+.", +" .+. .+@@@@@@@@+.", +".... .... .+@@@@@@@@+.", +".+++ +++. .+@@@@@@@@+.", +".... .... .+@@@@@@@@+.", +" .+. ... .+@@@@@@@@+.", +" .+. .+++. .+@@@@@@@@+.", +" .+. .+..++. .+@@@@@@@@+.", +" ... .+.++++. .++++++++++.", +" ..+.+++++. ............", +" .++.++++++. ", +" .++.++++++. ", +" .++++++.. ", +" .+.++++. ", +" .+..++++. ", +" .+..++.+. ", +" .+..++. . ", +" .+++++. ", +" .+++++. ", +" .+++++. ", +" .++++. ", +" .+++. ", +" .... ", +" .+. ", +" .+++. ", +".++..+. ", +".+++.+. ", +".+++++. ", +" .+++. ", +" ... "}; -- cgit v1.2.3 From 12539c5c0529facb7d8f1adf215fbbe06f3e60dc Mon Sep 17 00:00:00 2001 From: "cajhne@gmail.com" Date: Fri, 30 Jun 2017 11:24:26 +0000 Subject: Upload New File --- src/pixmaps/cursor-dropping-s.xpm | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/pixmaps/cursor-dropping-s.xpm diff --git a/src/pixmaps/cursor-dropping-s.xpm b/src/pixmaps/cursor-dropping-s.xpm new file mode 100644 index 000000000..0ecac8a68 --- /dev/null +++ b/src/pixmaps/cursor-dropping-s.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static const char * cursor_dropping_s_xpm[] = { +"32 32 4 1 5 5", +" c None", +". c #FFFFFF", +"+ c #000000", +"@ s Stroke", +" ... ............", +" .+. .@@@@@@@@@@.", +" .+. .@@@@@@@@@@.", +" .+. .@@......@@.", +".... .... .@@. .@@.", +".+++ +++. .@@. .@@.", +".... .... .@@. .@@.", +" .+. ... .@@. .@@.", +" .+. .+++. .@@......@@.", +" .+. .+..++. .@@@@@@@@@@.", +" ... .+.++++. .@@@@@@@@@@.", +" ..+.+++++. ............", +" .++.++++++. ", +" .++.++++++. ", +" .++++++.. ", +" .+.++++. ", +" .+..++++. ", +" .+..++.+. ", +" .+..++. . ", +" .+++++. ", +" .+++++. ", +" .+++++. ", +" .++++. ", +" .+++. ", +" .... ", +" .+. ", +" .+++. ", +".++..+. ", +".+++.+. ", +".+++++. ", +" .+++. ", +" ... "}; -- cgit v1.2.3 From be7061fb705192aec585a74a4a5a6c87306bdecf Mon Sep 17 00:00:00 2001 From: "cajhne@gmail.com" Date: Fri, 30 Jun 2017 11:32:23 +0000 Subject: Replace cursor-dropper-s.xpm with thicker border for doctormo's real-time colour preview functionality. --- src/pixmaps/cursor-dropper-s.xpm | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/pixmaps/cursor-dropper-s.xpm b/src/pixmaps/cursor-dropper-s.xpm index 975895963..8c1654ef1 100644 --- a/src/pixmaps/cursor-dropper-s.xpm +++ b/src/pixmaps/cursor-dropper-s.xpm @@ -2,20 +2,20 @@ static const char * cursor_dropper_s_xpm[] = { "32 32 3 1 5 5", " c None", -"@ c Fill", +"@ s Fill", ". c #FFFFFF", "+ c #000000", " ... ............", -" .+. .@@@.@@.@@@.", -" .+. .@........@.", -" .+. .@. .@.", -".... .... ... ...", -".+++ +++. .@. .@.", -".... .... .@. .@.", -" .+. ... ...", -" .+. .... .@. .@.", -" .+. .+++. .@........@.", -" ... .+..+. .@@@.@@.@@@.", +" .+. .@@@@@@@@@@.", +" .+. .@@@@@@@@@@.", +" .+. .@@. .@@.", +".... .... .@@. .@@.", +".+++ +++. .@@. .@@.", +".... .... .@@. .@@.", +" .+. .@@. .@@.", +" .+. .... .@@. .@@.", +" .+. .+++. .@@@@@@@@@@.", +" ... .+..+. .@@@@@@@@@@.", " .++..+. ............", " .++..+. ", " .++..+. ", -- cgit v1.2.3 From e4ed7cef32c637af1466b6b41d77a246576ce9b7 Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Fri, 30 Jun 2017 14:15:54 +0200 Subject: Fix revno --- CMakeLists.txt | 18 +++++++++--------- CMakeScripts/inkscape-version.cmake | 6 +++--- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8daaabe3b..35871ee28 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -151,22 +151,22 @@ endif() # ----------------------------------------------------------------------------- # Dist Target # ----------------------------------------------------------------------------- -if(EXISTS ${CMAKE_SOURCE_DIR}/.bzr/) +if(EXISTS ${CMAKE_SOURCE_DIR}/.git/) execute_process(COMMAND - bzr revno --tree ${CMAKE_SOURCE_DIR} + git describe OUTPUT_VARIABLE INKSCAPE_REVISION OUTPUT_STRIP_TRAILING_WHITESPACE) else() set(INKSCAPE_REVISION "unknown") endif() set(INKSCAPE_DIST_PREFIX "${PROJECT_NAME}-${INKSCAPE_VERSION}") -add_custom_target(dist - COMMAND sed -i "s/unknown/r${INKSCAPE_REVISION}/" CMakeScripts/inkscape-version.cmake - && sed -i "s/custom//" CMakeScripts/inkscape-version.cmake - && bzr export --uncommitted --root=${INKSCAPE_DIST_PREFIX} - "${CMAKE_BINARY_DIR}/${INKSCAPE_DIST_PREFIX}.tar.bz2" - && bzr revert ${CMAKE_SOURCE_DIR}/CMakeScripts/inkscape-version.cmake - WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}") +#add_custom_target(dist +# COMMAND sed -i "s/unknown/r${INKSCAPE_REVISION}/" CMakeScripts/inkscape-version.cmake +# && sed -i "s/custom//" CMakeScripts/inkscape-version.cmake +# && bzr export --uncommitted --root=${INKSCAPE_DIST_PREFIX} +# "${CMAKE_BINARY_DIR}/${INKSCAPE_DIST_PREFIX}.tar.bz2" +# && bzr revert ${CMAKE_SOURCE_DIR}/CMakeScripts/inkscape-version.cmake +# WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}") # ----------------------------------------------------------------------------- # Uninstall Target diff --git a/CMakeScripts/inkscape-version.cmake b/CMakeScripts/inkscape-version.cmake index 2e23925c4..65903c47b 100644 --- a/CMakeScripts/inkscape-version.cmake +++ b/CMakeScripts/inkscape-version.cmake @@ -11,14 +11,14 @@ set(INKSCAPE_REVISION "unknown") set(INKSCAPE_CUSTOM "custom") -if(EXISTS ${INKSCAPE_SOURCE_DIR}/.bzr/) +if(EXISTS ${INKSCAPE_SOURCE_DIR}/.git/) execute_process(COMMAND - bzr revno --tree ${INKSCAPE_SOURCE_DIR} + git describe ${INKSCAPE_SOURCE_DIR} OUTPUT_VARIABLE INKSCAPE_REVISION OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process(COMMAND - bzr status -S -V ${INKSCAPE_SOURCE_DIR}/src + git status -s ${INKSCAPE_SOURCE_DIR}/src OUTPUT_VARIABLE INKSCAPE_SOURCE_MODIFIED OUTPUT_STRIP_TRAILING_WHITESPACE) if(NOT INKSCAPE_SOURCE_MODIFIED STREQUAL "") -- cgit v1.2.3 From a90a18e6e5ac6a8d12d12043419e86e22d016efa Mon Sep 17 00:00:00 2001 From: "chr[]" Date: Fri, 30 Jun 2017 15:02:50 +0200 Subject: Replace ImageMagic with GraphicsMagic ... just a matter of taste. But both wanna be initialized: fixed. --- CMakeScripts/DefineDependsandFlags.cmake | 2 +- src/extension/init.cpp | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CMakeScripts/DefineDependsandFlags.cmake b/CMakeScripts/DefineDependsandFlags.cmake index a98ebcf2b..981598527 100644 --- a/CMakeScripts/DefineDependsandFlags.cmake +++ b/CMakeScripts/DefineDependsandFlags.cmake @@ -373,7 +373,7 @@ list(APPEND INKSCAPE_INCS_SYS ${ZLIB_INCLUDE_DIRS}) list(APPEND INKSCAPE_LIBS ${ZLIB_LIBRARIES}) if(WITH_IMAGE_MAGICK) - pkg_check_modules(ImageMagick ImageMagick MagickCore Magick++ ) + pkg_check_modules(ImageMagick ImageMagick++ ) if(ImageMagick_FOUND) list(APPEND INKSCAPE_LIBS ${ImageMagick_LDFLAGS}) diff --git a/src/extension/init.cpp b/src/extension/init.cpp index f2e74377d..a40196a74 100644 --- a/src/extension/init.cpp +++ b/src/extension/init.cpp @@ -66,6 +66,7 @@ #endif #ifdef WITH_IMAGE_MAGICK +#include #include "internal/bitmap/adaptiveThreshold.h" #include "internal/bitmap/addNoise.h" #include "internal/bitmap/blur.h" @@ -204,6 +205,8 @@ init() /* Raster Effects */ #ifdef WITH_IMAGE_MAGICK + Magick::InitializeMagick(NULL); + Internal::Bitmap::AdaptiveThreshold::init(); Internal::Bitmap::AddNoise::init(); Internal::Bitmap::Blur::init(); -- cgit v1.2.3 From d6f2d85a424751ac9dd468949a950ecc46148ff2 Mon Sep 17 00:00:00 2001 From: "chr[]" Date: Fri, 30 Jun 2017 15:08:14 +0200 Subject: jemalloc cmake module (shamelessly stolen from Blender) libstdc++ memory allocator is broken: "Notes about deallocation. This allocator does not explicitly release memory." The story: https://www.zerotier.com/blog/2017-05-05-theleak.shtml The solution?! http://jemalloc.net/ No need to recompile, just install it and a simple test run: LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.1 inkscape --- CMakeScripts/DefineDependsandFlags.cmake | 5 +++ CMakeScripts/Modules/FindJeMalloc.cmake | 70 ++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 CMakeScripts/Modules/FindJeMalloc.cmake diff --git a/CMakeScripts/DefineDependsandFlags.cmake b/CMakeScripts/DefineDependsandFlags.cmake index 981598527..0a8782f27 100644 --- a/CMakeScripts/DefineDependsandFlags.cmake +++ b/CMakeScripts/DefineDependsandFlags.cmake @@ -67,6 +67,11 @@ if(WITH_GNOME_VFS) endif() endif() +find_package(JeMalloc) +if (JEMALLOC_FOUND) + list(APPEND INKSCAPE_LIBS ${JEMALLOC_LIBRARIES}) +endif() + if(ENABLE_LCMS) unset(HAVE_LIBLCMS1) unset(HAVE_LIBLCMS2) diff --git a/CMakeScripts/Modules/FindJeMalloc.cmake b/CMakeScripts/Modules/FindJeMalloc.cmake new file mode 100644 index 000000000..5c7aa2cf1 --- /dev/null +++ b/CMakeScripts/Modules/FindJeMalloc.cmake @@ -0,0 +1,70 @@ +# - Find JeMalloc library +# Find the native JeMalloc includes and library +# This module defines +# JEMALLOC_INCLUDE_DIRS, where to find jemalloc.h, Set when +# JEMALLOC_INCLUDE_DIR is found. +# JEMALLOC_LIBRARIES, libraries to link against to use JeMalloc. +# JEMALLOC_ROOT_DIR, The base directory to search for JeMalloc. +# This can also be an environment variable. +# JEMALLOC_FOUND, If false, do not try to use JeMalloc. +# +# also defined, but not for general use are +# JEMALLOC_LIBRARY, where to find the JeMalloc library. + +#============================================================================= +# Copyright 2011 Blender Foundation. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= + +# If JEMALLOC_ROOT_DIR was defined in the environment, use it. +IF(NOT JEMALLOC_ROOT_DIR AND NOT $ENV{JEMALLOC_ROOT_DIR} STREQUAL "") + SET(JEMALLOC_ROOT_DIR $ENV{JEMALLOC_ROOT_DIR}) +ENDIF() + +SET(_jemalloc_SEARCH_DIRS + ${JEMALLOC_ROOT_DIR} + /usr/local + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave +) + +FIND_PATH(JEMALLOC_INCLUDE_DIR + NAMES + jemalloc.h + HINTS + ${_jemalloc_SEARCH_DIRS} + PATH_SUFFIXES + include/jemalloc +) + +FIND_LIBRARY(JEMALLOC_LIBRARY + NAMES + jemalloc + HINTS + ${_jemalloc_SEARCH_DIRS} + PATH_SUFFIXES + lib64 lib + ) + +# handle the QUIETLY and REQUIRED arguments and set JEMALLOC_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(JeMalloc DEFAULT_MSG + JEMALLOC_LIBRARY JEMALLOC_INCLUDE_DIR) + +IF(JEMALLOC_FOUND) + SET(JEMALLOC_LIBRARIES ${JEMALLOC_LIBRARY}) + SET(JEMALLOC_INCLUDE_DIRS ${JEMALLOC_INCLUDE_DIR}) +ENDIF(JEMALLOC_FOUND) + +MARK_AS_ADVANCED( + JEMALLOC_INCLUDE_DIR + JEMALLOC_LIBRARY +) -- cgit v1.2.3 From 7811297f0ad86acaad0477096dd919f51e18b3e7 Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Fri, 30 Jun 2017 15:20:13 +0200 Subject: Fix revno with git --- CMakeLists.txt | 19 ++++++++++--------- CMakeScripts/inkscape-version.cmake | 16 ++++++++++++---- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 35871ee28..7bd6294ee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -152,21 +152,22 @@ endif() # Dist Target # ----------------------------------------------------------------------------- if(EXISTS ${CMAKE_SOURCE_DIR}/.git/) - execute_process(COMMAND - git describe + execute_process( + COMMAND git show --format=format:"%ad %h" --date=short + COMMAND head -n 1 + COMMAND tr "\n" " " OUTPUT_VARIABLE INKSCAPE_REVISION OUTPUT_STRIP_TRAILING_WHITESPACE) else() set(INKSCAPE_REVISION "unknown") endif() set(INKSCAPE_DIST_PREFIX "${PROJECT_NAME}-${INKSCAPE_VERSION}") -#add_custom_target(dist -# COMMAND sed -i "s/unknown/r${INKSCAPE_REVISION}/" CMakeScripts/inkscape-version.cmake -# && sed -i "s/custom//" CMakeScripts/inkscape-version.cmake -# && bzr export --uncommitted --root=${INKSCAPE_DIST_PREFIX} -# "${CMAKE_BINARY_DIR}/${INKSCAPE_DIST_PREFIX}.tar.bz2" -# && bzr revert ${CMAKE_SOURCE_DIR}/CMakeScripts/inkscape-version.cmake -# WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}") +add_custom_target(dist + COMMAND sed -i "s/unknown//" CMakeScripts/inkscape-version.cmake + && sed -i "s/custom//" CMakeScripts/inkscape-version.cmake + && tar cfz ${CMAKE_BINARY_DIR}/${INKSCAPE_DIST_PREFIX}.tar.gz ${CMAKE_SOURCE_DIR} --exclude=".*" --exclude-vcs-ignores + && git checkout ${CMAKE_SOURCE_DIR}/CMakeScripts/inkscape-version.cmake + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}") # ----------------------------------------------------------------------------- # Uninstall Target diff --git a/CMakeScripts/inkscape-version.cmake b/CMakeScripts/inkscape-version.cmake index 65903c47b..12b8a26d8 100644 --- a/CMakeScripts/inkscape-version.cmake +++ b/CMakeScripts/inkscape-version.cmake @@ -12,10 +12,18 @@ set(INKSCAPE_REVISION "unknown") set(INKSCAPE_CUSTOM "custom") if(EXISTS ${INKSCAPE_SOURCE_DIR}/.git/) - execute_process(COMMAND - git describe ${INKSCAPE_SOURCE_DIR} - OUTPUT_VARIABLE INKSCAPE_REVISION - OUTPUT_STRIP_TRAILING_WHITESPACE) + + execute_process(COMMAND git describe + COMMAND tr "\n" " " + WORKING_DIRECTORY ${INKSCAPE_SOURCE_DIR} + OUTPUT_VARIABLE INKSCAPE_REV1) + execute_process(COMMAND git show --format=format:%ad --date=short + COMMAND head -n 1 + COMMAND tr "\n" " " + WORKING_DIRECTORY ${INKSCAPE_SOURCE_DIR} + OUTPUT_VARIABLE INKSCAPE_REV2 + OUTPUT_STRIP_TRAILING_WHITESPACE) + set(INKSCAPE_REVISION ${INKSCAPE_REV1} ${INKSCAPE_REV2}) execute_process(COMMAND git status -s ${INKSCAPE_SOURCE_DIR}/src -- cgit v1.2.3 From 752b8573f6ecb42b590571702ee71215a9f1e1f4 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Fri, 30 Jun 2017 15:21:10 +0200 Subject: Fix and clean clean some icons. --- share/icons/format-text-direction-horizontal.svg | 58 +++++++++------------- share/icons/format-text-direction-r2l.svg | 57 ++++++++++------------ share/icons/format-text-direction-vertical.svg | 62 +++++++++++------------- share/icons/text-orientation-auto.svg | 58 ++++++++++------------ share/icons/text-orientation-sideways.svg | 58 ++++++++++------------ share/icons/text-orientation-upright.svg | 58 ++++++++++------------ 6 files changed, 151 insertions(+), 200 deletions(-) diff --git a/share/icons/format-text-direction-horizontal.svg b/share/icons/format-text-direction-horizontal.svg index ecac387c4..351ea6036 100644 --- a/share/icons/format-text-direction-horizontal.svg +++ b/share/icons/format-text-direction-horizontal.svg @@ -1,48 +1,36 @@ - - - - - - + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - diff --git a/share/icons/format-text-direction-r2l.svg b/share/icons/format-text-direction-r2l.svg index 22abacfcf..fd2cd7ea1 100644 --- a/share/icons/format-text-direction-r2l.svg +++ b/share/icons/format-text-direction-r2l.svg @@ -1,44 +1,37 @@ - - - + + + + + + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/share/icons/format-text-direction-vertical.svg b/share/icons/format-text-direction-vertical.svg index fb5b5f7fe..3d61497e7 100644 --- a/share/icons/format-text-direction-vertical.svg +++ b/share/icons/format-text-direction-vertical.svg @@ -1,46 +1,40 @@ - - - - - - - + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/share/icons/text-orientation-auto.svg b/share/icons/text-orientation-auto.svg index 8e4428bac..a4bf06643 100644 --- a/share/icons/text-orientation-auto.svg +++ b/share/icons/text-orientation-auto.svg @@ -1,45 +1,37 @@ - - - - - - - + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/share/icons/text-orientation-sideways.svg b/share/icons/text-orientation-sideways.svg index 97bb55173..a6ce53531 100644 --- a/share/icons/text-orientation-sideways.svg +++ b/share/icons/text-orientation-sideways.svg @@ -1,45 +1,37 @@ - - - - - - + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/share/icons/text-orientation-upright.svg b/share/icons/text-orientation-upright.svg index 5092b267b..222a3d518 100644 --- a/share/icons/text-orientation-upright.svg +++ b/share/icons/text-orientation-upright.svg @@ -1,45 +1,37 @@ - - - - - - - + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + -- cgit v1.2.3 From 72f835c00565835a536531cd81dc6d9a607b615a Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Fri, 30 Jun 2017 15:47:51 +0200 Subject: Use Meta for shortcuts on Mac OS --- share/keys/default.xml | 368 +++++++++++++++++++++++++------------------------ src/shortcuts.cpp | 6 + 2 files changed, 191 insertions(+), 183 deletions(-) diff --git a/share/keys/default.xml b/share/keys/default.xml index 134251752..9a072d9da 100644 --- a/share/keys/default.xml +++ b/share/keys/default.xml @@ -11,7 +11,9 @@ source locally, you can view that file at: http://git.gnome.org/browse/gtk+/plain/gdk/gdkkeysyms.h - The "modifiers" attribute contains a comma-separated list of modifiers, which can be -one or more of: "Ctrl", "Shift", "Alt". +one or more of: "Ctrl", "Shift", "Alt", "Meta", "Super", "Hyper", or "Primary". + +"Primary" means Meta on Apple and Primary everywhere else, it's recommended over the use of Ctrl. - The "action" attribute contains the name of the action. The complete list of actions (called "verbs") is in the file src/verbs.cpp in Inkscape source; there you can see @@ -41,42 +43,42 @@ override) the bindings in the main default.xml. - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -152,7 +154,7 @@ override) the bindings in the main default.xml. - + @@ -174,13 +176,13 @@ override) the bindings in the main default.xml. - + - + @@ -232,8 +234,8 @@ override) the bindings in the main default.xml. - - + + @@ -245,12 +247,12 @@ override) the bindings in the main default.xml. - + - - - - + + + + @@ -266,11 +268,11 @@ override) the bindings in the main default.xml. - - + + - - + + @@ -281,8 +283,8 @@ override) the bindings in the main default.xml. - - + + @@ -295,35 +297,35 @@ override) the bindings in the main default.xml. - - - + + + - - - - + + + + - - + + - - + + - - - + + + - - + + - - + + - - + + @@ -336,8 +338,8 @@ override) the bindings in the main default.xml. - - + + @@ -352,13 +354,13 @@ override) the bindings in the main default.xml. - - + + - - + + @@ -385,8 +387,8 @@ override) the bindings in the main default.xml. - - + + @@ -414,8 +416,8 @@ override) the bindings in the main default.xml. - - + + @@ -423,18 +425,18 @@ override) the bindings in the main default.xml. - - + + - - - - + + + + - - - - + + + + @@ -471,46 +473,46 @@ override) the bindings in the main default.xml. - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - - - - + + + + + - - + + - - + + - - - + + + - - - - + + + + @@ -518,10 +520,10 @@ override) the bindings in the main default.xml. - - - - + + + + @@ -529,14 +531,14 @@ override) the bindings in the main default.xml. - - + + - - + + - - + + @@ -554,32 +556,32 @@ override) the bindings in the main default.xml. - - + + - - + + - - - - + + + + - - + + - - + + - - + + - - + + @@ -589,8 +591,8 @@ override) the bindings in the main default.xml. - - + + @@ -608,46 +610,46 @@ override) the bindings in the main default.xml. - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -659,26 +661,26 @@ override) the bindings in the main default.xml. - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -699,15 +701,15 @@ override) the bindings in the main default.xml. effect id from the .inx file, for example "org.ekips.filter.addnodes" for the Add Nodes effect. --> - - + + - - + + diff --git a/src/shortcuts.cpp b/src/shortcuts.cpp index 0cb0285f8..8a8d36d5a 100644 --- a/src/shortcuts.cpp +++ b/src/shortcuts.cpp @@ -625,6 +625,12 @@ static void read_shortcuts_file(char const *filename, bool const is_user_set) { modifiers |= SP_SHORTCUT_HYPER_MASK; } else if (!strcmp(mod, "Meta")) { modifiers |= SP_SHORTCUT_META_MASK; + } else if (!strcmp(mod, "Primary")) { +#ifdef __APPLE__ + modifiers |= SP_SHORTCUT_META_MASK; +#else + modifiers |= SP_SHORTCUT_CONTROL_MASK; +#endif } else { g_warning("Unknown modifier %s for %s", mod, verb_name); } -- cgit v1.2.3 From 9af63fd2a5eb1475ce00964e63355ce2b96c312f Mon Sep 17 00:00:00 2001 From: "cajhne@gmail.com" Date: Fri, 30 Jun 2017 15:40:47 +0000 Subject: Replace cursor-dropper-s.xpm --- src/pixmaps/cursor-dropper-s.xpm | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/pixmaps/cursor-dropper-s.xpm b/src/pixmaps/cursor-dropper-s.xpm index 8c1654ef1..c7cb9cc7e 100644 --- a/src/pixmaps/cursor-dropper-s.xpm +++ b/src/pixmaps/cursor-dropper-s.xpm @@ -1,25 +1,25 @@ /* XPM */ static const char * cursor_dropper_s_xpm[] = { -"32 32 3 1 5 5", +"32 32 4 1 5 5", " c None", "@ s Fill", ". c #FFFFFF", "+ c #000000", -" ... ............", -" .+. .@@@@@@@@@@.", -" .+. .@@@@@@@@@@.", -" .+. .@@. .@@.", -".... .... .@@. .@@.", -".+++ +++. .@@. .@@.", -".... .... .@@. .@@.", -" .+. .@@. .@@.", -" .+. .... .@@. .@@.", -" .+. .+++. .@@@@@@@@@@.", -" ... .+..+. .@@@@@@@@@@.", -" .++..+. ............", -" .++..+. ", -" .++..+. ", -" .++..+. . ", +" ... ...............", +" .+. .+++++++++++++.", +" .+. .+@@@@@@@@@@@+.", +" .+. .+@@@@@@@@@@@+.", +".... .... .+@@+++++++@@+.", +".+++ +++. .+@@+.....+@@+.", +".... .... .+@@+. .+@@+.", +" .+. .+@@+. .+@@+.", +" .+. .... .+@@+. .+@@+.", +" .+. .+++. .+@@+.....+@@+.", +" ... .+..+. .+@@+++++++@@+.", +" .++..+. .+@@@@@@@@@@@+.", +" .++..+. .+@@@@@@@@@@@+.", +" .++..+..+++++++++++++.", +" .++..+...............", " .++..+.+. ", " .++..+++. ", " .++++.+. ", -- cgit v1.2.3 From 0848c709fc65a83c22cab9f10c73b1fa0c1196ef Mon Sep 17 00:00:00 2001 From: Martin Owens Date: Fri, 30 Jun 2017 17:41:17 +0200 Subject: Hackfest: Add start of dropping tool --- src/ui/tools/dropper-tool.cpp | 108 ++++++++++++++++++++++++++++-------------- 1 file changed, 73 insertions(+), 35 deletions(-) diff --git a/src/ui/tools/dropper-tool.cpp b/src/ui/tools/dropper-tool.cpp index a409e249e..4524d2445 100644 --- a/src/ui/tools/dropper-tool.cpp +++ b/src/ui/tools/dropper-tool.cpp @@ -39,6 +39,8 @@ #include "pixmaps/cursor-dropper-f.xpm" #include "pixmaps/cursor-dropper-s.xpm" +#include "pixmaps/cursor-dropping-f.xpm" +#include "pixmaps/cursor-dropping-s.xpm" #include "ui/tools/dropper-tool.h" #include "message-context.h" @@ -134,10 +136,29 @@ bool DropperTool::root_handler(GdkEvent* event) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); int ret = FALSE; - int draw_cursor = DONT_REDRAW_CURSOR; - int pick = prefs->getInt("/tools/dropper/pick", SP_DROPPER_PICK_VISIBLE); bool setalpha = prefs->getBool("/tools/dropper/setalpha", true); + bool fill = !(event->button.state & GDK_SHIFT_MASK); // Stroke if Shift key held + bool apply = event->button.state & GDK_CONTROL_MASK; // Apply if Ctrl key held + int draw_cursor = fill ? DRAW_FILL_CURSOR : DRAW_STROKE_CURSOR; + + // Get color from selected object instead. + guint32 apply_color = 0; + if(apply) { + Inkscape::Selection *selection = desktop->getSelection(); + g_assert(selection); + for (auto& obj: selection->objects()) { + if(obj->style) { + if(obj->style->fill.set) { + double opacity = 1.0; + if(obj->style->fill_opacity.set) { + opacity = obj->style->fill_opacity.value; + } + apply_color = obj->style->fill.value.color.toRGBA32(opacity); + } + } + } + } switch (event->type) { case GDK_BUTTON_PRESS: @@ -146,11 +167,12 @@ bool DropperTool::root_handler(GdkEvent* event) { this->dragging = true; ret = TRUE; } - - sp_canvas_item_grab(SP_CANVAS_ITEM(desktop->acetate), - GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK, - NULL, event->button.time); - this->grabbed = SP_CANVAS_ITEM(desktop->acetate); + + sp_canvas_item_grab(SP_CANVAS_ITEM(desktop->acetate), + GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_BUTTON_RELEASE_MASK | + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK, + NULL, event->button.time); + this->grabbed = SP_CANVAS_ITEM(desktop->acetate); break; case GDK_MOTION_NOTIFY: @@ -225,11 +247,6 @@ bool DropperTool::root_handler(GdkEvent* event) { this->G = G; this->B = B; this->alpha = A; - if(!(event->button.state & GDK_SHIFT_MASK)) { - draw_cursor = DRAW_FILL_CURSOR; - } else { - draw_cursor = DRAW_STROKE_CURSOR; - } } // status message @@ -261,34 +278,47 @@ bool DropperTool::root_handler(GdkEvent* event) { case GDK_BUTTON_RELEASE: if (event->button.button == 1 && !this->space_panning) { - sp_canvas_item_hide(this->area); - this->dragging = false; - if (this->grabbed) { - sp_canvas_item_ungrab(this->grabbed, event->button.time); - this->grabbed = NULL; - } - double alpha_to_set = setalpha? this->alpha : 1.0; + sp_canvas_item_hide(this->area); + this->dragging = false; + + if (this->grabbed) { + sp_canvas_item_ungrab(this->grabbed, event->button.time); + this->grabbed = NULL; + } + + if(apply) { + Geom::Point const button_w(event->button.x, event->button.y); + // remember clicked item, disregarding groups, honoring Alt + this->item_to_select = sp_event_context_find_item (desktop, button_w, event->button.state & GDK_MOD1_MASK, TRUE); + + // Change selected object to object under cursor + if (this->item_to_select) { + Inkscape::Selection *selection = desktop->getSelection(); + g_assert(selection); + selection->set(this->item_to_select); + } - bool fill = !(event->button.state & GDK_SHIFT_MASK); // Stroke if Shift key held + this->R = SP_RGBA32_R_F(apply_color); + this->G = SP_RGBA32_G_F(apply_color); + this->B = SP_RGBA32_B_F(apply_color); + this->alpha = SP_RGBA32_A_F(apply_color); + alpha_to_set = this->alpha; - if (prefs->getBool("/tools/dropper/onetimepick", false)) { - // "One time" pick from Fill/Stroke dialog stroke page, always apply fill or stroke (ignore key) - fill = (prefs->getInt("/dialogs/fillstroke/page", 0) == 0) ? true : false; + } else { + if (prefs->getBool("/tools/dropper/onetimepick", false)) { + // "One time" pick from Fill/Stroke dialog stroke page, always apply fill or stroke (ignore key) + fill = (prefs->getInt("/dialogs/fillstroke/page", 0) == 0) ? true : false; + } } // do the actual color setting sp_desktop_set_color(desktop, - (event->button.state & GDK_MOD1_MASK)? - ColorRGBA(1 - this->R, 1 - this->G, 1 - this->B, alpha_to_set) : ColorRGBA(this->R, this->G, this->B, alpha_to_set), - false, fill); + (event->button.state & GDK_MOD1_MASK)? + ColorRGBA(1 - this->R, 1 - this->G, 1 - this->B, alpha_to_set) : ColorRGBA(this->R, this->G, this->B, alpha_to_set), + false, fill); // REJON: set aux. toolbar input to hex color! - - if (event->button.state & GDK_SHIFT_MASK) { - draw_cursor = DRAW_STROKE_CURSOR; - } - if (!(desktop->getSelection()->isEmpty())) { DocumentUndo::done(desktop->getDocument(), SP_VERB_CONTEXT_DROPPER, _("Set picked color")); @@ -348,10 +378,18 @@ bool DropperTool::root_handler(GdkEvent* event) { if(draw_cursor != DONT_REDRAW_CURSOR && !desktop->isWaitingCursor() && !prefs->getBool("/tools/dropper/onetimepick", false)) { GdkCursor *cursor; - if(draw_cursor == DRAW_FILL_CURSOR) { - cursor = sp_cursor_from_xpm(cursor_dropper_f_xpm, NULL, NULL, this->get_color()); - } else if(draw_cursor == DRAW_STROKE_CURSOR) { - cursor = sp_cursor_from_xpm(cursor_dropper_s_xpm, NULL, NULL, this->get_color()); + if(apply) { + if(draw_cursor == DRAW_FILL_CURSOR) { + cursor = sp_cursor_from_xpm(cursor_dropping_f_xpm, NULL, NULL, apply_color); + } else if(draw_cursor == DRAW_STROKE_CURSOR) { + cursor = sp_cursor_from_xpm(cursor_dropping_s_xpm, NULL, NULL, apply_color); + } + } else { + if(draw_cursor == DRAW_FILL_CURSOR) { + cursor = sp_cursor_from_xpm(cursor_dropper_f_xpm, NULL, NULL, this->get_color()); + } else if(draw_cursor == DRAW_STROKE_CURSOR) { + cursor = sp_cursor_from_xpm(cursor_dropper_s_xpm, NULL, NULL, this->get_color()); + } } GdkWindow* window = gtk_widget_get_window(GTK_WIDGET(desktop->getCanvas())); gdk_window_set_cursor(window, cursor); -- cgit v1.2.3 From aa049e7f014f914649118e714ae45eadca706d36 Mon Sep 17 00:00:00 2001 From: "cajhne@gmail.com" Date: Fri, 30 Jun 2017 15:41:47 +0000 Subject: Replace cursor-dropping-s.xpm --- src/pixmaps/cursor-dropping-s.xpm | 50 +++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/pixmaps/cursor-dropping-s.xpm b/src/pixmaps/cursor-dropping-s.xpm index 0ecac8a68..321280e6b 100644 --- a/src/pixmaps/cursor-dropping-s.xpm +++ b/src/pixmaps/cursor-dropping-s.xpm @@ -1,35 +1,35 @@ /* XPM */ -static const char * cursor_dropping_s_xpm[] = { +static const char * cursor_dropper_s_xpm[] = { "32 32 4 1 5 5", " c None", ". c #FFFFFF", "+ c #000000", -"@ s Stroke", -" ... ............", -" .+. .@@@@@@@@@@.", -" .+. .@@@@@@@@@@.", -" .+. .@@......@@.", -".... .... .@@. .@@.", -".+++ +++. .@@. .@@.", -".... .... .@@. .@@.", -" .+. ... .@@. .@@.", -" .+. .+++. .@@......@@.", -" .+. .+..++. .@@@@@@@@@@.", -" ... .+.++++. .@@@@@@@@@@.", -" ..+.+++++. ............", -" .++.++++++. ", -" .++.++++++. ", -" .++++++.. ", -" .+.++++. ", -" .+..++++. ", -" .+..++.+. ", -" .+..++. . ", -" .+++++. ", +"@ s Fill", +" ... ...............", +" .+. .+++++++++++++.", +" .+. .+@@@@@@@@@@@+.", +" .+. .+@@@@@@@@@@@+.", +".... .... .+@@+++++++@@+.", +".+++ +++. .+@@+.....+@@+.", +".... .... .+@@+. .+@@+.", +" .+. ... .+@@+. .+@@+.", +" .+. .+++. .+@@+. .+@@+.", +" .+. .+..++..+@@+.....+@@+.", +" ... .+.++++.+@@+++++++@@+.", +" ..+.+++++.+@@@@@@@@@@@+.", +" .++.++++++.+@@@@@@@@@@@+.", +" .++.++++++..+++++++++++++.", +" .++++++.. ...............", +" .+.++++. ", +" .+..++++. ", +" .+..++.+. ", +" .+..++. . ", " .+++++. ", " .+++++. ", -" .++++. ", -" .+++. ", -" .... ", +".+++++. ", +".++++. ", +".+++. ", +".... ", " .+. ", " .+++. ", ".++..+. ", -- cgit v1.2.3 From 5717fc9c920e05830cbf1916bee730e1f31656a7 Mon Sep 17 00:00:00 2001 From: "cajhne@gmail.com" Date: Fri, 30 Jun 2017 15:43:08 +0000 Subject: Replace cursor-dropping-s.xpm --- src/pixmaps/cursor-dropping-s.xpm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pixmaps/cursor-dropping-s.xpm b/src/pixmaps/cursor-dropping-s.xpm index 321280e6b..8efd4e04c 100644 --- a/src/pixmaps/cursor-dropping-s.xpm +++ b/src/pixmaps/cursor-dropping-s.xpm @@ -1,5 +1,5 @@ /* XPM */ -static const char * cursor_dropper_s_xpm[] = { +static const char * cursor_dropping_s_xpm[] = { "32 32 4 1 5 5", " c None", ". c #FFFFFF", -- cgit v1.2.3 From ba8c21889ef78e7672444127b99cc04c129be37c Mon Sep 17 00:00:00 2001 From: Tim Sheridan Date: Sat, 1 Jul 2017 00:37:04 +0100 Subject: Add Mac CI build config --- .gitlab-ci.yml | 41 +++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2d36019e6..55d72b92a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,12 +3,6 @@ # the new ones here in these builds. image: registry.gitlab.com/inkscape/inkscape-ci-docker/master -before_script: - # CCache Config - - mkdir -p ccache - - export CCACHE_BASEDIR=${PWD} - - export CCACHE_DIR=${PWD}/ccache - cache: paths: - ccache/ @@ -16,6 +10,11 @@ cache: # Building inkscape inkscape: stage: build + before_script: + # CCache Config + - mkdir -p ccache + - export CCACHE_BASEDIR=${PWD} + - export CCACHE_DIR=${PWD}/ccache script: - mkdir -p build - cd build @@ -27,6 +26,36 @@ inkscape: paths: - build/ +inkscape:mac: + stage: build + tags: + - mac + before_script: + - brew update + - brew upgrade + # Tools + - brew install cmake intltool libtool pkg-config ccache + # Libraries + - brew install bdw-gc boost gdl gettext gsl gtkmm3 libcdr libvisio libwpg pango popt poppler potrace + # Testing tools + # TODO + # Cleanup + - brew cleanup + # CCache Config + - mkdir -p ccache + - export CCACHE_BASEDIR=${PWD} + - export CCACHE_DIR=${PWD}/ccache + script: + - mkdir -p build + - cd build + - cmake .. -DIntl_INCLUDE_DIR=/usr/local/opt/gettext/include -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE=Debug + - make -j1 + - cd .. + artifacts: + expire_in: 1 year + paths: + - build/ + # This job is a static analysis build by clang. # It takes MORE THAN 3 HOURS, and depending on worker sometimes 4 hours. # Make sure the timeout of the build is big enough -- cgit v1.2.3