From 96fb2be827feee429966c0fceaa44be420074343 Mon Sep 17 00:00:00 2001 From: Torsten Paul Date: Sat, 4 Jan 2025 23:52:01 +0100 Subject: [PATCH 01/10] Add parameter list for local application start. Unify dark mode switch. --- resources/common.qrc.in | 14 +- resources/icons/svg-default/add-white.svg | 10 + resources/icons/svg-default/add.svg | 10 + resources/icons/svg-default/down-white.svg | 8 + resources/icons/svg-default/down.svg | 8 + .../icons/svg-default/export-pov-white.svg | 446 ++++---- resources/icons/svg-default/export-pov.svg | 446 ++++---- resources/icons/svg-default/icons.scad | 77 +- .../icons/svg-default/parameter-white.svg | 401 ++++++++ resources/icons/svg-default/parameter.svg | 401 ++++++++ resources/icons/svg-default/remove-white.svg | 8 + resources/icons/svg-default/remove.svg | 8 + resources/icons/svg-default/up-white.svg | 8 + resources/icons/svg-default/up.svg | 8 + src/glview/system-gl.h | 4 +- src/gui/Animate.cc | 32 +- src/gui/ExternalToolInterface.cc | 49 +- src/gui/ExternalToolInterface.h | 1 + src/gui/InitConfigurator.cc | 33 + src/gui/InitConfigurator.h | 3 + src/gui/MainWindow.cc | 10 +- src/gui/MainWindow.h | 2 - src/gui/Preferences.cc | 175 +++- src/gui/Preferences.h | 25 +- src/gui/Preferences.ui | 973 +++++++++++------- src/gui/PrintInitDialog.cc | 14 +- src/gui/PrintInitDialog.h | 2 +- src/gui/Settings.cc | 42 +- src/gui/Settings.h | 103 +- src/gui/SettingsWriter.cc | 5 +- src/gui/ViewportControl.cc | 23 +- src/gui/ViewportControl.h | 1 - src/openscad_gui.cc | 19 + src/openscad_gui.h | 5 + 34 files changed, 2404 insertions(+), 970 deletions(-) create mode 100644 resources/icons/svg-default/add-white.svg create mode 100644 resources/icons/svg-default/add.svg create mode 100644 resources/icons/svg-default/down-white.svg create mode 100644 resources/icons/svg-default/down.svg create mode 100644 resources/icons/svg-default/parameter-white.svg create mode 100644 resources/icons/svg-default/parameter.svg create mode 100644 resources/icons/svg-default/remove-white.svg create mode 100644 resources/icons/svg-default/remove.svg create mode 100644 resources/icons/svg-default/up-white.svg create mode 100644 resources/icons/svg-default/up.svg diff --git a/resources/common.qrc.in b/resources/common.qrc.in index 5f9483b48e6..dc84d2b29f8 100644 --- a/resources/common.qrc.in +++ b/resources/common.qrc.in @@ -29,6 +29,8 @@ icons/stopbutton.png icons/background.png + icons/svg-default/add.svg + icons/svg-default/add-white.svg icons/svg-default/animate_disabled.svg icons/svg-default/animate_disabled-white.svg icons/svg-default/animate_pause.svg @@ -39,6 +41,8 @@ icons/svg-default/axes-white.svg icons/svg-default/crosshairs.svg icons/svg-default/crosshairs-white.svg + icons/svg-default/down.svg + icons/svg-default/down-white.svg icons/svg-default/edit-copy.svg icons/svg-default/edit-copy-white.svg icons/svg-default/export-3mf.svg @@ -53,12 +57,12 @@ icons/svg-default/export-obj-white.svg icons/svg-default/export-off.svg icons/svg-default/export-off-white.svg - icons/svg-default/export-pov.svg - icons/svg-default/export-pov-white.svg icons/svg-default/export-pdf.svg icons/svg-default/export-pdf-white.svg icons/svg-default/export-png.svg icons/svg-default/export-png-white.svg + icons/svg-default/export-pov.svg + icons/svg-default/export-pov-white.svg icons/svg-default/export-stl.svg icons/svg-default/export-stl-white.svg icons/svg-default/export-svg.svg @@ -77,12 +81,16 @@ icons/svg-default/open-white.svg icons/svg-default/orthogonal.svg icons/svg-default/orthogonal-white.svg + icons/svg-default/parameter.svg + icons/svg-default/parameter-white.svg icons/svg-default/perspective.svg icons/svg-default/perspective-white.svg icons/svg-default/preview.svg icons/svg-default/preview-white.svg icons/svg-default/redo.svg icons/svg-default/redo-white.svg + icons/svg-default/remove.svg + icons/svg-default/remove-white.svg icons/svg-default/render.svg icons/svg-default/render-white.svg icons/svg-default/reset-view.svg @@ -103,6 +111,8 @@ icons/svg-default/undo-white.svg icons/svg-default/unindent.svg icons/svg-default/unindent-white.svg + icons/svg-default/up.svg + icons/svg-default/up-white.svg icons/svg-default/vcr-control-end.svg icons/svg-default/vcr-control-end-white.svg icons/svg-default/vcr-control-pause.svg diff --git a/resources/icons/svg-default/add-white.svg b/resources/icons/svg-default/add-white.svg new file mode 100644 index 00000000000..daea3f05deb --- /dev/null +++ b/resources/icons/svg-default/add-white.svg @@ -0,0 +1,10 @@ + + + +OpenSCAD Model + + diff --git a/resources/icons/svg-default/add.svg b/resources/icons/svg-default/add.svg new file mode 100644 index 00000000000..9d70cafb858 --- /dev/null +++ b/resources/icons/svg-default/add.svg @@ -0,0 +1,10 @@ + + + +OpenSCAD Model + + diff --git a/resources/icons/svg-default/down-white.svg b/resources/icons/svg-default/down-white.svg new file mode 100644 index 00000000000..0e2433b5a03 --- /dev/null +++ b/resources/icons/svg-default/down-white.svg @@ -0,0 +1,8 @@ + + + +OpenSCAD Model + + diff --git a/resources/icons/svg-default/down.svg b/resources/icons/svg-default/down.svg new file mode 100644 index 00000000000..c0ed34ec541 --- /dev/null +++ b/resources/icons/svg-default/down.svg @@ -0,0 +1,8 @@ + + + +OpenSCAD Model + + diff --git a/resources/icons/svg-default/export-pov-white.svg b/resources/icons/svg-default/export-pov-white.svg index 4aa1b5ffea3..5370618d248 100644 --- a/resources/icons/svg-default/export-pov-white.svg +++ b/resources/icons/svg-default/export-pov-white.svg @@ -35,255 +35,203 @@ M 84.1993,-0.00497437 L 84.3984,-0.0149078 L 84.5973,-0.0298004 L 84.7955,-0.054 L 85.7797,-5.08759 L 85.6801,-4.9149 L 85.5637,-4.75302 L 85.4317,-4.60353 L 85.2856,-4.46791 L 85.1266,-4.34752 L 84.9565,-4.24356 L 84.7769,-4.15704 L 84.5895,-4.08885 L 84.3963,-4.03966 L 84.1991,-4.00993 L 84,-4 L 80,-4 L 80,-0 L 84,-0 z -M 39.2744,0.54306 L 39.4686,0.53952 L 39.6614,0.5336 L 39.8526,0.525314 L 40.0423,0.514679 L 40.2304,0.501648 - L 40.417,0.486267 L 40.6021,0.468536 L 40.7856,0.44841 L 40.9676,0.425934 L 41.148,0.401093 L 41.327,0.373886 - L 41.5044,0.344299 L 41.6802,0.312363 L 41.8546,0.278046 L 42.0273,0.241379 L 42.1986,0.202332 L 42.3683,0.160919 - L 42.5365,0.117142 L 42.7032,0.0710144 L 42.8683,0.0225067 L 43.0319,-0.0283508 L 43.194,-0.0815887 L 43.3545,-0.137192 - L 43.5135,-0.19516 L 43.6709,-0.255508 L 43.8268,-0.318207 L 43.9812,-0.38327 L 44.134,-0.450714 L 44.2854,-0.520523 - L 44.4352,-0.592682 L 44.5834,-0.667206 L 44.7301,-0.74411 L 44.8753,-0.82338 L 45.0189,-0.905014 L 45.161,-0.989029 - L 45.3016,-1.07539 L 45.4407,-1.16412 L 45.5782,-1.25522 L 45.7141,-1.34869 L 45.8486,-1.44452 L 45.9815,-1.54271 - L 46.1129,-1.64326 L 46.2427,-1.7462 L 46.371,-1.8515 L 46.4977,-1.95917 L 46.6231,-2.06894 L 46.747,-2.1806 - L 46.8695,-2.29413 L 46.9906,-2.40956 L 47.1102,-2.52684 L 47.2285,-2.64603 L 47.3454,-2.76706 L 47.4608,-2.88998 - L 47.5749,-3.01479 L 47.6876,-3.14146 L 47.7988,-3.27002 L 47.9086,-3.40045 L 48.0171,-3.53278 L 48.1241,-3.66696 - L 48.2297,-3.80302 L 48.3339,-3.94096 L 48.4367,-4.0808 L 48.5381,-4.22249 L 48.6381,-4.36607 L 48.7367,-4.51152 - L 48.8339,-4.65884 L 48.9297,-4.80806 L 49.024,-4.95915 L 49.117,-5.11211 L 49.2086,-5.26694 L 49.2987,-5.42366 - L 49.3875,-5.58226 L 49.4748,-5.74272 L 49.5607,-5.90508 L 49.6453,-6.06929 L 49.7284,-6.2354 L 49.8101,-6.40338 - L 49.8904,-6.57323 L 49.9693,-6.74498 L 50.0468,-6.91858 L 50.1229,-7.09407 L 50.1975,-7.27145 L 50.2708,-7.45068 - L 50.3427,-7.63181 L 50.4131,-7.8148 L 50.4822,-7.99968 L 50.5499,-8.18643 L 50.6161,-8.37506 L 50.6809,-8.56557 - L 50.7444,-8.75795 L 50.8064,-8.95222 L 50.867,-9.14816 L 50.9264,-9.3456 L 50.9844,-9.54448 L 51.041,-9.74483 - L 51.0964,-9.94664 L 51.1504,-10.1499 L 51.203,-10.3547 L 51.2543,-10.5609 L 51.3044,-10.7685 L 51.353,-10.9777 - L 51.4004,-11.1883 L 51.4464,-11.4004 L 51.491,-11.6139 L 51.5343,-11.8289 L 51.5763,-12.0454 L 51.617,-12.2633 - L 51.6563,-12.4827 L 51.6943,-12.7036 L 51.731,-12.9259 L 51.7663,-13.1497 L 51.8003,-13.375 L 51.833,-13.6017 - L 51.8643,-13.8299 L 51.8943,-14.0595 L 51.923,-14.2906 L 51.9503,-14.5232 L 51.9763,-14.7573 L 52.001,-14.9928 - L 52.0243,-15.2298 L 52.0463,-15.4683 L 52.067,-15.7082 L 52.0863,-15.9495 L 52.1043,-16.1924 L 52.121,-16.4367 - L 52.1363,-16.6825 L 52.1503,-16.9297 L 52.163,-17.1784 L 52.1743,-17.4286 L 52.1843,-17.6803 L 52.193,-17.9334 - L 52.2003,-18.1879 L 52.2063,-18.444 L 52.211,-18.7015 L 52.2143,-18.9604 L 52.2163,-19.2209 L 52.217,-19.4828 - L 52.2163,-19.7447 L 52.2143,-20.0051 L 52.211,-20.2641 L 52.2063,-20.5216 L 52.2003,-20.7777 L 52.193,-21.0323 - L 52.1843,-21.2854 L 52.1743,-21.537 L 52.163,-21.7872 L 52.1503,-22.0359 L 52.1363,-22.2832 L 52.121,-22.529 - L 52.1043,-22.7733 L 52.0863,-23.0162 L 52.067,-23.2575 L 52.0463,-23.4975 L 52.0243,-23.7359 L 52.001,-23.9729 - L 51.9763,-24.2084 L 51.9503,-24.4425 L 51.923,-24.6751 L 51.8943,-24.9062 L 51.8643,-25.1359 L 51.833,-25.3641 - L 51.8003,-25.5908 L 51.7663,-25.816 L 51.731,-26.0398 L 51.6943,-26.2622 L 51.6563,-26.483 L 51.617,-26.7024 - L 51.5763,-26.9203 L 51.5343,-27.1368 L 51.491,-27.3518 L 51.4464,-27.5653 L 51.4004,-27.7774 L 51.353,-27.988 - L 51.3044,-28.1971 L 51.2543,-28.4048 L 51.203,-28.611 L 51.1504,-28.8157 L 51.0964,-29.019 L 51.041,-29.2208 - L 50.9844,-29.4211 L 50.9264,-29.62 L 50.867,-29.8174 L 50.8064,-30.0133 L 50.7444,-30.2076 L 50.6809,-30.3999 - L 50.6161,-30.5904 L 50.5499,-30.779 L 50.4822,-30.9656 L 50.4131,-31.1504 L 50.3427,-31.3332 L 50.2708,-31.5141 - L 50.1975,-31.6932 L 50.1229,-31.8703 L 50.0468,-32.0455 L 49.9693,-32.2189 L 49.8904,-32.3903 L 49.8101,-32.5598 - L 49.7284,-32.7274 L 49.6453,-32.8932 L 49.5607,-33.057 L 49.4748,-33.2189 L 49.3875,-33.3789 L 49.2987,-33.537 - L 49.2086,-33.6932 L 49.117,-33.8474 L 49.024,-33.9998 L 48.9297,-34.1503 L 48.8339,-34.2989 L 48.7367,-34.4456 - L 48.6381,-34.5904 L 48.5381,-34.7332 L 48.4367,-34.8742 L 48.3339,-35.0132 L 48.2297,-35.1504 L 48.1241,-35.2857 - L 48.0171,-35.419 L 47.9086,-35.5504 L 47.7988,-35.68 L 47.6876,-35.8076 L 47.5749,-35.9334 L 47.4608,-36.0572 - L 47.3454,-36.1791 L 47.2285,-36.2992 L 47.1102,-36.4173 L 46.9906,-36.5335 L 46.8695,-36.6478 L 46.747,-36.7602 - L 46.6231,-36.8707 L 46.4977,-36.9794 L 46.371,-37.0858 L 46.2428,-37.19 L 46.113,-37.2918 L 45.9818,-37.3913 - L 45.849,-37.4884 L 45.7148,-37.5832 L 45.5791,-37.6757 L 45.4418,-37.7658 L 45.3031,-37.8536 L 45.1629,-37.939 - L 45.0211,-38.0221 L 44.8779,-38.1029 L 44.7332,-38.1813 L 44.587,-38.2573 L 44.4393,-38.3311 L 44.2901,-38.4025 - L 44.1393,-38.4715 L 43.9871,-38.5382 L 43.8334,-38.6026 L 43.6782,-38.6646 L 43.5215,-38.7243 L 43.3633,-38.7816 - L 43.2036,-38.8366 L 43.0424,-38.8893 L 42.8797,-38.9396 L 42.7155,-38.9876 L 42.5499,-39.0333 L 42.3827,-39.0766 - L 42.214,-39.1175 L 42.0438,-39.1561 L 41.8721,-39.1924 L 41.6989,-39.2263 L 41.5243,-39.2579 L 41.3481,-39.2872 - L 41.1704,-39.3141 L 40.9913,-39.3387 L 40.8106,-39.3609 L 40.6284,-39.3808 L 40.4448,-39.3984 L 40.2596,-39.4136 - L 40.073,-39.4265 L 39.8848,-39.437 L 39.6952,-39.4452 L 39.504,-39.451 L 39.3114,-39.4546 L 39.1172,-39.4557 - L 38.9214,-39.4546 L 38.7271,-39.451 L 38.5343,-39.4452 L 38.343,-39.437 L 38.1533,-39.4265 L 37.9651,-39.4136 - L 37.7783,-39.3984 L 37.5931,-39.3808 L 37.4095,-39.3609 L 37.2273,-39.3387 L 37.0466,-39.3141 L 36.8675,-39.2872 - L 36.6898,-39.2579 L 36.5137,-39.2263 L 36.3391,-39.1924 L 36.166,-39.1561 L 35.9945,-39.1175 L 35.8244,-39.0766 - L 35.6559,-39.0333 L 35.4889,-38.9876 L 35.3234,-38.9396 L 35.1594,-38.8893 L 34.9969,-38.8366 L 34.8359,-38.7816 - L 34.6765,-38.7243 L 34.5186,-38.6646 L 34.3622,-38.6026 L 34.2073,-38.5382 L 34.0539,-38.4715 L 33.902,-38.4025 - L 33.7517,-38.3311 L 33.6028,-38.2573 L 33.4555,-38.1813 L 33.3097,-38.1029 L 33.1654,-38.0221 L 33.0226,-37.939 - L 32.8814,-37.8536 L 32.7417,-37.7658 L 32.6034,-37.6757 L 32.4667,-37.5832 L 32.3315,-37.4884 L 32.1978,-37.3913 - L 32.0657,-37.2918 L 31.935,-37.19 L 31.8059,-37.0858 L 31.6783,-36.9794 L 31.5521,-36.8708 L 31.4274,-36.7603 - L 31.3041,-36.6479 L 31.1823,-36.5337 L 31.0618,-36.4176 L 30.9428,-36.2996 L 30.8252,-36.1798 L 30.7091,-36.058 - L 30.5943,-35.9344 L 30.481,-35.8089 L 30.3691,-35.6816 L 30.2587,-35.5523 L 30.1496,-35.4212 L 30.042,-35.2882 - L 29.9358,-35.1533 L 29.8311,-35.0166 L 29.7277,-34.8779 L 29.6258,-34.7374 L 29.5253,-34.595 L 29.4262,-34.4508 - L 29.3286,-34.3046 L 29.2324,-34.1566 L 29.1376,-34.0067 L 29.0442,-33.8549 L 28.9523,-33.7013 L 28.8617,-33.5457 - L 28.7726,-33.3883 L 28.685,-33.229 L 28.5987,-33.0679 L 28.5139,-32.9048 L 28.4305,-32.7399 L 28.3485,-32.5731 - L 28.268,-32.4044 L 28.1889,-32.2339 L 28.1111,-32.0614 L 28.0349,-31.8871 L 27.96,-31.7109 L 27.8866,-31.5329 - L 27.8146,-31.3529 L 27.744,-31.1711 L 27.6749,-30.9874 L 27.6071,-30.8018 L 27.5408,-30.6144 L 27.4759,-30.425 - L 27.4125,-30.2338 L 27.3505,-30.0407 L 27.2898,-29.846 L 27.2305,-29.6497 L 27.1725,-29.452 L 27.1158,-29.2527 - L 27.0605,-29.052 L 27.0065,-28.8497 L 26.9539,-28.646 L 26.9026,-28.4408 L 26.8526,-28.2341 L 26.8039,-28.0259 - L 26.7566,-27.8162 L 26.7106,-27.605 L 26.666,-27.3923 L 26.6226,-27.1782 L 26.5806,-26.9625 L 26.54,-26.7454 - L 26.5007,-26.5267 L 26.4627,-26.3066 L 26.426,-26.085 L 26.3907,-25.8619 L 26.3567,-25.6373 L 26.324,-25.4111 - L 26.2927,-25.1836 L 26.2627,-24.9545 L 26.2341,-24.7239 L 26.2067,-24.4919 L 26.1807,-24.2583 L 26.1561,-24.0232 - L 26.1328,-23.7867 L 26.1107,-23.5487 L 26.0901,-23.3091 L 26.0708,-23.0681 L 26.0528,-22.8256 L 26.0361,-22.5816 - L 26.0208,-22.3361 L 26.0068,-22.0891 L 25.9941,-21.8407 L 25.9828,-21.5907 L 25.9728,-21.3392 L 25.9641,-21.0863 - L 25.9568,-20.8318 L 25.9508,-20.5759 L 25.9461,-20.3185 L 25.9428,-20.0595 L 25.9408,-19.7991 L 25.9401,-19.5372 - L 25.9408,-19.2753 L 25.9428,-19.0148 L 25.9461,-18.7558 L 25.9508,-18.4982 L 25.9568,-18.242 L 25.9641,-17.9873 - L 25.9728,-17.734 L 25.9828,-17.4821 L 25.9941,-17.2317 L 26.0068,-16.9828 L 26.0208,-16.7352 L 26.0361,-16.4892 - L 26.0528,-16.2445 L 26.0708,-16.0013 L 26.0901,-15.7596 L 26.1107,-15.5192 L 26.1328,-15.2803 L 26.1561,-15.0429 - L 26.1807,-14.8069 L 26.2067,-14.5723 L 26.2341,-14.3392 L 26.2627,-14.1075 L 26.2927,-13.8773 L 26.324,-13.6485 - L 26.3567,-13.4211 L 26.3907,-13.1952 L 26.426,-12.9707 L 26.4627,-12.7477 L 26.5007,-12.5261 L 26.54,-12.3059 - L 26.5806,-12.0872 L 26.6226,-11.8699 L 26.666,-11.6541 L 26.7106,-11.4397 L 26.7566,-11.2267 L 26.8039,-11.0152 - L 26.8526,-10.8051 L 26.9026,-10.5965 L 26.9539,-10.3893 L 27.0065,-10.1835 L 27.0605,-9.97923 L 27.1158,-9.77635 - L 27.1725,-9.57494 L 27.2305,-9.37494 L 27.2898,-9.17638 L 27.3505,-8.97926 L 27.4125,-8.78383 L 27.4759,-8.5903 - L 27.5408,-8.3987 L 27.6071,-8.20897 L 27.6749,-8.02116 L 27.744,-7.83525 L 27.8146,-7.65125 L 27.8866,-7.46915 - L 27.96,-7.28894 L 28.0349,-7.11063 L 28.1111,-6.93423 L 28.1889,-6.75974 L 28.268,-6.58714 L 28.3485,-6.41646 - L 28.4305,-6.24768 L 28.5139,-6.0808 L 28.5987,-5.91582 L 28.685,-5.75275 L 28.7726,-5.59157 L 28.8617,-5.43228 - L 28.9523,-5.27492 L 29.0442,-5.11946 L 29.1376,-4.9659 L 29.2324,-4.81422 L 29.3286,-4.66447 L 29.4262,-4.51663 - L 29.5253,-4.37067 L 29.6258,-4.22662 L 29.7277,-4.08449 L 29.8311,-3.94424 L 29.9358,-3.80591 L 30.042,-3.66946 - L 30.1496,-3.53494 L 30.2587,-3.4023 L 30.3691,-3.27156 L 30.481,-3.14275 L 30.5943,-3.01584 L 30.7091,-2.89081 - L 30.8252,-2.7677 L 30.9428,-2.64647 L 31.0618,-2.52716 L 31.1823,-2.40976 L 31.3041,-2.29425 L 31.4274,-2.18065 - L 31.5521,-2.06895 L 31.6783,-1.95917 L 31.8059,-1.8515 L 31.935,-1.7462 L 32.0655,-1.64326 L 32.1975,-1.54271 - L 32.3311,-1.44452 L 32.466,-1.34869 L 32.6025,-1.25522 L 32.7405,-1.16412 L 32.8799,-1.07539 L 33.0208,-0.989029 - L 33.1632,-0.905014 L 33.3071,-0.82338 L 33.4524,-0.74411 L 33.5992,-0.667206 L 33.7476,-0.592682 L 33.8973,-0.520523 - L 34.0486,-0.450714 L 34.2013,-0.38327 L 34.3556,-0.318207 L 34.5113,-0.255508 L 34.6684,-0.19516 L 34.8271,-0.137192 - L 34.9872,-0.0815887 L 35.1488,-0.0283508 L 35.3119,0.0225067 L 35.4765,0.0710144 L 35.6426,0.117142 L 35.8101,0.160919 - L 35.9791,0.202332 L 36.1496,0.241379 L 36.3216,0.278046 L 36.495,0.312363 L 36.6699,0.344299 L 36.8463,0.373886 - L 37.0242,0.401093 L 37.2036,0.425934 L 37.3844,0.44841 L 37.5667,0.468536 L 37.7505,0.486267 L 37.9358,0.501648 - L 38.1226,0.514679 L 38.3108,0.525314 L 38.5005,0.5336 L 38.6917,0.53952 L 38.8844,0.54306 L 39.0786,0.544235 +M 39.3456,0.528992 L 39.617,0.521652 L 39.8857,0.509399 L 40.1516,0.492264 L 40.4146,0.470215 L 40.675,0.443283 + L 40.9325,0.411438 L 41.1872,0.374695 L 41.4392,0.333054 L 41.6884,0.28653 L 41.9348,0.235092 L 42.1784,0.178757 + L 42.4193,0.117523 L 42.6573,0.0513916 L 42.8926,-0.0195923 L 43.1251,-0.09552 L 43.3548,-0.176346 L 43.5817,-0.26207 + L 43.8059,-0.352692 L 44.0273,-0.448212 L 44.2458,-0.54863 L 44.4616,-0.653946 L 44.6747,-0.76416 L 44.8849,-0.879272 + L 45.0924,-0.999283 L 45.297,-1.12419 L 45.4989,-1.254 L 45.698,-1.38872 L 45.8944,-1.52831 L 46.0879,-1.67281 + L 46.2787,-1.82222 L 46.4667,-1.97653 L 46.6519,-2.13573 L 46.8343,-2.29982 L 47.0139,-2.46881 L 47.1908,-2.6427 + L 47.3649,-2.8215 L 47.5362,-3.00519 L 47.7047,-3.19379 L 47.8704,-3.38727 L 48.0334,-3.58566 L 48.1935,-3.78894 + L 48.3509,-3.99713 L 48.5055,-4.21021 L 48.6573,-4.42819 L 48.8064,-4.65108 L 48.9524,-4.87852 L 49.0953,-5.1102 + L 49.2349,-5.34608 L 49.3713,-5.5862 L 49.5045,-5.83055 L 49.6345,-6.0791 L 49.7613,-6.33188 L 49.8849,-6.58887 + L 50.0053,-6.8501 L 50.1225,-7.11552 L 50.2364,-7.38518 L 50.3472,-7.65906 L 50.4547,-7.93716 L 50.559,-8.21948 + L 50.6601,-8.506 L 50.758,-8.79677 L 50.8527,-9.09174 L 50.9442,-9.39095 L 51.0325,-9.69437 L 51.1176,-10.002 + L 51.1994,-10.3139 L 51.278,-10.6299 L 51.3535,-10.9502 L 51.4257,-11.2747 L 51.4947,-11.6035 L 51.5605,-11.9364 + L 51.6231,-12.2736 L 51.6825,-12.615 L 51.7387,-12.9606 L 51.7916,-13.3105 L 51.8414,-13.6646 L 51.888,-14.0228 + L 51.9313,-14.3853 L 51.9714,-14.752 L 52.0083,-15.123 L 52.042,-15.4981 L 52.0725,-15.8775 L 52.0998,-16.2611 + L 52.1239,-16.6489 L 52.1447,-17.041 L 52.1624,-17.4373 L 52.1768,-17.8377 L 52.1881,-18.2424 L 52.1961,-18.6514 + L 52.2009,-19.0645 L 52.2025,-19.4819 L 52.2009,-19.9003 L 52.1962,-20.3145 L 52.1882,-20.7245 L 52.1771,-21.1301 + L 52.1627,-21.5316 L 52.1452,-21.9287 L 52.1245,-22.3215 L 52.1007,-22.7101 L 52.0736,-23.0944 L 52.0434,-23.4745 + L 52.0099,-23.8503 L 51.9733,-24.2218 L 51.9335,-24.589 L 51.8906,-24.952 L 51.8444,-25.3107 L 51.7951,-25.6651 + L 51.7426,-26.0153 L 51.6869,-26.3611 L 51.628,-26.7027 L 51.5659,-27.0401 L 51.5006,-27.3732 L 51.4322,-27.702 + L 51.3606,-28.0265 L 51.2858,-28.3468 L 51.2078,-28.6628 L 51.1266,-28.9745 L 51.0423,-29.282 L 50.9547,-29.5851 + L 50.864,-29.884 L 50.7701,-30.1787 L 50.673,-30.4691 L 50.5728,-30.7552 L 50.4693,-31.037 L 50.3627,-31.3146 + L 50.2528,-31.5879 L 50.1398,-31.8569 L 50.0237,-32.1216 L 49.9043,-32.3821 L 49.7817,-32.6383 L 49.656,-32.8903 + L 49.5271,-33.1379 L 49.395,-33.3813 L 49.2597,-33.6205 L 49.1212,-33.8553 L 48.9796,-34.0859 L 48.8347,-34.3123 + L 48.6869,-34.534 L 48.5363,-34.7509 L 48.3828,-34.9629 L 48.2265,-35.17 L 48.0673,-35.3723 L 47.9054,-35.5697 + L 47.7406,-35.7622 L 47.573,-35.9498 L 47.4025,-36.1326 L 47.2293,-36.3104 L 47.0532,-36.4834 L 46.8743,-36.6516 + L 46.6925,-36.8148 L 46.5079,-36.9733 L 46.3205,-37.1268 L 46.1303,-37.2754 L 45.9373,-37.4192 L 45.7414,-37.5581 + L 45.5427,-37.6921 L 45.3412,-37.8213 L 45.1368,-37.9455 L 44.9296,-38.0649 L 44.7196,-38.1795 L 44.5067,-38.2891 + L 44.2911,-38.3939 L 44.0726,-38.4938 L 43.8513,-38.5889 L 43.6271,-38.679 L 43.4002,-38.7643 L 43.1704,-38.8447 + L 42.9377,-38.9203 L 42.7023,-38.9909 L 42.464,-39.0567 L 42.2229,-39.1176 L 41.979,-39.1737 L 41.7322,-39.2249 + L 41.4826,-39.2711 L 41.2302,-39.3126 L 40.975,-39.3491 L 40.7169,-39.3808 L 40.456,-39.4076 L 40.1923,-39.4296 + L 39.9258,-39.4466 L 39.6564,-39.4588 L 39.3842,-39.4661 L 39.1092,-39.4685 L 38.8341,-39.4661 L 38.5619,-39.4589 + L 38.2924,-39.4468 L 38.0258,-39.4298 L 37.7619,-39.4081 L 37.5008,-39.3815 L 37.2425,-39.3501 L 36.987,-39.3138 + L 36.7343,-39.2727 L 36.4844,-39.2267 L 36.2372,-39.176 L 35.9929,-39.1204 L 35.7513,-39.0599 L 35.5126,-38.9946 + L 35.2766,-38.9245 L 35.0434,-38.8495 L 34.813,-38.7698 L 34.5854,-38.6851 L 34.3606,-38.5957 L 34.1386,-38.5014 + L 33.9194,-38.4022 L 33.703,-38.2983 L 33.4893,-38.1895 L 33.2785,-38.0758 L 33.0704,-37.9573 L 32.8651,-37.834 + L 32.6626,-37.7059 L 32.463,-37.5729 L 32.2661,-37.4351 L 32.072,-37.2924 L 31.8806,-37.1449 L 31.6921,-36.9926 + L 31.5064,-36.8354 L 31.3234,-36.6734 L 31.1433,-36.5066 L 30.9659,-36.3349 L 30.7914,-36.1584 L 30.6196,-35.9771 + L 30.4506,-35.7909 L 30.2844,-35.5999 L 30.121,-35.404 L 29.9604,-35.2033 L 29.8025,-34.9978 L 29.6475,-34.7875 + L 29.4952,-34.5723 L 29.3458,-34.3522 L 29.1993,-34.1276 L 29.0561,-33.8987 L 28.9161,-33.6654 L 28.7793,-33.4278 + L 28.6457,-33.1858 L 28.5154,-32.9395 L 28.3882,-32.6889 L 28.2643,-32.434 L 28.1436,-32.1747 L 28.0261,-31.9111 + L 27.9119,-31.6431 L 27.8008,-31.3708 L 27.693,-31.0942 L 27.5884,-30.8133 L 27.487,-30.528 L 27.3888,-30.2384 + L 27.2939,-29.9444 L 27.2022,-29.6461 L 27.1136,-29.3435 L 27.0284,-29.0366 L 26.9463,-28.7253 L 26.8674,-28.4097 + L 26.7918,-28.0897 L 26.7194,-27.7654 L 26.6502,-27.4368 L 26.5842,-27.1039 L 26.5214,-26.7666 L 26.4619,-26.4249 + L 26.4055,-26.079 L 26.3524,-25.7287 L 26.3025,-25.3741 L 26.2559,-25.0151 L 26.2124,-24.6519 L 26.1722,-24.2842 + L 26.1352,-23.9123 L 26.1014,-23.536 L 26.0708,-23.1554 L 26.0434,-22.7704 L 26.0193,-22.3811 L 25.9984,-21.9875 + L 25.9807,-21.5896 L 25.9662,-21.1873 L 25.9549,-20.7806 L 25.9469,-20.3697 L 25.942,-19.9544 L 25.9404,-19.5348 + L 25.942,-19.1151 L 25.9469,-18.6998 L 25.9549,-18.2887 L 25.9661,-17.8818 L 25.9806,-17.4793 L 25.9982,-17.081 + L 26.0191,-16.687 L 26.0432,-16.2972 L 26.0704,-15.9118 L 26.1009,-15.5305 L 26.1346,-15.1536 L 26.1715,-14.7809 + L 26.2117,-14.4126 L 26.255,-14.0484 L 26.3015,-13.6886 L 26.3513,-13.333 L 26.4043,-12.9817 L 26.4604,-12.6346 + L 26.5198,-12.2919 L 26.5824,-11.9534 L 26.6482,-11.6191 L 26.7172,-11.2892 L 26.7894,-10.9635 L 26.8648,-10.642 + L 26.9435,-10.3249 L 27.0253,-10.012 L 27.1104,-9.7034 L 27.1987,-9.39905 L 27.2901,-9.09898 L 27.3848,-8.80318 + L 27.4827,-8.51164 L 27.5838,-8.22437 L 27.6881,-7.94138 L 27.7957,-7.66266 L 27.9064,-7.38821 L 28.0203,-7.11803 + L 28.1375,-6.85211 L 28.2579,-6.59047 L 28.3814,-6.3331 L 28.5082,-6.08 L 28.6382,-5.83118 L 28.7714,-5.58661 + L 28.9078,-5.34631 L 29.0475,-5.11029 L 29.1903,-4.87856 L 29.3363,-4.65108 L 29.4854,-4.42819 L 29.6372,-4.21021 + L 29.7918,-3.99713 L 29.9492,-3.78894 L 30.1093,-3.58566 L 30.2723,-3.38727 L 30.438,-3.19379 L 30.6065,-3.00519 + L 30.7778,-2.8215 L 30.9519,-2.6427 L 31.1288,-2.46881 L 31.3084,-2.29982 L 31.4908,-2.13573 L 31.676,-1.97653 + L 31.864,-1.82222 L 32.0548,-1.67281 L 32.2483,-1.52831 L 32.4446,-1.38872 L 32.6438,-1.254 L 32.8457,-1.12419 + L 33.0503,-0.999283 L 33.2578,-0.879272 L 33.468,-0.76416 L 33.6811,-0.653946 L 33.8969,-0.54863 L 34.1154,-0.448212 + L 34.3368,-0.352692 L 34.561,-0.26207 L 34.7879,-0.176346 L 35.0176,-0.09552 L 35.2501,-0.0195923 L 35.4854,0.0513916 + L 35.7234,0.117523 L 35.9643,0.178757 L 36.2079,0.235092 L 36.4543,0.28653 L 36.7035,0.333054 L 36.9555,0.374695 + L 37.2102,0.411438 L 37.4677,0.443283 L 37.728,0.470215 L 37.9911,0.492264 L 38.257,0.509399 L 38.5257,0.521652 + L 38.7971,0.528992 L 39.0714,0.531448 z +M 38.9204,-6.38026 L 38.7711,-6.38495 L 38.6235,-6.39273 L 38.4775,-6.40364 L 38.3331,-6.41765 L 38.1904,-6.43478 + L 38.0493,-6.45503 L 37.9099,-6.47839 L 37.772,-6.50487 L 37.6359,-6.53445 L 37.5014,-6.56717 L 37.3685,-6.603 + L 37.2372,-6.64194 L 37.1076,-6.68399 L 36.9797,-6.72917 L 36.8533,-6.77745 L 36.7287,-6.82884 L 36.6056,-6.88336 + L 36.4842,-6.94098 L 36.3645,-7.00172 L 36.2463,-7.0656 L 36.1299,-7.13257 L 36.015,-7.20265 L 35.9018,-7.27586 + L 35.7903,-7.35219 L 35.6803,-7.43161 L 35.5721,-7.51416 L 35.4654,-7.59984 L 35.3604,-7.68861 L 35.2571,-7.7805 + L 35.1553,-7.87552 L 35.0553,-7.97363 L 34.9568,-8.07489 L 34.86,-8.17924 L 34.7649,-8.28671 L 34.6714,-8.39729 + L 34.5795,-8.511 L 34.4893,-8.62781 L 34.4007,-8.74774 L 34.3137,-8.87079 L 34.2284,-8.99695 L 34.1447,-9.12624 + L 34.0627,-9.25862 L 33.9823,-9.39413 L 33.9035,-9.53276 L 33.8264,-9.6745 L 33.751,-9.81931 L 33.6772,-9.96716 + L 33.6051,-10.118 L 33.5346,-10.272 L 33.4658,-10.429 L 33.3986,-10.589 L 33.3331,-10.752 L 33.2693,-10.9181 + L 33.2071,-11.0872 L 33.1466,-11.2594 L 33.0877,-11.4346 L 33.0305,-11.6129 L 32.9749,-11.7942 L 32.921,-11.9785 + L 32.8688,-12.1658 L 32.8182,-12.3563 L 32.7693,-12.5497 L 32.722,-12.7462 L 32.6764,-12.9457 L 32.6325,-13.1483 + L 32.5902,-13.3539 L 32.5496,-13.5625 L 32.5106,-13.7742 L 32.4733,-13.989 L 32.4377,-14.2067 L 32.4037,-14.4275 + L 32.3713,-14.6514 L 32.3407,-14.8782 L 32.3116,-15.1082 L 32.2843,-15.3411 L 32.2586,-15.5771 L 32.2345,-15.8161 + L 32.2121,-16.0582 L 32.1914,-16.3033 L 32.1723,-16.5515 L 32.1549,-16.8027 L 32.1392,-17.0569 L 32.1251,-17.3142 + L 32.1126,-17.5745 L 32.1019,-17.8379 L 32.0927,-18.1043 L 32.0853,-18.3737 L 32.0795,-18.6462 L 32.0753,-18.9217 + L 32.0728,-19.2003 L 32.072,-19.4819 L 32.0729,-19.7635 L 32.0754,-20.042 L 32.0796,-20.3176 L 32.0854,-20.5901 + L 32.093,-20.8596 L 32.1022,-21.1261 L 32.1131,-21.3895 L 32.1257,-21.6499 L 32.1399,-21.9073 L 32.1558,-22.1616 + L 32.1734,-22.4129 L 32.1927,-22.6612 L 32.2137,-22.9065 L 32.2363,-23.1488 L 32.2606,-23.388 L 32.2866,-23.6242 + L 32.3142,-23.8573 L 32.3436,-24.0875 L 32.3746,-24.3146 L 32.4072,-24.5387 L 32.4416,-24.7597 L 32.4776,-24.9777 + L 32.5154,-25.1927 L 32.5547,-25.4047 L 32.5958,-25.6136 L 32.6385,-25.8196 L 32.683,-26.0224 L 32.729,-26.2223 + L 32.7768,-26.4191 L 32.8263,-26.613 L 32.8774,-26.8037 L 32.9302,-26.9915 L 32.9847,-27.1762 L 33.0408,-27.3579 + L 33.0986,-27.5366 L 33.1582,-27.7122 L 33.2193,-27.8848 L 33.2822,-28.0544 L 33.3467,-28.221 L 33.4129,-28.3845 + L 33.4808,-28.545 L 33.5504,-28.7025 L 33.6216,-28.857 L 33.6945,-29.0084 L 33.7691,-29.1568 L 33.8454,-29.3022 + L 33.9233,-29.4445 L 34.0028,-29.5836 L 34.084,-29.7197 L 34.1668,-29.8526 L 34.2512,-29.9824 L 34.3372,-30.1091 + L 34.4249,-30.2327 L 34.5142,-30.3531 L 34.6051,-30.4704 L 34.6976,-30.5845 L 34.7918,-30.6955 L 34.8875,-30.8035 + L 34.9849,-30.9082 L 35.084,-31.0099 L 35.1846,-31.1084 L 35.2869,-31.2038 L 35.3907,-31.2961 L 35.4962,-31.3852 + L 35.6034,-31.4712 L 35.7121,-31.5541 L 35.8225,-31.6339 L 35.9345,-31.7105 L 36.0481,-31.784 L 36.1634,-31.8544 + L 36.2802,-31.9216 L 36.3987,-31.9857 L 36.5188,-32.0467 L 36.6406,-32.1046 L 36.7639,-32.1593 L 36.8889,-32.2109 + L 37.0155,-32.2594 L 37.1437,-32.3047 L 37.2736,-32.347 L 37.405,-32.3861 L 37.5381,-32.422 L 37.6728,-32.4549 + L 37.8092,-32.4846 L 37.9471,-32.5112 L 38.0867,-32.5346 L 38.2279,-32.555 L 38.3707,-32.5722 L 38.5152,-32.5862 + L 38.6612,-32.5972 L 38.8089,-32.605 L 38.9583,-32.6097 L 39.1092,-32.6113 L 39.4086,-32.6051 L 39.7014,-32.5864 + L 39.9876,-32.5554 L 40.2673,-32.512 L 40.5404,-32.4561 L 40.8069,-32.3879 L 41.0668,-32.3072 L 41.3201,-32.2141 + L 41.5669,-32.1087 L 41.807,-31.9908 L 42.0406,-31.8605 L 42.2676,-31.7178 L 42.4881,-31.5627 L 42.7019,-31.3951 + L 42.9092,-31.2152 L 43.1099,-31.0228 L 43.304,-30.8181 L 43.4915,-30.6009 L 43.6725,-30.3713 L 43.8469,-30.1293 + L 44.0147,-29.8749 L 44.1759,-29.6081 L 44.3305,-29.3289 L 44.4786,-29.0373 L 44.62,-28.7332 L 44.7549,-28.4168 + L 44.8832,-28.0879 L 45.005,-27.7467 L 45.1201,-27.393 L 45.2287,-27.0269 L 45.3307,-26.6484 L 45.4261,-26.2575 + L 45.5149,-25.8542 L 45.5972,-25.4385 L 45.6729,-25.0103 L 45.7419,-24.5698 L 45.8045,-24.1169 L 45.8604,-23.6515 + L 45.9097,-23.1737 L 45.9525,-22.6835 L 45.9887,-22.181 L 46.0183,-21.666 L 46.0414,-21.1385 L 46.0578,-20.5987 + L 46.0677,-20.0465 L 46.071,-19.4819 L 46.0676,-18.9184 L 46.0577,-18.3672 L 46.0412,-17.8285 L 46.018,-17.3021 + L 45.9883,-16.7881 L 45.9519,-16.2866 L 45.9089,-15.7974 L 45.8593,-15.3206 L 45.803,-14.8561 L 45.7402,-14.4041 + L 45.6707,-13.9644 L 45.5946,-13.5371 L 45.5119,-13.1223 L 45.4226,-12.7197 L 45.3267,-12.3296 L 45.2241,-11.9519 + L 45.115,-11.5865 L 44.9992,-11.2336 L 44.8768,-10.893 L 44.7478,-10.5648 L 44.6122,-10.249 L 44.4699,-9.94554 + L 44.3211,-9.6545 L 44.1656,-9.37584 L 44.0035,-9.10956 L 43.8348,-8.85568 L 43.6595,-8.61418 L 43.4775,-8.38506 + L 43.289,-8.16832 L 43.0938,-7.96396 L 42.892,-7.772 L 42.6836,-7.59244 L 42.4686,-7.42523 L 42.247,-7.27042 + L 42.0187,-7.12799 L 41.7839,-6.99796 L 41.5424,-6.88029 L 41.2943,-6.77502 L 41.0396,-6.68214 L 40.7782,-6.60164 + L 40.5103,-6.53352 L 40.2357,-6.4778 L 39.9546,-6.43443 L 39.6668,-6.40349 L 39.3724,-6.3849 L 39.0714,-6.37872 + z +M 9.3199,-13.8208 L 11.8291,-13.8208 L 12.0511,-13.8223 L 12.2709,-13.827 L 12.4885,-13.8349 L 12.7038,-13.8459 + L 12.9169,-13.86 L 13.1279,-13.8773 L 13.3365,-13.8977 L 13.543,-13.9212 L 13.7473,-13.9479 L 13.9493,-13.9778 + L 14.1491,-14.0107 L 14.3467,-14.0468 L 14.542,-14.0861 L 14.7352,-14.1285 L 14.9261,-14.174 L 15.1148,-14.2227 + L 15.3013,-14.2745 L 15.4855,-14.3294 L 15.6676,-14.3875 L 15.8474,-14.4487 L 16.025,-14.5131 L 16.2004,-14.5806 + L 16.3736,-14.6513 L 16.5445,-14.7251 L 16.7132,-14.802 L 16.8797,-14.882 L 17.044,-14.9653 L 17.2061,-15.0516 + L 17.3659,-15.1411 L 17.5235,-15.2337 L 17.6789,-15.3295 L 17.8321,-15.4284 L 17.9831,-15.5305 L 18.1318,-15.6356 + L 18.2783,-15.744 L 18.4226,-15.8554 L 18.5647,-15.97 L 18.7046,-16.0878 L 18.8422,-16.2087 L 18.9776,-16.3327 + L 19.1108,-16.4599 L 19.2418,-16.5902 L 19.3705,-16.7236 L 19.4971,-16.8602 L 19.6214,-16.9999 L 19.7435,-17.1428 + L 19.8632,-17.2886 L 19.9802,-17.4373 L 20.0947,-17.5887 L 20.2065,-17.7429 L 20.3156,-17.8999 L 20.4221,-18.0597 + L 20.526,-18.2223 L 20.6273,-18.3876 L 20.726,-18.5558 L 20.822,-18.7267 L 20.9153,-18.9005 L 21.0061,-19.077 + L 21.0942,-19.2563 L 21.1797,-19.4384 L 21.2626,-19.6232 L 21.3428,-19.8109 L 21.4204,-20.0014 L 21.4954,-20.1946 + L 21.5677,-20.3906 L 21.6374,-20.5894 L 21.7045,-20.7911 L 21.7689,-20.9955 L 21.8307,-21.2026 L 21.8899,-21.4126 + L 21.9465,-21.6254 L 22.0004,-21.8409 L 22.0517,-22.0592 L 22.1004,-22.2804 L 22.1464,-22.5043 L 22.1898,-22.731 + L 22.2306,-22.9605 L 22.2687,-23.1927 L 22.3042,-23.4278 L 22.3371,-23.6657 L 22.3673,-23.9063 L 22.395,-24.1497 + L 22.42,-24.396 L 22.4423,-24.645 L 22.462,-24.8967 L 22.4791,-25.1513 L 22.4936,-25.4087 L 22.5054,-25.6688 + L 22.5146,-25.9318 L 22.5212,-26.1975 L 22.5252,-26.466 L 22.5265,-26.7374 L 22.5253,-26.9983 L 22.5215,-27.2563 + L 22.5154,-27.5116 L 22.5067,-27.764 L 22.4956,-28.0136 L 22.482,-28.2604 L 22.466,-28.5044 L 22.4474,-28.7455 + L 22.4265,-28.9838 L 22.403,-29.2192 L 22.3771,-29.4519 L 22.3487,-29.6817 L 22.3178,-29.9087 L 22.2845,-30.1329 + L 22.2486,-30.3542 L 22.2104,-30.5727 L 22.1696,-30.7884 L 22.1264,-31.0013 L 22.0807,-31.2113 L 22.0325,-31.4185 + L 21.9819,-31.6229 L 21.9288,-31.8244 L 21.8732,-32.0232 L 21.8152,-32.2191 L 21.7547,-32.4121 L 21.6917,-32.6024 + L 21.6263,-32.7898 L 21.5583,-32.9744 L 21.4879,-33.1562 L 21.4151,-33.3351 L 21.3398,-33.5112 L 21.262,-33.6845 + L 21.1817,-33.855 L 21.099,-34.0226 L 21.0138,-34.1874 L 20.9261,-34.3494 L 20.8359,-34.5086 L 20.7433,-34.6649 + L 20.6482,-34.8184 L 20.5507,-34.9691 L 20.4507,-35.1169 L 20.3482,-35.2619 L 20.2432,-35.4041 L 20.1358,-35.5435 + L 20.0259,-35.68 L 19.9135,-35.8138 L 19.7988,-35.9446 L 19.6817,-36.0726 L 19.5624,-36.1978 L 19.4409,-36.32 + L 19.317,-36.4394 L 19.1909,-36.5559 L 19.0625,-36.6695 L 18.9319,-36.7803 L 18.7989,-36.8881 L 18.6637,-36.9931 + L 18.5262,-37.0952 L 18.3865,-37.1945 L 18.2445,-37.2908 L 18.1002,-37.3843 L 17.9536,-37.4749 L 17.8047,-37.5627 + L 17.6536,-37.6475 L 17.5002,-37.7295 L 17.3446,-37.8086 L 17.1866,-37.8849 L 17.0264,-37.9582 L 16.8639,-38.0287 + L 16.6991,-38.0963 L 16.5321,-38.161 L 16.3628,-38.2228 L 16.1912,-38.2818 L 16.0173,-38.3379 L 15.8412,-38.3911 + L 15.6628,-38.4415 L 15.4821,-38.4889 L 15.2992,-38.5335 L 15.1139,-38.5752 L 14.9264,-38.6141 L 14.7367,-38.65 + L 14.5446,-38.6831 L 14.3503,-38.7133 L 14.1537,-38.7406 L 13.9548,-38.7651 L 13.7537,-38.7867 L 13.5503,-38.8053 + L 13.3446,-38.8212 L 13.1366,-38.8341 L 12.9264,-38.8442 L 12.7139,-38.8514 L 12.4991,-38.8557 L 12.2821,-38.8571 + L 3.47156,-38.8571 L 3.47156,-0 L 9.3199,-0 z +M 9.3199,-20.5714 L 9.3199,-32.1065 L 11.9802,-32.1065 L 12.0838,-32.1058 L 12.1861,-32.1038 L 12.2873,-32.1006 + L 12.3873,-32.096 L 12.486,-32.0901 L 12.5836,-32.0829 L 12.6799,-32.0744 L 12.7751,-32.0646 L 12.869,-32.0535 + L 12.9617,-32.0411 L 13.0533,-32.0274 L 13.1436,-32.0124 L 13.2327,-31.996 L 13.3207,-31.9784 L 13.4074,-31.9595 + L 13.4929,-31.9392 L 13.5772,-31.9176 L 13.6603,-31.8948 L 13.7422,-31.8706 L 13.8229,-31.8451 L 13.9025,-31.8183 + L 13.9807,-31.7903 L 14.0578,-31.7609 L 14.1337,-31.7302 L 14.2084,-31.6981 L 14.2819,-31.6648 L 14.3542,-31.6302 + L 14.4252,-31.5943 L 14.4951,-31.557 L 14.5638,-31.5185 L 14.6312,-31.4786 L 14.6975,-31.4375 L 14.7626,-31.395 + L 14.8264,-31.3513 L 14.8891,-31.3062 L 14.9505,-31.2598 L 15.0108,-31.2121 L 15.0698,-31.1631 L 15.1276,-31.1128 + L 15.1842,-31.0612 L 15.2397,-31.0083 L 15.2939,-30.9541 L 15.3469,-30.8985 L 15.3988,-30.8417 L 15.4494,-30.7836 + L 15.4988,-30.7241 L 15.5471,-30.6633 L 15.5943,-30.6011 L 15.6404,-30.5374 L 15.6855,-30.4723 L 15.7296,-30.4058 + L 15.7725,-30.3378 L 15.8144,-30.2684 L 15.8553,-30.1976 L 15.8951,-30.1253 L 15.9338,-30.0516 L 15.9715,-29.9765 + L 16.0081,-29.8999 L 16.0436,-29.822 L 16.0781,-29.7426 L 16.1115,-29.6617 L 16.1439,-29.5794 L 16.1752,-29.4957 + L 16.2054,-29.4106 L 16.2346,-29.324 L 16.2627,-29.236 L 16.2898,-29.1465 L 16.3158,-29.0556 L 16.3407,-28.9633 + L 16.3646,-28.8696 L 16.3874,-28.7744 L 16.4092,-28.6778 L 16.4299,-28.5798 L 16.4495,-28.4803 L 16.468,-28.3794 + L 16.4855,-28.2771 L 16.502,-28.1733 L 16.5174,-28.0681 L 16.5317,-27.9615 L 16.545,-27.8534 L 16.5572,-27.7439 + L 16.5683,-27.633 L 16.5784,-27.5206 L 16.5874,-27.4068 L 16.5954,-27.2916 L 16.6023,-27.175 L 16.6081,-27.0569 + L 16.6129,-26.9374 L 16.6166,-26.8164 L 16.6192,-26.694 L 16.6208,-26.5702 L 16.6214,-26.445 L 16.6207,-26.3208 + L 16.6189,-26.198 L 16.6157,-26.0764 L 16.6113,-25.9561 L 16.6055,-25.8372 L 16.5986,-25.7195 L 16.5903,-25.6031 + L 16.5809,-25.488 L 16.5701,-25.3742 L 16.5581,-25.2617 L 16.5448,-25.1505 L 16.5302,-25.0406 L 16.5144,-24.932 + L 16.4973,-24.8246 L 16.4789,-24.7186 L 16.4593,-24.6139 L 16.4384,-24.5104 L 16.4162,-24.4083 L 16.3928,-24.3074 + L 16.3681,-24.2078 L 16.3422,-24.1096 L 16.315,-24.0126 L 16.2865,-23.9169 L 16.2567,-23.8225 L 16.2257,-23.7294 + L 16.1934,-23.6376 L 16.1599,-23.5471 L 16.125,-23.4578 L 16.089,-23.3699 L 16.0516,-23.2833 L 16.013,-23.1979 + L 15.9731,-23.1139 L 15.9319,-23.0311 L 15.8895,-22.9496 L 15.8458,-22.8695 L 15.8009,-22.7906 L 15.7547,-22.713 + L 15.7072,-22.6367 L 15.6585,-22.5617 L 15.6084,-22.488 L 15.5572,-22.4156 L 15.5046,-22.3445 L 15.4508,-22.2747 + L 15.3957,-22.2061 L 15.3394,-22.1389 L 15.2818,-22.0729 L 15.2229,-22.0084 L 15.1627,-21.9452 L 15.1013,-21.8835 + L 15.0385,-21.8232 L 14.9745,-21.7643 L 14.9092,-21.7068 L 14.8426,-21.6507 L 14.7747,-21.5961 L 14.7056,-21.5429 + L 14.6351,-21.4911 L 14.5634,-21.4407 L 14.4904,-21.3917 L 14.4161,-21.3442 L 14.3405,-21.2981 L 14.2637,-21.2534 + L 14.1855,-21.2101 L 14.1061,-21.1682 L 14.0254,-21.1277 L 13.9434,-21.0887 L 13.8601,-21.0511 L 13.7756,-21.0149 + L 13.6897,-20.9802 L 13.6026,-20.9468 L 13.5142,-20.9149 L 13.4245,-20.8844 L 13.3335,-20.8553 L 13.2413,-20.8276 + L 13.1477,-20.8013 L 13.0529,-20.7765 L 12.9568,-20.7531 L 12.8594,-20.7311 L 12.7607,-20.7105 L 12.6607,-20.6914 + L 12.5595,-20.6736 L 12.4569,-20.6573 L 12.3531,-20.6424 L 12.248,-20.6289 L 12.1416,-20.6169 L 12.034,-20.6062 + L 11.925,-20.597 L 11.8148,-20.5892 L 11.7032,-20.5828 L 11.5904,-20.5778 L 11.4763,-20.5743 L 11.361,-20.5721 + L 11.2443,-20.5714 z +M 78.4716,-38.8571 L 72.5665,-38.8571 L 67.3405,-15.7342 L 67.2884,-15.4701 L 67.2374,-15.2095 L 67.1872,-14.9524 + L 67.138,-14.6988 L 67.0898,-14.4486 L 67.0425,-14.2019 L 66.9961,-13.9586 L 66.9507,-13.7189 L 66.9062,-13.4825 + L 66.8627,-13.2497 L 66.8202,-13.0203 L 66.7785,-12.7944 L 66.7379,-12.5719 L 66.6981,-12.353 L 66.6593,-12.1375 + L 66.6215,-11.9254 L 66.5846,-11.7168 L 66.5486,-11.5117 L 66.5136,-11.3101 L 66.4795,-11.1119 L 66.4464,-10.9172 + L 66.4142,-10.7259 L 66.383,-10.5381 L 66.3527,-10.3538 L 66.3233,-10.1729 L 66.295,-9.99556 L 66.2675,-9.82166 + L 66.241,-9.6512 L 66.2154,-9.48422 L 66.1908,-9.32071 L 66.1671,-9.16066 L 66.1444,-9.00407 L 66.1226,-8.85095 + L 66.1018,-8.70131 L 66.0819,-8.55511 L 66.063,-8.41241 L 66.045,-8.27315 L 66.0279,-8.13737 L 66.0118,-8.00505 + L 65.9966,-7.87621 L 65.9824,-7.75082 L 65.9691,-7.62891 L 65.9568,-7.51045 L 65.9454,-7.39548 L 65.935,-7.28397 + L 65.9255,-7.1759 L 65.9204,-7.22293 L 65.9149,-7.2715 L 65.9092,-7.32167 L 65.9031,-7.37338 L 65.8967,-7.42668 + L 65.89,-7.48155 L 65.8829,-7.53798 L 65.8755,-7.59599 L 65.8678,-7.65555 L 65.8597,-7.71671 L 65.8513,-7.7794 + L 65.8426,-7.8437 L 65.8336,-7.90955 L 65.8242,-7.97696 L 65.8145,-8.04596 L 65.8045,-8.11652 L 65.7941,-8.18863 + L 65.7834,-8.26234 L 65.7724,-8.33762 L 65.761,-8.41444 L 65.7493,-8.49286 L 65.7373,-8.57283 L 65.7249,-8.65437 + L 65.7122,-8.73749 L 65.6992,-8.82219 L 65.6859,-8.90845 L 65.6722,-8.99626 L 65.6582,-9.08566 L 65.6439,-9.17662 + L 65.6293,-9.26915 L 65.6143,-9.36325 L 65.599,-9.45894 L 65.5833,-9.55618 L 65.5673,-9.655 L 65.551,-9.75537 + L 65.5344,-9.85733 L 65.5174,-9.96085 L 65.5001,-10.0659 L 65.4825,-10.1726 L 65.4645,-10.2808 L 65.4462,-10.3906 + L 65.4276,-10.502 L 65.4087,-10.6149 L 65.3894,-10.7294 L 65.3698,-10.8455 L 65.3298,-11.0813 L 65.3097,-11.1988 + L 65.2897,-11.3156 L 65.2697,-11.4318 L 65.2497,-11.5474 L 65.2298,-11.6623 L 65.2098,-11.7766 L 65.19,-11.8903 + L 65.1701,-12.0033 L 65.1503,-12.1156 L 65.1304,-12.2274 L 65.1107,-12.3385 L 65.0909,-12.4489 L 65.0712,-12.5587 + L 65.0515,-12.6678 L 65.0318,-12.7764 L 65.0121,-12.8842 L 64.9925,-12.9915 L 64.9729,-13.0981 L 64.9534,-13.2041 + L 64.9338,-13.3094 L 64.9143,-13.414 L 64.8948,-13.5181 L 64.8754,-13.6215 L 64.8559,-13.7242 L 64.8365,-13.8264 + L 64.8171,-13.9278 L 64.7978,-14.0287 L 64.7784,-14.1289 L 64.7591,-14.2284 L 64.7399,-14.3273 L 64.7206,-14.4256 + L 64.7014,-14.5232 L 64.6822,-14.6202 L 64.663,-14.7166 L 64.6439,-14.8123 L 64.6248,-14.9074 L 64.6057,-15.0018 + L 64.5866,-15.0956 L 64.5676,-15.1887 L 64.5486,-15.2812 L 64.5296,-15.3731 L 64.5107,-15.4643 L 64.4918,-15.5549 + L 64.4729,-15.6449 L 64.454,-15.7342 L 59.2656,-38.8571 L 53.3604,-38.8571 L 62.7182,-0 L 69.0952,-0 z -M 38.9199,-6.36894 L 38.7631,-6.37392 L 38.6082,-6.38222 L 38.4553,-6.39383 L 38.3042,-6.40877 L 38.155,-6.42702 - L 38.0078,-6.44856 L 37.8624,-6.47345 L 37.7189,-6.50166 L 37.5773,-6.53317 L 37.4377,-6.56801 L 37.2999,-6.60616 - L 37.164,-6.64763 L 37.0301,-6.69241 L 36.898,-6.74052 L 36.7678,-6.79195 L 36.6395,-6.84669 L 36.5132,-6.90474 - L 36.3887,-6.96613 L 36.2661,-7.03082 L 36.1454,-7.09883 L 36.0266,-7.17017 L 35.9098,-7.24481 L 35.7948,-7.32277 - L 35.6817,-7.40404 L 35.5705,-7.48865 L 35.4612,-7.57657 L 35.3539,-7.6678 L 35.2484,-7.76236 L 35.1448,-7.86021 - L 35.0431,-7.96141 L 34.9433,-8.06592 L 34.8454,-8.17374 L 34.7495,-8.28488 L 34.6554,-8.39934 L 34.5632,-8.51711 - L 34.4729,-8.63821 L 34.3845,-8.76262 L 34.298,-8.89035 L 34.2134,-9.02141 L 34.1307,-9.15576 L 34.0499,-9.29344 - L 33.9711,-9.43443 L 33.8941,-9.57875 L 33.819,-9.72639 L 33.7458,-9.87735 L 33.6743,-10.0312 L 33.6044,-10.1875 - L 33.5361,-10.3462 L 33.4694,-10.5074 L 33.4042,-10.671 L 33.3406,-10.8371 L 33.2786,-11.0056 L 33.2181,-11.1765 - L 33.1592,-11.3499 L 33.1019,-11.5258 L 33.0461,-11.7041 L 32.9919,-11.8848 L 32.9393,-12.0679 L 32.8883,-12.2535 - L 32.8388,-12.4416 L 32.7909,-12.6321 L 32.7446,-12.825 L 32.6998,-13.0204 L 32.6566,-13.2182 L 32.615,-13.4185 - L 32.575,-13.6212 L 32.5365,-13.8263 L 32.4996,-14.0339 L 32.4643,-14.244 L 32.4305,-14.4564 L 32.3983,-14.6714 - L 32.3677,-14.8887 L 32.3386,-15.1085 L 32.3111,-15.3308 L 32.2852,-15.5555 L 32.2609,-15.7826 L 32.2381,-16.0122 - L 32.2169,-16.2442 L 32.1973,-16.4787 L 32.1792,-16.7156 L 32.1627,-16.9549 L 32.1478,-17.1967 L 32.1345,-17.4409 - L 32.1227,-17.6876 L 32.1125,-17.9367 L 32.1038,-18.1883 L 32.0968,-18.4423 L 32.0913,-18.6988 L 32.0873,-18.9577 - L 32.085,-19.219 L 32.0842,-19.4828 L 32.085,-19.7489 L 32.0873,-20.0125 L 32.0913,-20.2736 L 32.0968,-20.5322 - L 32.1038,-20.7882 L 32.1125,-21.0417 L 32.1227,-21.2927 L 32.1345,-21.5412 L 32.1478,-21.7872 L 32.1627,-22.0306 - L 32.1792,-22.2715 L 32.1973,-22.5099 L 32.2169,-22.7458 L 32.2381,-22.9791 L 32.2609,-23.21 L 32.2852,-23.4383 - L 32.3111,-23.6641 L 32.3386,-23.8873 L 32.3677,-24.1081 L 32.3983,-24.3263 L 32.4305,-24.542 L 32.4643,-24.7552 - L 32.4996,-24.9659 L 32.5365,-25.1741 L 32.575,-25.3797 L 32.615,-25.5828 L 32.6566,-25.7834 L 32.6998,-25.9814 - L 32.7446,-26.177 L 32.7909,-26.37 L 32.8388,-26.5605 L 32.8883,-26.7485 L 32.9393,-26.934 L 32.9919,-27.1169 - L 33.0461,-27.2973 L 33.1019,-27.4752 L 33.1592,-27.6506 L 33.2181,-27.8235 L 33.2786,-27.9938 L 33.3406,-28.1617 - L 33.4042,-28.3269 L 33.4694,-28.4897 L 33.5361,-28.65 L 33.6044,-28.8077 L 33.6743,-28.9629 L 33.7458,-29.1156 - L 33.819,-29.2654 L 33.8941,-29.4119 L 33.9712,-29.5551 L 34.0502,-29.695 L 34.1312,-29.8316 L 34.2141,-29.965 - L 34.2989,-30.095 L 34.3857,-30.2218 L 34.4744,-30.3452 L 34.565,-30.4654 L 34.6576,-30.5822 L 34.7521,-30.6958 - L 34.8485,-30.8061 L 34.9469,-30.9131 L 35.0472,-31.0168 L 35.1495,-31.1172 L 35.2536,-31.2143 L 35.3598,-31.3081 - L 35.4678,-31.3987 L 35.5778,-31.4859 L 35.6898,-31.5699 L 35.8036,-31.6505 L 35.9194,-31.7279 L 36.0372,-31.802 - L 36.1568,-31.8727 L 36.2785,-31.9402 L 36.402,-32.0044 L 36.5275,-32.0653 L 36.6549,-32.1229 L 36.7843,-32.1772 - L 36.9155,-32.2283 L 37.0488,-32.276 L 37.1839,-32.3205 L 37.321,-32.3616 L 37.4601,-32.3995 L 37.601,-32.434 - L 37.7439,-32.4653 L 37.8888,-32.4933 L 38.0356,-32.518 L 38.1843,-32.5394 L 38.3349,-32.5575 L 38.4875,-32.5723 - L 38.642,-32.5838 L 38.7985,-32.5921 L 38.9569,-32.597 L 39.1172,-32.5986 L 39.2775,-32.597 L 39.4359,-32.5921 - L 39.5922,-32.5838 L 39.7466,-32.5723 L 39.899,-32.5575 L 40.0494,-32.5394 L 40.1979,-32.518 L 40.3444,-32.4933 - L 40.4889,-32.4653 L 40.6315,-32.434 L 40.7721,-32.3995 L 40.9107,-32.3616 L 41.0473,-32.3205 L 41.182,-32.276 - L 41.3147,-32.2283 L 41.4454,-32.1772 L 41.5741,-32.1229 L 41.7009,-32.0653 L 41.8257,-32.0044 L 41.9485,-31.9402 - L 42.0694,-31.8727 L 42.1882,-31.802 L 42.3052,-31.7279 L 42.4201,-31.6505 L 42.5331,-31.5699 L 42.644,-31.4859 - L 42.7531,-31.3987 L 42.8601,-31.3081 L 42.9652,-31.2143 L 43.0683,-31.1172 L 43.1694,-31.0168 L 43.2686,-30.9131 - L 43.3658,-30.8061 L 43.461,-30.6958 L 43.5542,-30.5822 L 43.6455,-30.4654 L 43.7348,-30.3452 L 43.8221,-30.2218 - L 43.9075,-30.095 L 43.9909,-29.965 L 44.0723,-29.8316 L 44.1517,-29.695 L 44.2292,-29.5551 L 44.3047,-29.4119 - L 44.3782,-29.2654 L 44.4497,-29.1156 L 44.5195,-28.9629 L 44.5878,-28.8077 L 44.6545,-28.65 L 44.7197,-28.4897 - L 44.7834,-28.3269 L 44.8455,-28.1617 L 44.9061,-27.9938 L 44.9652,-27.8235 L 45.0228,-27.6506 L 45.0787,-27.4752 - L 45.1332,-27.2973 L 45.1861,-27.1169 L 45.2375,-26.934 L 45.2874,-26.7485 L 45.3357,-26.5605 L 45.3825,-26.37 - L 45.4278,-26.177 L 45.4715,-25.9814 L 45.5137,-25.7834 L 45.5544,-25.5828 L 45.5935,-25.3797 L 45.631,-25.1741 - L 45.6671,-24.9659 L 45.7016,-24.7552 L 45.7346,-24.542 L 45.7661,-24.3263 L 45.796,-24.1081 L 45.8244,-23.8873 - L 45.8512,-23.6641 L 45.8765,-23.4383 L 45.9003,-23.21 L 45.9225,-22.9791 L 45.9433,-22.7458 L 45.9624,-22.5099 - L 45.9801,-22.2715 L 45.9962,-22.0306 L 46.0108,-21.7872 L 46.0238,-21.5412 L 46.0353,-21.2927 L 46.0453,-21.0417 - L 46.0537,-20.7882 L 46.0606,-20.5322 L 46.066,-20.2736 L 46.0698,-20.0125 L 46.0721,-19.7489 L 46.0729,-19.4828 - L 46.0721,-19.219 L 46.0698,-18.9577 L 46.066,-18.6988 L 46.0606,-18.4423 L 46.0537,-18.1883 L 46.0453,-17.9367 - L 46.0353,-17.6876 L 46.0238,-17.4409 L 46.0108,-17.1967 L 45.9962,-16.9549 L 45.9801,-16.7156 L 45.9624,-16.4787 - L 45.9433,-16.2442 L 45.9225,-16.0122 L 45.9003,-15.7826 L 45.8765,-15.5555 L 45.8512,-15.3308 L 45.8244,-15.1085 - L 45.796,-14.8887 L 45.7661,-14.6714 L 45.7346,-14.4564 L 45.7016,-14.244 L 45.6671,-14.0339 L 45.631,-13.8263 - L 45.5935,-13.6212 L 45.5544,-13.4185 L 45.5137,-13.2182 L 45.4715,-13.0204 L 45.4278,-12.825 L 45.3825,-12.6321 - L 45.3357,-12.4416 L 45.2874,-12.2535 L 45.2375,-12.0679 L 45.1861,-11.8848 L 45.1332,-11.7041 L 45.0787,-11.5258 - L 45.0228,-11.3499 L 44.9652,-11.1765 L 44.9061,-11.0056 L 44.8455,-10.8371 L 44.7834,-10.671 L 44.7197,-10.5074 - L 44.6545,-10.3462 L 44.5878,-10.1875 L 44.5195,-10.0312 L 44.4497,-9.87735 L 44.3782,-9.72639 L 44.3046,-9.57875 - L 44.229,-9.43443 L 44.1514,-9.29344 L 44.0718,-9.15576 L 43.9902,-9.02141 L 43.9066,-8.89035 L 43.821,-8.76262 - L 43.7333,-8.63821 L 43.6437,-8.51711 L 43.552,-8.39934 L 43.4584,-8.28488 L 43.3627,-8.17374 L 43.265,-8.06592 - L 43.1653,-7.96141 L 43.0636,-7.86021 L 42.9599,-7.76236 L 42.8542,-7.6678 L 42.7465,-7.57657 L 42.6367,-7.48865 - L 42.525,-7.40404 L 42.4113,-7.32277 L 42.2955,-7.24481 L 42.1777,-7.17017 L 42.0579,-7.09883 L 41.9362,-7.03082 - L 41.8124,-6.96613 L 41.6866,-6.90474 L 41.5587,-6.84669 L 41.4289,-6.79195 L 41.2971,-6.74052 L 41.1633,-6.69241 - L 41.0274,-6.64763 L 40.8895,-6.60616 L 40.7497,-6.56801 L 40.6078,-6.53317 L 40.4639,-6.50166 L 40.318,-6.47345 - L 40.1701,-6.44856 L 40.0202,-6.42702 L 39.8683,-6.40877 L 39.7144,-6.39383 L 39.5584,-6.38222 L 39.4005,-6.37392 - L 39.2405,-6.36894 L 39.0786,-6.36729 z -M 9.31281,-13.8231 L 11.8246,-13.8231 L 11.9986,-13.824 L 12.1709,-13.8265 L 12.3417,-13.8307 L 12.5108,-13.8367 - L 12.6784,-13.8443 L 12.8444,-13.8537 L 13.0088,-13.8647 L 13.1716,-13.8774 L 13.3328,-13.8919 L 13.4925,-13.908 - L 13.6505,-13.9258 L 13.807,-13.9453 L 13.9618,-13.9665 L 14.1151,-13.9894 L 14.2668,-14.0141 L 14.4169,-14.0404 - L 14.5654,-14.0684 L 14.7124,-14.0981 L 14.8577,-14.1295 L 15.0014,-14.1626 L 15.1436,-14.1974 L 15.2842,-14.2339 - L 15.4231,-14.272 L 15.5605,-14.312 L 15.6964,-14.3535 L 15.8306,-14.3968 L 15.9632,-14.4418 L 16.0942,-14.4885 - L 16.2237,-14.5368 L 16.3515,-14.5869 L 16.4778,-14.6387 L 16.6025,-14.6922 L 16.7256,-14.7473 L 16.8471,-14.8042 - L 16.967,-14.8627 L 17.0854,-14.923 L 17.2021,-14.9849 L 17.3172,-15.0486 L 17.4308,-15.1139 L 17.5428,-15.181 - L 17.6532,-15.2497 L 17.762,-15.3202 L 17.8692,-15.3923 L 17.9748,-15.4661 L 18.0788,-15.5417 L 18.1813,-15.6189 - L 18.2823,-15.6975 L 18.3821,-15.7773 L 18.4806,-15.8581 L 18.5778,-15.94 L 18.6738,-16.0231 L 18.7685,-16.1073 - L 18.862,-16.1925 L 18.9541,-16.2789 L 19.0451,-16.3664 L 19.1348,-16.455 L 19.2232,-16.5446 L 19.3103,-16.6355 - L 19.3962,-16.7273 L 19.4809,-16.8203 L 19.5643,-16.9145 L 19.6464,-17.0097 L 19.7272,-17.106 L 19.8068,-17.2034 - L 19.8852,-17.302 L 19.9622,-17.4016 L 20.0381,-17.5024 L 20.1126,-17.6042 L 20.1859,-17.7072 L 20.2579,-17.8112 - L 20.3287,-17.9164 L 20.3982,-18.0227 L 20.4665,-18.1301 L 20.5335,-18.2386 L 20.5992,-18.3482 L 20.6637,-18.4588 - L 20.7269,-18.5707 L 20.7889,-18.6836 L 20.8495,-18.7976 L 20.909,-18.9127 L 20.9672,-19.0289 L 21.0241,-19.1463 - L 21.0797,-19.2647 L 21.1341,-19.3843 L 21.1873,-19.5049 L 21.2391,-19.6267 L 21.2897,-19.7496 L 21.3391,-19.8735 - L 21.3872,-19.9986 L 21.434,-20.1248 L 21.4796,-20.2521 L 21.5239,-20.3805 L 21.5671,-20.5096 L 21.6094,-20.6392 - L 21.6507,-20.7691 L 21.691,-20.8994 L 21.7304,-21.0301 L 21.7689,-21.1612 L 21.8064,-21.2927 L 21.843,-21.4245 - L 21.8786,-21.5568 L 21.9132,-21.6894 L 21.9469,-21.8224 L 21.9797,-21.9558 L 22.0115,-22.0896 L 22.0424,-22.2238 - L 22.0723,-22.3584 L 22.1013,-22.4933 L 22.1293,-22.6286 L 22.1563,-22.7643 L 22.1824,-22.9004 L 22.2076,-23.0369 - L 22.2318,-23.1738 L 22.2551,-23.3111 L 22.2774,-23.4487 L 22.2988,-23.5868 L 22.3192,-23.7252 L 22.3387,-23.864 - L 22.3572,-24.0032 L 22.3747,-24.1428 L 22.3914,-24.2827 L 22.407,-24.4231 L 22.4217,-24.5638 L 22.4355,-24.7049 - L 22.4483,-24.8464 L 22.4602,-24.9883 L 22.4711,-25.1306 L 22.4811,-25.2733 L 22.4901,-25.4163 L 22.4982,-25.5597 - L 22.5053,-25.7036 L 22.5115,-25.8478 L 22.5167,-25.9924 L 22.521,-26.1373 L 22.5243,-26.2827 L 22.5267,-26.4285 - L 22.5281,-26.5746 L 22.5286,-26.7211 L 22.5274,-26.9661 L 22.5239,-27.2087 L 22.5181,-27.449 L 22.51,-27.6871 - L 22.4996,-27.9229 L 22.4868,-28.1564 L 22.4718,-28.3875 L 22.4544,-28.6165 L 22.4346,-28.8431 L 22.4126,-29.0674 - L 22.3882,-29.2894 L 22.3616,-29.5092 L 22.3326,-29.7267 L 22.3013,-29.9418 L 22.2676,-30.1547 L 22.2317,-30.3653 - L 22.1934,-30.5736 L 22.1528,-30.7796 L 22.1099,-30.9834 L 22.0647,-31.1848 L 22.0172,-31.384 L 21.9673,-31.5808 - L 21.9151,-31.7754 L 21.8606,-31.9677 L 21.8038,-32.1577 L 21.7446,-32.3454 L 21.6832,-32.5308 L 21.6194,-32.7139 - L 21.5533,-32.8948 L 21.4848,-33.0733 L 21.4141,-33.2496 L 21.341,-33.4236 L 21.2656,-33.5953 L 21.1879,-33.7646 - L 21.1079,-33.9318 L 21.0256,-34.0966 L 20.9409,-34.2591 L 20.8539,-34.4194 L 20.7646,-34.5773 L 20.673,-34.733 - L 20.5791,-34.8863 L 20.4828,-35.0374 L 20.3843,-35.1862 L 20.2834,-35.3327 L 20.1801,-35.477 L 20.0746,-35.6189 - L 19.9666,-35.7582 L 19.8558,-35.8943 L 19.7423,-36.0275 L 19.6261,-36.1576 L 19.5072,-36.2846 L 19.3855,-36.4085 - L 19.2612,-36.5294 L 19.1341,-36.6473 L 19.0043,-36.762 L 18.8717,-36.8737 L 18.7365,-36.9824 L 18.5985,-37.088 - L 18.4578,-37.1905 L 18.3144,-37.29 L 18.1683,-37.3864 L 18.0194,-37.4798 L 17.8678,-37.57 L 17.7135,-37.6573 - L 17.5565,-37.7414 L 17.3968,-37.8225 L 17.2343,-37.9006 L 17.0691,-37.9756 L 16.9012,-38.0475 L 16.7306,-38.1163 - L 16.5573,-38.1821 L 16.3812,-38.2449 L 16.2024,-38.3046 L 16.0209,-38.3612 L 15.8367,-38.4148 L 15.6497,-38.4653 - L 15.46,-38.5127 L 15.2677,-38.5571 L 15.0725,-38.5984 L 14.8747,-38.6366 L 14.6741,-38.6718 L 14.4709,-38.704 - L 14.2649,-38.7331 L 14.0562,-38.7591 L 13.8447,-38.782 L 13.6306,-38.8019 L 13.4137,-38.8188 L 13.1941,-38.8325 - L 12.9717,-38.8432 L 12.7467,-38.8509 L 12.5189,-38.8555 L 12.2884,-38.857 L 3.47783,-38.857 L 3.47783,-0 - L 9.31281,-0 z -M 9.31281,-20.5713 L 9.31281,-32.1089 L 11.9793,-32.1089 L 12.1787,-32.1062 L 12.3738,-32.0981 L 12.5644,-32.0848 - L 12.7507,-32.066 L 12.9326,-32.042 L 13.1101,-32.0125 L 13.2832,-31.9778 L 13.4519,-31.9377 L 13.6163,-31.8922 - L 13.7762,-31.8414 L 13.9318,-31.7852 L 14.083,-31.7237 L 14.2299,-31.6568 L 14.3723,-31.5846 L 14.5104,-31.507 - L 14.644,-31.4241 L 14.7733,-31.3358 L 14.8982,-31.2422 L 15.0188,-31.1432 L 15.1349,-31.0389 L 15.2467,-30.9292 - L 15.354,-30.8142 L 15.457,-30.6938 L 15.5556,-30.5681 L 15.6499,-30.437 L 15.7397,-30.3006 L 15.8252,-30.1589 - L 15.9062,-30.0117 L 15.9829,-29.8593 L 16.0553,-29.7015 L 16.1232,-29.5383 L 16.1868,-29.3698 L 16.2459,-29.1959 - L 16.3007,-29.0167 L 16.3511,-28.8321 L 16.3971,-28.6422 L 16.4388,-28.4469 L 16.476,-28.2463 L 16.5089,-28.0403 - L 16.5374,-27.829 L 16.5615,-27.6124 L 16.5812,-27.3904 L 16.5965,-27.163 L 16.6075,-26.9303 L 16.6141,-26.6922 - L 16.6163,-26.4488 L 16.6156,-26.3147 L 16.6135,-26.1823 L 16.6101,-26.0515 L 16.6053,-25.9223 L 16.5991,-25.7947 - L 16.5916,-25.6687 L 16.5827,-25.5444 L 16.5724,-25.4216 L 16.5608,-25.3005 L 16.5478,-25.181 L 16.5334,-25.0632 - L 16.5176,-24.9469 L 16.5005,-24.8323 L 16.482,-24.7193 L 16.4622,-24.6079 L 16.4409,-24.4982 L 16.4184,-24.39 - L 16.3944,-24.2835 L 16.369,-24.1786 L 16.3423,-24.0753 L 16.3143,-23.9737 L 16.2848,-23.8736 L 16.254,-23.7752 - L 16.2218,-23.6784 L 16.1883,-23.5832 L 16.1533,-23.4897 L 16.1171,-23.3977 L 16.0794,-23.3074 L 16.0403,-23.2187 - L 16,-23.1316 L 15.9582,-23.0462 L 15.915,-22.9624 L 15.8705,-22.8801 L 15.8246,-22.7995 L 15.7774,-22.7206 - L 15.7288,-22.6432 L 15.6788,-22.5675 L 15.6274,-22.4934 L 15.5747,-22.4209 L 15.5206,-22.35 L 15.4651,-22.2807 - L 15.4083,-22.2131 L 15.3501,-22.1471 L 15.2905,-22.0827 L 15.2296,-22.0199 L 15.1673,-21.9588 L 15.1038,-21.8991 - L 15.0393,-21.8407 L 14.9739,-21.7837 L 14.9075,-21.728 L 14.8401,-21.6735 L 14.7718,-21.6204 L 14.7025,-21.5686 - L 14.6323,-21.5181 L 14.5611,-21.4689 L 14.4888,-21.4211 L 14.4157,-21.3745 L 14.3416,-21.3293 L 14.2664,-21.2854 - L 14.1904,-21.2427 L 14.1133,-21.2014 L 14.0353,-21.1614 L 13.9564,-21.1227 L 13.8764,-21.0854 L 13.7955,-21.0493 - L 13.7136,-21.0145 L 13.6308,-20.9811 L 13.547,-20.949 L 13.4622,-20.9182 L 13.3765,-20.8887 L 13.2897,-20.8604 - L 13.2021,-20.8336 L 13.1134,-20.808 L 13.0238,-20.7837 L 12.9332,-20.7608 L 12.8416,-20.7392 L 12.7491,-20.7188 - L 12.6556,-20.6998 L 12.5612,-20.6821 L 12.4657,-20.6657 L 12.3693,-20.6506 L 12.272,-20.6369 L 12.1736,-20.6244 - L 12.0743,-20.6133 L 11.9741,-20.6034 L 11.8728,-20.5949 L 11.7706,-20.5877 L 11.6674,-20.5818 L 11.5633,-20.5772 - L 11.4582,-20.5739 L 11.3521,-20.5719 L 11.2451,-20.5713 z -M 78.4778,-38.857 L 72.5655,-38.857 L 67.3488,-15.7278 L 67.2602,-15.2701 L 67.1047,-14.4637 L 66.9236,-13.5237 - L 66.9102,-13.4539 L 66.8968,-13.3839 L 66.8834,-13.3137 L 66.87,-13.2433 L 66.8566,-13.1728 L 66.8433,-13.1022 - L 66.8167,-12.9604 L 66.8034,-12.8893 L 66.7769,-12.7466 L 66.7504,-12.6033 L 66.7372,-12.5315 L 66.7241,-12.4594 - L 66.6978,-12.3149 L 66.6715,-12.1697 L 66.6584,-12.0969 L 66.6454,-12.024 L 66.6193,-11.8776 L 66.6063,-11.8041 - L 66.5933,-11.7305 L 66.5674,-11.5829 L 66.5415,-11.4347 L 66.5157,-11.2858 L 66.5028,-11.2112 L 66.4772,-11.0614 - L 66.4516,-10.911 L 66.4388,-10.8355 L 66.426,-10.7599 L 66.4006,-10.6083 L 66.3752,-10.456 L 66.3498,-10.3032 - L 66.3246,-10.1497 L 66.3121,-10.073 L 66.2997,-9.99695 L 66.2876,-9.92139 L 66.2755,-9.84639 L 66.2637,-9.77191 - L 66.252,-9.69797 L 66.2405,-9.62459 L 66.2291,-9.55173 L 66.2179,-9.47942 L 66.2069,-9.40765 L 66.196,-9.33641 - L 66.1853,-9.26573 L 66.1747,-9.19559 L 66.1644,-9.12596 L 66.1542,-9.05688 L 66.1441,-8.98836 L 66.1342,-8.92036 - L 66.1245,-8.85292 L 66.1149,-8.786 L 66.1056,-8.71964 L 66.0963,-8.65381 L 66.0873,-8.5885 L 66.0784,-8.52374 - L 66.0696,-8.45955 L 66.0611,-8.39587 L 66.0526,-8.33273 L 66.0444,-8.27016 L 66.0363,-8.20808 L 66.0284,-8.14658 - L 66.0206,-8.08562 L 66.0131,-8.02518 L 66.0056,-7.96529 L 65.9984,-7.90593 L 65.9913,-7.84711 L 65.9844,-7.78885 - L 65.9776,-7.73111 L 65.971,-7.67392 L 65.9646,-7.61726 L 65.9583,-7.56116 L 65.9522,-7.50558 L 65.9462,-7.45055 - L 65.9404,-7.39604 L 65.9348,-7.3421 L 65.9294,-7.2887 L 65.9241,-7.23581 L 65.9189,-7.18349 L 65.9138,-7.23581 - L 65.9085,-7.2887 L 65.903,-7.3421 L 65.8973,-7.39604 L 65.8914,-7.45055 L 65.8854,-7.50558 L 65.8792,-7.56116 - L 65.8727,-7.61726 L 65.8661,-7.67392 L 65.8594,-7.73111 L 65.8524,-7.78885 L 65.8453,-7.84711 L 65.8379,-7.90593 - L 65.8304,-7.96529 L 65.8227,-8.02518 L 65.8149,-8.08562 L 65.8068,-8.14658 L 65.7986,-8.20808 L 65.7902,-8.27016 - L 65.7816,-8.33273 L 65.7728,-8.39587 L 65.7638,-8.45955 L 65.7546,-8.52374 L 65.7453,-8.5885 L 65.7358,-8.65381 - L 65.7261,-8.71964 L 65.7162,-8.786 L 65.7061,-8.85292 L 65.6959,-8.92036 L 65.6855,-8.98836 L 65.6749,-9.05688 - L 65.6641,-9.12596 L 65.6531,-9.19559 L 65.6419,-9.26573 L 65.6306,-9.33641 L 65.6191,-9.40765 L 65.6074,-9.47942 - L 65.5955,-9.55173 L 65.5834,-9.62459 L 65.5712,-9.69797 L 65.5587,-9.77191 L 65.5461,-9.84639 L 65.5333,-9.92139 - L 65.5203,-9.99695 L 65.5072,-10.073 L 65.4938,-10.1497 L 65.4402,-10.456 L 65.3869,-10.7599 L 65.3338,-11.0614 - L 65.2811,-11.3603 L 65.2417,-11.5829 L 65.1895,-11.8776 L 65.1376,-12.1697 L 65.073,-12.5315 L 65.0345,-12.7466 - L 64.9835,-13.0314 L 64.9454,-13.2433 L 64.9074,-13.4539 L 64.8823,-13.5931 L 64.8699,-13.6614 L 64.8454,-13.7953 - L 64.8334,-13.8609 L 64.8098,-13.989 L 64.7866,-14.1134 L 64.764,-14.234 L 64.7419,-14.3507 L 64.7202,-14.4637 - L 64.7096,-14.5187 L 64.6991,-14.5728 L 64.6785,-14.6782 L 64.6684,-14.7294 L 64.6585,-14.7797 L 64.6486,-14.8291 - L 64.6389,-14.8775 L 64.6293,-14.9249 L 64.6198,-14.9714 L 64.6105,-15.0169 L 64.6013,-15.0615 L 64.5922,-15.1051 - L 64.5832,-15.1478 L 64.5744,-15.1895 L 64.5657,-15.2303 L 64.5571,-15.2701 L 64.5487,-15.309 L 64.5404,-15.3469 - L 64.5322,-15.3839 L 64.5241,-15.4199 L 64.5162,-15.455 L 64.5083,-15.4891 L 64.5007,-15.5223 L 64.4931,-15.5545 - L 64.4857,-15.5858 L 64.4784,-15.6161 L 64.4712,-15.6454 L 64.4642,-15.6739 L 64.4572,-15.7013 L 64.4505,-15.7278 - L 59.2724,-38.857 L 53.3601,-38.857 L 62.7115,-0 L 69.0877,-0 z " stroke="white" fill="white" stroke-width="0.5"/> diff --git a/resources/icons/svg-default/export-pov.svg b/resources/icons/svg-default/export-pov.svg index cce6bd0e350..9843fe21719 100644 --- a/resources/icons/svg-default/export-pov.svg +++ b/resources/icons/svg-default/export-pov.svg @@ -35,255 +35,203 @@ M 84.1993,-0.00497437 L 84.3984,-0.0149078 L 84.5973,-0.0298004 L 84.7955,-0.054 L 85.7797,-5.08759 L 85.6801,-4.9149 L 85.5637,-4.75302 L 85.4317,-4.60353 L 85.2856,-4.46791 L 85.1266,-4.34752 L 84.9565,-4.24356 L 84.7769,-4.15704 L 84.5895,-4.08885 L 84.3963,-4.03966 L 84.1991,-4.00993 L 84,-4 L 80,-4 L 80,-0 L 84,-0 z -M 39.2744,0.54306 L 39.4686,0.53952 L 39.6614,0.5336 L 39.8526,0.525314 L 40.0423,0.514679 L 40.2304,0.501648 - L 40.417,0.486267 L 40.6021,0.468536 L 40.7856,0.44841 L 40.9676,0.425934 L 41.148,0.401093 L 41.327,0.373886 - L 41.5044,0.344299 L 41.6802,0.312363 L 41.8546,0.278046 L 42.0273,0.241379 L 42.1986,0.202332 L 42.3683,0.160919 - L 42.5365,0.117142 L 42.7032,0.0710144 L 42.8683,0.0225067 L 43.0319,-0.0283508 L 43.194,-0.0815887 L 43.3545,-0.137192 - L 43.5135,-0.19516 L 43.6709,-0.255508 L 43.8268,-0.318207 L 43.9812,-0.38327 L 44.134,-0.450714 L 44.2854,-0.520523 - L 44.4352,-0.592682 L 44.5834,-0.667206 L 44.7301,-0.74411 L 44.8753,-0.82338 L 45.0189,-0.905014 L 45.161,-0.989029 - L 45.3016,-1.07539 L 45.4407,-1.16412 L 45.5782,-1.25522 L 45.7141,-1.34869 L 45.8486,-1.44452 L 45.9815,-1.54271 - L 46.1129,-1.64326 L 46.2427,-1.7462 L 46.371,-1.8515 L 46.4977,-1.95917 L 46.6231,-2.06894 L 46.747,-2.1806 - L 46.8695,-2.29413 L 46.9906,-2.40956 L 47.1102,-2.52684 L 47.2285,-2.64603 L 47.3454,-2.76706 L 47.4608,-2.88998 - L 47.5749,-3.01479 L 47.6876,-3.14146 L 47.7988,-3.27002 L 47.9086,-3.40045 L 48.0171,-3.53278 L 48.1241,-3.66696 - L 48.2297,-3.80302 L 48.3339,-3.94096 L 48.4367,-4.0808 L 48.5381,-4.22249 L 48.6381,-4.36607 L 48.7367,-4.51152 - L 48.8339,-4.65884 L 48.9297,-4.80806 L 49.024,-4.95915 L 49.117,-5.11211 L 49.2086,-5.26694 L 49.2987,-5.42366 - L 49.3875,-5.58226 L 49.4748,-5.74272 L 49.5607,-5.90508 L 49.6453,-6.06929 L 49.7284,-6.2354 L 49.8101,-6.40338 - L 49.8904,-6.57323 L 49.9693,-6.74498 L 50.0468,-6.91858 L 50.1229,-7.09407 L 50.1975,-7.27145 L 50.2708,-7.45068 - L 50.3427,-7.63181 L 50.4131,-7.8148 L 50.4822,-7.99968 L 50.5499,-8.18643 L 50.6161,-8.37506 L 50.6809,-8.56557 - L 50.7444,-8.75795 L 50.8064,-8.95222 L 50.867,-9.14816 L 50.9264,-9.3456 L 50.9844,-9.54448 L 51.041,-9.74483 - L 51.0964,-9.94664 L 51.1504,-10.1499 L 51.203,-10.3547 L 51.2543,-10.5609 L 51.3044,-10.7685 L 51.353,-10.9777 - L 51.4004,-11.1883 L 51.4464,-11.4004 L 51.491,-11.6139 L 51.5343,-11.8289 L 51.5763,-12.0454 L 51.617,-12.2633 - L 51.6563,-12.4827 L 51.6943,-12.7036 L 51.731,-12.9259 L 51.7663,-13.1497 L 51.8003,-13.375 L 51.833,-13.6017 - L 51.8643,-13.8299 L 51.8943,-14.0595 L 51.923,-14.2906 L 51.9503,-14.5232 L 51.9763,-14.7573 L 52.001,-14.9928 - L 52.0243,-15.2298 L 52.0463,-15.4683 L 52.067,-15.7082 L 52.0863,-15.9495 L 52.1043,-16.1924 L 52.121,-16.4367 - L 52.1363,-16.6825 L 52.1503,-16.9297 L 52.163,-17.1784 L 52.1743,-17.4286 L 52.1843,-17.6803 L 52.193,-17.9334 - L 52.2003,-18.1879 L 52.2063,-18.444 L 52.211,-18.7015 L 52.2143,-18.9604 L 52.2163,-19.2209 L 52.217,-19.4828 - L 52.2163,-19.7447 L 52.2143,-20.0051 L 52.211,-20.2641 L 52.2063,-20.5216 L 52.2003,-20.7777 L 52.193,-21.0323 - L 52.1843,-21.2854 L 52.1743,-21.537 L 52.163,-21.7872 L 52.1503,-22.0359 L 52.1363,-22.2832 L 52.121,-22.529 - L 52.1043,-22.7733 L 52.0863,-23.0162 L 52.067,-23.2575 L 52.0463,-23.4975 L 52.0243,-23.7359 L 52.001,-23.9729 - L 51.9763,-24.2084 L 51.9503,-24.4425 L 51.923,-24.6751 L 51.8943,-24.9062 L 51.8643,-25.1359 L 51.833,-25.3641 - L 51.8003,-25.5908 L 51.7663,-25.816 L 51.731,-26.0398 L 51.6943,-26.2622 L 51.6563,-26.483 L 51.617,-26.7024 - L 51.5763,-26.9203 L 51.5343,-27.1368 L 51.491,-27.3518 L 51.4464,-27.5653 L 51.4004,-27.7774 L 51.353,-27.988 - L 51.3044,-28.1971 L 51.2543,-28.4048 L 51.203,-28.611 L 51.1504,-28.8157 L 51.0964,-29.019 L 51.041,-29.2208 - L 50.9844,-29.4211 L 50.9264,-29.62 L 50.867,-29.8174 L 50.8064,-30.0133 L 50.7444,-30.2076 L 50.6809,-30.3999 - L 50.6161,-30.5904 L 50.5499,-30.779 L 50.4822,-30.9656 L 50.4131,-31.1504 L 50.3427,-31.3332 L 50.2708,-31.5141 - L 50.1975,-31.6932 L 50.1229,-31.8703 L 50.0468,-32.0455 L 49.9693,-32.2189 L 49.8904,-32.3903 L 49.8101,-32.5598 - L 49.7284,-32.7274 L 49.6453,-32.8932 L 49.5607,-33.057 L 49.4748,-33.2189 L 49.3875,-33.3789 L 49.2987,-33.537 - L 49.2086,-33.6932 L 49.117,-33.8474 L 49.024,-33.9998 L 48.9297,-34.1503 L 48.8339,-34.2989 L 48.7367,-34.4456 - L 48.6381,-34.5904 L 48.5381,-34.7332 L 48.4367,-34.8742 L 48.3339,-35.0132 L 48.2297,-35.1504 L 48.1241,-35.2857 - L 48.0171,-35.419 L 47.9086,-35.5504 L 47.7988,-35.68 L 47.6876,-35.8076 L 47.5749,-35.9334 L 47.4608,-36.0572 - L 47.3454,-36.1791 L 47.2285,-36.2992 L 47.1102,-36.4173 L 46.9906,-36.5335 L 46.8695,-36.6478 L 46.747,-36.7602 - L 46.6231,-36.8707 L 46.4977,-36.9794 L 46.371,-37.0858 L 46.2428,-37.19 L 46.113,-37.2918 L 45.9818,-37.3913 - L 45.849,-37.4884 L 45.7148,-37.5832 L 45.5791,-37.6757 L 45.4418,-37.7658 L 45.3031,-37.8536 L 45.1629,-37.939 - L 45.0211,-38.0221 L 44.8779,-38.1029 L 44.7332,-38.1813 L 44.587,-38.2573 L 44.4393,-38.3311 L 44.2901,-38.4025 - L 44.1393,-38.4715 L 43.9871,-38.5382 L 43.8334,-38.6026 L 43.6782,-38.6646 L 43.5215,-38.7243 L 43.3633,-38.7816 - L 43.2036,-38.8366 L 43.0424,-38.8893 L 42.8797,-38.9396 L 42.7155,-38.9876 L 42.5499,-39.0333 L 42.3827,-39.0766 - L 42.214,-39.1175 L 42.0438,-39.1561 L 41.8721,-39.1924 L 41.6989,-39.2263 L 41.5243,-39.2579 L 41.3481,-39.2872 - L 41.1704,-39.3141 L 40.9913,-39.3387 L 40.8106,-39.3609 L 40.6284,-39.3808 L 40.4448,-39.3984 L 40.2596,-39.4136 - L 40.073,-39.4265 L 39.8848,-39.437 L 39.6952,-39.4452 L 39.504,-39.451 L 39.3114,-39.4546 L 39.1172,-39.4557 - L 38.9214,-39.4546 L 38.7271,-39.451 L 38.5343,-39.4452 L 38.343,-39.437 L 38.1533,-39.4265 L 37.9651,-39.4136 - L 37.7783,-39.3984 L 37.5931,-39.3808 L 37.4095,-39.3609 L 37.2273,-39.3387 L 37.0466,-39.3141 L 36.8675,-39.2872 - L 36.6898,-39.2579 L 36.5137,-39.2263 L 36.3391,-39.1924 L 36.166,-39.1561 L 35.9945,-39.1175 L 35.8244,-39.0766 - L 35.6559,-39.0333 L 35.4889,-38.9876 L 35.3234,-38.9396 L 35.1594,-38.8893 L 34.9969,-38.8366 L 34.8359,-38.7816 - L 34.6765,-38.7243 L 34.5186,-38.6646 L 34.3622,-38.6026 L 34.2073,-38.5382 L 34.0539,-38.4715 L 33.902,-38.4025 - L 33.7517,-38.3311 L 33.6028,-38.2573 L 33.4555,-38.1813 L 33.3097,-38.1029 L 33.1654,-38.0221 L 33.0226,-37.939 - L 32.8814,-37.8536 L 32.7417,-37.7658 L 32.6034,-37.6757 L 32.4667,-37.5832 L 32.3315,-37.4884 L 32.1978,-37.3913 - L 32.0657,-37.2918 L 31.935,-37.19 L 31.8059,-37.0858 L 31.6783,-36.9794 L 31.5521,-36.8708 L 31.4274,-36.7603 - L 31.3041,-36.6479 L 31.1823,-36.5337 L 31.0618,-36.4176 L 30.9428,-36.2996 L 30.8252,-36.1798 L 30.7091,-36.058 - L 30.5943,-35.9344 L 30.481,-35.8089 L 30.3691,-35.6816 L 30.2587,-35.5523 L 30.1496,-35.4212 L 30.042,-35.2882 - L 29.9358,-35.1533 L 29.8311,-35.0166 L 29.7277,-34.8779 L 29.6258,-34.7374 L 29.5253,-34.595 L 29.4262,-34.4508 - L 29.3286,-34.3046 L 29.2324,-34.1566 L 29.1376,-34.0067 L 29.0442,-33.8549 L 28.9523,-33.7013 L 28.8617,-33.5457 - L 28.7726,-33.3883 L 28.685,-33.229 L 28.5987,-33.0679 L 28.5139,-32.9048 L 28.4305,-32.7399 L 28.3485,-32.5731 - L 28.268,-32.4044 L 28.1889,-32.2339 L 28.1111,-32.0614 L 28.0349,-31.8871 L 27.96,-31.7109 L 27.8866,-31.5329 - L 27.8146,-31.3529 L 27.744,-31.1711 L 27.6749,-30.9874 L 27.6071,-30.8018 L 27.5408,-30.6144 L 27.4759,-30.425 - L 27.4125,-30.2338 L 27.3505,-30.0407 L 27.2898,-29.846 L 27.2305,-29.6497 L 27.1725,-29.452 L 27.1158,-29.2527 - L 27.0605,-29.052 L 27.0065,-28.8497 L 26.9539,-28.646 L 26.9026,-28.4408 L 26.8526,-28.2341 L 26.8039,-28.0259 - L 26.7566,-27.8162 L 26.7106,-27.605 L 26.666,-27.3923 L 26.6226,-27.1782 L 26.5806,-26.9625 L 26.54,-26.7454 - L 26.5007,-26.5267 L 26.4627,-26.3066 L 26.426,-26.085 L 26.3907,-25.8619 L 26.3567,-25.6373 L 26.324,-25.4111 - L 26.2927,-25.1836 L 26.2627,-24.9545 L 26.2341,-24.7239 L 26.2067,-24.4919 L 26.1807,-24.2583 L 26.1561,-24.0232 - L 26.1328,-23.7867 L 26.1107,-23.5487 L 26.0901,-23.3091 L 26.0708,-23.0681 L 26.0528,-22.8256 L 26.0361,-22.5816 - L 26.0208,-22.3361 L 26.0068,-22.0891 L 25.9941,-21.8407 L 25.9828,-21.5907 L 25.9728,-21.3392 L 25.9641,-21.0863 - L 25.9568,-20.8318 L 25.9508,-20.5759 L 25.9461,-20.3185 L 25.9428,-20.0595 L 25.9408,-19.7991 L 25.9401,-19.5372 - L 25.9408,-19.2753 L 25.9428,-19.0148 L 25.9461,-18.7558 L 25.9508,-18.4982 L 25.9568,-18.242 L 25.9641,-17.9873 - L 25.9728,-17.734 L 25.9828,-17.4821 L 25.9941,-17.2317 L 26.0068,-16.9828 L 26.0208,-16.7352 L 26.0361,-16.4892 - L 26.0528,-16.2445 L 26.0708,-16.0013 L 26.0901,-15.7596 L 26.1107,-15.5192 L 26.1328,-15.2803 L 26.1561,-15.0429 - L 26.1807,-14.8069 L 26.2067,-14.5723 L 26.2341,-14.3392 L 26.2627,-14.1075 L 26.2927,-13.8773 L 26.324,-13.6485 - L 26.3567,-13.4211 L 26.3907,-13.1952 L 26.426,-12.9707 L 26.4627,-12.7477 L 26.5007,-12.5261 L 26.54,-12.3059 - L 26.5806,-12.0872 L 26.6226,-11.8699 L 26.666,-11.6541 L 26.7106,-11.4397 L 26.7566,-11.2267 L 26.8039,-11.0152 - L 26.8526,-10.8051 L 26.9026,-10.5965 L 26.9539,-10.3893 L 27.0065,-10.1835 L 27.0605,-9.97923 L 27.1158,-9.77635 - L 27.1725,-9.57494 L 27.2305,-9.37494 L 27.2898,-9.17638 L 27.3505,-8.97926 L 27.4125,-8.78383 L 27.4759,-8.5903 - L 27.5408,-8.3987 L 27.6071,-8.20897 L 27.6749,-8.02116 L 27.744,-7.83525 L 27.8146,-7.65125 L 27.8866,-7.46915 - L 27.96,-7.28894 L 28.0349,-7.11063 L 28.1111,-6.93423 L 28.1889,-6.75974 L 28.268,-6.58714 L 28.3485,-6.41646 - L 28.4305,-6.24768 L 28.5139,-6.0808 L 28.5987,-5.91582 L 28.685,-5.75275 L 28.7726,-5.59157 L 28.8617,-5.43228 - L 28.9523,-5.27492 L 29.0442,-5.11946 L 29.1376,-4.9659 L 29.2324,-4.81422 L 29.3286,-4.66447 L 29.4262,-4.51663 - L 29.5253,-4.37067 L 29.6258,-4.22662 L 29.7277,-4.08449 L 29.8311,-3.94424 L 29.9358,-3.80591 L 30.042,-3.66946 - L 30.1496,-3.53494 L 30.2587,-3.4023 L 30.3691,-3.27156 L 30.481,-3.14275 L 30.5943,-3.01584 L 30.7091,-2.89081 - L 30.8252,-2.7677 L 30.9428,-2.64647 L 31.0618,-2.52716 L 31.1823,-2.40976 L 31.3041,-2.29425 L 31.4274,-2.18065 - L 31.5521,-2.06895 L 31.6783,-1.95917 L 31.8059,-1.8515 L 31.935,-1.7462 L 32.0655,-1.64326 L 32.1975,-1.54271 - L 32.3311,-1.44452 L 32.466,-1.34869 L 32.6025,-1.25522 L 32.7405,-1.16412 L 32.8799,-1.07539 L 33.0208,-0.989029 - L 33.1632,-0.905014 L 33.3071,-0.82338 L 33.4524,-0.74411 L 33.5992,-0.667206 L 33.7476,-0.592682 L 33.8973,-0.520523 - L 34.0486,-0.450714 L 34.2013,-0.38327 L 34.3556,-0.318207 L 34.5113,-0.255508 L 34.6684,-0.19516 L 34.8271,-0.137192 - L 34.9872,-0.0815887 L 35.1488,-0.0283508 L 35.3119,0.0225067 L 35.4765,0.0710144 L 35.6426,0.117142 L 35.8101,0.160919 - L 35.9791,0.202332 L 36.1496,0.241379 L 36.3216,0.278046 L 36.495,0.312363 L 36.6699,0.344299 L 36.8463,0.373886 - L 37.0242,0.401093 L 37.2036,0.425934 L 37.3844,0.44841 L 37.5667,0.468536 L 37.7505,0.486267 L 37.9358,0.501648 - L 38.1226,0.514679 L 38.3108,0.525314 L 38.5005,0.5336 L 38.6917,0.53952 L 38.8844,0.54306 L 39.0786,0.544235 +M 39.3456,0.528992 L 39.617,0.521652 L 39.8857,0.509399 L 40.1516,0.492264 L 40.4146,0.470215 L 40.675,0.443283 + L 40.9325,0.411438 L 41.1872,0.374695 L 41.4392,0.333054 L 41.6884,0.28653 L 41.9348,0.235092 L 42.1784,0.178757 + L 42.4193,0.117523 L 42.6573,0.0513916 L 42.8926,-0.0195923 L 43.1251,-0.09552 L 43.3548,-0.176346 L 43.5817,-0.26207 + L 43.8059,-0.352692 L 44.0273,-0.448212 L 44.2458,-0.54863 L 44.4616,-0.653946 L 44.6747,-0.76416 L 44.8849,-0.879272 + L 45.0924,-0.999283 L 45.297,-1.12419 L 45.4989,-1.254 L 45.698,-1.38872 L 45.8944,-1.52831 L 46.0879,-1.67281 + L 46.2787,-1.82222 L 46.4667,-1.97653 L 46.6519,-2.13573 L 46.8343,-2.29982 L 47.0139,-2.46881 L 47.1908,-2.6427 + L 47.3649,-2.8215 L 47.5362,-3.00519 L 47.7047,-3.19379 L 47.8704,-3.38727 L 48.0334,-3.58566 L 48.1935,-3.78894 + L 48.3509,-3.99713 L 48.5055,-4.21021 L 48.6573,-4.42819 L 48.8064,-4.65108 L 48.9524,-4.87852 L 49.0953,-5.1102 + L 49.2349,-5.34608 L 49.3713,-5.5862 L 49.5045,-5.83055 L 49.6345,-6.0791 L 49.7613,-6.33188 L 49.8849,-6.58887 + L 50.0053,-6.8501 L 50.1225,-7.11552 L 50.2364,-7.38518 L 50.3472,-7.65906 L 50.4547,-7.93716 L 50.559,-8.21948 + L 50.6601,-8.506 L 50.758,-8.79677 L 50.8527,-9.09174 L 50.9442,-9.39095 L 51.0325,-9.69437 L 51.1176,-10.002 + L 51.1994,-10.3139 L 51.278,-10.6299 L 51.3535,-10.9502 L 51.4257,-11.2747 L 51.4947,-11.6035 L 51.5605,-11.9364 + L 51.6231,-12.2736 L 51.6825,-12.615 L 51.7387,-12.9606 L 51.7916,-13.3105 L 51.8414,-13.6646 L 51.888,-14.0228 + L 51.9313,-14.3853 L 51.9714,-14.752 L 52.0083,-15.123 L 52.042,-15.4981 L 52.0725,-15.8775 L 52.0998,-16.2611 + L 52.1239,-16.6489 L 52.1447,-17.041 L 52.1624,-17.4373 L 52.1768,-17.8377 L 52.1881,-18.2424 L 52.1961,-18.6514 + L 52.2009,-19.0645 L 52.2025,-19.4819 L 52.2009,-19.9003 L 52.1962,-20.3145 L 52.1882,-20.7245 L 52.1771,-21.1301 + L 52.1627,-21.5316 L 52.1452,-21.9287 L 52.1245,-22.3215 L 52.1007,-22.7101 L 52.0736,-23.0944 L 52.0434,-23.4745 + L 52.0099,-23.8503 L 51.9733,-24.2218 L 51.9335,-24.589 L 51.8906,-24.952 L 51.8444,-25.3107 L 51.7951,-25.6651 + L 51.7426,-26.0153 L 51.6869,-26.3611 L 51.628,-26.7027 L 51.5659,-27.0401 L 51.5006,-27.3732 L 51.4322,-27.702 + L 51.3606,-28.0265 L 51.2858,-28.3468 L 51.2078,-28.6628 L 51.1266,-28.9745 L 51.0423,-29.282 L 50.9547,-29.5851 + L 50.864,-29.884 L 50.7701,-30.1787 L 50.673,-30.4691 L 50.5728,-30.7552 L 50.4693,-31.037 L 50.3627,-31.3146 + L 50.2528,-31.5879 L 50.1398,-31.8569 L 50.0237,-32.1216 L 49.9043,-32.3821 L 49.7817,-32.6383 L 49.656,-32.8903 + L 49.5271,-33.1379 L 49.395,-33.3813 L 49.2597,-33.6205 L 49.1212,-33.8553 L 48.9796,-34.0859 L 48.8347,-34.3123 + L 48.6869,-34.534 L 48.5363,-34.7509 L 48.3828,-34.9629 L 48.2265,-35.17 L 48.0673,-35.3723 L 47.9054,-35.5697 + L 47.7406,-35.7622 L 47.573,-35.9498 L 47.4025,-36.1326 L 47.2293,-36.3104 L 47.0532,-36.4834 L 46.8743,-36.6516 + L 46.6925,-36.8148 L 46.5079,-36.9733 L 46.3205,-37.1268 L 46.1303,-37.2754 L 45.9373,-37.4192 L 45.7414,-37.5581 + L 45.5427,-37.6921 L 45.3412,-37.8213 L 45.1368,-37.9455 L 44.9296,-38.0649 L 44.7196,-38.1795 L 44.5067,-38.2891 + L 44.2911,-38.3939 L 44.0726,-38.4938 L 43.8513,-38.5889 L 43.6271,-38.679 L 43.4002,-38.7643 L 43.1704,-38.8447 + L 42.9377,-38.9203 L 42.7023,-38.9909 L 42.464,-39.0567 L 42.2229,-39.1176 L 41.979,-39.1737 L 41.7322,-39.2249 + L 41.4826,-39.2711 L 41.2302,-39.3126 L 40.975,-39.3491 L 40.7169,-39.3808 L 40.456,-39.4076 L 40.1923,-39.4296 + L 39.9258,-39.4466 L 39.6564,-39.4588 L 39.3842,-39.4661 L 39.1092,-39.4685 L 38.8341,-39.4661 L 38.5619,-39.4589 + L 38.2924,-39.4468 L 38.0258,-39.4298 L 37.7619,-39.4081 L 37.5008,-39.3815 L 37.2425,-39.3501 L 36.987,-39.3138 + L 36.7343,-39.2727 L 36.4844,-39.2267 L 36.2372,-39.176 L 35.9929,-39.1204 L 35.7513,-39.0599 L 35.5126,-38.9946 + L 35.2766,-38.9245 L 35.0434,-38.8495 L 34.813,-38.7698 L 34.5854,-38.6851 L 34.3606,-38.5957 L 34.1386,-38.5014 + L 33.9194,-38.4022 L 33.703,-38.2983 L 33.4893,-38.1895 L 33.2785,-38.0758 L 33.0704,-37.9573 L 32.8651,-37.834 + L 32.6626,-37.7059 L 32.463,-37.5729 L 32.2661,-37.4351 L 32.072,-37.2924 L 31.8806,-37.1449 L 31.6921,-36.9926 + L 31.5064,-36.8354 L 31.3234,-36.6734 L 31.1433,-36.5066 L 30.9659,-36.3349 L 30.7914,-36.1584 L 30.6196,-35.9771 + L 30.4506,-35.7909 L 30.2844,-35.5999 L 30.121,-35.404 L 29.9604,-35.2033 L 29.8025,-34.9978 L 29.6475,-34.7875 + L 29.4952,-34.5723 L 29.3458,-34.3522 L 29.1993,-34.1276 L 29.0561,-33.8987 L 28.9161,-33.6654 L 28.7793,-33.4278 + L 28.6457,-33.1858 L 28.5154,-32.9395 L 28.3882,-32.6889 L 28.2643,-32.434 L 28.1436,-32.1747 L 28.0261,-31.9111 + L 27.9119,-31.6431 L 27.8008,-31.3708 L 27.693,-31.0942 L 27.5884,-30.8133 L 27.487,-30.528 L 27.3888,-30.2384 + L 27.2939,-29.9444 L 27.2022,-29.6461 L 27.1136,-29.3435 L 27.0284,-29.0366 L 26.9463,-28.7253 L 26.8674,-28.4097 + L 26.7918,-28.0897 L 26.7194,-27.7654 L 26.6502,-27.4368 L 26.5842,-27.1039 L 26.5214,-26.7666 L 26.4619,-26.4249 + L 26.4055,-26.079 L 26.3524,-25.7287 L 26.3025,-25.3741 L 26.2559,-25.0151 L 26.2124,-24.6519 L 26.1722,-24.2842 + L 26.1352,-23.9123 L 26.1014,-23.536 L 26.0708,-23.1554 L 26.0434,-22.7704 L 26.0193,-22.3811 L 25.9984,-21.9875 + L 25.9807,-21.5896 L 25.9662,-21.1873 L 25.9549,-20.7806 L 25.9469,-20.3697 L 25.942,-19.9544 L 25.9404,-19.5348 + L 25.942,-19.1151 L 25.9469,-18.6998 L 25.9549,-18.2887 L 25.9661,-17.8818 L 25.9806,-17.4793 L 25.9982,-17.081 + L 26.0191,-16.687 L 26.0432,-16.2972 L 26.0704,-15.9118 L 26.1009,-15.5305 L 26.1346,-15.1536 L 26.1715,-14.7809 + L 26.2117,-14.4126 L 26.255,-14.0484 L 26.3015,-13.6886 L 26.3513,-13.333 L 26.4043,-12.9817 L 26.4604,-12.6346 + L 26.5198,-12.2919 L 26.5824,-11.9534 L 26.6482,-11.6191 L 26.7172,-11.2892 L 26.7894,-10.9635 L 26.8648,-10.642 + L 26.9435,-10.3249 L 27.0253,-10.012 L 27.1104,-9.7034 L 27.1987,-9.39905 L 27.2901,-9.09898 L 27.3848,-8.80318 + L 27.4827,-8.51164 L 27.5838,-8.22437 L 27.6881,-7.94138 L 27.7957,-7.66266 L 27.9064,-7.38821 L 28.0203,-7.11803 + L 28.1375,-6.85211 L 28.2579,-6.59047 L 28.3814,-6.3331 L 28.5082,-6.08 L 28.6382,-5.83118 L 28.7714,-5.58661 + L 28.9078,-5.34631 L 29.0475,-5.11029 L 29.1903,-4.87856 L 29.3363,-4.65108 L 29.4854,-4.42819 L 29.6372,-4.21021 + L 29.7918,-3.99713 L 29.9492,-3.78894 L 30.1093,-3.58566 L 30.2723,-3.38727 L 30.438,-3.19379 L 30.6065,-3.00519 + L 30.7778,-2.8215 L 30.9519,-2.6427 L 31.1288,-2.46881 L 31.3084,-2.29982 L 31.4908,-2.13573 L 31.676,-1.97653 + L 31.864,-1.82222 L 32.0548,-1.67281 L 32.2483,-1.52831 L 32.4446,-1.38872 L 32.6438,-1.254 L 32.8457,-1.12419 + L 33.0503,-0.999283 L 33.2578,-0.879272 L 33.468,-0.76416 L 33.6811,-0.653946 L 33.8969,-0.54863 L 34.1154,-0.448212 + L 34.3368,-0.352692 L 34.561,-0.26207 L 34.7879,-0.176346 L 35.0176,-0.09552 L 35.2501,-0.0195923 L 35.4854,0.0513916 + L 35.7234,0.117523 L 35.9643,0.178757 L 36.2079,0.235092 L 36.4543,0.28653 L 36.7035,0.333054 L 36.9555,0.374695 + L 37.2102,0.411438 L 37.4677,0.443283 L 37.728,0.470215 L 37.9911,0.492264 L 38.257,0.509399 L 38.5257,0.521652 + L 38.7971,0.528992 L 39.0714,0.531448 z +M 38.9204,-6.38026 L 38.7711,-6.38495 L 38.6235,-6.39273 L 38.4775,-6.40364 L 38.3331,-6.41765 L 38.1904,-6.43478 + L 38.0493,-6.45503 L 37.9099,-6.47839 L 37.772,-6.50487 L 37.6359,-6.53445 L 37.5014,-6.56717 L 37.3685,-6.603 + L 37.2372,-6.64194 L 37.1076,-6.68399 L 36.9797,-6.72917 L 36.8533,-6.77745 L 36.7287,-6.82884 L 36.6056,-6.88336 + L 36.4842,-6.94098 L 36.3645,-7.00172 L 36.2463,-7.0656 L 36.1299,-7.13257 L 36.015,-7.20265 L 35.9018,-7.27586 + L 35.7903,-7.35219 L 35.6803,-7.43161 L 35.5721,-7.51416 L 35.4654,-7.59984 L 35.3604,-7.68861 L 35.2571,-7.7805 + L 35.1553,-7.87552 L 35.0553,-7.97363 L 34.9568,-8.07489 L 34.86,-8.17924 L 34.7649,-8.28671 L 34.6714,-8.39729 + L 34.5795,-8.511 L 34.4893,-8.62781 L 34.4007,-8.74774 L 34.3137,-8.87079 L 34.2284,-8.99695 L 34.1447,-9.12624 + L 34.0627,-9.25862 L 33.9823,-9.39413 L 33.9035,-9.53276 L 33.8264,-9.6745 L 33.751,-9.81931 L 33.6772,-9.96716 + L 33.6051,-10.118 L 33.5346,-10.272 L 33.4658,-10.429 L 33.3986,-10.589 L 33.3331,-10.752 L 33.2693,-10.9181 + L 33.2071,-11.0872 L 33.1466,-11.2594 L 33.0877,-11.4346 L 33.0305,-11.6129 L 32.9749,-11.7942 L 32.921,-11.9785 + L 32.8688,-12.1658 L 32.8182,-12.3563 L 32.7693,-12.5497 L 32.722,-12.7462 L 32.6764,-12.9457 L 32.6325,-13.1483 + L 32.5902,-13.3539 L 32.5496,-13.5625 L 32.5106,-13.7742 L 32.4733,-13.989 L 32.4377,-14.2067 L 32.4037,-14.4275 + L 32.3713,-14.6514 L 32.3407,-14.8782 L 32.3116,-15.1082 L 32.2843,-15.3411 L 32.2586,-15.5771 L 32.2345,-15.8161 + L 32.2121,-16.0582 L 32.1914,-16.3033 L 32.1723,-16.5515 L 32.1549,-16.8027 L 32.1392,-17.0569 L 32.1251,-17.3142 + L 32.1126,-17.5745 L 32.1019,-17.8379 L 32.0927,-18.1043 L 32.0853,-18.3737 L 32.0795,-18.6462 L 32.0753,-18.9217 + L 32.0728,-19.2003 L 32.072,-19.4819 L 32.0729,-19.7635 L 32.0754,-20.042 L 32.0796,-20.3176 L 32.0854,-20.5901 + L 32.093,-20.8596 L 32.1022,-21.1261 L 32.1131,-21.3895 L 32.1257,-21.6499 L 32.1399,-21.9073 L 32.1558,-22.1616 + L 32.1734,-22.4129 L 32.1927,-22.6612 L 32.2137,-22.9065 L 32.2363,-23.1488 L 32.2606,-23.388 L 32.2866,-23.6242 + L 32.3142,-23.8573 L 32.3436,-24.0875 L 32.3746,-24.3146 L 32.4072,-24.5387 L 32.4416,-24.7597 L 32.4776,-24.9777 + L 32.5154,-25.1927 L 32.5547,-25.4047 L 32.5958,-25.6136 L 32.6385,-25.8196 L 32.683,-26.0224 L 32.729,-26.2223 + L 32.7768,-26.4191 L 32.8263,-26.613 L 32.8774,-26.8037 L 32.9302,-26.9915 L 32.9847,-27.1762 L 33.0408,-27.3579 + L 33.0986,-27.5366 L 33.1582,-27.7122 L 33.2193,-27.8848 L 33.2822,-28.0544 L 33.3467,-28.221 L 33.4129,-28.3845 + L 33.4808,-28.545 L 33.5504,-28.7025 L 33.6216,-28.857 L 33.6945,-29.0084 L 33.7691,-29.1568 L 33.8454,-29.3022 + L 33.9233,-29.4445 L 34.0028,-29.5836 L 34.084,-29.7197 L 34.1668,-29.8526 L 34.2512,-29.9824 L 34.3372,-30.1091 + L 34.4249,-30.2327 L 34.5142,-30.3531 L 34.6051,-30.4704 L 34.6976,-30.5845 L 34.7918,-30.6955 L 34.8875,-30.8035 + L 34.9849,-30.9082 L 35.084,-31.0099 L 35.1846,-31.1084 L 35.2869,-31.2038 L 35.3907,-31.2961 L 35.4962,-31.3852 + L 35.6034,-31.4712 L 35.7121,-31.5541 L 35.8225,-31.6339 L 35.9345,-31.7105 L 36.0481,-31.784 L 36.1634,-31.8544 + L 36.2802,-31.9216 L 36.3987,-31.9857 L 36.5188,-32.0467 L 36.6406,-32.1046 L 36.7639,-32.1593 L 36.8889,-32.2109 + L 37.0155,-32.2594 L 37.1437,-32.3047 L 37.2736,-32.347 L 37.405,-32.3861 L 37.5381,-32.422 L 37.6728,-32.4549 + L 37.8092,-32.4846 L 37.9471,-32.5112 L 38.0867,-32.5346 L 38.2279,-32.555 L 38.3707,-32.5722 L 38.5152,-32.5862 + L 38.6612,-32.5972 L 38.8089,-32.605 L 38.9583,-32.6097 L 39.1092,-32.6113 L 39.4086,-32.6051 L 39.7014,-32.5864 + L 39.9876,-32.5554 L 40.2673,-32.512 L 40.5404,-32.4561 L 40.8069,-32.3879 L 41.0668,-32.3072 L 41.3201,-32.2141 + L 41.5669,-32.1087 L 41.807,-31.9908 L 42.0406,-31.8605 L 42.2676,-31.7178 L 42.4881,-31.5627 L 42.7019,-31.3951 + L 42.9092,-31.2152 L 43.1099,-31.0228 L 43.304,-30.8181 L 43.4915,-30.6009 L 43.6725,-30.3713 L 43.8469,-30.1293 + L 44.0147,-29.8749 L 44.1759,-29.6081 L 44.3305,-29.3289 L 44.4786,-29.0373 L 44.62,-28.7332 L 44.7549,-28.4168 + L 44.8832,-28.0879 L 45.005,-27.7467 L 45.1201,-27.393 L 45.2287,-27.0269 L 45.3307,-26.6484 L 45.4261,-26.2575 + L 45.5149,-25.8542 L 45.5972,-25.4385 L 45.6729,-25.0103 L 45.7419,-24.5698 L 45.8045,-24.1169 L 45.8604,-23.6515 + L 45.9097,-23.1737 L 45.9525,-22.6835 L 45.9887,-22.181 L 46.0183,-21.666 L 46.0414,-21.1385 L 46.0578,-20.5987 + L 46.0677,-20.0465 L 46.071,-19.4819 L 46.0676,-18.9184 L 46.0577,-18.3672 L 46.0412,-17.8285 L 46.018,-17.3021 + L 45.9883,-16.7881 L 45.9519,-16.2866 L 45.9089,-15.7974 L 45.8593,-15.3206 L 45.803,-14.8561 L 45.7402,-14.4041 + L 45.6707,-13.9644 L 45.5946,-13.5371 L 45.5119,-13.1223 L 45.4226,-12.7197 L 45.3267,-12.3296 L 45.2241,-11.9519 + L 45.115,-11.5865 L 44.9992,-11.2336 L 44.8768,-10.893 L 44.7478,-10.5648 L 44.6122,-10.249 L 44.4699,-9.94554 + L 44.3211,-9.6545 L 44.1656,-9.37584 L 44.0035,-9.10956 L 43.8348,-8.85568 L 43.6595,-8.61418 L 43.4775,-8.38506 + L 43.289,-8.16832 L 43.0938,-7.96396 L 42.892,-7.772 L 42.6836,-7.59244 L 42.4686,-7.42523 L 42.247,-7.27042 + L 42.0187,-7.12799 L 41.7839,-6.99796 L 41.5424,-6.88029 L 41.2943,-6.77502 L 41.0396,-6.68214 L 40.7782,-6.60164 + L 40.5103,-6.53352 L 40.2357,-6.4778 L 39.9546,-6.43443 L 39.6668,-6.40349 L 39.3724,-6.3849 L 39.0714,-6.37872 + z +M 9.3199,-13.8208 L 11.8291,-13.8208 L 12.0511,-13.8223 L 12.2709,-13.827 L 12.4885,-13.8349 L 12.7038,-13.8459 + L 12.9169,-13.86 L 13.1279,-13.8773 L 13.3365,-13.8977 L 13.543,-13.9212 L 13.7473,-13.9479 L 13.9493,-13.9778 + L 14.1491,-14.0107 L 14.3467,-14.0468 L 14.542,-14.0861 L 14.7352,-14.1285 L 14.9261,-14.174 L 15.1148,-14.2227 + L 15.3013,-14.2745 L 15.4855,-14.3294 L 15.6676,-14.3875 L 15.8474,-14.4487 L 16.025,-14.5131 L 16.2004,-14.5806 + L 16.3736,-14.6513 L 16.5445,-14.7251 L 16.7132,-14.802 L 16.8797,-14.882 L 17.044,-14.9653 L 17.2061,-15.0516 + L 17.3659,-15.1411 L 17.5235,-15.2337 L 17.6789,-15.3295 L 17.8321,-15.4284 L 17.9831,-15.5305 L 18.1318,-15.6356 + L 18.2783,-15.744 L 18.4226,-15.8554 L 18.5647,-15.97 L 18.7046,-16.0878 L 18.8422,-16.2087 L 18.9776,-16.3327 + L 19.1108,-16.4599 L 19.2418,-16.5902 L 19.3705,-16.7236 L 19.4971,-16.8602 L 19.6214,-16.9999 L 19.7435,-17.1428 + L 19.8632,-17.2886 L 19.9802,-17.4373 L 20.0947,-17.5887 L 20.2065,-17.7429 L 20.3156,-17.8999 L 20.4221,-18.0597 + L 20.526,-18.2223 L 20.6273,-18.3876 L 20.726,-18.5558 L 20.822,-18.7267 L 20.9153,-18.9005 L 21.0061,-19.077 + L 21.0942,-19.2563 L 21.1797,-19.4384 L 21.2626,-19.6232 L 21.3428,-19.8109 L 21.4204,-20.0014 L 21.4954,-20.1946 + L 21.5677,-20.3906 L 21.6374,-20.5894 L 21.7045,-20.7911 L 21.7689,-20.9955 L 21.8307,-21.2026 L 21.8899,-21.4126 + L 21.9465,-21.6254 L 22.0004,-21.8409 L 22.0517,-22.0592 L 22.1004,-22.2804 L 22.1464,-22.5043 L 22.1898,-22.731 + L 22.2306,-22.9605 L 22.2687,-23.1927 L 22.3042,-23.4278 L 22.3371,-23.6657 L 22.3673,-23.9063 L 22.395,-24.1497 + L 22.42,-24.396 L 22.4423,-24.645 L 22.462,-24.8967 L 22.4791,-25.1513 L 22.4936,-25.4087 L 22.5054,-25.6688 + L 22.5146,-25.9318 L 22.5212,-26.1975 L 22.5252,-26.466 L 22.5265,-26.7374 L 22.5253,-26.9983 L 22.5215,-27.2563 + L 22.5154,-27.5116 L 22.5067,-27.764 L 22.4956,-28.0136 L 22.482,-28.2604 L 22.466,-28.5044 L 22.4474,-28.7455 + L 22.4265,-28.9838 L 22.403,-29.2192 L 22.3771,-29.4519 L 22.3487,-29.6817 L 22.3178,-29.9087 L 22.2845,-30.1329 + L 22.2486,-30.3542 L 22.2104,-30.5727 L 22.1696,-30.7884 L 22.1264,-31.0013 L 22.0807,-31.2113 L 22.0325,-31.4185 + L 21.9819,-31.6229 L 21.9288,-31.8244 L 21.8732,-32.0232 L 21.8152,-32.2191 L 21.7547,-32.4121 L 21.6917,-32.6024 + L 21.6263,-32.7898 L 21.5583,-32.9744 L 21.4879,-33.1562 L 21.4151,-33.3351 L 21.3398,-33.5112 L 21.262,-33.6845 + L 21.1817,-33.855 L 21.099,-34.0226 L 21.0138,-34.1874 L 20.9261,-34.3494 L 20.8359,-34.5086 L 20.7433,-34.6649 + L 20.6482,-34.8184 L 20.5507,-34.9691 L 20.4507,-35.1169 L 20.3482,-35.2619 L 20.2432,-35.4041 L 20.1358,-35.5435 + L 20.0259,-35.68 L 19.9135,-35.8138 L 19.7988,-35.9446 L 19.6817,-36.0726 L 19.5624,-36.1978 L 19.4409,-36.32 + L 19.317,-36.4394 L 19.1909,-36.5559 L 19.0625,-36.6695 L 18.9319,-36.7803 L 18.7989,-36.8881 L 18.6637,-36.9931 + L 18.5262,-37.0952 L 18.3865,-37.1945 L 18.2445,-37.2908 L 18.1002,-37.3843 L 17.9536,-37.4749 L 17.8047,-37.5627 + L 17.6536,-37.6475 L 17.5002,-37.7295 L 17.3446,-37.8086 L 17.1866,-37.8849 L 17.0264,-37.9582 L 16.8639,-38.0287 + L 16.6991,-38.0963 L 16.5321,-38.161 L 16.3628,-38.2228 L 16.1912,-38.2818 L 16.0173,-38.3379 L 15.8412,-38.3911 + L 15.6628,-38.4415 L 15.4821,-38.4889 L 15.2992,-38.5335 L 15.1139,-38.5752 L 14.9264,-38.6141 L 14.7367,-38.65 + L 14.5446,-38.6831 L 14.3503,-38.7133 L 14.1537,-38.7406 L 13.9548,-38.7651 L 13.7537,-38.7867 L 13.5503,-38.8053 + L 13.3446,-38.8212 L 13.1366,-38.8341 L 12.9264,-38.8442 L 12.7139,-38.8514 L 12.4991,-38.8557 L 12.2821,-38.8571 + L 3.47156,-38.8571 L 3.47156,-0 L 9.3199,-0 z +M 9.3199,-20.5714 L 9.3199,-32.1065 L 11.9802,-32.1065 L 12.0838,-32.1058 L 12.1861,-32.1038 L 12.2873,-32.1006 + L 12.3873,-32.096 L 12.486,-32.0901 L 12.5836,-32.0829 L 12.6799,-32.0744 L 12.7751,-32.0646 L 12.869,-32.0535 + L 12.9617,-32.0411 L 13.0533,-32.0274 L 13.1436,-32.0124 L 13.2327,-31.996 L 13.3207,-31.9784 L 13.4074,-31.9595 + L 13.4929,-31.9392 L 13.5772,-31.9176 L 13.6603,-31.8948 L 13.7422,-31.8706 L 13.8229,-31.8451 L 13.9025,-31.8183 + L 13.9807,-31.7903 L 14.0578,-31.7609 L 14.1337,-31.7302 L 14.2084,-31.6981 L 14.2819,-31.6648 L 14.3542,-31.6302 + L 14.4252,-31.5943 L 14.4951,-31.557 L 14.5638,-31.5185 L 14.6312,-31.4786 L 14.6975,-31.4375 L 14.7626,-31.395 + L 14.8264,-31.3513 L 14.8891,-31.3062 L 14.9505,-31.2598 L 15.0108,-31.2121 L 15.0698,-31.1631 L 15.1276,-31.1128 + L 15.1842,-31.0612 L 15.2397,-31.0083 L 15.2939,-30.9541 L 15.3469,-30.8985 L 15.3988,-30.8417 L 15.4494,-30.7836 + L 15.4988,-30.7241 L 15.5471,-30.6633 L 15.5943,-30.6011 L 15.6404,-30.5374 L 15.6855,-30.4723 L 15.7296,-30.4058 + L 15.7725,-30.3378 L 15.8144,-30.2684 L 15.8553,-30.1976 L 15.8951,-30.1253 L 15.9338,-30.0516 L 15.9715,-29.9765 + L 16.0081,-29.8999 L 16.0436,-29.822 L 16.0781,-29.7426 L 16.1115,-29.6617 L 16.1439,-29.5794 L 16.1752,-29.4957 + L 16.2054,-29.4106 L 16.2346,-29.324 L 16.2627,-29.236 L 16.2898,-29.1465 L 16.3158,-29.0556 L 16.3407,-28.9633 + L 16.3646,-28.8696 L 16.3874,-28.7744 L 16.4092,-28.6778 L 16.4299,-28.5798 L 16.4495,-28.4803 L 16.468,-28.3794 + L 16.4855,-28.2771 L 16.502,-28.1733 L 16.5174,-28.0681 L 16.5317,-27.9615 L 16.545,-27.8534 L 16.5572,-27.7439 + L 16.5683,-27.633 L 16.5784,-27.5206 L 16.5874,-27.4068 L 16.5954,-27.2916 L 16.6023,-27.175 L 16.6081,-27.0569 + L 16.6129,-26.9374 L 16.6166,-26.8164 L 16.6192,-26.694 L 16.6208,-26.5702 L 16.6214,-26.445 L 16.6207,-26.3208 + L 16.6189,-26.198 L 16.6157,-26.0764 L 16.6113,-25.9561 L 16.6055,-25.8372 L 16.5986,-25.7195 L 16.5903,-25.6031 + L 16.5809,-25.488 L 16.5701,-25.3742 L 16.5581,-25.2617 L 16.5448,-25.1505 L 16.5302,-25.0406 L 16.5144,-24.932 + L 16.4973,-24.8246 L 16.4789,-24.7186 L 16.4593,-24.6139 L 16.4384,-24.5104 L 16.4162,-24.4083 L 16.3928,-24.3074 + L 16.3681,-24.2078 L 16.3422,-24.1096 L 16.315,-24.0126 L 16.2865,-23.9169 L 16.2567,-23.8225 L 16.2257,-23.7294 + L 16.1934,-23.6376 L 16.1599,-23.5471 L 16.125,-23.4578 L 16.089,-23.3699 L 16.0516,-23.2833 L 16.013,-23.1979 + L 15.9731,-23.1139 L 15.9319,-23.0311 L 15.8895,-22.9496 L 15.8458,-22.8695 L 15.8009,-22.7906 L 15.7547,-22.713 + L 15.7072,-22.6367 L 15.6585,-22.5617 L 15.6084,-22.488 L 15.5572,-22.4156 L 15.5046,-22.3445 L 15.4508,-22.2747 + L 15.3957,-22.2061 L 15.3394,-22.1389 L 15.2818,-22.0729 L 15.2229,-22.0084 L 15.1627,-21.9452 L 15.1013,-21.8835 + L 15.0385,-21.8232 L 14.9745,-21.7643 L 14.9092,-21.7068 L 14.8426,-21.6507 L 14.7747,-21.5961 L 14.7056,-21.5429 + L 14.6351,-21.4911 L 14.5634,-21.4407 L 14.4904,-21.3917 L 14.4161,-21.3442 L 14.3405,-21.2981 L 14.2637,-21.2534 + L 14.1855,-21.2101 L 14.1061,-21.1682 L 14.0254,-21.1277 L 13.9434,-21.0887 L 13.8601,-21.0511 L 13.7756,-21.0149 + L 13.6897,-20.9802 L 13.6026,-20.9468 L 13.5142,-20.9149 L 13.4245,-20.8844 L 13.3335,-20.8553 L 13.2413,-20.8276 + L 13.1477,-20.8013 L 13.0529,-20.7765 L 12.9568,-20.7531 L 12.8594,-20.7311 L 12.7607,-20.7105 L 12.6607,-20.6914 + L 12.5595,-20.6736 L 12.4569,-20.6573 L 12.3531,-20.6424 L 12.248,-20.6289 L 12.1416,-20.6169 L 12.034,-20.6062 + L 11.925,-20.597 L 11.8148,-20.5892 L 11.7032,-20.5828 L 11.5904,-20.5778 L 11.4763,-20.5743 L 11.361,-20.5721 + L 11.2443,-20.5714 z +M 78.4716,-38.8571 L 72.5665,-38.8571 L 67.3405,-15.7342 L 67.2884,-15.4701 L 67.2374,-15.2095 L 67.1872,-14.9524 + L 67.138,-14.6988 L 67.0898,-14.4486 L 67.0425,-14.2019 L 66.9961,-13.9586 L 66.9507,-13.7189 L 66.9062,-13.4825 + L 66.8627,-13.2497 L 66.8202,-13.0203 L 66.7785,-12.7944 L 66.7379,-12.5719 L 66.6981,-12.353 L 66.6593,-12.1375 + L 66.6215,-11.9254 L 66.5846,-11.7168 L 66.5486,-11.5117 L 66.5136,-11.3101 L 66.4795,-11.1119 L 66.4464,-10.9172 + L 66.4142,-10.7259 L 66.383,-10.5381 L 66.3527,-10.3538 L 66.3233,-10.1729 L 66.295,-9.99556 L 66.2675,-9.82166 + L 66.241,-9.6512 L 66.2154,-9.48422 L 66.1908,-9.32071 L 66.1671,-9.16066 L 66.1444,-9.00407 L 66.1226,-8.85095 + L 66.1018,-8.70131 L 66.0819,-8.55511 L 66.063,-8.41241 L 66.045,-8.27315 L 66.0279,-8.13737 L 66.0118,-8.00505 + L 65.9966,-7.87621 L 65.9824,-7.75082 L 65.9691,-7.62891 L 65.9568,-7.51045 L 65.9454,-7.39548 L 65.935,-7.28397 + L 65.9255,-7.1759 L 65.9204,-7.22293 L 65.9149,-7.2715 L 65.9092,-7.32167 L 65.9031,-7.37338 L 65.8967,-7.42668 + L 65.89,-7.48155 L 65.8829,-7.53798 L 65.8755,-7.59599 L 65.8678,-7.65555 L 65.8597,-7.71671 L 65.8513,-7.7794 + L 65.8426,-7.8437 L 65.8336,-7.90955 L 65.8242,-7.97696 L 65.8145,-8.04596 L 65.8045,-8.11652 L 65.7941,-8.18863 + L 65.7834,-8.26234 L 65.7724,-8.33762 L 65.761,-8.41444 L 65.7493,-8.49286 L 65.7373,-8.57283 L 65.7249,-8.65437 + L 65.7122,-8.73749 L 65.6992,-8.82219 L 65.6859,-8.90845 L 65.6722,-8.99626 L 65.6582,-9.08566 L 65.6439,-9.17662 + L 65.6293,-9.26915 L 65.6143,-9.36325 L 65.599,-9.45894 L 65.5833,-9.55618 L 65.5673,-9.655 L 65.551,-9.75537 + L 65.5344,-9.85733 L 65.5174,-9.96085 L 65.5001,-10.0659 L 65.4825,-10.1726 L 65.4645,-10.2808 L 65.4462,-10.3906 + L 65.4276,-10.502 L 65.4087,-10.6149 L 65.3894,-10.7294 L 65.3698,-10.8455 L 65.3298,-11.0813 L 65.3097,-11.1988 + L 65.2897,-11.3156 L 65.2697,-11.4318 L 65.2497,-11.5474 L 65.2298,-11.6623 L 65.2098,-11.7766 L 65.19,-11.8903 + L 65.1701,-12.0033 L 65.1503,-12.1156 L 65.1304,-12.2274 L 65.1107,-12.3385 L 65.0909,-12.4489 L 65.0712,-12.5587 + L 65.0515,-12.6678 L 65.0318,-12.7764 L 65.0121,-12.8842 L 64.9925,-12.9915 L 64.9729,-13.0981 L 64.9534,-13.2041 + L 64.9338,-13.3094 L 64.9143,-13.414 L 64.8948,-13.5181 L 64.8754,-13.6215 L 64.8559,-13.7242 L 64.8365,-13.8264 + L 64.8171,-13.9278 L 64.7978,-14.0287 L 64.7784,-14.1289 L 64.7591,-14.2284 L 64.7399,-14.3273 L 64.7206,-14.4256 + L 64.7014,-14.5232 L 64.6822,-14.6202 L 64.663,-14.7166 L 64.6439,-14.8123 L 64.6248,-14.9074 L 64.6057,-15.0018 + L 64.5866,-15.0956 L 64.5676,-15.1887 L 64.5486,-15.2812 L 64.5296,-15.3731 L 64.5107,-15.4643 L 64.4918,-15.5549 + L 64.4729,-15.6449 L 64.454,-15.7342 L 59.2656,-38.8571 L 53.3604,-38.8571 L 62.7182,-0 L 69.0952,-0 z -M 38.9199,-6.36894 L 38.7631,-6.37392 L 38.6082,-6.38222 L 38.4553,-6.39383 L 38.3042,-6.40877 L 38.155,-6.42702 - L 38.0078,-6.44856 L 37.8624,-6.47345 L 37.7189,-6.50166 L 37.5773,-6.53317 L 37.4377,-6.56801 L 37.2999,-6.60616 - L 37.164,-6.64763 L 37.0301,-6.69241 L 36.898,-6.74052 L 36.7678,-6.79195 L 36.6395,-6.84669 L 36.5132,-6.90474 - L 36.3887,-6.96613 L 36.2661,-7.03082 L 36.1454,-7.09883 L 36.0266,-7.17017 L 35.9098,-7.24481 L 35.7948,-7.32277 - L 35.6817,-7.40404 L 35.5705,-7.48865 L 35.4612,-7.57657 L 35.3539,-7.6678 L 35.2484,-7.76236 L 35.1448,-7.86021 - L 35.0431,-7.96141 L 34.9433,-8.06592 L 34.8454,-8.17374 L 34.7495,-8.28488 L 34.6554,-8.39934 L 34.5632,-8.51711 - L 34.4729,-8.63821 L 34.3845,-8.76262 L 34.298,-8.89035 L 34.2134,-9.02141 L 34.1307,-9.15576 L 34.0499,-9.29344 - L 33.9711,-9.43443 L 33.8941,-9.57875 L 33.819,-9.72639 L 33.7458,-9.87735 L 33.6743,-10.0312 L 33.6044,-10.1875 - L 33.5361,-10.3462 L 33.4694,-10.5074 L 33.4042,-10.671 L 33.3406,-10.8371 L 33.2786,-11.0056 L 33.2181,-11.1765 - L 33.1592,-11.3499 L 33.1019,-11.5258 L 33.0461,-11.7041 L 32.9919,-11.8848 L 32.9393,-12.0679 L 32.8883,-12.2535 - L 32.8388,-12.4416 L 32.7909,-12.6321 L 32.7446,-12.825 L 32.6998,-13.0204 L 32.6566,-13.2182 L 32.615,-13.4185 - L 32.575,-13.6212 L 32.5365,-13.8263 L 32.4996,-14.0339 L 32.4643,-14.244 L 32.4305,-14.4564 L 32.3983,-14.6714 - L 32.3677,-14.8887 L 32.3386,-15.1085 L 32.3111,-15.3308 L 32.2852,-15.5555 L 32.2609,-15.7826 L 32.2381,-16.0122 - L 32.2169,-16.2442 L 32.1973,-16.4787 L 32.1792,-16.7156 L 32.1627,-16.9549 L 32.1478,-17.1967 L 32.1345,-17.4409 - L 32.1227,-17.6876 L 32.1125,-17.9367 L 32.1038,-18.1883 L 32.0968,-18.4423 L 32.0913,-18.6988 L 32.0873,-18.9577 - L 32.085,-19.219 L 32.0842,-19.4828 L 32.085,-19.7489 L 32.0873,-20.0125 L 32.0913,-20.2736 L 32.0968,-20.5322 - L 32.1038,-20.7882 L 32.1125,-21.0417 L 32.1227,-21.2927 L 32.1345,-21.5412 L 32.1478,-21.7872 L 32.1627,-22.0306 - L 32.1792,-22.2715 L 32.1973,-22.5099 L 32.2169,-22.7458 L 32.2381,-22.9791 L 32.2609,-23.21 L 32.2852,-23.4383 - L 32.3111,-23.6641 L 32.3386,-23.8873 L 32.3677,-24.1081 L 32.3983,-24.3263 L 32.4305,-24.542 L 32.4643,-24.7552 - L 32.4996,-24.9659 L 32.5365,-25.1741 L 32.575,-25.3797 L 32.615,-25.5828 L 32.6566,-25.7834 L 32.6998,-25.9814 - L 32.7446,-26.177 L 32.7909,-26.37 L 32.8388,-26.5605 L 32.8883,-26.7485 L 32.9393,-26.934 L 32.9919,-27.1169 - L 33.0461,-27.2973 L 33.1019,-27.4752 L 33.1592,-27.6506 L 33.2181,-27.8235 L 33.2786,-27.9938 L 33.3406,-28.1617 - L 33.4042,-28.3269 L 33.4694,-28.4897 L 33.5361,-28.65 L 33.6044,-28.8077 L 33.6743,-28.9629 L 33.7458,-29.1156 - L 33.819,-29.2654 L 33.8941,-29.4119 L 33.9712,-29.5551 L 34.0502,-29.695 L 34.1312,-29.8316 L 34.2141,-29.965 - L 34.2989,-30.095 L 34.3857,-30.2218 L 34.4744,-30.3452 L 34.565,-30.4654 L 34.6576,-30.5822 L 34.7521,-30.6958 - L 34.8485,-30.8061 L 34.9469,-30.9131 L 35.0472,-31.0168 L 35.1495,-31.1172 L 35.2536,-31.2143 L 35.3598,-31.3081 - L 35.4678,-31.3987 L 35.5778,-31.4859 L 35.6898,-31.5699 L 35.8036,-31.6505 L 35.9194,-31.7279 L 36.0372,-31.802 - L 36.1568,-31.8727 L 36.2785,-31.9402 L 36.402,-32.0044 L 36.5275,-32.0653 L 36.6549,-32.1229 L 36.7843,-32.1772 - L 36.9155,-32.2283 L 37.0488,-32.276 L 37.1839,-32.3205 L 37.321,-32.3616 L 37.4601,-32.3995 L 37.601,-32.434 - L 37.7439,-32.4653 L 37.8888,-32.4933 L 38.0356,-32.518 L 38.1843,-32.5394 L 38.3349,-32.5575 L 38.4875,-32.5723 - L 38.642,-32.5838 L 38.7985,-32.5921 L 38.9569,-32.597 L 39.1172,-32.5986 L 39.2775,-32.597 L 39.4359,-32.5921 - L 39.5922,-32.5838 L 39.7466,-32.5723 L 39.899,-32.5575 L 40.0494,-32.5394 L 40.1979,-32.518 L 40.3444,-32.4933 - L 40.4889,-32.4653 L 40.6315,-32.434 L 40.7721,-32.3995 L 40.9107,-32.3616 L 41.0473,-32.3205 L 41.182,-32.276 - L 41.3147,-32.2283 L 41.4454,-32.1772 L 41.5741,-32.1229 L 41.7009,-32.0653 L 41.8257,-32.0044 L 41.9485,-31.9402 - L 42.0694,-31.8727 L 42.1882,-31.802 L 42.3052,-31.7279 L 42.4201,-31.6505 L 42.5331,-31.5699 L 42.644,-31.4859 - L 42.7531,-31.3987 L 42.8601,-31.3081 L 42.9652,-31.2143 L 43.0683,-31.1172 L 43.1694,-31.0168 L 43.2686,-30.9131 - L 43.3658,-30.8061 L 43.461,-30.6958 L 43.5542,-30.5822 L 43.6455,-30.4654 L 43.7348,-30.3452 L 43.8221,-30.2218 - L 43.9075,-30.095 L 43.9909,-29.965 L 44.0723,-29.8316 L 44.1517,-29.695 L 44.2292,-29.5551 L 44.3047,-29.4119 - L 44.3782,-29.2654 L 44.4497,-29.1156 L 44.5195,-28.9629 L 44.5878,-28.8077 L 44.6545,-28.65 L 44.7197,-28.4897 - L 44.7834,-28.3269 L 44.8455,-28.1617 L 44.9061,-27.9938 L 44.9652,-27.8235 L 45.0228,-27.6506 L 45.0787,-27.4752 - L 45.1332,-27.2973 L 45.1861,-27.1169 L 45.2375,-26.934 L 45.2874,-26.7485 L 45.3357,-26.5605 L 45.3825,-26.37 - L 45.4278,-26.177 L 45.4715,-25.9814 L 45.5137,-25.7834 L 45.5544,-25.5828 L 45.5935,-25.3797 L 45.631,-25.1741 - L 45.6671,-24.9659 L 45.7016,-24.7552 L 45.7346,-24.542 L 45.7661,-24.3263 L 45.796,-24.1081 L 45.8244,-23.8873 - L 45.8512,-23.6641 L 45.8765,-23.4383 L 45.9003,-23.21 L 45.9225,-22.9791 L 45.9433,-22.7458 L 45.9624,-22.5099 - L 45.9801,-22.2715 L 45.9962,-22.0306 L 46.0108,-21.7872 L 46.0238,-21.5412 L 46.0353,-21.2927 L 46.0453,-21.0417 - L 46.0537,-20.7882 L 46.0606,-20.5322 L 46.066,-20.2736 L 46.0698,-20.0125 L 46.0721,-19.7489 L 46.0729,-19.4828 - L 46.0721,-19.219 L 46.0698,-18.9577 L 46.066,-18.6988 L 46.0606,-18.4423 L 46.0537,-18.1883 L 46.0453,-17.9367 - L 46.0353,-17.6876 L 46.0238,-17.4409 L 46.0108,-17.1967 L 45.9962,-16.9549 L 45.9801,-16.7156 L 45.9624,-16.4787 - L 45.9433,-16.2442 L 45.9225,-16.0122 L 45.9003,-15.7826 L 45.8765,-15.5555 L 45.8512,-15.3308 L 45.8244,-15.1085 - L 45.796,-14.8887 L 45.7661,-14.6714 L 45.7346,-14.4564 L 45.7016,-14.244 L 45.6671,-14.0339 L 45.631,-13.8263 - L 45.5935,-13.6212 L 45.5544,-13.4185 L 45.5137,-13.2182 L 45.4715,-13.0204 L 45.4278,-12.825 L 45.3825,-12.6321 - L 45.3357,-12.4416 L 45.2874,-12.2535 L 45.2375,-12.0679 L 45.1861,-11.8848 L 45.1332,-11.7041 L 45.0787,-11.5258 - L 45.0228,-11.3499 L 44.9652,-11.1765 L 44.9061,-11.0056 L 44.8455,-10.8371 L 44.7834,-10.671 L 44.7197,-10.5074 - L 44.6545,-10.3462 L 44.5878,-10.1875 L 44.5195,-10.0312 L 44.4497,-9.87735 L 44.3782,-9.72639 L 44.3046,-9.57875 - L 44.229,-9.43443 L 44.1514,-9.29344 L 44.0718,-9.15576 L 43.9902,-9.02141 L 43.9066,-8.89035 L 43.821,-8.76262 - L 43.7333,-8.63821 L 43.6437,-8.51711 L 43.552,-8.39934 L 43.4584,-8.28488 L 43.3627,-8.17374 L 43.265,-8.06592 - L 43.1653,-7.96141 L 43.0636,-7.86021 L 42.9599,-7.76236 L 42.8542,-7.6678 L 42.7465,-7.57657 L 42.6367,-7.48865 - L 42.525,-7.40404 L 42.4113,-7.32277 L 42.2955,-7.24481 L 42.1777,-7.17017 L 42.0579,-7.09883 L 41.9362,-7.03082 - L 41.8124,-6.96613 L 41.6866,-6.90474 L 41.5587,-6.84669 L 41.4289,-6.79195 L 41.2971,-6.74052 L 41.1633,-6.69241 - L 41.0274,-6.64763 L 40.8895,-6.60616 L 40.7497,-6.56801 L 40.6078,-6.53317 L 40.4639,-6.50166 L 40.318,-6.47345 - L 40.1701,-6.44856 L 40.0202,-6.42702 L 39.8683,-6.40877 L 39.7144,-6.39383 L 39.5584,-6.38222 L 39.4005,-6.37392 - L 39.2405,-6.36894 L 39.0786,-6.36729 z -M 9.31281,-13.8231 L 11.8246,-13.8231 L 11.9986,-13.824 L 12.1709,-13.8265 L 12.3417,-13.8307 L 12.5108,-13.8367 - L 12.6784,-13.8443 L 12.8444,-13.8537 L 13.0088,-13.8647 L 13.1716,-13.8774 L 13.3328,-13.8919 L 13.4925,-13.908 - L 13.6505,-13.9258 L 13.807,-13.9453 L 13.9618,-13.9665 L 14.1151,-13.9894 L 14.2668,-14.0141 L 14.4169,-14.0404 - L 14.5654,-14.0684 L 14.7124,-14.0981 L 14.8577,-14.1295 L 15.0014,-14.1626 L 15.1436,-14.1974 L 15.2842,-14.2339 - L 15.4231,-14.272 L 15.5605,-14.312 L 15.6964,-14.3535 L 15.8306,-14.3968 L 15.9632,-14.4418 L 16.0942,-14.4885 - L 16.2237,-14.5368 L 16.3515,-14.5869 L 16.4778,-14.6387 L 16.6025,-14.6922 L 16.7256,-14.7473 L 16.8471,-14.8042 - L 16.967,-14.8627 L 17.0854,-14.923 L 17.2021,-14.9849 L 17.3172,-15.0486 L 17.4308,-15.1139 L 17.5428,-15.181 - L 17.6532,-15.2497 L 17.762,-15.3202 L 17.8692,-15.3923 L 17.9748,-15.4661 L 18.0788,-15.5417 L 18.1813,-15.6189 - L 18.2823,-15.6975 L 18.3821,-15.7773 L 18.4806,-15.8581 L 18.5778,-15.94 L 18.6738,-16.0231 L 18.7685,-16.1073 - L 18.862,-16.1925 L 18.9541,-16.2789 L 19.0451,-16.3664 L 19.1348,-16.455 L 19.2232,-16.5446 L 19.3103,-16.6355 - L 19.3962,-16.7273 L 19.4809,-16.8203 L 19.5643,-16.9145 L 19.6464,-17.0097 L 19.7272,-17.106 L 19.8068,-17.2034 - L 19.8852,-17.302 L 19.9622,-17.4016 L 20.0381,-17.5024 L 20.1126,-17.6042 L 20.1859,-17.7072 L 20.2579,-17.8112 - L 20.3287,-17.9164 L 20.3982,-18.0227 L 20.4665,-18.1301 L 20.5335,-18.2386 L 20.5992,-18.3482 L 20.6637,-18.4588 - L 20.7269,-18.5707 L 20.7889,-18.6836 L 20.8495,-18.7976 L 20.909,-18.9127 L 20.9672,-19.0289 L 21.0241,-19.1463 - L 21.0797,-19.2647 L 21.1341,-19.3843 L 21.1873,-19.5049 L 21.2391,-19.6267 L 21.2897,-19.7496 L 21.3391,-19.8735 - L 21.3872,-19.9986 L 21.434,-20.1248 L 21.4796,-20.2521 L 21.5239,-20.3805 L 21.5671,-20.5096 L 21.6094,-20.6392 - L 21.6507,-20.7691 L 21.691,-20.8994 L 21.7304,-21.0301 L 21.7689,-21.1612 L 21.8064,-21.2927 L 21.843,-21.4245 - L 21.8786,-21.5568 L 21.9132,-21.6894 L 21.9469,-21.8224 L 21.9797,-21.9558 L 22.0115,-22.0896 L 22.0424,-22.2238 - L 22.0723,-22.3584 L 22.1013,-22.4933 L 22.1293,-22.6286 L 22.1563,-22.7643 L 22.1824,-22.9004 L 22.2076,-23.0369 - L 22.2318,-23.1738 L 22.2551,-23.3111 L 22.2774,-23.4487 L 22.2988,-23.5868 L 22.3192,-23.7252 L 22.3387,-23.864 - L 22.3572,-24.0032 L 22.3747,-24.1428 L 22.3914,-24.2827 L 22.407,-24.4231 L 22.4217,-24.5638 L 22.4355,-24.7049 - L 22.4483,-24.8464 L 22.4602,-24.9883 L 22.4711,-25.1306 L 22.4811,-25.2733 L 22.4901,-25.4163 L 22.4982,-25.5597 - L 22.5053,-25.7036 L 22.5115,-25.8478 L 22.5167,-25.9924 L 22.521,-26.1373 L 22.5243,-26.2827 L 22.5267,-26.4285 - L 22.5281,-26.5746 L 22.5286,-26.7211 L 22.5274,-26.9661 L 22.5239,-27.2087 L 22.5181,-27.449 L 22.51,-27.6871 - L 22.4996,-27.9229 L 22.4868,-28.1564 L 22.4718,-28.3875 L 22.4544,-28.6165 L 22.4346,-28.8431 L 22.4126,-29.0674 - L 22.3882,-29.2894 L 22.3616,-29.5092 L 22.3326,-29.7267 L 22.3013,-29.9418 L 22.2676,-30.1547 L 22.2317,-30.3653 - L 22.1934,-30.5736 L 22.1528,-30.7796 L 22.1099,-30.9834 L 22.0647,-31.1848 L 22.0172,-31.384 L 21.9673,-31.5808 - L 21.9151,-31.7754 L 21.8606,-31.9677 L 21.8038,-32.1577 L 21.7446,-32.3454 L 21.6832,-32.5308 L 21.6194,-32.7139 - L 21.5533,-32.8948 L 21.4848,-33.0733 L 21.4141,-33.2496 L 21.341,-33.4236 L 21.2656,-33.5953 L 21.1879,-33.7646 - L 21.1079,-33.9318 L 21.0256,-34.0966 L 20.9409,-34.2591 L 20.8539,-34.4194 L 20.7646,-34.5773 L 20.673,-34.733 - L 20.5791,-34.8863 L 20.4828,-35.0374 L 20.3843,-35.1862 L 20.2834,-35.3327 L 20.1801,-35.477 L 20.0746,-35.6189 - L 19.9666,-35.7582 L 19.8558,-35.8943 L 19.7423,-36.0275 L 19.6261,-36.1576 L 19.5072,-36.2846 L 19.3855,-36.4085 - L 19.2612,-36.5294 L 19.1341,-36.6473 L 19.0043,-36.762 L 18.8717,-36.8737 L 18.7365,-36.9824 L 18.5985,-37.088 - L 18.4578,-37.1905 L 18.3144,-37.29 L 18.1683,-37.3864 L 18.0194,-37.4798 L 17.8678,-37.57 L 17.7135,-37.6573 - L 17.5565,-37.7414 L 17.3968,-37.8225 L 17.2343,-37.9006 L 17.0691,-37.9756 L 16.9012,-38.0475 L 16.7306,-38.1163 - L 16.5573,-38.1821 L 16.3812,-38.2449 L 16.2024,-38.3046 L 16.0209,-38.3612 L 15.8367,-38.4148 L 15.6497,-38.4653 - L 15.46,-38.5127 L 15.2677,-38.5571 L 15.0725,-38.5984 L 14.8747,-38.6366 L 14.6741,-38.6718 L 14.4709,-38.704 - L 14.2649,-38.7331 L 14.0562,-38.7591 L 13.8447,-38.782 L 13.6306,-38.8019 L 13.4137,-38.8188 L 13.1941,-38.8325 - L 12.9717,-38.8432 L 12.7467,-38.8509 L 12.5189,-38.8555 L 12.2884,-38.857 L 3.47783,-38.857 L 3.47783,-0 - L 9.31281,-0 z -M 9.31281,-20.5713 L 9.31281,-32.1089 L 11.9793,-32.1089 L 12.1787,-32.1062 L 12.3738,-32.0981 L 12.5644,-32.0848 - L 12.7507,-32.066 L 12.9326,-32.042 L 13.1101,-32.0125 L 13.2832,-31.9778 L 13.4519,-31.9377 L 13.6163,-31.8922 - L 13.7762,-31.8414 L 13.9318,-31.7852 L 14.083,-31.7237 L 14.2299,-31.6568 L 14.3723,-31.5846 L 14.5104,-31.507 - L 14.644,-31.4241 L 14.7733,-31.3358 L 14.8982,-31.2422 L 15.0188,-31.1432 L 15.1349,-31.0389 L 15.2467,-30.9292 - L 15.354,-30.8142 L 15.457,-30.6938 L 15.5556,-30.5681 L 15.6499,-30.437 L 15.7397,-30.3006 L 15.8252,-30.1589 - L 15.9062,-30.0117 L 15.9829,-29.8593 L 16.0553,-29.7015 L 16.1232,-29.5383 L 16.1868,-29.3698 L 16.2459,-29.1959 - L 16.3007,-29.0167 L 16.3511,-28.8321 L 16.3971,-28.6422 L 16.4388,-28.4469 L 16.476,-28.2463 L 16.5089,-28.0403 - L 16.5374,-27.829 L 16.5615,-27.6124 L 16.5812,-27.3904 L 16.5965,-27.163 L 16.6075,-26.9303 L 16.6141,-26.6922 - L 16.6163,-26.4488 L 16.6156,-26.3147 L 16.6135,-26.1823 L 16.6101,-26.0515 L 16.6053,-25.9223 L 16.5991,-25.7947 - L 16.5916,-25.6687 L 16.5827,-25.5444 L 16.5724,-25.4216 L 16.5608,-25.3005 L 16.5478,-25.181 L 16.5334,-25.0632 - L 16.5176,-24.9469 L 16.5005,-24.8323 L 16.482,-24.7193 L 16.4622,-24.6079 L 16.4409,-24.4982 L 16.4184,-24.39 - L 16.3944,-24.2835 L 16.369,-24.1786 L 16.3423,-24.0753 L 16.3143,-23.9737 L 16.2848,-23.8736 L 16.254,-23.7752 - L 16.2218,-23.6784 L 16.1883,-23.5832 L 16.1533,-23.4897 L 16.1171,-23.3977 L 16.0794,-23.3074 L 16.0403,-23.2187 - L 16,-23.1316 L 15.9582,-23.0462 L 15.915,-22.9624 L 15.8705,-22.8801 L 15.8246,-22.7995 L 15.7774,-22.7206 - L 15.7288,-22.6432 L 15.6788,-22.5675 L 15.6274,-22.4934 L 15.5747,-22.4209 L 15.5206,-22.35 L 15.4651,-22.2807 - L 15.4083,-22.2131 L 15.3501,-22.1471 L 15.2905,-22.0827 L 15.2296,-22.0199 L 15.1673,-21.9588 L 15.1038,-21.8991 - L 15.0393,-21.8407 L 14.9739,-21.7837 L 14.9075,-21.728 L 14.8401,-21.6735 L 14.7718,-21.6204 L 14.7025,-21.5686 - L 14.6323,-21.5181 L 14.5611,-21.4689 L 14.4888,-21.4211 L 14.4157,-21.3745 L 14.3416,-21.3293 L 14.2664,-21.2854 - L 14.1904,-21.2427 L 14.1133,-21.2014 L 14.0353,-21.1614 L 13.9564,-21.1227 L 13.8764,-21.0854 L 13.7955,-21.0493 - L 13.7136,-21.0145 L 13.6308,-20.9811 L 13.547,-20.949 L 13.4622,-20.9182 L 13.3765,-20.8887 L 13.2897,-20.8604 - L 13.2021,-20.8336 L 13.1134,-20.808 L 13.0238,-20.7837 L 12.9332,-20.7608 L 12.8416,-20.7392 L 12.7491,-20.7188 - L 12.6556,-20.6998 L 12.5612,-20.6821 L 12.4657,-20.6657 L 12.3693,-20.6506 L 12.272,-20.6369 L 12.1736,-20.6244 - L 12.0743,-20.6133 L 11.9741,-20.6034 L 11.8728,-20.5949 L 11.7706,-20.5877 L 11.6674,-20.5818 L 11.5633,-20.5772 - L 11.4582,-20.5739 L 11.3521,-20.5719 L 11.2451,-20.5713 z -M 78.4778,-38.857 L 72.5655,-38.857 L 67.3488,-15.7278 L 67.2602,-15.2701 L 67.1047,-14.4637 L 66.9236,-13.5237 - L 66.9102,-13.4539 L 66.8968,-13.3839 L 66.8834,-13.3137 L 66.87,-13.2433 L 66.8566,-13.1728 L 66.8433,-13.1022 - L 66.8167,-12.9604 L 66.8034,-12.8893 L 66.7769,-12.7466 L 66.7504,-12.6033 L 66.7372,-12.5315 L 66.7241,-12.4594 - L 66.6978,-12.3149 L 66.6715,-12.1697 L 66.6584,-12.0969 L 66.6454,-12.024 L 66.6193,-11.8776 L 66.6063,-11.8041 - L 66.5933,-11.7305 L 66.5674,-11.5829 L 66.5415,-11.4347 L 66.5157,-11.2858 L 66.5028,-11.2112 L 66.4772,-11.0614 - L 66.4516,-10.911 L 66.4388,-10.8355 L 66.426,-10.7599 L 66.4006,-10.6083 L 66.3752,-10.456 L 66.3498,-10.3032 - L 66.3246,-10.1497 L 66.3121,-10.073 L 66.2997,-9.99695 L 66.2876,-9.92139 L 66.2755,-9.84639 L 66.2637,-9.77191 - L 66.252,-9.69797 L 66.2405,-9.62459 L 66.2291,-9.55173 L 66.2179,-9.47942 L 66.2069,-9.40765 L 66.196,-9.33641 - L 66.1853,-9.26573 L 66.1747,-9.19559 L 66.1644,-9.12596 L 66.1542,-9.05688 L 66.1441,-8.98836 L 66.1342,-8.92036 - L 66.1245,-8.85292 L 66.1149,-8.786 L 66.1056,-8.71964 L 66.0963,-8.65381 L 66.0873,-8.5885 L 66.0784,-8.52374 - L 66.0696,-8.45955 L 66.0611,-8.39587 L 66.0526,-8.33273 L 66.0444,-8.27016 L 66.0363,-8.20808 L 66.0284,-8.14658 - L 66.0206,-8.08562 L 66.0131,-8.02518 L 66.0056,-7.96529 L 65.9984,-7.90593 L 65.9913,-7.84711 L 65.9844,-7.78885 - L 65.9776,-7.73111 L 65.971,-7.67392 L 65.9646,-7.61726 L 65.9583,-7.56116 L 65.9522,-7.50558 L 65.9462,-7.45055 - L 65.9404,-7.39604 L 65.9348,-7.3421 L 65.9294,-7.2887 L 65.9241,-7.23581 L 65.9189,-7.18349 L 65.9138,-7.23581 - L 65.9085,-7.2887 L 65.903,-7.3421 L 65.8973,-7.39604 L 65.8914,-7.45055 L 65.8854,-7.50558 L 65.8792,-7.56116 - L 65.8727,-7.61726 L 65.8661,-7.67392 L 65.8594,-7.73111 L 65.8524,-7.78885 L 65.8453,-7.84711 L 65.8379,-7.90593 - L 65.8304,-7.96529 L 65.8227,-8.02518 L 65.8149,-8.08562 L 65.8068,-8.14658 L 65.7986,-8.20808 L 65.7902,-8.27016 - L 65.7816,-8.33273 L 65.7728,-8.39587 L 65.7638,-8.45955 L 65.7546,-8.52374 L 65.7453,-8.5885 L 65.7358,-8.65381 - L 65.7261,-8.71964 L 65.7162,-8.786 L 65.7061,-8.85292 L 65.6959,-8.92036 L 65.6855,-8.98836 L 65.6749,-9.05688 - L 65.6641,-9.12596 L 65.6531,-9.19559 L 65.6419,-9.26573 L 65.6306,-9.33641 L 65.6191,-9.40765 L 65.6074,-9.47942 - L 65.5955,-9.55173 L 65.5834,-9.62459 L 65.5712,-9.69797 L 65.5587,-9.77191 L 65.5461,-9.84639 L 65.5333,-9.92139 - L 65.5203,-9.99695 L 65.5072,-10.073 L 65.4938,-10.1497 L 65.4402,-10.456 L 65.3869,-10.7599 L 65.3338,-11.0614 - L 65.2811,-11.3603 L 65.2417,-11.5829 L 65.1895,-11.8776 L 65.1376,-12.1697 L 65.073,-12.5315 L 65.0345,-12.7466 - L 64.9835,-13.0314 L 64.9454,-13.2433 L 64.9074,-13.4539 L 64.8823,-13.5931 L 64.8699,-13.6614 L 64.8454,-13.7953 - L 64.8334,-13.8609 L 64.8098,-13.989 L 64.7866,-14.1134 L 64.764,-14.234 L 64.7419,-14.3507 L 64.7202,-14.4637 - L 64.7096,-14.5187 L 64.6991,-14.5728 L 64.6785,-14.6782 L 64.6684,-14.7294 L 64.6585,-14.7797 L 64.6486,-14.8291 - L 64.6389,-14.8775 L 64.6293,-14.9249 L 64.6198,-14.9714 L 64.6105,-15.0169 L 64.6013,-15.0615 L 64.5922,-15.1051 - L 64.5832,-15.1478 L 64.5744,-15.1895 L 64.5657,-15.2303 L 64.5571,-15.2701 L 64.5487,-15.309 L 64.5404,-15.3469 - L 64.5322,-15.3839 L 64.5241,-15.4199 L 64.5162,-15.455 L 64.5083,-15.4891 L 64.5007,-15.5223 L 64.4931,-15.5545 - L 64.4857,-15.5858 L 64.4784,-15.6161 L 64.4712,-15.6454 L 64.4642,-15.6739 L 64.4572,-15.7013 L 64.4505,-15.7278 - L 59.2724,-38.857 L 53.3601,-38.857 L 62.7115,-0 L 69.0877,-0 z " stroke="black" fill="black" stroke-width="0.5"/> diff --git a/resources/icons/svg-default/icons.scad b/resources/icons/svg-default/icons.scad index c7bd086b7c3..abddc7bd258 100644 --- a/resources/icons/svg-default/icons.scad +++ b/resources/icons/svg-default/icons.scad @@ -71,6 +71,11 @@ icons = [ ["measure-dist"], ["measure-ang"], ["edit-copy"], + ["up"], + ["down"], + ["add"], + ["remove"], + ["parameter"], ]; icon(selected_icon) { @@ -129,6 +134,11 @@ icon(selected_icon) { measure_dist(); measure_ang(); edit_copy(); + up(); + down(); + add(); + remove(); + parameter(); } if (list_icons) { @@ -784,10 +794,67 @@ module measure_ang() { } module edit_copy() { -union() { + union() { + difference() { + translate([10, 30]) scale(0.7) text_paper(); + translate([26, 5]) scale(0.7) paper(); + } + translate([32, -1]) scale(0.7) text_paper(); + } +} + +module simple_arrow() { + polygon([ + [ 0, height / 3], + [-width / 5, -height / 3], + [ 0, -height / 4], + [ width / 5, -height / 3], + ]); +} + +module up() { + translate([width / 2, height / 2]) + simple_arrow(); +} + +module down() { + translate([width / 2, height / 2]) + rotate(180) + simple_arrow(); +} + +module add() { + translate([width / 2, height / 2]) { + square([0.8 * width, thick], center = true); + square([thick, 0.8 * width], center = true); + } +} + +module remove() { + translate([width / 2, height / 2]) { + square([0.8 * width, thick], center = true); + } +} + +module gear(r) { difference() { - translate([10, 30]) scale(0.7) text_paper(); - translate([26, 5]) scale(0.7) paper(); + union() { + circle(r); + for (a = [0:3]) + rotate(45 * a) + offset(thin) offset(-thin) + square([2.4 * r, r/2.0], center = true); + } + circle(r - 1.5 * thick); } - translate([32, -1]) scale(0.7) text_paper(); -}} +} + +module parameter() { + r = 0.35 * width; + translate([width / 2, height / 2]) { + difference() { + gear(r); + offset(-thin) gear(r); + } + } +} diff --git a/resources/icons/svg-default/parameter-white.svg b/resources/icons/svg-default/parameter-white.svg new file mode 100644 index 00000000000..8022fae19f8 --- /dev/null +++ b/resources/icons/svg-default/parameter-white.svg @@ -0,0 +1,401 @@ + + + +OpenSCAD Model + + diff --git a/resources/icons/svg-default/parameter.svg b/resources/icons/svg-default/parameter.svg new file mode 100644 index 00000000000..942df679b45 --- /dev/null +++ b/resources/icons/svg-default/parameter.svg @@ -0,0 +1,401 @@ + + + +OpenSCAD Model + + diff --git a/resources/icons/svg-default/remove-white.svg b/resources/icons/svg-default/remove-white.svg new file mode 100644 index 00000000000..3148b552cb9 --- /dev/null +++ b/resources/icons/svg-default/remove-white.svg @@ -0,0 +1,8 @@ + + + +OpenSCAD Model + + diff --git a/resources/icons/svg-default/remove.svg b/resources/icons/svg-default/remove.svg new file mode 100644 index 00000000000..d2bd8bc04c7 --- /dev/null +++ b/resources/icons/svg-default/remove.svg @@ -0,0 +1,8 @@ + + + +OpenSCAD Model + + diff --git a/resources/icons/svg-default/up-white.svg b/resources/icons/svg-default/up-white.svg new file mode 100644 index 00000000000..d77a318cba5 --- /dev/null +++ b/resources/icons/svg-default/up-white.svg @@ -0,0 +1,8 @@ + + + +OpenSCAD Model + + diff --git a/resources/icons/svg-default/up.svg b/resources/icons/svg-default/up.svg new file mode 100644 index 00000000000..26c2242cb56 --- /dev/null +++ b/resources/icons/svg-default/up.svg @@ -0,0 +1,8 @@ + + + +OpenSCAD Model + + diff --git a/src/glview/system-gl.h b/src/glview/system-gl.h index 670ea23bc62..36c1c68638b 100644 --- a/src/glview/system-gl.h +++ b/src/glview/system-gl.h @@ -25,7 +25,7 @@ namespace { // Returns true on OK, false on error -bool glCheck(const char *stmt, const char *file, int line) +[[maybe_unused]] bool glCheck(const char *stmt, const char *file, int line) { if (const auto err = glGetError(); err != GL_NO_ERROR) { LOG(message_group::Error, Location::NONE, "", @@ -37,7 +37,7 @@ bool glCheck(const char *stmt, const char *file, int line) } // Returns true on OK, false on error -bool glCheckd(const char *stmt, const char *file, int line) +[[maybe_unused]] bool glCheckd(const char *stmt, const char *file, int line) { if (const auto err = glGetError(); err != GL_NO_ERROR) { PRINTDB("OpenGL error: %s (0x%04x) in %s:%d\n" diff --git a/src/gui/Animate.cc b/src/gui/Animate.cc index febc29a4306..6153d176f28 100644 --- a/src/gui/Animate.cc +++ b/src/gui/Animate.cc @@ -1,6 +1,5 @@ #include "gui/Animate.h" -#include "utils/printutils.h" -#include "gui/MainWindow.h" + #include #include #include @@ -13,6 +12,10 @@ #include #include +#include "utils/printutils.h" +#include "gui/MainWindow.h" +#include "openscad_gui.h" + Animate::Animate(QWidget *parent) : QWidget(parent) { setupUi(this); @@ -48,8 +51,8 @@ void Animate::setMainWindow(MainWindow *mainWindow) this->mainWindow = mainWindow; //prepare actions for inputdriver - QIcon playIcon = isLightTheme() ? QIcon(":/icons/svg-default/animate.svg") : QIcon(":/icons/svg-default/animate-white.svg"); - QIcon pauseIcon = isLightTheme() ? QIcon(":/icons/svg-default/animate_pause.svg") : QIcon(":/icons/svg-default/animate_pause-white.svg"); + QIcon playIcon = OpenSCAD::isDarkMode() ? QIcon(":/icons/svg-default/animate-white.svg") : QIcon(":/icons/svg-default/animate.svg"); + QIcon pauseIcon = OpenSCAD::isDarkMode() ? QIcon(":/icons/svg-default/animate_pause-white.svg") : QIcon(":/icons/svg-default/animate_pause.svg"); createActionAndPrepareButton( playIcon, _("toggle pause/unpause"), @@ -74,7 +77,7 @@ void Animate::createActionAndPrepareButton(const QIcon& icon, const QString& des void Animate::initVCR(){ QString suffix(""); - if (!isLightTheme()) { + if (OpenSCAD::isDarkMode()) { suffix = QString("-white"); } static QIcon startIcon = QIcon(":/icons/svg-default/vcr-control-start" + suffix + ".svg"); @@ -101,17 +104,6 @@ void Animate::initVCR(){ "end", pushButton_MoveToEnd); } -bool Animate::isLightTheme() -{ - bool ret = true; - if (mainWindow) { - ret = mainWindow->isLightTheme(); - } else { - std::cout << "Animate: You need to set the mainWindow before calling isLightTheme" << std::endl; - } - return ret; -} - void Animate::updatedAnimTval() { double t = this->e_tval->text().toDouble(&this->t_ok); @@ -149,7 +141,7 @@ void Animate::updatedAnimFpsAndAnimSteps() animate_timer->start(); } - QString redBackground = QString(isLightTheme() ? "background-color:#ffaaaa;" : "background-color:#502020;"); + QString redBackground = QString(OpenSCAD::isDarkMode() ? "background-color:#502020;" : "background-color:#ffaaaa;"); if (this->steps_ok || this->e_fsteps->text() == "") { this->e_fsteps->setStyleSheet(""); @@ -246,14 +238,14 @@ void Animate::updatePauseButtonIcon() static QIcon disabledLight(":/icons/svg-default/animate_disabled-white.svg"); if (animate_timer->isActive()) { - pauseButton->setIcon(this->isLightTheme() ? pauseDark : pauseLight); + pauseButton->setIcon(OpenSCAD::isDarkMode() ? pauseLight : pauseDark); pauseButton->setToolTip(_("press to pause animation") ); } else { if (this->fps_ok && this->steps_ok) { - pauseButton->setIcon(this->isLightTheme() ? runDark : runLight); + pauseButton->setIcon(OpenSCAD::isDarkMode() ? runLight : runDark); pauseButton->setToolTip(_("press to start animation") ); } else { - pauseButton->setIcon(this->isLightTheme() ? disabledDark : disabledLight); + pauseButton->setIcon(OpenSCAD::isDarkMode() ? disabledLight : disabledDark); pauseButton->setToolTip(_("incorrect values") ); } } diff --git a/src/gui/ExternalToolInterface.cc b/src/gui/ExternalToolInterface.cc index 8d623701812..f35f958f265 100644 --- a/src/gui/ExternalToolInterface.cc +++ b/src/gui/ExternalToolInterface.cc @@ -27,8 +27,11 @@ #include "gui/ExternalToolInterface.h" #include +#include +#include #include +#include "Settings.h" #include "gui/OctoPrint.h" #include "io/export.h" #include "geometry/Geometry.h" @@ -60,7 +63,7 @@ bool ExternalToolInterface::exportTemporaryFile(const std::shared_ptr 3D Print -> Local Application"); + return false; + } + #ifdef Q_OS_MACOS - if(!process.startDetached("open", {"-a", slicer, QString::fromStdString(exportedFilename_)})) { -#else - if(!process.startDetached(slicer, {QString::fromStdString(exportedFilename_)})) { + if (!process.startDetached("open", {"-a", slicer, QString::fromStdString(exportedFilename_)})) { +#else + QStringList args; + const auto info = QFileInfo(QString::fromStdString(exportedFilename_)); + for (const auto& arg : Settings::Settings::localAppParameterList.items()) { + switch (arg.type) { + case Settings::LocalAppParameterType::string: + args.append(QString::fromStdString(arg.value)); + break; + case Settings::LocalAppParameterType::file: + args.append(QString::fromStdString(exportedFilename_)); + break; + case Settings::LocalAppParameterType::dir: + args.append(info.absoluteDir().path()); + break; + case Settings::LocalAppParameterType::extension: + args.append(info.suffix()); + break; + case Settings::LocalAppParameterType::source: + args.append(QString::fromStdString(sourceFilename_)); + break; + case Settings::LocalAppParameterType::sourcedir: + args.append(QFileInfo(QString::fromStdString(sourceFilename_)).absoluteDir().path()); + break; + default: + break; + } + } + const auto argsStr = args.empty() ? "" : "['" + args.join("', '").toStdString() + "']"; + PRINTDB("Running application '%s' with arguments: %s", application.toStdString() % argsStr); + if (!process.startDetached(application, args)) { #endif - LOG(message_group::Error, "Could not start Slicer '%1$s': %2$s", slicer.toStdString(), process.errorString().toStdString()); + LOG(message_group::Error, "Could not start Slicer '%1$s': %2$s", application.toStdString(), process.errorString().toStdString()); const auto output = process.readAll(); if (output.length() > 0) { LOG(message_group::Error, "Output: %1$s", output.toStdString()); diff --git a/src/gui/ExternalToolInterface.h b/src/gui/ExternalToolInterface.h index 81e1e53ec41..0dbeb7c5938 100644 --- a/src/gui/ExternalToolInterface.h +++ b/src/gui/ExternalToolInterface.h @@ -47,6 +47,7 @@ class ExternalToolInterface FileFormat fileFormat() const { return exportFormat_; } virtual std::string getURL() const { return ""; }; protected: + std::string sourceFilename_; FileFormat exportFormat_; std::string exportedFilename_; }; diff --git a/src/gui/InitConfigurator.cc b/src/gui/InitConfigurator.cc index 1dc6c39521d..04d7cb9a363 100644 --- a/src/gui/InitConfigurator.cc +++ b/src/gui/InitConfigurator.cc @@ -1,5 +1,7 @@ #include "gui/InitConfigurator.h" +#include +#include #include #include @@ -7,7 +9,9 @@ #include #include #include +#include "Preferences.h" #include "gui/Settings.h" +#include "printutils.h" #include @@ -46,6 +50,35 @@ void InitConfigurator::initComboBox(QComboBox *comboBox, const Settings::Setting updateComboBox(comboBox, entry); } +void InitConfigurator::initListBox(QListWidget *listBox, const Settings::SettingsEntryList& list) +{ + listBox->blockSignals(true); + listBox->clear(); + for (const auto& listitem : list.items()) { + if (listitem.type == Settings::LocalAppParameterType::string) { + const auto item = Preferences::inst()->createListItem(Settings::LocalAppParameterType(Settings::LocalAppParameterType::string), QString::fromStdString(listitem.value)); + listBox->insertItem(listBox->count(), item); + } else if (listitem.type == Settings::LocalAppParameterType::file) { + const auto item = Preferences::inst()->createListItem(Settings::LocalAppParameterType(Settings::LocalAppParameterType::file)); + listBox->insertItem(listBox->count(), item); + } else if (listitem.type == Settings::LocalAppParameterType::dir) { + const auto item = Preferences::inst()->createListItem(Settings::LocalAppParameterType(Settings::LocalAppParameterType::dir)); + listBox->insertItem(listBox->count(), item); + } else if (listitem.type == Settings::LocalAppParameterType::extension) { + const auto item = Preferences::inst()->createListItem(Settings::LocalAppParameterType(Settings::LocalAppParameterType::extension)); + listBox->insertItem(listBox->count(), item); + } else if (listitem.type == Settings::LocalAppParameterType::source) { + const auto item = Preferences::inst()->createListItem(Settings::LocalAppParameterType(Settings::LocalAppParameterType::source)); + listBox->insertItem(listBox->count(), item); + } else if (listitem.type == Settings::LocalAppParameterType::sourcedir) { + const auto item = Preferences::inst()->createListItem(Settings::LocalAppParameterType(Settings::LocalAppParameterType::sourcedir)); + listBox->insertItem(listBox->count(), item); + } + } + listBox->selectionModel()->clearSelection(); + listBox->blockSignals(false); +} + void InitConfigurator::updateComboBox(const BlockSignals& comboBox, const Settings::SettingsEntryEnum& entry) { comboBox->setCurrentIndex(entry.index()); diff --git a/src/gui/InitConfigurator.h b/src/gui/InitConfigurator.h index 8ad020471ef..211202d852a 100644 --- a/src/gui/InitConfigurator.h +++ b/src/gui/InitConfigurator.h @@ -5,6 +5,7 @@ #include #include #include +#include #include @@ -36,6 +37,8 @@ class InitConfigurator void initUpdateDoubleSpinBox(QDoubleSpinBox *spinBox, const Settings::SettingsEntryDouble& entry); /** Initialize combobox list values from the settings range values */ void initComboBox(QComboBox *comboBox, const Settings::SettingsEntryEnum& entry); + /** Initialize specialized list box */ + void initListBox(QListWidget *listBox, const Settings::SettingsEntryList& list); /** Update combobox from current settings */ void updateComboBox(const BlockSignals& comboBox, const Settings::SettingsEntryEnum& entry); /** Update combobox from current settings */ diff --git a/src/gui/MainWindow.cc b/src/gui/MainWindow.cc index e8ac14c2c48..3152c4bada3 100644 --- a/src/gui/MainWindow.cc +++ b/src/gui/MainWindow.cc @@ -52,6 +52,7 @@ #include #include #include +#include "openscad_gui.h" #ifdef ENABLE_MANIFOLD #include "geometry/manifold/manifoldutils.h" @@ -797,14 +798,9 @@ void MainWindow::openFileFromPath(const QString& path, int line) } } -bool MainWindow::isLightTheme(){ - int defaultcolor = viewerToolBar->palette().window().color().lightness(); - return (defaultcolor > 165); -} - void MainWindow::initActionIcon(QAction *action, const char *darkResource, const char *lightResource) { - const char *resource = this->isLightTheme() ? darkResource : lightResource; + const char *resource = OpenSCAD::isDarkMode() ? lightResource : darkResource; action->setIcon(QIcon(resource)); } @@ -2132,7 +2128,7 @@ std::unique_ptr createExternalToolService( case print_service_t::OCTOPRINT: return createOctoPrintService(fileFormat); break; - case print_service_t::LOCALSLICER: + case print_service_t::LOCAL_APPLICATION: return createLocalProgramService(fileFormat); break; } diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h index 400bccc8cfd..80e72452de5 100644 --- a/src/gui/MainWindow.h +++ b/src/gui/MainWindow.h @@ -152,8 +152,6 @@ private slots: void setLastFocus(QWidget *widget); void UnknownExceptionCleanup(std::string msg = ""); - bool isLightTheme(); - private: void initActionIcon(QAction *action, const char *darkResource, const char *lightResource); void setRenderVariables(ContextHandle& context); diff --git a/src/gui/Preferences.cc b/src/gui/Preferences.cc index d03b87ed9de..5a601d838b0 100644 --- a/src/gui/Preferences.cc +++ b/src/gui/Preferences.cc @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -48,11 +49,15 @@ #include #include #include +#include +#include #include #include "geometry/GeometryCache.h" #include "gui/AutoUpdater.h" #include "Feature.h" #include "gui/Settings.h" +#include "openscad_gui.h" +#include "printutils.h" #ifdef ENABLE_CGAL #include "geometry/cgal/CGALCache.h" #endif @@ -195,6 +200,14 @@ void Preferences::init() { this->lineEditStepSize->setValidator(validator1); this->traceDepthEdit->setValidator(uintValidator); + auto menu = new QMenu(); + menu->addAction(actionLocalAppParameterFile); + menu->addAction(actionLocalAppParameterDir); + menu->addAction(actionLocalAppParameterExtension); + menu->addAction(actionLocalAppParameterSource); + menu->addAction(actionLocalAppParameterSourceDir); + toolButtonLocalAppParameterAddFile->setMenu(menu); + Settings::Settings::visit(SettingsReader()); initComboBox(this->comboBoxIndentUsing, Settings::Settings::indentStyle); @@ -211,18 +224,23 @@ void Preferences::init() { initComboBox(this->comboBoxOctoPrintFileFormat, Settings::Settings::octoPrintFileFormat); initComboBox(this->comboBoxOctoPrintAction, Settings::Settings::octoPrintAction); - initComboBox(this->comboBoxLocalSlicerFileFormat, Settings::Settings::localSlicerFileFormat); + initComboBox(this->comboBoxLocalAppFileFormat, Settings::Settings::localAppFileFormat); initComboBox(this->comboBoxRenderBackend3D, Settings::Settings::renderBackend3D); initComboBox(this->comboBoxToolbarExport3D, Settings::Settings::toolbarExport3D); initComboBox(this->comboBoxToolbarExport2D, Settings::Settings::toolbarExport2D); + initListBox(this->listWidgetLocalAppParams, Settings::Settings::localAppParameterList); + connect(this->listWidgetLocalAppParams->model(), &QAbstractItemModel::dataChanged, this, &Preferences::listWidgetLocalAppParamsModelDataChanged); + connect(this->listWidgetLocalAppParams->model(), &QAbstractItemModel::rowsInserted, this, &Preferences::listWidgetLocalAppParamsModelDataChanged); + connect(this->listWidgetLocalAppParams->model(), &QAbstractItemModel::rowsRemoved, this, &Preferences::listWidgetLocalAppParamsModelDataChanged); + installIgnoreWheelWhenNotFocused(this); const QString slicer = QString::fromStdString(Settings::Settings::octoPrintSlicerEngine.value()); const QString slicerDesc = QString::fromStdString(Settings::Settings::octoPrintSlicerEngineDesc.value()); const QString profile = QString::fromStdString(Settings::Settings::octoPrintSlicerProfile.value()); const QString profileDesc = QString::fromStdString(Settings::Settings::octoPrintSlicerProfileDesc.value()); - BlockSignals(this->lineEditLocalSlicer)->setText(QString::fromStdString(Settings::Settings::localSlicerExecutable.value())); + BlockSignals(this->lineEditLocalAppExecutable)->setText(QString::fromStdString(Settings::Settings::localAppExecutable.value())); this->comboBoxOctoPrintSlicingEngine->clear(); this->comboBoxOctoPrintSlicingEngine->addItem(_(""), QVariant{""}); if (!slicer.isEmpty()) { @@ -367,7 +385,7 @@ void Preferences::setup3DPrintPage() const std::unordered_map services = { {"NONE", _("NONE")}, {"OCTOPRINT", _("OctoPrint")}, - {"LOCALSLICER", _("Local Slicer")}, + {"LOCALSLICER", _("Local Application")}, }; instance->comboBoxDefaultPrintService->addItem(services.at("NONE"), @@ -851,29 +869,166 @@ void Preferences::on_comboBoxOctoPrintFileFormat_activated(int val) applyComboBox(this->comboBoxOctoPrintFileFormat, val, Settings::Settings::octoPrintFileFormat); } -void Preferences::on_pushButtonSelectLocalSlicerPath_clicked() +void Preferences::on_toolButtonSelectLocalAppPath_clicked() { const QString fileName = QFileDialog::getOpenFileName(this, "Select application"); if (fileName.isEmpty()) { return; } - this->lineEditLocalSlicer->setText(fileName); - on_lineEditLocalSlicer_editingFinished(); + this->lineEditLocalAppExecutable->setText(fileName); + on_lineEditLocalAppExecutable_editingFinished(); } -void Preferences::on_comboBoxLocalSlicerFileFormat_activated(int val) +void Preferences::on_comboBoxLocalAppFileFormat_activated(int val) { - applyComboBox(this->comboBoxLocalSlicerFileFormat, val, Settings::Settings::localSlicerFileFormat); + applyComboBox(this->comboBoxLocalAppFileFormat, val, Settings::Settings::localAppFileFormat); writeSettings(); } -void Preferences::on_lineEditLocalSlicer_editingFinished() +void Preferences::on_lineEditLocalAppExecutable_editingFinished() { - Settings::Settings::localSlicerExecutable.setValue(this->lineEditLocalSlicer->text().toStdString()); + Settings::Settings::localAppExecutable.setValue(this->lineEditLocalAppExecutable->text().toStdString()); writeSettings(); } +void Preferences::moveListBoxRow(QListWidget *listBox, int offset) +{ + const auto& index = listBox->selectionModel()->currentIndex(); + int newRow = index.row() + offset; + if (newRow >= 0 && newRow <= listBox->count()) { + auto item = listBox->takeItem(index.row()); + listBox->insertItem(newRow, item); + listBox->setCurrentRow(newRow); + } +} + +void Preferences::on_toolButtonLocalAppParameterUp_clicked() +{ + moveListBoxRow(this->listWidgetLocalAppParams, -1); +} + +void Preferences::on_toolButtonLocalAppParameterDown_clicked() +{ + moveListBoxRow(this->listWidgetLocalAppParams, 1); +} + +void Preferences::on_toolButtonLocalAppParameterRemove_clicked() +{ + const auto& index = this->listWidgetLocalAppParams->selectionModel()->currentIndex(); + if (index.row() >= 0) { + auto item = this->listWidgetLocalAppParams->takeItem(index.row()); + delete item; + } +} + +template +QListWidgetItem * Preferences::createListItem(const item_type& itemType, const QString& text, bool editable) { + const auto iconResource = QString(":/icons/svg-default/%1%2.svg").arg(QString::fromStdString(itemType.icon()), OpenSCAD::isDarkMode() ? "-white" : ""); + std::string description = itemType.description(); + const auto itemText = description.empty() ? text : QString::fromStdString(description); + const auto listItem = new QListWidgetItem(QIcon(iconResource), itemText, + nullptr, + static_cast(QListWidgetItem::UserType) + static_cast(itemType)); + if (editable) { + listItem->setFlags(listItem->flags() | Qt::ItemIsEditable); + } + return listItem; +} + +void Preferences::insertListItem(QListWidget *listBox, QListWidgetItem *listItem) { + const auto hasSelection = listBox->selectionModel()->hasSelection(); + const auto pos = hasSelection ? listBox->selectionModel()->currentIndex().row() + 1 : listBox->count(); + listBox->insertItem(pos, listItem); + listBox->setCurrentRow(pos); + listBox->editItem(listItem); +} + +void Preferences::on_toolButtonLocalAppParameterAdd_clicked() +{ + auto listItem = createListItem(Settings::LocalAppParameterType(Settings::LocalAppParameterType::string), "", true); + insertListItem(this->listWidgetLocalAppParams, listItem); +} + +void Preferences::addLocalAppParameter(const Settings::LocalAppParameterType& type) +{ + auto listItem = createListItem(Settings::LocalAppParameterType(type)); + insertListItem(this->listWidgetLocalAppParams, listItem); +} + +void Preferences::on_toolButtonLocalAppParameterAddFile_clicked() +{ + addLocalAppParameter(Settings::LocalAppParameterType::file); +} + +void Preferences::on_listWidgetLocalAppParams_itemSelectionChanged() +{ + const auto hasSelection = this->listWidgetLocalAppParams->selectionModel()->hasSelection(); + const auto& index = this->listWidgetLocalAppParams->selectionModel()->currentIndex(); + this->toolButtonLocalAppParameterRemove->setEnabled(hasSelection); + this->toolButtonLocalAppParameterUp->setEnabled(hasSelection && index.row() > 0); + this->toolButtonLocalAppParameterDown->setEnabled(hasSelection && index.row() < this->listWidgetLocalAppParams->count() - 1); +} + +void Preferences::updateLocalAppParams() +{ + std::vector items; + for (int idx = 0;idx < this->listWidgetLocalAppParams->count();++idx) { + const auto item = this->listWidgetLocalAppParams->item(idx); + if (item->type() == static_cast(QListWidgetItem::UserType) + static_cast(Settings::LocalAppParameterType::string)) { + items.emplace_back(Settings::LocalAppParameterType::string, item->text().toStdString()); + } else if (item->type() == static_cast(QListWidgetItem::UserType) + static_cast(Settings::LocalAppParameterType::file)) { + items.emplace_back(Settings::LocalAppParameterType::file, std::string{}); + } else if (item->type() == static_cast(QListWidgetItem::UserType) + static_cast(Settings::LocalAppParameterType::dir)) { + items.emplace_back(Settings::LocalAppParameterType::dir, std::string{}); + } else if (item->type() == static_cast(QListWidgetItem::UserType) + static_cast(Settings::LocalAppParameterType::extension)) { + items.emplace_back(Settings::LocalAppParameterType::extension, std::string{}); + } else if (item->type() == static_cast(QListWidgetItem::UserType) + static_cast(Settings::LocalAppParameterType::source)) { + items.emplace_back(Settings::LocalAppParameterType::source, std::string{}); + } else if (item->type() == static_cast(QListWidgetItem::UserType) + static_cast(Settings::LocalAppParameterType::sourcedir)) { + items.emplace_back(Settings::LocalAppParameterType::sourcedir, std::string{}); + } + } + Settings::Settings::localAppParameterList.setItems(items); + writeSettings(); +} + +void Preferences::on_listWidgetLocalAppParams_itemChanged(QListWidgetItem *) { + // called when parameter values are edited + updateLocalAppParams(); +} + +void Preferences::listWidgetLocalAppParamsModelDataChanged() +{ + // called when rows are added or removed + updateLocalAppParams(); +} + +void Preferences::on_actionLocalAppParameterFile_triggered() +{ + addLocalAppParameter(Settings::LocalAppParameterType::file); +} + +void Preferences::on_actionLocalAppParameterDir_triggered() +{ + addLocalAppParameter(Settings::LocalAppParameterType::dir); +} + +void Preferences::on_actionLocalAppParameterExtension_triggered() +{ + addLocalAppParameter(Settings::LocalAppParameterType::extension); +} + +void Preferences::on_actionLocalAppParameterSource_triggered() +{ + addLocalAppParameter(Settings::LocalAppParameterType::source); +} + +void Preferences::on_actionLocalAppParameterSourceDir_triggered() +{ + addLocalAppParameter(Settings::LocalAppParameterType::sourcedir); +} + void Preferences::on_pushButtonOctoPrintCheckConnection_clicked() { OctoPrint octoPrint; diff --git a/src/gui/Preferences.h b/src/gui/Preferences.h index a180bdb3b6e..b45e5e81324 100644 --- a/src/gui/Preferences.h +++ b/src/gui/Preferences.h @@ -36,6 +36,9 @@ class Preferences : public QMainWindow, public Ui::Preferences, public InitConfi void apply_win() const; void updateGUI(); void fireEditorConfigChanged() const; + template + QListWidgetItem * createListItem(const item_type& type, const QString& text = "", bool editable = false); + void insertListItem(QListWidget *listBox, QListWidgetItem *listItem); public slots: void actionTriggered(class QAction *); @@ -121,12 +124,25 @@ public slots: void on_comboBoxOctoPrintSlicingProfile_activated(int); void on_comboBoxOctoPrintAction_activated(int); void on_comboBoxOctoPrintFileFormat_activated(int); - void on_comboBoxLocalSlicerFileFormat_activated(int); void on_lineEditOctoPrintURL_editingFinished(); void on_lineEditOctoPrintApiKey_editingFinished(); void on_pushButtonOctoPrintApiKey_clicked(); - void on_pushButtonSelectLocalSlicerPath_clicked(); - void on_lineEditLocalSlicer_editingFinished(); + void on_toolButtonSelectLocalAppPath_clicked(); + void on_lineEditLocalAppExecutable_editingFinished(); + void on_comboBoxLocalAppFileFormat_activated(int); + void on_toolButtonLocalAppParameterRemove_clicked(); + void on_toolButtonLocalAppParameterAdd_clicked(); + void on_toolButtonLocalAppParameterUp_clicked(); + void on_toolButtonLocalAppParameterDown_clicked(); + void on_toolButtonLocalAppParameterAddFile_clicked(); + void on_listWidgetLocalAppParams_itemSelectionChanged(); + void on_listWidgetLocalAppParams_itemChanged(QListWidgetItem *); + void on_actionLocalAppParameterFile_triggered(); + void on_actionLocalAppParameterDir_triggered(); + void on_actionLocalAppParameterExtension_triggered(); + void on_actionLocalAppParameterSource_triggered(); + void on_actionLocalAppParameterSourceDir_triggered(); + void listWidgetLocalAppParamsModelDataChanged(); signals: void requestRedraw() const; @@ -166,6 +182,9 @@ private slots: void createFontSizeMenu(QComboBox *box, const QString &setting); void updateGUIFontFamily(QFontComboBox *fontSelector, const QString &setting); void updateGUIFontSize(QComboBox *fsSelector, const QString &setting); + void updateLocalAppParams(); + void addLocalAppParameter(const Settings::LocalAppParameterType&); + void moveListBoxRow(QListWidget *listBox, int offset); /** Set value from combobox to settings */ void applyComboBox(QComboBox *comboBox, int val, Settings::SettingsEntryEnum& entry); diff --git a/src/gui/Preferences.ui b/src/gui/Preferences.ui index c6bd8172c85..68cee7b0c5d 100644 --- a/src/gui/Preferences.ui +++ b/src/gui/Preferences.ui @@ -6,8 +6,8 @@ 0 0 - 815 - 750 + 841 + 853 @@ -137,7 +137,7 @@ 0 - + true @@ -146,8 +146,8 @@ 0 0 - 781 - 1135 + 576 + 953 @@ -1269,7 +1269,7 @@ 0 - + @@ -1315,7 +1315,7 @@ - + Qt::Vertical @@ -1337,357 +1337,556 @@ + + 0 + + + 0 + + + 0 + + + 0 + - - - General - - - - - - Default Print Service - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - OctoPrint - - - - - - http://octopi.local/api - - - - - - - URL - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - API Key - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - 160 - 0 - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Load - - - - - - - - - - - - 160 - 0 - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Load - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - - - Check - - - - - - - - - Slicing Profile - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Slicing Engine - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - File Format - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Action - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - QLineEdit::PasswordEchoOnEdit - - - - - - - Show - - - true - - - - - - - - - Note: The API key is stored unencrypted in the application settings. - - - - - - - - - - Local Slicer + + + true - - - - - Local slicer path - - - - - - - File Format - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Executable - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - + + + + 0 + 0 + 821 + 763 + + + + + + + General + + + + + + Default Print Service + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + OctoPrint + + + + + + http://octopi.local/api + + + true + + + + + + + URL + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + lineEditOctoPrintURL + + + + + + + API Key + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + lineEditOctoPrintApiKey + + + + + + + + + + 160 + 0 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Load + + + + + + + + + + + + 160 + 0 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Load + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + Check + + + + + + + + + Slicing Profile + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + comboBoxOctoPrintSlicingProfile + + + + + + + Slicing Engine + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + comboBoxOctoPrintSlicingEngine + + + + + + + File Format + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + comboBoxOctoPrintFileFormat + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Action + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + comboBoxOctoPrintAction + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + QLineEdit::PasswordEchoOnEdit + + + true + + + + + + + Show + + + true + + + + + + + + + Note: The API key is stored unencrypted in the application settings. + + + + + + + + + + Local Application + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + 0 - - - - - - - - ... - - - - + + + + File Format + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + comboBoxLocalAppFileFormat + + + + + + + QAbstractItemView::SelectRows + + + + 16 + 16 + + + + + + + + Local application path + + + true + + + + + + + QLayout::SetDefaultConstraint + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + :/icons/svg-default/add.svg:/icons/svg-default/add.svg + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + false + + + + 0 + 0 + + + + + + + + :/icons/svg-default/up.svg:/icons/svg-default/up.svg + + + + + + + false + + + + 0 + 0 + + + + + + + + :/icons/svg-default/remove.svg:/icons/svg-default/remove.svg + + + + + + + false + + + + + + + :/icons/svg-default/down.svg:/icons/svg-default/down.svg + + + + + + + + 0 + 0 + + + + File + + + QToolButton::MenuButtonPopup + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Parameter + + + Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing + + + listWidgetLocalAppParams + + + + + + + Executable + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + lineEditLocalAppExecutable + + + + + + + ... + + + Qt::NoArrow + + + + + + + + - - - - Qt::Vertical - - - - 20 - 40 - - - - @@ -1720,8 +1919,8 @@ 0 0 - 781 - 1711 + 587 + 1436 @@ -2345,19 +2544,6 @@ - - - - Qt::Vertical - - - - 20 - 40 - - - - @@ -2421,19 +2607,6 @@ - - - - Qt::Vertical - - - - 20 - 40 - - - - @@ -2450,6 +2623,19 @@ + + + + Qt::Vertical + + + + 20 + 40 + + + + @@ -2665,6 +2851,31 @@ 3D Printing Services + + + actionLocalAppParameterDir + + + + + actionLocalAppParameterExtension + + + + + actionLocalAppParameterSource + + + + + actionLocalAppParameterSourceDir + + + + + actionLocalAppParameterFile + + diff --git a/src/gui/PrintInitDialog.cc b/src/gui/PrintInitDialog.cc index a0d93d316f0..72e18c4d79e 100644 --- a/src/gui/PrintInitDialog.cc +++ b/src/gui/PrintInitDialog.cc @@ -42,7 +42,7 @@ QString toString(print_service_t printServiceType) { return "PRINT_SERVICE"; case print_service_t::OCTOPRINT: return "OCTOPRINT"; - case print_service_t::LOCALSLICER: + case print_service_t::LOCAL_APPLICATION: return "LOCALSLICER"; default: return "NONE"; @@ -55,7 +55,7 @@ print_service_t fromString(const QString &printServiceType) { } else if (printServiceType == "OCTOPRINT") { return print_service_t::OCTOPRINT; } else if (printServiceType == "LOCALSLICER") { - return print_service_t::LOCALSLICER; + return print_service_t::LOCAL_APPLICATION; } else return print_service_t::NONE; } @@ -140,11 +140,11 @@ void PrintInitDialog::on_LocalSlicerButton_clicked() { this->textBrowser->setSource(QUrl{"qrc:/html/LocalSlicerInfo.html"}); initComboBox(this->fileFormatComboBox, - Settings::Settings::localSlicerFileFormat); + Settings::Settings::localAppFileFormat); this->on_fileFormatComboBox_currentIndexChanged( this->fileFormatComboBox->currentIndex()); - this->selectedPrintService = print_service_t::LOCALSLICER; + this->selectedPrintService = print_service_t::LOCAL_APPLICATION; this->selectedServiceName = ""; this->fileFormatComboBox->setEnabled(true); @@ -193,9 +193,9 @@ void PrintInitDialog::on_buttonBox_accepted() { settings.setValue( QString::fromStdString(Settings::Settings::octoPrintFileFormat.key()), fileFormatIdentifier); - case print_service_t::LOCALSLICER: + case print_service_t::LOCAL_APPLICATION: settings.setValue(QString::fromStdString( - Settings::Settings::localSlicerFileFormat.key()), + Settings::Settings::localAppFileFormat.key()), fileFormatIdentifier); default: break; @@ -227,7 +227,7 @@ int PrintInitDialog::exec() { fileFormatString = settings.value("printing/octoPrintFileFormat").toString(); break; - case print_service_t::LOCALSLICER: + case print_service_t::LOCAL_APPLICATION: fileFormatString = settings.value("printing/localSlicerFileFormat").toString(); break; diff --git a/src/gui/PrintInitDialog.h b/src/gui/PrintInitDialog.h index 1832c98f653..b5d2471cd2b 100644 --- a/src/gui/PrintInitDialog.h +++ b/src/gui/PrintInitDialog.h @@ -33,7 +33,7 @@ #include "io/export.h" -enum class print_service_t { NONE, PRINT_SERVICE, OCTOPRINT, LOCALSLICER }; +enum class print_service_t { NONE, PRINT_SERVICE, OCTOPRINT, LOCAL_APPLICATION }; class PrintInitDialog : public QDialog, public Ui::PrintInitDialog, public InitConfigurator { diff --git a/src/gui/Settings.cc b/src/gui/Settings.cc index 58ed3ec4df5..16592ad42ad 100644 --- a/src/gui/Settings.cc +++ b/src/gui/Settings.cc @@ -9,11 +9,17 @@ #include #include #include +#include +#include #include #include #include #include +#include "json/json.hpp" + +using json = nlohmann::json; + namespace Settings { namespace { @@ -98,8 +104,6 @@ void SettingsEntryEnum::setValue(const std::string& value) } } - - static std::vector axisValues() { std::vector output; output.push_back({"None", _("None")}); @@ -115,6 +119,33 @@ static std::vector axisValues() { return output; } +std::ostream& operator<<(std::ostream& stream, const LocalAppParameter& param) +{ + json data; + data["type"] = static_cast(param.type); + if (!param.value.empty()) { + data["value"] = param.value; + } + stream << data.dump(); + return stream; +} + +std::istream& operator>>(std::istream& stream, LocalAppParameter& param) +{ + try { + json data; + stream >> data; + param.type = static_cast(data["type"]); + if (data.contains("value")) { + param.value = data["value"]; + } + } catch (const json::exception& e) { + param.type = LocalAppParameterType::invalid; + param.value = ""; + } + return stream; +} + SettingsEntryBool Settings::showWarningsIn3dView("3dview", "showWarningsIn3dView", true); SettingsEntryBool Settings::mouseCentricZoom("3dview", "mouseCentricZoom", true); SettingsEntryBool Settings::mouseSwapButtons("3dview", "mouseSwapButtons", false); @@ -154,10 +185,11 @@ SettingsEntryEnum Settings::octoPrintFileFormat( createFileFormatItems({FileFormat::ASCII_STL, FileFormat::BINARY_STL, FileFormat::_3MF, FileFormat::OFF}), fileformat::info(FileFormat::ASCII_STL).description); -SettingsEntryString Settings::localSlicerExecutable("printing", "localSlicerExecutable", ""); -SettingsEntryEnum Settings::localSlicerFileFormat( - "printing", "localSlicerFileFormat", createFileFormatItems(fileformat::all3D()), +SettingsEntryString Settings::localAppExecutable("printing", "localAppExecutable", ""); +SettingsEntryEnum Settings::localAppFileFormat( + "printing", "localAppFileFormat", createFileFormatItems(fileformat::all3D()), fileformat::info(FileFormat::ASCII_STL).description); +SettingsEntryList Settings::localAppParameterList("printing", "localAppParameterList"); SettingsEntryEnum Settings::renderBackend3D("advanced", "renderBackend3D", {{"CGAL", "CGAL (old/slow)"}, {"Manifold", "Manifold (new/fast)"}}, "CGAL"); diff --git a/src/gui/Settings.h b/src/gui/Settings.h index 87bef231819..27de94f563d 100644 --- a/src/gui/Settings.h +++ b/src/gui/Settings.h @@ -1,9 +1,11 @@ #pragma once #include +#include #include #include #include +#include namespace Settings { @@ -152,6 +154,99 @@ class SettingsEntryEnum : public SettingsEntry std::string _defaultValue; }; +class LocalAppParameterType +{ +public: + enum Value : uint8_t + { + invalid, + string, + file, + dir, + extension, + source, + sourcedir + }; + + LocalAppParameterType() = default; + constexpr LocalAppParameterType(Value v) : value(v) { } + constexpr operator Value() const { return value; } + explicit operator bool() const = delete; + + std::string icon() const { + switch (value) { + case string: return "parameter"; + case file: return "orthogonal"; + case dir: return "parameter"; + case extension: return "parameter"; + case source: return "parameter"; + case sourcedir: return "parameter"; + default: return "*invalid*"; + } + } + + std::string description() const { + switch (value) { + case string: return ""; + case file: return ""; + case dir: return ""; + case extension: return ""; + case source: return ""; + case sourcedir: return ""; + default: return "*invalid*"; + } + } + +private: + Value value; +}; + +struct LocalAppParameter { + LocalAppParameterType type; + std::string value; + + LocalAppParameter() : type(LocalAppParameterType::string), value("") {} + LocalAppParameter(const LocalAppParameterType t, std::string v) : type(t), value(std::move(v)) {} + operator bool() const { return type != LocalAppParameterType::invalid; } +}; + +template +class SettingsEntryList : public SettingsEntry +{ +public: + SettingsEntryList(const std::string& category, const std::string& name) : + SettingsEntry(category, name) + { + } + + const std::vector& items() const { return _items; } + void setItems(std::vector& items) { _items = items; } + bool isDefault() const override { return _items.empty(); } + std::string encode() const override { + std::ostringstream oss; + for (const auto& item : _items) { + oss << item; + } + return oss.str(); + } + void decode(const std::string& encoded) override { + std::vector items; + std::stringstream ss; + ss << encoded; + while (ss.good()) { + item_type item; + ss >> item; + if (item) { + items.push_back(item); + } + } + setItems(items); + } + +private: + std::vector _items; +}; + class SettingsVisitor; class Settings @@ -178,19 +273,23 @@ class Settings static SettingsEntryBool enableLineNumbers; static SettingsEntryBool enableNumberScrollWheel; static SettingsEntryEnum modifierNumberScrollWheel; + static SettingsEntryString defaultPrintService; static SettingsEntryString printServiceName; static SettingsEntryString printServiceFileFormat; + static SettingsEntryString octoPrintUrl; static SettingsEntryString octoPrintApiKey; static SettingsEntryEnum octoPrintFileFormat; - static SettingsEntryEnum localSlicerFileFormat; static SettingsEntryEnum octoPrintAction; static SettingsEntryString octoPrintSlicerEngine; static SettingsEntryString octoPrintSlicerEngineDesc; static SettingsEntryString octoPrintSlicerProfile; static SettingsEntryString octoPrintSlicerProfileDesc; - static SettingsEntryString localSlicerExecutable; + + static SettingsEntryString localAppExecutable; + static SettingsEntryList localAppParameterList; + static SettingsEntryEnum localAppFileFormat; static SettingsEntryBool manifoldEnabled; static SettingsEntryEnum renderBackend3D; diff --git a/src/gui/SettingsWriter.cc b/src/gui/SettingsWriter.cc index 326eab726cb..987dd69a294 100644 --- a/src/gui/SettingsWriter.cc +++ b/src/gui/SettingsWriter.cc @@ -36,7 +36,8 @@ void SettingsWriter::handle(Settings::SettingsEntry& entry) const { settings.remove(QString::fromStdString(key)); PRINTDB("SettingsWriter D: %s", key.c_str()); } else { - settings.setValue(QString::fromStdString(key), QString::fromStdString(entry.encode())); - PRINTDB("SettingsWriter W: %s = '%s'", key.c_str() % entry.encode().c_str()); + const auto encoded = entry.encode(); + settings.setValue(QString::fromStdString(key), QString::fromStdString(encoded)); + PRINTDB("SettingsWriter W: %s = '%s'", key.c_str() % encoded.c_str()); } } diff --git a/src/gui/ViewportControl.cc b/src/gui/ViewportControl.cc index ce5948a147b..a521a792ff4 100644 --- a/src/gui/ViewportControl.cc +++ b/src/gui/ViewportControl.cc @@ -1,7 +1,4 @@ #include "gui/ViewportControl.h" -#include "utils/printutils.h" -#include "gui/MainWindow.h" -#include "gui/QGLView.h" #include #include #include @@ -14,6 +11,11 @@ #include #include +#include "utils/printutils.h" +#include "gui/MainWindow.h" +#include "gui/QGLView.h" +#include "openscad_gui.h" + ViewportControl::ViewportControl(QWidget *parent) : QWidget(parent) { setupUi(this); @@ -47,25 +49,14 @@ void ViewportControl::setMainWindow(MainWindow *mainWindow) this->qglview = mainWindow->qglview; } -bool ViewportControl::isLightTheme() -{ - bool ret = true; - if (mainWindow) { - ret = mainWindow->isLightTheme(); - } else { - std::cout << "ViewportControl: You need to set the mainWindow before calling isLightTheme" << std::endl; - } - return ret; -} - QString ViewportControl::yellowHintBackground() { - return {isLightTheme() ? "background-color:#ffffaa;" : "background-color:#303006;"}; + return {OpenSCAD::isDarkMode() ? "background-color:#303006;" : "background-color:#ffffaa;"}; } QString ViewportControl::redHintBackground() { - return {isLightTheme() ? "background-color:#ffaaaa;" : "background-color:#502020;"}; + return {OpenSCAD::isDarkMode() ? "background-color:#502020;" : "background-color:#ffaaaa;"}; } void ViewportControl::resizeEvent(QResizeEvent *event) diff --git a/src/gui/ViewportControl.h b/src/gui/ViewportControl.h index 655fc8e101b..207e9565128 100644 --- a/src/gui/ViewportControl.h +++ b/src/gui/ViewportControl.h @@ -49,7 +49,6 @@ private slots: void openFile(const QString, int); private: - bool isLightTheme(); void resizeToRatio(); int maxH; int maxW; diff --git a/src/openscad_gui.cc b/src/openscad_gui.cc index e73a8483fef..8bade3ed191 100644 --- a/src/openscad_gui.cc +++ b/src/openscad_gui.cc @@ -31,6 +31,9 @@ #include #include #include +#include +#include +#include #include "core/parsersettings.h" #include "FontCache.h" @@ -69,6 +72,22 @@ extern std::string arg_colorscheme; #define STRINGIFY(x) #x #define TOSTRING(x) STRINGIFY(x) +namespace OpenSCAD { + +bool isDarkMode() { +#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0) + const auto scheme = QGuiApplication::styleHints()->colorScheme(); + return scheme == Qt::ColorScheme::Dark; +#else + const QPalette defaultPalette; + const auto text = defaultPalette.color(QPalette::WindowText); + const auto window = defaultPalette.color(QPalette::Window); + return text.lightness() > window.lightness(); +#endif // QT_VERSION +} + +} + namespace { // Only if "fileName" is not absolute, prepend the "absoluteBase". diff --git a/src/openscad_gui.h b/src/openscad_gui.h index f28f8366d96..96ac42331c0 100644 --- a/src/openscad_gui.h +++ b/src/openscad_gui.h @@ -31,5 +31,10 @@ #include +namespace OpenSCAD { + +bool isDarkMode(); + +} int gui(std::vector& inputFiles, const std::filesystem::path& original_path, int argc, char **argv); From 2c5ed91655a1ec6fdf181ea99978df0d1288c0aa Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Sat, 4 Jan 2025 20:01:40 -0500 Subject: [PATCH 02/10] macOS build fix --- src/gui/ExternalToolInterface.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/ExternalToolInterface.cc b/src/gui/ExternalToolInterface.cc index f35f958f265..2dbea31947f 100644 --- a/src/gui/ExternalToolInterface.cc +++ b/src/gui/ExternalToolInterface.cc @@ -102,7 +102,7 @@ bool LocalProgramService::process(const std::string& displayName, std::function< } #ifdef Q_OS_MACOS - if (!process.startDetached("open", {"-a", slicer, QString::fromStdString(exportedFilename_)})) { + if (!process.startDetached("open", {"-a", application, QString::fromStdString(exportedFilename_)})) { #else QStringList args; const auto info = QFileInfo(QString::fromStdString(exportedFilename_)); From 5d72d829cffe46a119eb5faf37e6aafec2588b9f Mon Sep 17 00:00:00 2001 From: Torsten Paul Date: Sun, 5 Jan 2025 02:18:57 +0100 Subject: [PATCH 03/10] Move templated function to header file. --- src/gui/Preferences.cc | 15 --------------- src/gui/Preferences.h | 17 +++++++++++++++-- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/gui/Preferences.cc b/src/gui/Preferences.cc index 5a601d838b0..823b3a671b2 100644 --- a/src/gui/Preferences.cc +++ b/src/gui/Preferences.cc @@ -56,7 +56,6 @@ #include "gui/AutoUpdater.h" #include "Feature.h" #include "gui/Settings.h" -#include "openscad_gui.h" #include "printutils.h" #ifdef ENABLE_CGAL #include "geometry/cgal/CGALCache.h" @@ -922,20 +921,6 @@ void Preferences::on_toolButtonLocalAppParameterRemove_clicked() } } -template -QListWidgetItem * Preferences::createListItem(const item_type& itemType, const QString& text, bool editable) { - const auto iconResource = QString(":/icons/svg-default/%1%2.svg").arg(QString::fromStdString(itemType.icon()), OpenSCAD::isDarkMode() ? "-white" : ""); - std::string description = itemType.description(); - const auto itemText = description.empty() ? text : QString::fromStdString(description); - const auto listItem = new QListWidgetItem(QIcon(iconResource), itemText, - nullptr, - static_cast(QListWidgetItem::UserType) + static_cast(itemType)); - if (editable) { - listItem->setFlags(listItem->flags() | Qt::ItemIsEditable); - } - return listItem; -} - void Preferences::insertListItem(QListWidget *listBox, QListWidgetItem *listItem) { const auto hasSelection = listBox->selectionModel()->hasSelection(); const auto pos = hasSelection ? listBox->selectionModel()->currentIndex().row() + 1 : listBox->count(); diff --git a/src/gui/Preferences.h b/src/gui/Preferences.h index b45e5e81324..2f6a6ad379a 100644 --- a/src/gui/Preferences.h +++ b/src/gui/Preferences.h @@ -17,6 +17,7 @@ #include #include "gui/qtgettext.h" // IWYU pragma: keep +#include "openscad_gui.h" #include "ui_Preferences.h" #include "gui/Settings.h" #include "gui/InitConfigurator.h" @@ -36,10 +37,22 @@ class Preferences : public QMainWindow, public Ui::Preferences, public InitConfi void apply_win() const; void updateGUI(); void fireEditorConfigChanged() const; - template - QListWidgetItem * createListItem(const item_type& type, const QString& text = "", bool editable = false); void insertListItem(QListWidget *listBox, QListWidgetItem *listItem); + template + QListWidgetItem * createListItem(const item_type& itemType, const QString& text = "", bool editable = false) { + const auto iconResource = QString(":/icons/svg-default/%1%2.svg").arg(QString::fromStdString(itemType.icon()), OpenSCAD::isDarkMode() ? "-white" : ""); + std::string description = itemType.description(); + const auto itemText = description.empty() ? text : QString::fromStdString(description); + const auto listItem = new QListWidgetItem(QIcon(iconResource), itemText, + nullptr, + static_cast(QListWidgetItem::UserType) + static_cast(itemType)); + if (editable) { + listItem->setFlags(listItem->flags() | Qt::ItemIsEditable); + } + return listItem; + } + public slots: void actionTriggered(class QAction *); void featuresCheckBoxToggled(bool); From 78db9ea4c35b04ac977570afb7abffe8d8f6c1e5 Mon Sep 17 00:00:00 2001 From: Torsten Paul Date: Sun, 5 Jan 2025 03:59:56 +0100 Subject: [PATCH 04/10] Move icons into light/dark theme. --- CMakeLists.txt | 6 +- resources/common.qrc.in | 121 ------------------ .../icons.scad => icons-svg-default.scad} | 0 resources/icons/svg-default-dark/index.theme | 15 +++ .../svg/add.svg} | 0 .../svg/animate.svg} | 0 .../svg/animate_disabled.svg} | 0 .../svg/animate_pause.svg} | 0 .../svg/axes.svg} | 0 .../svg/crosshairs.svg} | 0 .../svg/down.svg} | 0 .../svg/edit-copy.svg} | 0 .../svg/export-3mf.svg} | 0 .../svg/export-amf.svg} | 0 .../svg/export-csg.svg} | 0 .../svg/export-dxf.svg} | 0 .../svg/export-obj.svg} | 0 .../svg/export-off.svg} | 0 .../svg/export-pdf.svg} | 0 .../svg/export-png.svg} | 0 .../svg/export-pov.svg} | 0 .../svg/export-stl.svg} | 0 .../svg/export-svg.svg} | 0 .../svg/export-wrl.svg} | 0 .../svg/indent.svg} | 0 .../svg/measure-ang.svg} | 0 .../svg/measure-dist.svg} | 0 .../svg/new.svg} | 0 .../svg/open.svg} | 0 .../svg/orthogonal.svg} | 0 .../svg/parameter.svg} | 0 .../svg/perspective.svg} | 0 .../svg/preview.svg} | 0 .../svg/redo.svg} | 0 .../svg/remove.svg} | 0 .../svg/render.svg} | 0 .../svg/reset-view.svg} | 0 .../svg/save.svg} | 0 .../svg/scalemarkers.svg} | 0 .../svg/send.svg} | 0 .../svg/show-edges.svg} | 0 .../svg/surface.svg} | 0 .../svg/throwntogether.svg} | 0 .../svg/undo.svg} | 0 .../svg/unindent.svg} | 0 .../svg/up.svg} | 0 .../svg/vcr-control-end.svg} | 0 .../svg/vcr-control-pause.svg} | 0 .../svg/vcr-control-play.svg} | 0 .../svg/vcr-control-start.svg} | 0 .../svg/vcr-control-step-back.svg} | 0 .../svg/vcr-control-step-forward.svg} | 0 .../svg/view-back.svg} | 0 .../svg/view-bottom.svg} | 0 .../svg/view-front.svg} | 0 .../svg/view-left.svg} | 0 .../svg/view-right.svg} | 0 .../svg/view-top.svg} | 0 .../svg/wireframe.svg} | 0 .../svg/zoom-all.svg} | 0 .../svg/zoom-in.svg} | 0 .../svg/zoom-out.svg} | 0 .../svg/zoom-text-in.svg} | 0 .../svg/zoom-text-out.svg} | 0 resources/icons/svg-default/index.theme | 15 +++ resources/icons/svg-default/{ => svg}/add.svg | 0 .../icons/svg-default/{ => svg}/animate.svg | 0 .../{ => svg}/animate_disabled.svg | 0 .../svg-default/{ => svg}/animate_pause.svg | 0 .../icons/svg-default/{ => svg}/axes.svg | 0 .../svg-default/{ => svg}/crosshairs.svg | 0 .../icons/svg-default/{ => svg}/down.svg | 0 .../icons/svg-default/{ => svg}/edit-copy.svg | 0 .../svg-default/{ => svg}/export-3mf.svg | 0 .../svg-default/{ => svg}/export-amf.svg | 0 .../svg-default/{ => svg}/export-csg.svg | 0 .../svg-default/{ => svg}/export-dxf.svg | 0 .../svg-default/{ => svg}/export-obj.svg | 0 .../svg-default/{ => svg}/export-off.svg | 0 .../svg-default/{ => svg}/export-pdf.svg | 0 .../svg-default/{ => svg}/export-png.svg | 0 .../svg-default/{ => svg}/export-pov.svg | 0 .../svg-default/{ => svg}/export-stl.svg | 0 .../svg-default/{ => svg}/export-svg.svg | 0 .../svg-default/{ => svg}/export-wrl.svg | 0 .../icons/svg-default/{ => svg}/indent.svg | 0 .../svg-default/{ => svg}/measure-ang.svg | 0 .../svg-default/{ => svg}/measure-dist.svg | 0 resources/icons/svg-default/{ => svg}/new.svg | 0 .../icons/svg-default/{ => svg}/open.svg | 0 .../svg-default/{ => svg}/orthogonal.svg | 0 .../icons/svg-default/{ => svg}/parameter.svg | 0 .../svg-default/{ => svg}/perspective.svg | 0 .../icons/svg-default/{ => svg}/preview.svg | 0 .../icons/svg-default/{ => svg}/redo.svg | 0 .../icons/svg-default/{ => svg}/remove.svg | 0 .../icons/svg-default/{ => svg}/render.svg | 0 .../svg-default/{ => svg}/reset-view.svg | 0 .../icons/svg-default/{ => svg}/save.svg | 0 .../svg-default/{ => svg}/scalemarkers.svg | 0 .../icons/svg-default/{ => svg}/send.svg | 0 .../svg-default/{ => svg}/show-edges.svg | 0 .../icons/svg-default/{ => svg}/surface.svg | 0 .../svg-default/{ => svg}/throwntogether.svg | 0 .../icons/svg-default/{ => svg}/undo.svg | 0 .../icons/svg-default/{ => svg}/unindent.svg | 0 resources/icons/svg-default/{ => svg}/up.svg | 0 .../svg-default/{ => svg}/vcr-control-end.svg | 0 .../{ => svg}/vcr-control-pause.svg | 0 .../{ => svg}/vcr-control-play.svg | 0 .../{ => svg}/vcr-control-start.svg | 0 .../{ => svg}/vcr-control-step-back.svg | 0 .../{ => svg}/vcr-control-step-forward.svg | 0 .../icons/svg-default/{ => svg}/view-back.svg | 0 .../svg-default/{ => svg}/view-bottom.svg | 0 .../svg-default/{ => svg}/view-front.svg | 0 .../icons/svg-default/{ => svg}/view-left.svg | 0 .../svg-default/{ => svg}/view-right.svg | 0 .../icons/svg-default/{ => svg}/view-top.svg | 0 .../icons/svg-default/{ => svg}/wireframe.svg | 0 .../icons/svg-default/{ => svg}/zoom-all.svg | 0 .../icons/svg-default/{ => svg}/zoom-in.svg | 0 .../icons/svg-default/{ => svg}/zoom-out.svg | 0 .../svg-default/{ => svg}/zoom-text-in.svg | 0 .../svg-default/{ => svg}/zoom-text-out.svg | 0 scripts/generate-svg-icons.sh | 32 ++++- src/gui/MainWindow.cc | 10 -- src/gui/MainWindow.ui | 32 +++++ src/gui/Preferences.ui | 14 +- src/openscad_gui.cc | 2 + 130 files changed, 100 insertions(+), 147 deletions(-) rename resources/icons/{svg-default/icons.scad => icons-svg-default.scad} (100%) create mode 100644 resources/icons/svg-default-dark/index.theme rename resources/icons/{svg-default/add-white.svg => svg-default-dark/svg/add.svg} (100%) rename resources/icons/{svg-default/animate-white.svg => svg-default-dark/svg/animate.svg} (100%) rename resources/icons/{svg-default/animate_disabled-white.svg => svg-default-dark/svg/animate_disabled.svg} (100%) rename resources/icons/{svg-default/animate_pause-white.svg => svg-default-dark/svg/animate_pause.svg} (100%) rename resources/icons/{svg-default/axes-white.svg => svg-default-dark/svg/axes.svg} (100%) rename resources/icons/{svg-default/crosshairs-white.svg => svg-default-dark/svg/crosshairs.svg} (100%) rename resources/icons/{svg-default/down-white.svg => svg-default-dark/svg/down.svg} (100%) rename resources/icons/{svg-default/edit-copy-white.svg => svg-default-dark/svg/edit-copy.svg} (100%) rename resources/icons/{svg-default/export-3mf-white.svg => svg-default-dark/svg/export-3mf.svg} (100%) rename resources/icons/{svg-default/export-amf-white.svg => svg-default-dark/svg/export-amf.svg} (100%) rename resources/icons/{svg-default/export-csg-white.svg => svg-default-dark/svg/export-csg.svg} (100%) rename resources/icons/{svg-default/export-dxf-white.svg => svg-default-dark/svg/export-dxf.svg} (100%) rename resources/icons/{svg-default/export-obj-white.svg => svg-default-dark/svg/export-obj.svg} (100%) rename resources/icons/{svg-default/export-off-white.svg => svg-default-dark/svg/export-off.svg} (100%) rename resources/icons/{svg-default/export-pdf-white.svg => svg-default-dark/svg/export-pdf.svg} (100%) rename resources/icons/{svg-default/export-png-white.svg => svg-default-dark/svg/export-png.svg} (100%) rename resources/icons/{svg-default/export-pov-white.svg => svg-default-dark/svg/export-pov.svg} (100%) rename resources/icons/{svg-default/export-stl-white.svg => svg-default-dark/svg/export-stl.svg} (100%) rename resources/icons/{svg-default/export-svg-white.svg => svg-default-dark/svg/export-svg.svg} (100%) rename resources/icons/{svg-default/export-wrl-white.svg => svg-default-dark/svg/export-wrl.svg} (100%) rename resources/icons/{svg-default/indent-white.svg => svg-default-dark/svg/indent.svg} (100%) rename resources/icons/{svg-default/measure-ang-white.svg => svg-default-dark/svg/measure-ang.svg} (100%) rename resources/icons/{svg-default/measure-dist-white.svg => svg-default-dark/svg/measure-dist.svg} (100%) rename resources/icons/{svg-default/new-white.svg => svg-default-dark/svg/new.svg} (100%) rename resources/icons/{svg-default/open-white.svg => svg-default-dark/svg/open.svg} (100%) rename resources/icons/{svg-default/orthogonal-white.svg => svg-default-dark/svg/orthogonal.svg} (100%) rename resources/icons/{svg-default/parameter-white.svg => svg-default-dark/svg/parameter.svg} (100%) rename resources/icons/{svg-default/perspective-white.svg => svg-default-dark/svg/perspective.svg} (100%) rename resources/icons/{svg-default/preview-white.svg => svg-default-dark/svg/preview.svg} (100%) rename resources/icons/{svg-default/redo-white.svg => svg-default-dark/svg/redo.svg} (100%) rename resources/icons/{svg-default/remove-white.svg => svg-default-dark/svg/remove.svg} (100%) rename resources/icons/{svg-default/render-white.svg => svg-default-dark/svg/render.svg} (100%) rename resources/icons/{svg-default/reset-view-white.svg => svg-default-dark/svg/reset-view.svg} (100%) rename resources/icons/{svg-default/save-white.svg => svg-default-dark/svg/save.svg} (100%) rename resources/icons/{svg-default/scalemarkers-white.svg => svg-default-dark/svg/scalemarkers.svg} (100%) rename resources/icons/{svg-default/send-white.svg => svg-default-dark/svg/send.svg} (100%) rename resources/icons/{svg-default/show-edges-white.svg => svg-default-dark/svg/show-edges.svg} (100%) rename resources/icons/{svg-default/surface-white.svg => svg-default-dark/svg/surface.svg} (100%) rename resources/icons/{svg-default/throwntogether-white.svg => svg-default-dark/svg/throwntogether.svg} (100%) rename resources/icons/{svg-default/undo-white.svg => svg-default-dark/svg/undo.svg} (100%) rename resources/icons/{svg-default/unindent-white.svg => svg-default-dark/svg/unindent.svg} (100%) rename resources/icons/{svg-default/up-white.svg => svg-default-dark/svg/up.svg} (100%) rename resources/icons/{svg-default/vcr-control-end-white.svg => svg-default-dark/svg/vcr-control-end.svg} (100%) rename resources/icons/{svg-default/vcr-control-pause-white.svg => svg-default-dark/svg/vcr-control-pause.svg} (100%) rename resources/icons/{svg-default/vcr-control-play-white.svg => svg-default-dark/svg/vcr-control-play.svg} (100%) rename resources/icons/{svg-default/vcr-control-start-white.svg => svg-default-dark/svg/vcr-control-start.svg} (100%) rename resources/icons/{svg-default/vcr-control-step-back-white.svg => svg-default-dark/svg/vcr-control-step-back.svg} (100%) rename resources/icons/{svg-default/vcr-control-step-forward-white.svg => svg-default-dark/svg/vcr-control-step-forward.svg} (100%) rename resources/icons/{svg-default/view-back-white.svg => svg-default-dark/svg/view-back.svg} (100%) rename resources/icons/{svg-default/view-bottom-white.svg => svg-default-dark/svg/view-bottom.svg} (100%) rename resources/icons/{svg-default/view-front-white.svg => svg-default-dark/svg/view-front.svg} (100%) rename resources/icons/{svg-default/view-left-white.svg => svg-default-dark/svg/view-left.svg} (100%) rename resources/icons/{svg-default/view-right-white.svg => svg-default-dark/svg/view-right.svg} (100%) rename resources/icons/{svg-default/view-top-white.svg => svg-default-dark/svg/view-top.svg} (100%) rename resources/icons/{svg-default/wireframe-white.svg => svg-default-dark/svg/wireframe.svg} (100%) rename resources/icons/{svg-default/zoom-all-white.svg => svg-default-dark/svg/zoom-all.svg} (100%) rename resources/icons/{svg-default/zoom-in-white.svg => svg-default-dark/svg/zoom-in.svg} (100%) rename resources/icons/{svg-default/zoom-out-white.svg => svg-default-dark/svg/zoom-out.svg} (100%) rename resources/icons/{svg-default/zoom-text-in-white.svg => svg-default-dark/svg/zoom-text-in.svg} (100%) rename resources/icons/{svg-default/zoom-text-out-white.svg => svg-default-dark/svg/zoom-text-out.svg} (100%) create mode 100644 resources/icons/svg-default/index.theme rename resources/icons/svg-default/{ => svg}/add.svg (100%) rename resources/icons/svg-default/{ => svg}/animate.svg (100%) rename resources/icons/svg-default/{ => svg}/animate_disabled.svg (100%) rename resources/icons/svg-default/{ => svg}/animate_pause.svg (100%) rename resources/icons/svg-default/{ => svg}/axes.svg (100%) rename resources/icons/svg-default/{ => svg}/crosshairs.svg (100%) rename resources/icons/svg-default/{ => svg}/down.svg (100%) rename resources/icons/svg-default/{ => svg}/edit-copy.svg (100%) rename resources/icons/svg-default/{ => svg}/export-3mf.svg (100%) rename resources/icons/svg-default/{ => svg}/export-amf.svg (100%) rename resources/icons/svg-default/{ => svg}/export-csg.svg (100%) rename resources/icons/svg-default/{ => svg}/export-dxf.svg (100%) rename resources/icons/svg-default/{ => svg}/export-obj.svg (100%) rename resources/icons/svg-default/{ => svg}/export-off.svg (100%) rename resources/icons/svg-default/{ => svg}/export-pdf.svg (100%) rename resources/icons/svg-default/{ => svg}/export-png.svg (100%) rename resources/icons/svg-default/{ => svg}/export-pov.svg (100%) rename resources/icons/svg-default/{ => svg}/export-stl.svg (100%) rename resources/icons/svg-default/{ => svg}/export-svg.svg (100%) rename resources/icons/svg-default/{ => svg}/export-wrl.svg (100%) rename resources/icons/svg-default/{ => svg}/indent.svg (100%) rename resources/icons/svg-default/{ => svg}/measure-ang.svg (100%) rename resources/icons/svg-default/{ => svg}/measure-dist.svg (100%) rename resources/icons/svg-default/{ => svg}/new.svg (100%) rename resources/icons/svg-default/{ => svg}/open.svg (100%) rename resources/icons/svg-default/{ => svg}/orthogonal.svg (100%) rename resources/icons/svg-default/{ => svg}/parameter.svg (100%) rename resources/icons/svg-default/{ => svg}/perspective.svg (100%) rename resources/icons/svg-default/{ => svg}/preview.svg (100%) rename resources/icons/svg-default/{ => svg}/redo.svg (100%) rename resources/icons/svg-default/{ => svg}/remove.svg (100%) rename resources/icons/svg-default/{ => svg}/render.svg (100%) rename resources/icons/svg-default/{ => svg}/reset-view.svg (100%) rename resources/icons/svg-default/{ => svg}/save.svg (100%) rename resources/icons/svg-default/{ => svg}/scalemarkers.svg (100%) rename resources/icons/svg-default/{ => svg}/send.svg (100%) rename resources/icons/svg-default/{ => svg}/show-edges.svg (100%) rename resources/icons/svg-default/{ => svg}/surface.svg (100%) rename resources/icons/svg-default/{ => svg}/throwntogether.svg (100%) rename resources/icons/svg-default/{ => svg}/undo.svg (100%) rename resources/icons/svg-default/{ => svg}/unindent.svg (100%) rename resources/icons/svg-default/{ => svg}/up.svg (100%) rename resources/icons/svg-default/{ => svg}/vcr-control-end.svg (100%) rename resources/icons/svg-default/{ => svg}/vcr-control-pause.svg (100%) rename resources/icons/svg-default/{ => svg}/vcr-control-play.svg (100%) rename resources/icons/svg-default/{ => svg}/vcr-control-start.svg (100%) rename resources/icons/svg-default/{ => svg}/vcr-control-step-back.svg (100%) rename resources/icons/svg-default/{ => svg}/vcr-control-step-forward.svg (100%) rename resources/icons/svg-default/{ => svg}/view-back.svg (100%) rename resources/icons/svg-default/{ => svg}/view-bottom.svg (100%) rename resources/icons/svg-default/{ => svg}/view-front.svg (100%) rename resources/icons/svg-default/{ => svg}/view-left.svg (100%) rename resources/icons/svg-default/{ => svg}/view-right.svg (100%) rename resources/icons/svg-default/{ => svg}/view-top.svg (100%) rename resources/icons/svg-default/{ => svg}/wireframe.svg (100%) rename resources/icons/svg-default/{ => svg}/zoom-all.svg (100%) rename resources/icons/svg-default/{ => svg}/zoom-in.svg (100%) rename resources/icons/svg-default/{ => svg}/zoom-out.svg (100%) rename resources/icons/svg-default/{ => svg}/zoom-text-in.svg (100%) rename resources/icons/svg-default/{ => svg}/zoom-text-out.svg (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index e9b88bb7862..e819dd37ca5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1285,7 +1285,11 @@ set(RESOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/resources) if(HEADLESS) target_compile_definitions(OpenSCAD PRIVATE OPENSCAD_NOGUI) else() - list(APPEND RESOURCE_FILES ${RESOURCE_DIR}/common.qrc) + list(APPEND RESOURCE_FILES + ${RESOURCE_DIR}/common.qrc + ${RESOURCE_DIR}/icons-svg-default.qrc + ${RESOURCE_DIR}/icons-svg-default-dark.qrc + ) # GUI_UIS for .ui files to be indexed by Qt Creator despite AUTOUIC usage # GUI_HEADERS for .h files to be indexed by Qt Creator despite AUTOUIC usage list(APPEND Sources ${GUI_SOURCES} ${GUI_HEADER_ONLY} ${GUI_UIS} ${GUI_HEADERS}) diff --git a/resources/common.qrc.in b/resources/common.qrc.in index dc84d2b29f8..66c213cd6d4 100644 --- a/resources/common.qrc.in +++ b/resources/common.qrc.in @@ -28,126 +28,5 @@ icons/background-welcome-screen.svg icons/stopbutton.png icons/background.png - - icons/svg-default/add.svg - icons/svg-default/add-white.svg - icons/svg-default/animate_disabled.svg - icons/svg-default/animate_disabled-white.svg - icons/svg-default/animate_pause.svg - icons/svg-default/animate_pause-white.svg - icons/svg-default/animate.svg - icons/svg-default/animate-white.svg - icons/svg-default/axes.svg - icons/svg-default/axes-white.svg - icons/svg-default/crosshairs.svg - icons/svg-default/crosshairs-white.svg - icons/svg-default/down.svg - icons/svg-default/down-white.svg - icons/svg-default/edit-copy.svg - icons/svg-default/edit-copy-white.svg - icons/svg-default/export-3mf.svg - icons/svg-default/export-3mf-white.svg - icons/svg-default/export-amf.svg - icons/svg-default/export-amf-white.svg - icons/svg-default/export-csg.svg - icons/svg-default/export-csg-white.svg - icons/svg-default/export-dxf.svg - icons/svg-default/export-dxf-white.svg - icons/svg-default/export-obj.svg - icons/svg-default/export-obj-white.svg - icons/svg-default/export-off.svg - icons/svg-default/export-off-white.svg - icons/svg-default/export-pdf.svg - icons/svg-default/export-pdf-white.svg - icons/svg-default/export-png.svg - icons/svg-default/export-png-white.svg - icons/svg-default/export-pov.svg - icons/svg-default/export-pov-white.svg - icons/svg-default/export-stl.svg - icons/svg-default/export-stl-white.svg - icons/svg-default/export-svg.svg - icons/svg-default/export-svg-white.svg - icons/svg-default/export-wrl.svg - icons/svg-default/export-wrl-white.svg - icons/svg-default/indent.svg - icons/svg-default/indent-white.svg - icons/svg-default/measure-ang.svg - icons/svg-default/measure-ang-white.svg - icons/svg-default/measure-dist.svg - icons/svg-default/measure-dist-white.svg - icons/svg-default/new.svg - icons/svg-default/new-white.svg - icons/svg-default/open.svg - icons/svg-default/open-white.svg - icons/svg-default/orthogonal.svg - icons/svg-default/orthogonal-white.svg - icons/svg-default/parameter.svg - icons/svg-default/parameter-white.svg - icons/svg-default/perspective.svg - icons/svg-default/perspective-white.svg - icons/svg-default/preview.svg - icons/svg-default/preview-white.svg - icons/svg-default/redo.svg - icons/svg-default/redo-white.svg - icons/svg-default/remove.svg - icons/svg-default/remove-white.svg - icons/svg-default/render.svg - icons/svg-default/render-white.svg - icons/svg-default/reset-view.svg - icons/svg-default/reset-view-white.svg - icons/svg-default/save.svg - icons/svg-default/save-white.svg - icons/svg-default/scalemarkers.svg - icons/svg-default/scalemarkers-white.svg - icons/svg-default/send.svg - icons/svg-default/send-white.svg - icons/svg-default/show-edges.svg - icons/svg-default/show-edges-white.svg - icons/svg-default/surface.svg - icons/svg-default/surface-white.svg - icons/svg-default/throwntogether.svg - icons/svg-default/throwntogether-white.svg - icons/svg-default/undo.svg - icons/svg-default/undo-white.svg - icons/svg-default/unindent.svg - icons/svg-default/unindent-white.svg - icons/svg-default/up.svg - icons/svg-default/up-white.svg - icons/svg-default/vcr-control-end.svg - icons/svg-default/vcr-control-end-white.svg - icons/svg-default/vcr-control-pause.svg - icons/svg-default/vcr-control-pause-white.svg - icons/svg-default/vcr-control-play.svg - icons/svg-default/vcr-control-play-white.svg - icons/svg-default/vcr-control-start.svg - icons/svg-default/vcr-control-start-white.svg - icons/svg-default/vcr-control-step-back.svg - icons/svg-default/vcr-control-step-back-white.svg - icons/svg-default/vcr-control-step-forward.svg - icons/svg-default/vcr-control-step-forward-white.svg - icons/svg-default/view-back.svg - icons/svg-default/view-back-white.svg - icons/svg-default/view-bottom.svg - icons/svg-default/view-bottom-white.svg - icons/svg-default/view-front.svg - icons/svg-default/view-front-white.svg - icons/svg-default/view-left.svg - icons/svg-default/view-left-white.svg - icons/svg-default/view-right.svg - icons/svg-default/view-right-white.svg - icons/svg-default/view-top.svg - icons/svg-default/view-top-white.svg - icons/svg-default/wireframe.svg - icons/svg-default/wireframe-white.svg - icons/svg-default/zoom-all.svg - icons/svg-default/zoom-all-white.svg - icons/svg-default/zoom-in.svg - icons/svg-default/zoom-in-white.svg - icons/svg-default/zoom-out.svg - icons/svg-default/zoom-out-white.svg - icons/svg-default/zoom-text-in.svg - icons/svg-default/zoom-text-in-white.svg - icons/svg-default/zoom-text-out.svg - icons/svg-default/zoom-text-out-white.svg diff --git a/resources/icons/svg-default/icons.scad b/resources/icons/icons-svg-default.scad similarity index 100% rename from resources/icons/svg-default/icons.scad rename to resources/icons/icons-svg-default.scad diff --git a/resources/icons/svg-default-dark/index.theme b/resources/icons/svg-default-dark/index.theme new file mode 100644 index 00000000000..b56148547e4 --- /dev/null +++ b/resources/icons/svg-default-dark/index.theme @@ -0,0 +1,15 @@ +[Icon Theme] +Name=svg-default-dark +Comment=OpenSCAD SVG icons, dark theme + +PanelDefault=48 +PanelSizes=48 + +Directories=svg + +[svg] +Size=48 +Context=Applications +MinSize=16 +MaxSize=512 +Type=Scalable diff --git a/resources/icons/svg-default/add-white.svg b/resources/icons/svg-default-dark/svg/add.svg similarity index 100% rename from resources/icons/svg-default/add-white.svg rename to resources/icons/svg-default-dark/svg/add.svg diff --git a/resources/icons/svg-default/animate-white.svg b/resources/icons/svg-default-dark/svg/animate.svg similarity index 100% rename from resources/icons/svg-default/animate-white.svg rename to resources/icons/svg-default-dark/svg/animate.svg diff --git a/resources/icons/svg-default/animate_disabled-white.svg b/resources/icons/svg-default-dark/svg/animate_disabled.svg similarity index 100% rename from resources/icons/svg-default/animate_disabled-white.svg rename to resources/icons/svg-default-dark/svg/animate_disabled.svg diff --git a/resources/icons/svg-default/animate_pause-white.svg b/resources/icons/svg-default-dark/svg/animate_pause.svg similarity index 100% rename from resources/icons/svg-default/animate_pause-white.svg rename to resources/icons/svg-default-dark/svg/animate_pause.svg diff --git a/resources/icons/svg-default/axes-white.svg b/resources/icons/svg-default-dark/svg/axes.svg similarity index 100% rename from resources/icons/svg-default/axes-white.svg rename to resources/icons/svg-default-dark/svg/axes.svg diff --git a/resources/icons/svg-default/crosshairs-white.svg b/resources/icons/svg-default-dark/svg/crosshairs.svg similarity index 100% rename from resources/icons/svg-default/crosshairs-white.svg rename to resources/icons/svg-default-dark/svg/crosshairs.svg diff --git a/resources/icons/svg-default/down-white.svg b/resources/icons/svg-default-dark/svg/down.svg similarity index 100% rename from resources/icons/svg-default/down-white.svg rename to resources/icons/svg-default-dark/svg/down.svg diff --git a/resources/icons/svg-default/edit-copy-white.svg b/resources/icons/svg-default-dark/svg/edit-copy.svg similarity index 100% rename from resources/icons/svg-default/edit-copy-white.svg rename to resources/icons/svg-default-dark/svg/edit-copy.svg diff --git a/resources/icons/svg-default/export-3mf-white.svg b/resources/icons/svg-default-dark/svg/export-3mf.svg similarity index 100% rename from resources/icons/svg-default/export-3mf-white.svg rename to resources/icons/svg-default-dark/svg/export-3mf.svg diff --git a/resources/icons/svg-default/export-amf-white.svg b/resources/icons/svg-default-dark/svg/export-amf.svg similarity index 100% rename from resources/icons/svg-default/export-amf-white.svg rename to resources/icons/svg-default-dark/svg/export-amf.svg diff --git a/resources/icons/svg-default/export-csg-white.svg b/resources/icons/svg-default-dark/svg/export-csg.svg similarity index 100% rename from resources/icons/svg-default/export-csg-white.svg rename to resources/icons/svg-default-dark/svg/export-csg.svg diff --git a/resources/icons/svg-default/export-dxf-white.svg b/resources/icons/svg-default-dark/svg/export-dxf.svg similarity index 100% rename from resources/icons/svg-default/export-dxf-white.svg rename to resources/icons/svg-default-dark/svg/export-dxf.svg diff --git a/resources/icons/svg-default/export-obj-white.svg b/resources/icons/svg-default-dark/svg/export-obj.svg similarity index 100% rename from resources/icons/svg-default/export-obj-white.svg rename to resources/icons/svg-default-dark/svg/export-obj.svg diff --git a/resources/icons/svg-default/export-off-white.svg b/resources/icons/svg-default-dark/svg/export-off.svg similarity index 100% rename from resources/icons/svg-default/export-off-white.svg rename to resources/icons/svg-default-dark/svg/export-off.svg diff --git a/resources/icons/svg-default/export-pdf-white.svg b/resources/icons/svg-default-dark/svg/export-pdf.svg similarity index 100% rename from resources/icons/svg-default/export-pdf-white.svg rename to resources/icons/svg-default-dark/svg/export-pdf.svg diff --git a/resources/icons/svg-default/export-png-white.svg b/resources/icons/svg-default-dark/svg/export-png.svg similarity index 100% rename from resources/icons/svg-default/export-png-white.svg rename to resources/icons/svg-default-dark/svg/export-png.svg diff --git a/resources/icons/svg-default/export-pov-white.svg b/resources/icons/svg-default-dark/svg/export-pov.svg similarity index 100% rename from resources/icons/svg-default/export-pov-white.svg rename to resources/icons/svg-default-dark/svg/export-pov.svg diff --git a/resources/icons/svg-default/export-stl-white.svg b/resources/icons/svg-default-dark/svg/export-stl.svg similarity index 100% rename from resources/icons/svg-default/export-stl-white.svg rename to resources/icons/svg-default-dark/svg/export-stl.svg diff --git a/resources/icons/svg-default/export-svg-white.svg b/resources/icons/svg-default-dark/svg/export-svg.svg similarity index 100% rename from resources/icons/svg-default/export-svg-white.svg rename to resources/icons/svg-default-dark/svg/export-svg.svg diff --git a/resources/icons/svg-default/export-wrl-white.svg b/resources/icons/svg-default-dark/svg/export-wrl.svg similarity index 100% rename from resources/icons/svg-default/export-wrl-white.svg rename to resources/icons/svg-default-dark/svg/export-wrl.svg diff --git a/resources/icons/svg-default/indent-white.svg b/resources/icons/svg-default-dark/svg/indent.svg similarity index 100% rename from resources/icons/svg-default/indent-white.svg rename to resources/icons/svg-default-dark/svg/indent.svg diff --git a/resources/icons/svg-default/measure-ang-white.svg b/resources/icons/svg-default-dark/svg/measure-ang.svg similarity index 100% rename from resources/icons/svg-default/measure-ang-white.svg rename to resources/icons/svg-default-dark/svg/measure-ang.svg diff --git a/resources/icons/svg-default/measure-dist-white.svg b/resources/icons/svg-default-dark/svg/measure-dist.svg similarity index 100% rename from resources/icons/svg-default/measure-dist-white.svg rename to resources/icons/svg-default-dark/svg/measure-dist.svg diff --git a/resources/icons/svg-default/new-white.svg b/resources/icons/svg-default-dark/svg/new.svg similarity index 100% rename from resources/icons/svg-default/new-white.svg rename to resources/icons/svg-default-dark/svg/new.svg diff --git a/resources/icons/svg-default/open-white.svg b/resources/icons/svg-default-dark/svg/open.svg similarity index 100% rename from resources/icons/svg-default/open-white.svg rename to resources/icons/svg-default-dark/svg/open.svg diff --git a/resources/icons/svg-default/orthogonal-white.svg b/resources/icons/svg-default-dark/svg/orthogonal.svg similarity index 100% rename from resources/icons/svg-default/orthogonal-white.svg rename to resources/icons/svg-default-dark/svg/orthogonal.svg diff --git a/resources/icons/svg-default/parameter-white.svg b/resources/icons/svg-default-dark/svg/parameter.svg similarity index 100% rename from resources/icons/svg-default/parameter-white.svg rename to resources/icons/svg-default-dark/svg/parameter.svg diff --git a/resources/icons/svg-default/perspective-white.svg b/resources/icons/svg-default-dark/svg/perspective.svg similarity index 100% rename from resources/icons/svg-default/perspective-white.svg rename to resources/icons/svg-default-dark/svg/perspective.svg diff --git a/resources/icons/svg-default/preview-white.svg b/resources/icons/svg-default-dark/svg/preview.svg similarity index 100% rename from resources/icons/svg-default/preview-white.svg rename to resources/icons/svg-default-dark/svg/preview.svg diff --git a/resources/icons/svg-default/redo-white.svg b/resources/icons/svg-default-dark/svg/redo.svg similarity index 100% rename from resources/icons/svg-default/redo-white.svg rename to resources/icons/svg-default-dark/svg/redo.svg diff --git a/resources/icons/svg-default/remove-white.svg b/resources/icons/svg-default-dark/svg/remove.svg similarity index 100% rename from resources/icons/svg-default/remove-white.svg rename to resources/icons/svg-default-dark/svg/remove.svg diff --git a/resources/icons/svg-default/render-white.svg b/resources/icons/svg-default-dark/svg/render.svg similarity index 100% rename from resources/icons/svg-default/render-white.svg rename to resources/icons/svg-default-dark/svg/render.svg diff --git a/resources/icons/svg-default/reset-view-white.svg b/resources/icons/svg-default-dark/svg/reset-view.svg similarity index 100% rename from resources/icons/svg-default/reset-view-white.svg rename to resources/icons/svg-default-dark/svg/reset-view.svg diff --git a/resources/icons/svg-default/save-white.svg b/resources/icons/svg-default-dark/svg/save.svg similarity index 100% rename from resources/icons/svg-default/save-white.svg rename to resources/icons/svg-default-dark/svg/save.svg diff --git a/resources/icons/svg-default/scalemarkers-white.svg b/resources/icons/svg-default-dark/svg/scalemarkers.svg similarity index 100% rename from resources/icons/svg-default/scalemarkers-white.svg rename to resources/icons/svg-default-dark/svg/scalemarkers.svg diff --git a/resources/icons/svg-default/send-white.svg b/resources/icons/svg-default-dark/svg/send.svg similarity index 100% rename from resources/icons/svg-default/send-white.svg rename to resources/icons/svg-default-dark/svg/send.svg diff --git a/resources/icons/svg-default/show-edges-white.svg b/resources/icons/svg-default-dark/svg/show-edges.svg similarity index 100% rename from resources/icons/svg-default/show-edges-white.svg rename to resources/icons/svg-default-dark/svg/show-edges.svg diff --git a/resources/icons/svg-default/surface-white.svg b/resources/icons/svg-default-dark/svg/surface.svg similarity index 100% rename from resources/icons/svg-default/surface-white.svg rename to resources/icons/svg-default-dark/svg/surface.svg diff --git a/resources/icons/svg-default/throwntogether-white.svg b/resources/icons/svg-default-dark/svg/throwntogether.svg similarity index 100% rename from resources/icons/svg-default/throwntogether-white.svg rename to resources/icons/svg-default-dark/svg/throwntogether.svg diff --git a/resources/icons/svg-default/undo-white.svg b/resources/icons/svg-default-dark/svg/undo.svg similarity index 100% rename from resources/icons/svg-default/undo-white.svg rename to resources/icons/svg-default-dark/svg/undo.svg diff --git a/resources/icons/svg-default/unindent-white.svg b/resources/icons/svg-default-dark/svg/unindent.svg similarity index 100% rename from resources/icons/svg-default/unindent-white.svg rename to resources/icons/svg-default-dark/svg/unindent.svg diff --git a/resources/icons/svg-default/up-white.svg b/resources/icons/svg-default-dark/svg/up.svg similarity index 100% rename from resources/icons/svg-default/up-white.svg rename to resources/icons/svg-default-dark/svg/up.svg diff --git a/resources/icons/svg-default/vcr-control-end-white.svg b/resources/icons/svg-default-dark/svg/vcr-control-end.svg similarity index 100% rename from resources/icons/svg-default/vcr-control-end-white.svg rename to resources/icons/svg-default-dark/svg/vcr-control-end.svg diff --git a/resources/icons/svg-default/vcr-control-pause-white.svg b/resources/icons/svg-default-dark/svg/vcr-control-pause.svg similarity index 100% rename from resources/icons/svg-default/vcr-control-pause-white.svg rename to resources/icons/svg-default-dark/svg/vcr-control-pause.svg diff --git a/resources/icons/svg-default/vcr-control-play-white.svg b/resources/icons/svg-default-dark/svg/vcr-control-play.svg similarity index 100% rename from resources/icons/svg-default/vcr-control-play-white.svg rename to resources/icons/svg-default-dark/svg/vcr-control-play.svg diff --git a/resources/icons/svg-default/vcr-control-start-white.svg b/resources/icons/svg-default-dark/svg/vcr-control-start.svg similarity index 100% rename from resources/icons/svg-default/vcr-control-start-white.svg rename to resources/icons/svg-default-dark/svg/vcr-control-start.svg diff --git a/resources/icons/svg-default/vcr-control-step-back-white.svg b/resources/icons/svg-default-dark/svg/vcr-control-step-back.svg similarity index 100% rename from resources/icons/svg-default/vcr-control-step-back-white.svg rename to resources/icons/svg-default-dark/svg/vcr-control-step-back.svg diff --git a/resources/icons/svg-default/vcr-control-step-forward-white.svg b/resources/icons/svg-default-dark/svg/vcr-control-step-forward.svg similarity index 100% rename from resources/icons/svg-default/vcr-control-step-forward-white.svg rename to resources/icons/svg-default-dark/svg/vcr-control-step-forward.svg diff --git a/resources/icons/svg-default/view-back-white.svg b/resources/icons/svg-default-dark/svg/view-back.svg similarity index 100% rename from resources/icons/svg-default/view-back-white.svg rename to resources/icons/svg-default-dark/svg/view-back.svg diff --git a/resources/icons/svg-default/view-bottom-white.svg b/resources/icons/svg-default-dark/svg/view-bottom.svg similarity index 100% rename from resources/icons/svg-default/view-bottom-white.svg rename to resources/icons/svg-default-dark/svg/view-bottom.svg diff --git a/resources/icons/svg-default/view-front-white.svg b/resources/icons/svg-default-dark/svg/view-front.svg similarity index 100% rename from resources/icons/svg-default/view-front-white.svg rename to resources/icons/svg-default-dark/svg/view-front.svg diff --git a/resources/icons/svg-default/view-left-white.svg b/resources/icons/svg-default-dark/svg/view-left.svg similarity index 100% rename from resources/icons/svg-default/view-left-white.svg rename to resources/icons/svg-default-dark/svg/view-left.svg diff --git a/resources/icons/svg-default/view-right-white.svg b/resources/icons/svg-default-dark/svg/view-right.svg similarity index 100% rename from resources/icons/svg-default/view-right-white.svg rename to resources/icons/svg-default-dark/svg/view-right.svg diff --git a/resources/icons/svg-default/view-top-white.svg b/resources/icons/svg-default-dark/svg/view-top.svg similarity index 100% rename from resources/icons/svg-default/view-top-white.svg rename to resources/icons/svg-default-dark/svg/view-top.svg diff --git a/resources/icons/svg-default/wireframe-white.svg b/resources/icons/svg-default-dark/svg/wireframe.svg similarity index 100% rename from resources/icons/svg-default/wireframe-white.svg rename to resources/icons/svg-default-dark/svg/wireframe.svg diff --git a/resources/icons/svg-default/zoom-all-white.svg b/resources/icons/svg-default-dark/svg/zoom-all.svg similarity index 100% rename from resources/icons/svg-default/zoom-all-white.svg rename to resources/icons/svg-default-dark/svg/zoom-all.svg diff --git a/resources/icons/svg-default/zoom-in-white.svg b/resources/icons/svg-default-dark/svg/zoom-in.svg similarity index 100% rename from resources/icons/svg-default/zoom-in-white.svg rename to resources/icons/svg-default-dark/svg/zoom-in.svg diff --git a/resources/icons/svg-default/zoom-out-white.svg b/resources/icons/svg-default-dark/svg/zoom-out.svg similarity index 100% rename from resources/icons/svg-default/zoom-out-white.svg rename to resources/icons/svg-default-dark/svg/zoom-out.svg diff --git a/resources/icons/svg-default/zoom-text-in-white.svg b/resources/icons/svg-default-dark/svg/zoom-text-in.svg similarity index 100% rename from resources/icons/svg-default/zoom-text-in-white.svg rename to resources/icons/svg-default-dark/svg/zoom-text-in.svg diff --git a/resources/icons/svg-default/zoom-text-out-white.svg b/resources/icons/svg-default-dark/svg/zoom-text-out.svg similarity index 100% rename from resources/icons/svg-default/zoom-text-out-white.svg rename to resources/icons/svg-default-dark/svg/zoom-text-out.svg diff --git a/resources/icons/svg-default/index.theme b/resources/icons/svg-default/index.theme new file mode 100644 index 00000000000..4a35e496620 --- /dev/null +++ b/resources/icons/svg-default/index.theme @@ -0,0 +1,15 @@ +[Icon Theme] +Name=svg-default +Comment=OpenSCAD SVG icons, light theme + +PanelDefault=48 +PanelSizes=48 + +Directories=svg + +[svg] +Size=48 +Context=Applications +MinSize=16 +MaxSize=512 +Type=Scalable diff --git a/resources/icons/svg-default/add.svg b/resources/icons/svg-default/svg/add.svg similarity index 100% rename from resources/icons/svg-default/add.svg rename to resources/icons/svg-default/svg/add.svg diff --git a/resources/icons/svg-default/animate.svg b/resources/icons/svg-default/svg/animate.svg similarity index 100% rename from resources/icons/svg-default/animate.svg rename to resources/icons/svg-default/svg/animate.svg diff --git a/resources/icons/svg-default/animate_disabled.svg b/resources/icons/svg-default/svg/animate_disabled.svg similarity index 100% rename from resources/icons/svg-default/animate_disabled.svg rename to resources/icons/svg-default/svg/animate_disabled.svg diff --git a/resources/icons/svg-default/animate_pause.svg b/resources/icons/svg-default/svg/animate_pause.svg similarity index 100% rename from resources/icons/svg-default/animate_pause.svg rename to resources/icons/svg-default/svg/animate_pause.svg diff --git a/resources/icons/svg-default/axes.svg b/resources/icons/svg-default/svg/axes.svg similarity index 100% rename from resources/icons/svg-default/axes.svg rename to resources/icons/svg-default/svg/axes.svg diff --git a/resources/icons/svg-default/crosshairs.svg b/resources/icons/svg-default/svg/crosshairs.svg similarity index 100% rename from resources/icons/svg-default/crosshairs.svg rename to resources/icons/svg-default/svg/crosshairs.svg diff --git a/resources/icons/svg-default/down.svg b/resources/icons/svg-default/svg/down.svg similarity index 100% rename from resources/icons/svg-default/down.svg rename to resources/icons/svg-default/svg/down.svg diff --git a/resources/icons/svg-default/edit-copy.svg b/resources/icons/svg-default/svg/edit-copy.svg similarity index 100% rename from resources/icons/svg-default/edit-copy.svg rename to resources/icons/svg-default/svg/edit-copy.svg diff --git a/resources/icons/svg-default/export-3mf.svg b/resources/icons/svg-default/svg/export-3mf.svg similarity index 100% rename from resources/icons/svg-default/export-3mf.svg rename to resources/icons/svg-default/svg/export-3mf.svg diff --git a/resources/icons/svg-default/export-amf.svg b/resources/icons/svg-default/svg/export-amf.svg similarity index 100% rename from resources/icons/svg-default/export-amf.svg rename to resources/icons/svg-default/svg/export-amf.svg diff --git a/resources/icons/svg-default/export-csg.svg b/resources/icons/svg-default/svg/export-csg.svg similarity index 100% rename from resources/icons/svg-default/export-csg.svg rename to resources/icons/svg-default/svg/export-csg.svg diff --git a/resources/icons/svg-default/export-dxf.svg b/resources/icons/svg-default/svg/export-dxf.svg similarity index 100% rename from resources/icons/svg-default/export-dxf.svg rename to resources/icons/svg-default/svg/export-dxf.svg diff --git a/resources/icons/svg-default/export-obj.svg b/resources/icons/svg-default/svg/export-obj.svg similarity index 100% rename from resources/icons/svg-default/export-obj.svg rename to resources/icons/svg-default/svg/export-obj.svg diff --git a/resources/icons/svg-default/export-off.svg b/resources/icons/svg-default/svg/export-off.svg similarity index 100% rename from resources/icons/svg-default/export-off.svg rename to resources/icons/svg-default/svg/export-off.svg diff --git a/resources/icons/svg-default/export-pdf.svg b/resources/icons/svg-default/svg/export-pdf.svg similarity index 100% rename from resources/icons/svg-default/export-pdf.svg rename to resources/icons/svg-default/svg/export-pdf.svg diff --git a/resources/icons/svg-default/export-png.svg b/resources/icons/svg-default/svg/export-png.svg similarity index 100% rename from resources/icons/svg-default/export-png.svg rename to resources/icons/svg-default/svg/export-png.svg diff --git a/resources/icons/svg-default/export-pov.svg b/resources/icons/svg-default/svg/export-pov.svg similarity index 100% rename from resources/icons/svg-default/export-pov.svg rename to resources/icons/svg-default/svg/export-pov.svg diff --git a/resources/icons/svg-default/export-stl.svg b/resources/icons/svg-default/svg/export-stl.svg similarity index 100% rename from resources/icons/svg-default/export-stl.svg rename to resources/icons/svg-default/svg/export-stl.svg diff --git a/resources/icons/svg-default/export-svg.svg b/resources/icons/svg-default/svg/export-svg.svg similarity index 100% rename from resources/icons/svg-default/export-svg.svg rename to resources/icons/svg-default/svg/export-svg.svg diff --git a/resources/icons/svg-default/export-wrl.svg b/resources/icons/svg-default/svg/export-wrl.svg similarity index 100% rename from resources/icons/svg-default/export-wrl.svg rename to resources/icons/svg-default/svg/export-wrl.svg diff --git a/resources/icons/svg-default/indent.svg b/resources/icons/svg-default/svg/indent.svg similarity index 100% rename from resources/icons/svg-default/indent.svg rename to resources/icons/svg-default/svg/indent.svg diff --git a/resources/icons/svg-default/measure-ang.svg b/resources/icons/svg-default/svg/measure-ang.svg similarity index 100% rename from resources/icons/svg-default/measure-ang.svg rename to resources/icons/svg-default/svg/measure-ang.svg diff --git a/resources/icons/svg-default/measure-dist.svg b/resources/icons/svg-default/svg/measure-dist.svg similarity index 100% rename from resources/icons/svg-default/measure-dist.svg rename to resources/icons/svg-default/svg/measure-dist.svg diff --git a/resources/icons/svg-default/new.svg b/resources/icons/svg-default/svg/new.svg similarity index 100% rename from resources/icons/svg-default/new.svg rename to resources/icons/svg-default/svg/new.svg diff --git a/resources/icons/svg-default/open.svg b/resources/icons/svg-default/svg/open.svg similarity index 100% rename from resources/icons/svg-default/open.svg rename to resources/icons/svg-default/svg/open.svg diff --git a/resources/icons/svg-default/orthogonal.svg b/resources/icons/svg-default/svg/orthogonal.svg similarity index 100% rename from resources/icons/svg-default/orthogonal.svg rename to resources/icons/svg-default/svg/orthogonal.svg diff --git a/resources/icons/svg-default/parameter.svg b/resources/icons/svg-default/svg/parameter.svg similarity index 100% rename from resources/icons/svg-default/parameter.svg rename to resources/icons/svg-default/svg/parameter.svg diff --git a/resources/icons/svg-default/perspective.svg b/resources/icons/svg-default/svg/perspective.svg similarity index 100% rename from resources/icons/svg-default/perspective.svg rename to resources/icons/svg-default/svg/perspective.svg diff --git a/resources/icons/svg-default/preview.svg b/resources/icons/svg-default/svg/preview.svg similarity index 100% rename from resources/icons/svg-default/preview.svg rename to resources/icons/svg-default/svg/preview.svg diff --git a/resources/icons/svg-default/redo.svg b/resources/icons/svg-default/svg/redo.svg similarity index 100% rename from resources/icons/svg-default/redo.svg rename to resources/icons/svg-default/svg/redo.svg diff --git a/resources/icons/svg-default/remove.svg b/resources/icons/svg-default/svg/remove.svg similarity index 100% rename from resources/icons/svg-default/remove.svg rename to resources/icons/svg-default/svg/remove.svg diff --git a/resources/icons/svg-default/render.svg b/resources/icons/svg-default/svg/render.svg similarity index 100% rename from resources/icons/svg-default/render.svg rename to resources/icons/svg-default/svg/render.svg diff --git a/resources/icons/svg-default/reset-view.svg b/resources/icons/svg-default/svg/reset-view.svg similarity index 100% rename from resources/icons/svg-default/reset-view.svg rename to resources/icons/svg-default/svg/reset-view.svg diff --git a/resources/icons/svg-default/save.svg b/resources/icons/svg-default/svg/save.svg similarity index 100% rename from resources/icons/svg-default/save.svg rename to resources/icons/svg-default/svg/save.svg diff --git a/resources/icons/svg-default/scalemarkers.svg b/resources/icons/svg-default/svg/scalemarkers.svg similarity index 100% rename from resources/icons/svg-default/scalemarkers.svg rename to resources/icons/svg-default/svg/scalemarkers.svg diff --git a/resources/icons/svg-default/send.svg b/resources/icons/svg-default/svg/send.svg similarity index 100% rename from resources/icons/svg-default/send.svg rename to resources/icons/svg-default/svg/send.svg diff --git a/resources/icons/svg-default/show-edges.svg b/resources/icons/svg-default/svg/show-edges.svg similarity index 100% rename from resources/icons/svg-default/show-edges.svg rename to resources/icons/svg-default/svg/show-edges.svg diff --git a/resources/icons/svg-default/surface.svg b/resources/icons/svg-default/svg/surface.svg similarity index 100% rename from resources/icons/svg-default/surface.svg rename to resources/icons/svg-default/svg/surface.svg diff --git a/resources/icons/svg-default/throwntogether.svg b/resources/icons/svg-default/svg/throwntogether.svg similarity index 100% rename from resources/icons/svg-default/throwntogether.svg rename to resources/icons/svg-default/svg/throwntogether.svg diff --git a/resources/icons/svg-default/undo.svg b/resources/icons/svg-default/svg/undo.svg similarity index 100% rename from resources/icons/svg-default/undo.svg rename to resources/icons/svg-default/svg/undo.svg diff --git a/resources/icons/svg-default/unindent.svg b/resources/icons/svg-default/svg/unindent.svg similarity index 100% rename from resources/icons/svg-default/unindent.svg rename to resources/icons/svg-default/svg/unindent.svg diff --git a/resources/icons/svg-default/up.svg b/resources/icons/svg-default/svg/up.svg similarity index 100% rename from resources/icons/svg-default/up.svg rename to resources/icons/svg-default/svg/up.svg diff --git a/resources/icons/svg-default/vcr-control-end.svg b/resources/icons/svg-default/svg/vcr-control-end.svg similarity index 100% rename from resources/icons/svg-default/vcr-control-end.svg rename to resources/icons/svg-default/svg/vcr-control-end.svg diff --git a/resources/icons/svg-default/vcr-control-pause.svg b/resources/icons/svg-default/svg/vcr-control-pause.svg similarity index 100% rename from resources/icons/svg-default/vcr-control-pause.svg rename to resources/icons/svg-default/svg/vcr-control-pause.svg diff --git a/resources/icons/svg-default/vcr-control-play.svg b/resources/icons/svg-default/svg/vcr-control-play.svg similarity index 100% rename from resources/icons/svg-default/vcr-control-play.svg rename to resources/icons/svg-default/svg/vcr-control-play.svg diff --git a/resources/icons/svg-default/vcr-control-start.svg b/resources/icons/svg-default/svg/vcr-control-start.svg similarity index 100% rename from resources/icons/svg-default/vcr-control-start.svg rename to resources/icons/svg-default/svg/vcr-control-start.svg diff --git a/resources/icons/svg-default/vcr-control-step-back.svg b/resources/icons/svg-default/svg/vcr-control-step-back.svg similarity index 100% rename from resources/icons/svg-default/vcr-control-step-back.svg rename to resources/icons/svg-default/svg/vcr-control-step-back.svg diff --git a/resources/icons/svg-default/vcr-control-step-forward.svg b/resources/icons/svg-default/svg/vcr-control-step-forward.svg similarity index 100% rename from resources/icons/svg-default/vcr-control-step-forward.svg rename to resources/icons/svg-default/svg/vcr-control-step-forward.svg diff --git a/resources/icons/svg-default/view-back.svg b/resources/icons/svg-default/svg/view-back.svg similarity index 100% rename from resources/icons/svg-default/view-back.svg rename to resources/icons/svg-default/svg/view-back.svg diff --git a/resources/icons/svg-default/view-bottom.svg b/resources/icons/svg-default/svg/view-bottom.svg similarity index 100% rename from resources/icons/svg-default/view-bottom.svg rename to resources/icons/svg-default/svg/view-bottom.svg diff --git a/resources/icons/svg-default/view-front.svg b/resources/icons/svg-default/svg/view-front.svg similarity index 100% rename from resources/icons/svg-default/view-front.svg rename to resources/icons/svg-default/svg/view-front.svg diff --git a/resources/icons/svg-default/view-left.svg b/resources/icons/svg-default/svg/view-left.svg similarity index 100% rename from resources/icons/svg-default/view-left.svg rename to resources/icons/svg-default/svg/view-left.svg diff --git a/resources/icons/svg-default/view-right.svg b/resources/icons/svg-default/svg/view-right.svg similarity index 100% rename from resources/icons/svg-default/view-right.svg rename to resources/icons/svg-default/svg/view-right.svg diff --git a/resources/icons/svg-default/view-top.svg b/resources/icons/svg-default/svg/view-top.svg similarity index 100% rename from resources/icons/svg-default/view-top.svg rename to resources/icons/svg-default/svg/view-top.svg diff --git a/resources/icons/svg-default/wireframe.svg b/resources/icons/svg-default/svg/wireframe.svg similarity index 100% rename from resources/icons/svg-default/wireframe.svg rename to resources/icons/svg-default/svg/wireframe.svg diff --git a/resources/icons/svg-default/zoom-all.svg b/resources/icons/svg-default/svg/zoom-all.svg similarity index 100% rename from resources/icons/svg-default/zoom-all.svg rename to resources/icons/svg-default/svg/zoom-all.svg diff --git a/resources/icons/svg-default/zoom-in.svg b/resources/icons/svg-default/svg/zoom-in.svg similarity index 100% rename from resources/icons/svg-default/zoom-in.svg rename to resources/icons/svg-default/svg/zoom-in.svg diff --git a/resources/icons/svg-default/zoom-out.svg b/resources/icons/svg-default/svg/zoom-out.svg similarity index 100% rename from resources/icons/svg-default/zoom-out.svg rename to resources/icons/svg-default/svg/zoom-out.svg diff --git a/resources/icons/svg-default/zoom-text-in.svg b/resources/icons/svg-default/svg/zoom-text-in.svg similarity index 100% rename from resources/icons/svg-default/zoom-text-in.svg rename to resources/icons/svg-default/svg/zoom-text-in.svg diff --git a/resources/icons/svg-default/zoom-text-out.svg b/resources/icons/svg-default/svg/zoom-text-out.svg similarity index 100% rename from resources/icons/svg-default/zoom-text-out.svg rename to resources/icons/svg-default/svg/zoom-text-out.svg diff --git a/scripts/generate-svg-icons.sh b/scripts/generate-svg-icons.sh index f09d964888b..516bfbb998b 100755 --- a/scripts/generate-svg-icons.sh +++ b/scripts/generate-svg-icons.sh @@ -1,13 +1,18 @@ #!/usr/bin/env bash -ICONDIR=resources/icons/svg-default -ICONSCAD="$ICONDIR"/icons.scad +set -euo pipefail -if [ ! -d "$ICONDIR" ]; then +DARK=-dark +ICONDIR=icons/svg-default +ICONSCAD=icons/icons-svg-default.scad + +if [ ! -d resources/"$ICONDIR" -o ! -f resources/"$ICONSCAD" ]; then echo "$0: script should be run from the source code top level folder" exit 1 fi +cd resources + if [[ "$OSTYPE" =~ "darwin" ]]; then OPENSCAD=/Applications/OpenSCAD.app/Contents/MacOS/OpenSCAD else @@ -16,15 +21,28 @@ fi set -e -for i in `"$OPENSCAD" -o - --export-format echo -Dlist_icons=true "$ICONSCAD" | sed -e 's/ECHO: icon = //;' | tr -d '"'` +for i in $("$OPENSCAD" -o - --export-format echo -Dlist_icons=true "$ICONSCAD" | sed -e 's/ECHO: icon = //;' | tr -d '"') do - echo "Generating $i icon..." - SVG="$ICONDIR"/"$i.svg" + SVG="$ICONDIR"/svg/"$i.svg" + SVGDARK="$ICONDIR$DARK"/svg/"$i.svg" + echo "Generating icon $SVG and $SVGDARK..." "$OPENSCAD" -o "$SVG" --render -Dselected_icon="\"$i\"" "$ICONSCAD" 2>/dev/null sed -i'' -e's/ "$ICONDIR"/"$i-white.svg" + sed -e's/stroke="black" fill="lightgray"/stroke="white" fill="white"/' "$SVG" > "$SVGDARK" sed -i'' -e's/fill="lightgray"/fill="black"/' "$SVG" done +for s in "" "$DARK" +do +cat > icons-svg-default${s}.qrc < + + icons/svg-default${s}/index.theme +$(ls "${ICONDIR}${s}"/svg/*.svg | sed -E 's,.*, &,') + + +EOF +done + echo "Done." diff --git a/src/gui/MainWindow.cc b/src/gui/MainWindow.cc index 3152c4bada3..4b29bd9acf1 100644 --- a/src/gui/MainWindow.cc +++ b/src/gui/MainWindow.cc @@ -624,13 +624,8 @@ MainWindow::MainWindow(const QStringList& filenames) Preferences *instance = Preferences::inst(); - initActionIcon(fileActionNew, ":/icons/svg-default/new.svg", ":/icons/svg-default/new-white.svg"); - initActionIcon(fileActionOpen, ":/icons/svg-default/open.svg", ":/icons/svg-default/open-white.svg"); - initActionIcon(fileActionSave, ":/icons/svg-default/save.svg", ":/icons/svg-default/save-white.svg"); initActionIcon(editActionZoomTextIn, ":/icons/svg-default/zoom-text-in.svg", ":/icons/svg-default/zoom-text-in-white.svg"); initActionIcon(editActionZoomTextOut, ":/icons/svg-default/zoom-text-out.svg", ":/icons/svg-default/zoom-text-out-white.svg"); - initActionIcon(designActionRender, ":/icons/svg-default/render.svg", ":/icons/svg-default/render-white.svg"); - initActionIcon(designAction3DPrint, ":/icons/svg-default/send.svg", ":/icons/svg-default/send-white.svg"); initActionIcon(viewActionShowAxes, ":/icons/svg-default/axes.svg", ":/icons/svg-default/axes-white.svg"); initActionIcon(viewActionShowEdges, ":/icons/svg-default/show-edges.svg", ":/icons/svg-default/show-edges-white.svg"); initActionIcon(viewActionZoomIn, ":/icons/svg-default/zoom-in.svg", ":/icons/svg-default/zoom-in-white.svg"); @@ -647,7 +642,6 @@ MainWindow::MainWindow(const QStringList& filenames) initActionIcon(viewActionThrownTogether, ":/icons/svg-default/throwntogether.svg", ":/icons/svg-default/throwntogether-white.svg"); initActionIcon(viewActionPerspective, ":/icons/svg-default/perspective.svg", ":/icons/svg-default/perspective-white.svg"); initActionIcon(viewActionOrthogonal, ":/icons/svg-default/orthogonal.svg", ":/icons/svg-default/orthogonal-white.svg"); - initActionIcon(designActionPreview, ":/icons/svg-default/preview.svg", ":/icons/svg-default/preview-white.svg"); initActionIcon(designActionMeasureDist, ":/icons/svg-default/measure-dist.svg", ":/icons/svg-default/measure-dist-white.svg"); initActionIcon(designActionMeasureAngle, ":/icons/svg-default/measure-ang.svg", ":/icons/svg-default/measure-ang-white.svg"); initActionIcon(fileActionExportBinarySTL, ":/icons/svg-default/export-stl.svg", ":/icons/svg-default/export-stl-white.svg"); @@ -664,10 +658,6 @@ MainWindow::MainWindow(const QStringList& filenames) initActionIcon(fileActionExportPDF, ":/icons/svg-default/export-pdf.svg", ":/icons/svg-default/export-pdf-white.svg"); initActionIcon(fileActionExportImage, ":/icons/svg-default/export-png.svg", ":/icons/svg-default/export-png-white.svg"); initActionIcon(viewActionViewAll, ":/icons/svg-default/zoom-all.svg", ":/icons/svg-default/zoom-all-white.svg"); - initActionIcon(editActionUndo, ":/icons/svg-default/undo.svg", ":/icons/svg-default/undo-white.svg"); - initActionIcon(editActionRedo, ":/icons/svg-default/redo.svg", ":/icons/svg-default/redo-white.svg"); - initActionIcon(editActionUnindent, ":/icons/svg-default/unindent.svg", ":/icons/svg-default/unindent-white.svg"); - initActionIcon(editActionIndent, ":/icons/svg-default/indent.svg", ":/icons/svg-default/indent-white.svg"); initActionIcon(viewActionResetView, ":/icons/svg-default/reset-view.svg", ":/icons/svg-default/reset-view-white.svg"); initActionIcon(viewActionShowScaleProportional, ":/icons/svg-default/scalemarkers.svg", ":/icons/svg-default/scalemarkers-white.svg"); diff --git a/src/gui/MainWindow.ui b/src/gui/MainWindow.ui index 27574c0675a..ecf15a24f76 100644 --- a/src/gui/MainWindow.ui +++ b/src/gui/MainWindow.ui @@ -738,6 +738,9 @@ + + + &New File @@ -751,6 +754,9 @@ + + + &Open File @@ -764,6 +770,9 @@ + + + &Save @@ -812,6 +821,9 @@ false + + + &Undo @@ -823,6 +835,9 @@ + + + &Redo @@ -875,6 +890,9 @@ + + + &Indent @@ -978,6 +996,9 @@ + + + &Preview @@ -986,6 +1007,9 @@ + + + R&ender @@ -994,6 +1018,9 @@ + + + &3D Print @@ -1473,6 +1500,9 @@ + + + U&nindent @@ -1672,6 +1702,8 @@ + + diff --git a/src/gui/Preferences.ui b/src/gui/Preferences.ui index 68cee7b0c5d..86e2534a86c 100644 --- a/src/gui/Preferences.ui +++ b/src/gui/Preferences.ui @@ -1734,8 +1734,7 @@ - - :/icons/svg-default/add.svg:/icons/svg-default/add.svg + @@ -1767,8 +1766,7 @@ - - :/icons/svg-default/up.svg:/icons/svg-default/up.svg + @@ -1787,8 +1785,7 @@ - - :/icons/svg-default/remove.svg:/icons/svg-default/remove.svg + @@ -1801,8 +1798,7 @@ - - :/icons/svg-default/down.svg:/icons/svg-default/down.svg + @@ -2893,6 +2889,8 @@ + + diff --git a/src/openscad_gui.cc b/src/openscad_gui.cc index 8bade3ed191..b3757709c1b 100644 --- a/src/openscad_gui.cc +++ b/src/openscad_gui.cc @@ -27,6 +27,7 @@ #include "openscad_gui.h" #include +#include #include #include #include @@ -153,6 +154,7 @@ int gui(std::vector& inputFiles, const std::filesystem::path& origi OpenSCADApp app(argc, argv); // remove ugly frames in the QStatusBar when using additional widgets app.setStyleSheet("QStatusBar::item { border: 0px solid black; }"); + QIcon::setThemeName(OpenSCAD::isDarkMode() ? "svg-default-dark" : "svg-default"); // set up groups for QSettings QCoreApplication::setOrganizationName("OpenSCAD"); From 50cbfbb9e70200df6d15bbdab013a428da56aacd Mon Sep 17 00:00:00 2001 From: Torsten Paul Date: Sun, 5 Jan 2025 04:07:20 +0100 Subject: [PATCH 05/10] Ignore only specific *.qrc files. --- .gitignore | 3 +- resources/icons-svg-default-dark.qrc | 65 ++++++++++++++++++++++++++++ resources/icons-svg-default.qrc | 65 ++++++++++++++++++++++++++++ 3 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 resources/icons-svg-default-dark.qrc create mode 100644 resources/icons-svg-default.qrc diff --git a/.gitignore b/.gitignore index a04bc5b2cde..9cd2303ca4a 100644 --- a/.gitignore +++ b/.gitignore @@ -55,7 +55,8 @@ object_script.openscad.Release /openscad /openscad-nightly /resources/*.rc -/resources/*.qrc +/resources/mac.qrc +/resources/common.qrc /resources/icons/openscad.desktop /locale/*/*/*.mo /locale/*.mo diff --git a/resources/icons-svg-default-dark.qrc b/resources/icons-svg-default-dark.qrc new file mode 100644 index 00000000000..f71ca08a441 --- /dev/null +++ b/resources/icons-svg-default-dark.qrc @@ -0,0 +1,65 @@ + + + icons/svg-default-dark/index.theme + icons/svg-default-dark/svg/add.svg + icons/svg-default-dark/svg/animate_disabled.svg + icons/svg-default-dark/svg/animate_pause.svg + icons/svg-default-dark/svg/animate.svg + icons/svg-default-dark/svg/axes.svg + icons/svg-default-dark/svg/crosshairs.svg + icons/svg-default-dark/svg/down.svg + icons/svg-default-dark/svg/edit-copy.svg + icons/svg-default-dark/svg/export-3mf.svg + icons/svg-default-dark/svg/export-amf.svg + icons/svg-default-dark/svg/export-csg.svg + icons/svg-default-dark/svg/export-dxf.svg + icons/svg-default-dark/svg/export-obj.svg + icons/svg-default-dark/svg/export-off.svg + icons/svg-default-dark/svg/export-pdf.svg + icons/svg-default-dark/svg/export-png.svg + icons/svg-default-dark/svg/export-pov.svg + icons/svg-default-dark/svg/export-stl.svg + icons/svg-default-dark/svg/export-svg.svg + icons/svg-default-dark/svg/export-wrl.svg + icons/svg-default-dark/svg/indent.svg + icons/svg-default-dark/svg/measure-ang.svg + icons/svg-default-dark/svg/measure-dist.svg + icons/svg-default-dark/svg/new.svg + icons/svg-default-dark/svg/open.svg + icons/svg-default-dark/svg/orthogonal.svg + icons/svg-default-dark/svg/parameter.svg + icons/svg-default-dark/svg/perspective.svg + icons/svg-default-dark/svg/preview.svg + icons/svg-default-dark/svg/redo.svg + icons/svg-default-dark/svg/remove.svg + icons/svg-default-dark/svg/render.svg + icons/svg-default-dark/svg/reset-view.svg + icons/svg-default-dark/svg/save.svg + icons/svg-default-dark/svg/scalemarkers.svg + icons/svg-default-dark/svg/send.svg + icons/svg-default-dark/svg/show-edges.svg + icons/svg-default-dark/svg/surface.svg + icons/svg-default-dark/svg/throwntogether.svg + icons/svg-default-dark/svg/undo.svg + icons/svg-default-dark/svg/unindent.svg + icons/svg-default-dark/svg/up.svg + icons/svg-default-dark/svg/vcr-control-end.svg + icons/svg-default-dark/svg/vcr-control-pause.svg + icons/svg-default-dark/svg/vcr-control-play.svg + icons/svg-default-dark/svg/vcr-control-start.svg + icons/svg-default-dark/svg/vcr-control-step-back.svg + icons/svg-default-dark/svg/vcr-control-step-forward.svg + icons/svg-default-dark/svg/view-back.svg + icons/svg-default-dark/svg/view-bottom.svg + icons/svg-default-dark/svg/view-front.svg + icons/svg-default-dark/svg/view-left.svg + icons/svg-default-dark/svg/view-right.svg + icons/svg-default-dark/svg/view-top.svg + icons/svg-default-dark/svg/wireframe.svg + icons/svg-default-dark/svg/zoom-all.svg + icons/svg-default-dark/svg/zoom-in.svg + icons/svg-default-dark/svg/zoom-out.svg + icons/svg-default-dark/svg/zoom-text-in.svg + icons/svg-default-dark/svg/zoom-text-out.svg + + diff --git a/resources/icons-svg-default.qrc b/resources/icons-svg-default.qrc new file mode 100644 index 00000000000..e7b352e587c --- /dev/null +++ b/resources/icons-svg-default.qrc @@ -0,0 +1,65 @@ + + + icons/svg-default/index.theme + icons/svg-default/svg/add.svg + icons/svg-default/svg/animate_disabled.svg + icons/svg-default/svg/animate_pause.svg + icons/svg-default/svg/animate.svg + icons/svg-default/svg/axes.svg + icons/svg-default/svg/crosshairs.svg + icons/svg-default/svg/down.svg + icons/svg-default/svg/edit-copy.svg + icons/svg-default/svg/export-3mf.svg + icons/svg-default/svg/export-amf.svg + icons/svg-default/svg/export-csg.svg + icons/svg-default/svg/export-dxf.svg + icons/svg-default/svg/export-obj.svg + icons/svg-default/svg/export-off.svg + icons/svg-default/svg/export-pdf.svg + icons/svg-default/svg/export-png.svg + icons/svg-default/svg/export-pov.svg + icons/svg-default/svg/export-stl.svg + icons/svg-default/svg/export-svg.svg + icons/svg-default/svg/export-wrl.svg + icons/svg-default/svg/indent.svg + icons/svg-default/svg/measure-ang.svg + icons/svg-default/svg/measure-dist.svg + icons/svg-default/svg/new.svg + icons/svg-default/svg/open.svg + icons/svg-default/svg/orthogonal.svg + icons/svg-default/svg/parameter.svg + icons/svg-default/svg/perspective.svg + icons/svg-default/svg/preview.svg + icons/svg-default/svg/redo.svg + icons/svg-default/svg/remove.svg + icons/svg-default/svg/render.svg + icons/svg-default/svg/reset-view.svg + icons/svg-default/svg/save.svg + icons/svg-default/svg/scalemarkers.svg + icons/svg-default/svg/send.svg + icons/svg-default/svg/show-edges.svg + icons/svg-default/svg/surface.svg + icons/svg-default/svg/throwntogether.svg + icons/svg-default/svg/undo.svg + icons/svg-default/svg/unindent.svg + icons/svg-default/svg/up.svg + icons/svg-default/svg/vcr-control-end.svg + icons/svg-default/svg/vcr-control-pause.svg + icons/svg-default/svg/vcr-control-play.svg + icons/svg-default/svg/vcr-control-start.svg + icons/svg-default/svg/vcr-control-step-back.svg + icons/svg-default/svg/vcr-control-step-forward.svg + icons/svg-default/svg/view-back.svg + icons/svg-default/svg/view-bottom.svg + icons/svg-default/svg/view-front.svg + icons/svg-default/svg/view-left.svg + icons/svg-default/svg/view-right.svg + icons/svg-default/svg/view-top.svg + icons/svg-default/svg/wireframe.svg + icons/svg-default/svg/zoom-all.svg + icons/svg-default/svg/zoom-in.svg + icons/svg-default/svg/zoom-out.svg + icons/svg-default/svg/zoom-text-in.svg + icons/svg-default/svg/zoom-text-out.svg + + From 0a21c8939034c4510a146cdb59ac02a98912d793 Mon Sep 17 00:00:00 2001 From: Torsten Paul Date: Sun, 5 Jan 2025 23:24:16 +0100 Subject: [PATCH 06/10] Update more icons; Remove all manual dark mode handling. * Icons are changed based on the theme * Background colors are generated by blending a transparent overlay color (e.g. red) over the theme background color --- CMakeLists.txt | 4 +- resources/icons-chokusen-dark.qrc | 65 ++++++++ resources/icons-chokusen.qrc | 65 ++++++++ resources/icons-svg-default-dark.qrc | 65 -------- resources/icons-svg-default.qrc | 65 -------- .../index.theme | 0 .../svg/chokusen-add.svg} | 0 .../svg/chokusen-animate-disabled.svg} | 0 .../svg/chokusen-animate-pause.svg} | 0 .../svg/chokusen-animate-play.svg} | 0 .../svg/chokusen-axes.svg} | 0 .../svg/chokusen-crosshairs.svg} | 0 .../svg/chokusen-down.svg} | 0 .../svg/chokusen-edit-copy.svg} | 0 .../svg/chokusen-export-3mf.svg} | 0 .../svg/chokusen-export-amf.svg} | 0 .../svg/chokusen-export-csg.svg} | 0 .../svg/chokusen-export-dxf.svg} | 0 .../svg/chokusen-export-obj.svg} | 0 .../svg/chokusen-export-off.svg} | 0 .../svg/chokusen-export-pdf.svg} | 0 .../svg/chokusen-export-png.svg} | 0 .../svg/chokusen-export-pov.svg} | 0 .../svg/chokusen-export-stl.svg} | 0 .../svg/chokusen-export-svg.svg} | 0 .../svg/chokusen-export-wrl.svg} | 0 .../svg/chokusen-indent.svg} | 0 .../svg/chokusen-measure-angle.svg} | 0 .../svg/chokusen-measure-distance.svg} | 0 .../svg/chokusen-new.svg} | 0 .../svg/chokusen-open.svg} | 0 .../svg/chokusen-orthogonal.svg} | 0 .../svg/chokusen-parameter.svg} | 0 .../svg/chokusen-perspective.svg} | 0 .../svg/chokusen-preview.svg} | 0 .../svg/chokusen-redo.svg} | 0 .../svg/chokusen-remove.svg} | 0 .../svg/chokusen-render.svg} | 0 .../svg/chokusen-reset-view.svg} | 0 .../svg/chokusen-save.svg} | 0 .../svg/chokusen-scalemarkers.svg} | 0 .../svg/chokusen-send.svg} | 0 .../svg/chokusen-show-edges.svg} | 0 .../svg/chokusen-surface.svg} | 0 .../svg/chokusen-throwntogether.svg} | 0 .../svg/chokusen-undo.svg} | 0 .../svg/chokusen-unindent.svg} | 0 .../svg/chokusen-up.svg} | 0 .../svg/chokusen-vcr-control-end.svg} | 0 .../svg/chokusen-vcr-control-pause.svg} | 0 .../svg/chokusen-vcr-control-play.svg} | 0 .../svg/chokusen-vcr-control-start.svg} | 0 .../svg/chokusen-vcr-control-step-back.svg} | 0 .../chokusen-vcr-control-step-forward.svg} | 0 .../svg/chokusen-view-back.svg} | 0 .../svg/chokusen-view-bottom.svg} | 0 .../svg/chokusen-view-front.svg} | 0 .../svg/chokusen-view-left.svg} | 0 .../svg/chokusen-view-right.svg} | 0 .../svg/chokusen-view-top.svg} | 0 .../svg/chokusen-wireframe.svg} | 0 .../svg/chokusen-zoom-all.svg} | 0 .../svg/chokusen-zoom-in.svg} | 0 .../svg/chokusen-zoom-out.svg} | 0 .../svg/chokusen-zoom-text-in.svg} | 0 .../svg/chokusen-zoom-text-out.svg} | 0 .../{svg-default => chokusen}/index.theme | 0 .../add.svg => chokusen/svg/chokusen-add.svg} | 0 .../svg/chokusen-animate-disabled.svg} | 0 .../svg/chokusen-animate-pause.svg} | 0 .../svg/chokusen-animate-play.svg} | 0 .../svg/chokusen-axes.svg} | 0 .../svg/chokusen-crosshairs.svg} | 0 .../svg/chokusen-down.svg} | 0 .../svg/chokusen-edit-copy.svg} | 0 .../svg/chokusen-export-3mf.svg} | 0 .../svg/chokusen-export-amf.svg} | 0 .../svg/chokusen-export-csg.svg} | 0 .../svg/chokusen-export-dxf.svg} | 0 .../svg/chokusen-export-obj.svg} | 0 .../svg/chokusen-export-off.svg} | 0 .../svg/chokusen-export-pdf.svg} | 0 .../svg/chokusen-export-png.svg} | 0 .../svg/chokusen-export-pov.svg} | 0 .../svg/chokusen-export-stl.svg} | 0 .../svg/chokusen-export-svg.svg} | 0 .../svg/chokusen-export-wrl.svg} | 0 .../svg/chokusen-indent.svg} | 0 .../svg/chokusen-measure-angle.svg} | 0 .../svg/chokusen-measure-distance.svg} | 0 .../new.svg => chokusen/svg/chokusen-new.svg} | 0 .../svg/chokusen-open.svg} | 0 .../svg/chokusen-orthogonal.svg} | 0 .../svg/chokusen-parameter.svg} | 0 .../svg/chokusen-perspective.svg} | 0 .../svg/chokusen-preview.svg} | 0 .../svg/chokusen-redo.svg} | 0 .../svg/chokusen-remove.svg} | 0 .../svg/chokusen-render.svg} | 0 .../svg/chokusen-reset-view.svg} | 0 .../svg/chokusen-save.svg} | 0 .../svg/chokusen-scalemarkers.svg} | 0 .../svg/chokusen-send.svg} | 0 .../svg/chokusen-show-edges.svg} | 0 .../svg/chokusen-surface.svg} | 0 .../svg/chokusen-throwntogether.svg} | 0 .../svg/chokusen-undo.svg} | 0 .../svg/chokusen-unindent.svg} | 0 .../up.svg => chokusen/svg/chokusen-up.svg} | 0 .../svg/chokusen-vcr-control-end.svg} | 0 .../svg/chokusen-vcr-control-pause.svg} | 0 .../svg/chokusen-vcr-control-play.svg} | 0 .../svg/chokusen-vcr-control-start.svg} | 0 .../svg/chokusen-vcr-control-step-back.svg} | 0 .../chokusen-vcr-control-step-forward.svg} | 0 .../svg/chokusen-view-back.svg} | 0 .../svg/chokusen-view-bottom.svg} | 0 .../svg/chokusen-view-front.svg} | 0 .../svg/chokusen-view-left.svg} | 0 .../svg/chokusen-view-right.svg} | 0 .../svg/chokusen-view-top.svg} | 0 .../svg/chokusen-wireframe.svg} | 0 .../svg/chokusen-zoom-all.svg} | 0 .../svg/chokusen-zoom-in.svg} | 0 .../svg/chokusen-zoom-out.svg} | 0 .../svg/chokusen-zoom-text-in.svg} | 0 .../svg/chokusen-zoom-text-out.svg} | 0 resources/icons/icons-svg-default.scad | 10 +- scripts/generate-svg-icons.sh | 56 ++++--- src/gui/Animate.cc | 84 +++------- src/gui/Animate.h | 9 +- src/gui/Animate.ui | 81 ++++++++-- src/gui/MainWindow.cc | 43 ----- src/gui/MainWindow.h | 1 - src/gui/MainWindow.ui | 150 ++++++++++++++++-- src/gui/Preferences.h | 4 +- src/gui/UIUtils.cc | 9 ++ src/gui/UIUtils.h | 4 + src/gui/ViewportControl.cc | 10 +- src/gui/ViewportControl.h | 2 + src/openscad_gui.cc | 12 +- src/openscad_gui.h | 6 - 142 files changed, 436 insertions(+), 309 deletions(-) create mode 100644 resources/icons-chokusen-dark.qrc create mode 100644 resources/icons-chokusen.qrc delete mode 100644 resources/icons-svg-default-dark.qrc delete mode 100644 resources/icons-svg-default.qrc rename resources/icons/{svg-default-dark => chokusen-dark}/index.theme (100%) rename resources/icons/{svg-default-dark/svg/add.svg => chokusen-dark/svg/chokusen-add.svg} (100%) rename resources/icons/{svg-default-dark/svg/animate_disabled.svg => chokusen-dark/svg/chokusen-animate-disabled.svg} (100%) rename resources/icons/{svg-default-dark/svg/animate_pause.svg => chokusen-dark/svg/chokusen-animate-pause.svg} (100%) rename resources/icons/{svg-default-dark/svg/animate.svg => chokusen-dark/svg/chokusen-animate-play.svg} (100%) rename resources/icons/{svg-default-dark/svg/axes.svg => chokusen-dark/svg/chokusen-axes.svg} (100%) rename resources/icons/{svg-default-dark/svg/crosshairs.svg => chokusen-dark/svg/chokusen-crosshairs.svg} (100%) rename resources/icons/{svg-default-dark/svg/down.svg => chokusen-dark/svg/chokusen-down.svg} (100%) rename resources/icons/{svg-default-dark/svg/edit-copy.svg => chokusen-dark/svg/chokusen-edit-copy.svg} (100%) rename resources/icons/{svg-default-dark/svg/export-3mf.svg => chokusen-dark/svg/chokusen-export-3mf.svg} (100%) rename resources/icons/{svg-default-dark/svg/export-amf.svg => chokusen-dark/svg/chokusen-export-amf.svg} (100%) rename resources/icons/{svg-default-dark/svg/export-csg.svg => chokusen-dark/svg/chokusen-export-csg.svg} (100%) rename resources/icons/{svg-default-dark/svg/export-dxf.svg => chokusen-dark/svg/chokusen-export-dxf.svg} (100%) rename resources/icons/{svg-default-dark/svg/export-obj.svg => chokusen-dark/svg/chokusen-export-obj.svg} (100%) rename resources/icons/{svg-default-dark/svg/export-off.svg => chokusen-dark/svg/chokusen-export-off.svg} (100%) rename resources/icons/{svg-default-dark/svg/export-pdf.svg => chokusen-dark/svg/chokusen-export-pdf.svg} (100%) rename resources/icons/{svg-default-dark/svg/export-png.svg => chokusen-dark/svg/chokusen-export-png.svg} (100%) rename resources/icons/{svg-default-dark/svg/export-pov.svg => chokusen-dark/svg/chokusen-export-pov.svg} (100%) rename resources/icons/{svg-default-dark/svg/export-stl.svg => chokusen-dark/svg/chokusen-export-stl.svg} (100%) rename resources/icons/{svg-default-dark/svg/export-svg.svg => chokusen-dark/svg/chokusen-export-svg.svg} (100%) rename resources/icons/{svg-default-dark/svg/export-wrl.svg => chokusen-dark/svg/chokusen-export-wrl.svg} (100%) rename resources/icons/{svg-default-dark/svg/indent.svg => chokusen-dark/svg/chokusen-indent.svg} (100%) rename resources/icons/{svg-default-dark/svg/measure-ang.svg => chokusen-dark/svg/chokusen-measure-angle.svg} (100%) rename resources/icons/{svg-default-dark/svg/measure-dist.svg => chokusen-dark/svg/chokusen-measure-distance.svg} (100%) rename resources/icons/{svg-default-dark/svg/new.svg => chokusen-dark/svg/chokusen-new.svg} (100%) rename resources/icons/{svg-default-dark/svg/open.svg => chokusen-dark/svg/chokusen-open.svg} (100%) rename resources/icons/{svg-default-dark/svg/orthogonal.svg => chokusen-dark/svg/chokusen-orthogonal.svg} (100%) rename resources/icons/{svg-default-dark/svg/parameter.svg => chokusen-dark/svg/chokusen-parameter.svg} (100%) rename resources/icons/{svg-default-dark/svg/perspective.svg => chokusen-dark/svg/chokusen-perspective.svg} (100%) rename resources/icons/{svg-default-dark/svg/preview.svg => chokusen-dark/svg/chokusen-preview.svg} (100%) rename resources/icons/{svg-default-dark/svg/redo.svg => chokusen-dark/svg/chokusen-redo.svg} (100%) rename resources/icons/{svg-default-dark/svg/remove.svg => chokusen-dark/svg/chokusen-remove.svg} (100%) rename resources/icons/{svg-default-dark/svg/render.svg => chokusen-dark/svg/chokusen-render.svg} (100%) rename resources/icons/{svg-default-dark/svg/reset-view.svg => chokusen-dark/svg/chokusen-reset-view.svg} (100%) rename resources/icons/{svg-default-dark/svg/save.svg => chokusen-dark/svg/chokusen-save.svg} (100%) rename resources/icons/{svg-default-dark/svg/scalemarkers.svg => chokusen-dark/svg/chokusen-scalemarkers.svg} (100%) rename resources/icons/{svg-default-dark/svg/send.svg => chokusen-dark/svg/chokusen-send.svg} (100%) rename resources/icons/{svg-default-dark/svg/show-edges.svg => chokusen-dark/svg/chokusen-show-edges.svg} (100%) rename resources/icons/{svg-default-dark/svg/surface.svg => chokusen-dark/svg/chokusen-surface.svg} (100%) rename resources/icons/{svg-default-dark/svg/throwntogether.svg => chokusen-dark/svg/chokusen-throwntogether.svg} (100%) rename resources/icons/{svg-default-dark/svg/undo.svg => chokusen-dark/svg/chokusen-undo.svg} (100%) rename resources/icons/{svg-default-dark/svg/unindent.svg => chokusen-dark/svg/chokusen-unindent.svg} (100%) rename resources/icons/{svg-default-dark/svg/up.svg => chokusen-dark/svg/chokusen-up.svg} (100%) rename resources/icons/{svg-default-dark/svg/vcr-control-end.svg => chokusen-dark/svg/chokusen-vcr-control-end.svg} (100%) rename resources/icons/{svg-default-dark/svg/vcr-control-pause.svg => chokusen-dark/svg/chokusen-vcr-control-pause.svg} (100%) rename resources/icons/{svg-default-dark/svg/vcr-control-play.svg => chokusen-dark/svg/chokusen-vcr-control-play.svg} (100%) rename resources/icons/{svg-default-dark/svg/vcr-control-start.svg => chokusen-dark/svg/chokusen-vcr-control-start.svg} (100%) rename resources/icons/{svg-default-dark/svg/vcr-control-step-back.svg => chokusen-dark/svg/chokusen-vcr-control-step-back.svg} (100%) rename resources/icons/{svg-default-dark/svg/vcr-control-step-forward.svg => chokusen-dark/svg/chokusen-vcr-control-step-forward.svg} (100%) rename resources/icons/{svg-default-dark/svg/view-back.svg => chokusen-dark/svg/chokusen-view-back.svg} (100%) rename resources/icons/{svg-default-dark/svg/view-bottom.svg => chokusen-dark/svg/chokusen-view-bottom.svg} (100%) rename resources/icons/{svg-default-dark/svg/view-front.svg => chokusen-dark/svg/chokusen-view-front.svg} (100%) rename resources/icons/{svg-default-dark/svg/view-left.svg => chokusen-dark/svg/chokusen-view-left.svg} (100%) rename resources/icons/{svg-default-dark/svg/view-right.svg => chokusen-dark/svg/chokusen-view-right.svg} (100%) rename resources/icons/{svg-default-dark/svg/view-top.svg => chokusen-dark/svg/chokusen-view-top.svg} (100%) rename resources/icons/{svg-default-dark/svg/wireframe.svg => chokusen-dark/svg/chokusen-wireframe.svg} (100%) rename resources/icons/{svg-default-dark/svg/zoom-all.svg => chokusen-dark/svg/chokusen-zoom-all.svg} (100%) rename resources/icons/{svg-default-dark/svg/zoom-in.svg => chokusen-dark/svg/chokusen-zoom-in.svg} (100%) rename resources/icons/{svg-default-dark/svg/zoom-out.svg => chokusen-dark/svg/chokusen-zoom-out.svg} (100%) rename resources/icons/{svg-default-dark/svg/zoom-text-in.svg => chokusen-dark/svg/chokusen-zoom-text-in.svg} (100%) rename resources/icons/{svg-default-dark/svg/zoom-text-out.svg => chokusen-dark/svg/chokusen-zoom-text-out.svg} (100%) rename resources/icons/{svg-default => chokusen}/index.theme (100%) rename resources/icons/{svg-default/svg/add.svg => chokusen/svg/chokusen-add.svg} (100%) rename resources/icons/{svg-default/svg/animate_disabled.svg => chokusen/svg/chokusen-animate-disabled.svg} (100%) rename resources/icons/{svg-default/svg/animate_pause.svg => chokusen/svg/chokusen-animate-pause.svg} (100%) rename resources/icons/{svg-default/svg/animate.svg => chokusen/svg/chokusen-animate-play.svg} (100%) rename resources/icons/{svg-default/svg/axes.svg => chokusen/svg/chokusen-axes.svg} (100%) rename resources/icons/{svg-default/svg/crosshairs.svg => chokusen/svg/chokusen-crosshairs.svg} (100%) rename resources/icons/{svg-default/svg/down.svg => chokusen/svg/chokusen-down.svg} (100%) rename resources/icons/{svg-default/svg/edit-copy.svg => chokusen/svg/chokusen-edit-copy.svg} (100%) rename resources/icons/{svg-default/svg/export-3mf.svg => chokusen/svg/chokusen-export-3mf.svg} (100%) rename resources/icons/{svg-default/svg/export-amf.svg => chokusen/svg/chokusen-export-amf.svg} (100%) rename resources/icons/{svg-default/svg/export-csg.svg => chokusen/svg/chokusen-export-csg.svg} (100%) rename resources/icons/{svg-default/svg/export-dxf.svg => chokusen/svg/chokusen-export-dxf.svg} (100%) rename resources/icons/{svg-default/svg/export-obj.svg => chokusen/svg/chokusen-export-obj.svg} (100%) rename resources/icons/{svg-default/svg/export-off.svg => chokusen/svg/chokusen-export-off.svg} (100%) rename resources/icons/{svg-default/svg/export-pdf.svg => chokusen/svg/chokusen-export-pdf.svg} (100%) rename resources/icons/{svg-default/svg/export-png.svg => chokusen/svg/chokusen-export-png.svg} (100%) rename resources/icons/{svg-default/svg/export-pov.svg => chokusen/svg/chokusen-export-pov.svg} (100%) rename resources/icons/{svg-default/svg/export-stl.svg => chokusen/svg/chokusen-export-stl.svg} (100%) rename resources/icons/{svg-default/svg/export-svg.svg => chokusen/svg/chokusen-export-svg.svg} (100%) rename resources/icons/{svg-default/svg/export-wrl.svg => chokusen/svg/chokusen-export-wrl.svg} (100%) rename resources/icons/{svg-default/svg/indent.svg => chokusen/svg/chokusen-indent.svg} (100%) rename resources/icons/{svg-default/svg/measure-ang.svg => chokusen/svg/chokusen-measure-angle.svg} (100%) rename resources/icons/{svg-default/svg/measure-dist.svg => chokusen/svg/chokusen-measure-distance.svg} (100%) rename resources/icons/{svg-default/svg/new.svg => chokusen/svg/chokusen-new.svg} (100%) rename resources/icons/{svg-default/svg/open.svg => chokusen/svg/chokusen-open.svg} (100%) rename resources/icons/{svg-default/svg/orthogonal.svg => chokusen/svg/chokusen-orthogonal.svg} (100%) rename resources/icons/{svg-default/svg/parameter.svg => chokusen/svg/chokusen-parameter.svg} (100%) rename resources/icons/{svg-default/svg/perspective.svg => chokusen/svg/chokusen-perspective.svg} (100%) rename resources/icons/{svg-default/svg/preview.svg => chokusen/svg/chokusen-preview.svg} (100%) rename resources/icons/{svg-default/svg/redo.svg => chokusen/svg/chokusen-redo.svg} (100%) rename resources/icons/{svg-default/svg/remove.svg => chokusen/svg/chokusen-remove.svg} (100%) rename resources/icons/{svg-default/svg/render.svg => chokusen/svg/chokusen-render.svg} (100%) rename resources/icons/{svg-default/svg/reset-view.svg => chokusen/svg/chokusen-reset-view.svg} (100%) rename resources/icons/{svg-default/svg/save.svg => chokusen/svg/chokusen-save.svg} (100%) rename resources/icons/{svg-default/svg/scalemarkers.svg => chokusen/svg/chokusen-scalemarkers.svg} (100%) rename resources/icons/{svg-default/svg/send.svg => chokusen/svg/chokusen-send.svg} (100%) rename resources/icons/{svg-default/svg/show-edges.svg => chokusen/svg/chokusen-show-edges.svg} (100%) rename resources/icons/{svg-default/svg/surface.svg => chokusen/svg/chokusen-surface.svg} (100%) rename resources/icons/{svg-default/svg/throwntogether.svg => chokusen/svg/chokusen-throwntogether.svg} (100%) rename resources/icons/{svg-default/svg/undo.svg => chokusen/svg/chokusen-undo.svg} (100%) rename resources/icons/{svg-default/svg/unindent.svg => chokusen/svg/chokusen-unindent.svg} (100%) rename resources/icons/{svg-default/svg/up.svg => chokusen/svg/chokusen-up.svg} (100%) rename resources/icons/{svg-default/svg/vcr-control-end.svg => chokusen/svg/chokusen-vcr-control-end.svg} (100%) rename resources/icons/{svg-default/svg/vcr-control-pause.svg => chokusen/svg/chokusen-vcr-control-pause.svg} (100%) rename resources/icons/{svg-default/svg/vcr-control-play.svg => chokusen/svg/chokusen-vcr-control-play.svg} (100%) rename resources/icons/{svg-default/svg/vcr-control-start.svg => chokusen/svg/chokusen-vcr-control-start.svg} (100%) rename resources/icons/{svg-default/svg/vcr-control-step-back.svg => chokusen/svg/chokusen-vcr-control-step-back.svg} (100%) rename resources/icons/{svg-default/svg/vcr-control-step-forward.svg => chokusen/svg/chokusen-vcr-control-step-forward.svg} (100%) rename resources/icons/{svg-default/svg/view-back.svg => chokusen/svg/chokusen-view-back.svg} (100%) rename resources/icons/{svg-default/svg/view-bottom.svg => chokusen/svg/chokusen-view-bottom.svg} (100%) rename resources/icons/{svg-default/svg/view-front.svg => chokusen/svg/chokusen-view-front.svg} (100%) rename resources/icons/{svg-default/svg/view-left.svg => chokusen/svg/chokusen-view-left.svg} (100%) rename resources/icons/{svg-default/svg/view-right.svg => chokusen/svg/chokusen-view-right.svg} (100%) rename resources/icons/{svg-default/svg/view-top.svg => chokusen/svg/chokusen-view-top.svg} (100%) rename resources/icons/{svg-default/svg/wireframe.svg => chokusen/svg/chokusen-wireframe.svg} (100%) rename resources/icons/{svg-default/svg/zoom-all.svg => chokusen/svg/chokusen-zoom-all.svg} (100%) rename resources/icons/{svg-default/svg/zoom-in.svg => chokusen/svg/chokusen-zoom-in.svg} (100%) rename resources/icons/{svg-default/svg/zoom-out.svg => chokusen/svg/chokusen-zoom-out.svg} (100%) rename resources/icons/{svg-default/svg/zoom-text-in.svg => chokusen/svg/chokusen-zoom-text-in.svg} (100%) rename resources/icons/{svg-default/svg/zoom-text-out.svg => chokusen/svg/chokusen-zoom-text-out.svg} (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index e819dd37ca5..a88c693ee12 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1287,8 +1287,8 @@ if(HEADLESS) else() list(APPEND RESOURCE_FILES ${RESOURCE_DIR}/common.qrc - ${RESOURCE_DIR}/icons-svg-default.qrc - ${RESOURCE_DIR}/icons-svg-default-dark.qrc + ${RESOURCE_DIR}/icons-chokusen.qrc + ${RESOURCE_DIR}/icons-chokusen-dark.qrc ) # GUI_UIS for .ui files to be indexed by Qt Creator despite AUTOUIC usage # GUI_HEADERS for .h files to be indexed by Qt Creator despite AUTOUIC usage diff --git a/resources/icons-chokusen-dark.qrc b/resources/icons-chokusen-dark.qrc new file mode 100644 index 00000000000..42bd869409c --- /dev/null +++ b/resources/icons-chokusen-dark.qrc @@ -0,0 +1,65 @@ + + + icons/chokusen-dark/index.theme + icons/chokusen-dark/svg/chokusen-add.svg + icons/chokusen-dark/svg/chokusen-animate-disabled.svg + icons/chokusen-dark/svg/chokusen-animate-pause.svg + icons/chokusen-dark/svg/chokusen-animate-play.svg + icons/chokusen-dark/svg/chokusen-axes.svg + icons/chokusen-dark/svg/chokusen-crosshairs.svg + icons/chokusen-dark/svg/chokusen-down.svg + icons/chokusen-dark/svg/chokusen-edit-copy.svg + icons/chokusen-dark/svg/chokusen-export-3mf.svg + icons/chokusen-dark/svg/chokusen-export-amf.svg + icons/chokusen-dark/svg/chokusen-export-csg.svg + icons/chokusen-dark/svg/chokusen-export-dxf.svg + icons/chokusen-dark/svg/chokusen-export-obj.svg + icons/chokusen-dark/svg/chokusen-export-off.svg + icons/chokusen-dark/svg/chokusen-export-pdf.svg + icons/chokusen-dark/svg/chokusen-export-png.svg + icons/chokusen-dark/svg/chokusen-export-pov.svg + icons/chokusen-dark/svg/chokusen-export-stl.svg + icons/chokusen-dark/svg/chokusen-export-svg.svg + icons/chokusen-dark/svg/chokusen-export-wrl.svg + icons/chokusen-dark/svg/chokusen-indent.svg + icons/chokusen-dark/svg/chokusen-measure-angle.svg + icons/chokusen-dark/svg/chokusen-measure-distance.svg + icons/chokusen-dark/svg/chokusen-new.svg + icons/chokusen-dark/svg/chokusen-open.svg + icons/chokusen-dark/svg/chokusen-orthogonal.svg + icons/chokusen-dark/svg/chokusen-parameter.svg + icons/chokusen-dark/svg/chokusen-perspective.svg + icons/chokusen-dark/svg/chokusen-preview.svg + icons/chokusen-dark/svg/chokusen-redo.svg + icons/chokusen-dark/svg/chokusen-remove.svg + icons/chokusen-dark/svg/chokusen-render.svg + icons/chokusen-dark/svg/chokusen-reset-view.svg + icons/chokusen-dark/svg/chokusen-save.svg + icons/chokusen-dark/svg/chokusen-scalemarkers.svg + icons/chokusen-dark/svg/chokusen-send.svg + icons/chokusen-dark/svg/chokusen-show-edges.svg + icons/chokusen-dark/svg/chokusen-surface.svg + icons/chokusen-dark/svg/chokusen-throwntogether.svg + icons/chokusen-dark/svg/chokusen-undo.svg + icons/chokusen-dark/svg/chokusen-unindent.svg + icons/chokusen-dark/svg/chokusen-up.svg + icons/chokusen-dark/svg/chokusen-vcr-control-end.svg + icons/chokusen-dark/svg/chokusen-vcr-control-pause.svg + icons/chokusen-dark/svg/chokusen-vcr-control-play.svg + icons/chokusen-dark/svg/chokusen-vcr-control-start.svg + icons/chokusen-dark/svg/chokusen-vcr-control-step-back.svg + icons/chokusen-dark/svg/chokusen-vcr-control-step-forward.svg + icons/chokusen-dark/svg/chokusen-view-back.svg + icons/chokusen-dark/svg/chokusen-view-bottom.svg + icons/chokusen-dark/svg/chokusen-view-front.svg + icons/chokusen-dark/svg/chokusen-view-left.svg + icons/chokusen-dark/svg/chokusen-view-right.svg + icons/chokusen-dark/svg/chokusen-view-top.svg + icons/chokusen-dark/svg/chokusen-wireframe.svg + icons/chokusen-dark/svg/chokusen-zoom-all.svg + icons/chokusen-dark/svg/chokusen-zoom-in.svg + icons/chokusen-dark/svg/chokusen-zoom-out.svg + icons/chokusen-dark/svg/chokusen-zoom-text-in.svg + icons/chokusen-dark/svg/chokusen-zoom-text-out.svg + + diff --git a/resources/icons-chokusen.qrc b/resources/icons-chokusen.qrc new file mode 100644 index 00000000000..02f75791541 --- /dev/null +++ b/resources/icons-chokusen.qrc @@ -0,0 +1,65 @@ + + + icons/chokusen/index.theme + icons/chokusen/svg/chokusen-add.svg + icons/chokusen/svg/chokusen-animate-disabled.svg + icons/chokusen/svg/chokusen-animate-pause.svg + icons/chokusen/svg/chokusen-animate-play.svg + icons/chokusen/svg/chokusen-axes.svg + icons/chokusen/svg/chokusen-crosshairs.svg + icons/chokusen/svg/chokusen-down.svg + icons/chokusen/svg/chokusen-edit-copy.svg + icons/chokusen/svg/chokusen-export-3mf.svg + icons/chokusen/svg/chokusen-export-amf.svg + icons/chokusen/svg/chokusen-export-csg.svg + icons/chokusen/svg/chokusen-export-dxf.svg + icons/chokusen/svg/chokusen-export-obj.svg + icons/chokusen/svg/chokusen-export-off.svg + icons/chokusen/svg/chokusen-export-pdf.svg + icons/chokusen/svg/chokusen-export-png.svg + icons/chokusen/svg/chokusen-export-pov.svg + icons/chokusen/svg/chokusen-export-stl.svg + icons/chokusen/svg/chokusen-export-svg.svg + icons/chokusen/svg/chokusen-export-wrl.svg + icons/chokusen/svg/chokusen-indent.svg + icons/chokusen/svg/chokusen-measure-angle.svg + icons/chokusen/svg/chokusen-measure-distance.svg + icons/chokusen/svg/chokusen-new.svg + icons/chokusen/svg/chokusen-open.svg + icons/chokusen/svg/chokusen-orthogonal.svg + icons/chokusen/svg/chokusen-parameter.svg + icons/chokusen/svg/chokusen-perspective.svg + icons/chokusen/svg/chokusen-preview.svg + icons/chokusen/svg/chokusen-redo.svg + icons/chokusen/svg/chokusen-remove.svg + icons/chokusen/svg/chokusen-render.svg + icons/chokusen/svg/chokusen-reset-view.svg + icons/chokusen/svg/chokusen-save.svg + icons/chokusen/svg/chokusen-scalemarkers.svg + icons/chokusen/svg/chokusen-send.svg + icons/chokusen/svg/chokusen-show-edges.svg + icons/chokusen/svg/chokusen-surface.svg + icons/chokusen/svg/chokusen-throwntogether.svg + icons/chokusen/svg/chokusen-undo.svg + icons/chokusen/svg/chokusen-unindent.svg + icons/chokusen/svg/chokusen-up.svg + icons/chokusen/svg/chokusen-vcr-control-end.svg + icons/chokusen/svg/chokusen-vcr-control-pause.svg + icons/chokusen/svg/chokusen-vcr-control-play.svg + icons/chokusen/svg/chokusen-vcr-control-start.svg + icons/chokusen/svg/chokusen-vcr-control-step-back.svg + icons/chokusen/svg/chokusen-vcr-control-step-forward.svg + icons/chokusen/svg/chokusen-view-back.svg + icons/chokusen/svg/chokusen-view-bottom.svg + icons/chokusen/svg/chokusen-view-front.svg + icons/chokusen/svg/chokusen-view-left.svg + icons/chokusen/svg/chokusen-view-right.svg + icons/chokusen/svg/chokusen-view-top.svg + icons/chokusen/svg/chokusen-wireframe.svg + icons/chokusen/svg/chokusen-zoom-all.svg + icons/chokusen/svg/chokusen-zoom-in.svg + icons/chokusen/svg/chokusen-zoom-out.svg + icons/chokusen/svg/chokusen-zoom-text-in.svg + icons/chokusen/svg/chokusen-zoom-text-out.svg + + diff --git a/resources/icons-svg-default-dark.qrc b/resources/icons-svg-default-dark.qrc deleted file mode 100644 index f71ca08a441..00000000000 --- a/resources/icons-svg-default-dark.qrc +++ /dev/null @@ -1,65 +0,0 @@ - - - icons/svg-default-dark/index.theme - icons/svg-default-dark/svg/add.svg - icons/svg-default-dark/svg/animate_disabled.svg - icons/svg-default-dark/svg/animate_pause.svg - icons/svg-default-dark/svg/animate.svg - icons/svg-default-dark/svg/axes.svg - icons/svg-default-dark/svg/crosshairs.svg - icons/svg-default-dark/svg/down.svg - icons/svg-default-dark/svg/edit-copy.svg - icons/svg-default-dark/svg/export-3mf.svg - icons/svg-default-dark/svg/export-amf.svg - icons/svg-default-dark/svg/export-csg.svg - icons/svg-default-dark/svg/export-dxf.svg - icons/svg-default-dark/svg/export-obj.svg - icons/svg-default-dark/svg/export-off.svg - icons/svg-default-dark/svg/export-pdf.svg - icons/svg-default-dark/svg/export-png.svg - icons/svg-default-dark/svg/export-pov.svg - icons/svg-default-dark/svg/export-stl.svg - icons/svg-default-dark/svg/export-svg.svg - icons/svg-default-dark/svg/export-wrl.svg - icons/svg-default-dark/svg/indent.svg - icons/svg-default-dark/svg/measure-ang.svg - icons/svg-default-dark/svg/measure-dist.svg - icons/svg-default-dark/svg/new.svg - icons/svg-default-dark/svg/open.svg - icons/svg-default-dark/svg/orthogonal.svg - icons/svg-default-dark/svg/parameter.svg - icons/svg-default-dark/svg/perspective.svg - icons/svg-default-dark/svg/preview.svg - icons/svg-default-dark/svg/redo.svg - icons/svg-default-dark/svg/remove.svg - icons/svg-default-dark/svg/render.svg - icons/svg-default-dark/svg/reset-view.svg - icons/svg-default-dark/svg/save.svg - icons/svg-default-dark/svg/scalemarkers.svg - icons/svg-default-dark/svg/send.svg - icons/svg-default-dark/svg/show-edges.svg - icons/svg-default-dark/svg/surface.svg - icons/svg-default-dark/svg/throwntogether.svg - icons/svg-default-dark/svg/undo.svg - icons/svg-default-dark/svg/unindent.svg - icons/svg-default-dark/svg/up.svg - icons/svg-default-dark/svg/vcr-control-end.svg - icons/svg-default-dark/svg/vcr-control-pause.svg - icons/svg-default-dark/svg/vcr-control-play.svg - icons/svg-default-dark/svg/vcr-control-start.svg - icons/svg-default-dark/svg/vcr-control-step-back.svg - icons/svg-default-dark/svg/vcr-control-step-forward.svg - icons/svg-default-dark/svg/view-back.svg - icons/svg-default-dark/svg/view-bottom.svg - icons/svg-default-dark/svg/view-front.svg - icons/svg-default-dark/svg/view-left.svg - icons/svg-default-dark/svg/view-right.svg - icons/svg-default-dark/svg/view-top.svg - icons/svg-default-dark/svg/wireframe.svg - icons/svg-default-dark/svg/zoom-all.svg - icons/svg-default-dark/svg/zoom-in.svg - icons/svg-default-dark/svg/zoom-out.svg - icons/svg-default-dark/svg/zoom-text-in.svg - icons/svg-default-dark/svg/zoom-text-out.svg - - diff --git a/resources/icons-svg-default.qrc b/resources/icons-svg-default.qrc deleted file mode 100644 index e7b352e587c..00000000000 --- a/resources/icons-svg-default.qrc +++ /dev/null @@ -1,65 +0,0 @@ - - - icons/svg-default/index.theme - icons/svg-default/svg/add.svg - icons/svg-default/svg/animate_disabled.svg - icons/svg-default/svg/animate_pause.svg - icons/svg-default/svg/animate.svg - icons/svg-default/svg/axes.svg - icons/svg-default/svg/crosshairs.svg - icons/svg-default/svg/down.svg - icons/svg-default/svg/edit-copy.svg - icons/svg-default/svg/export-3mf.svg - icons/svg-default/svg/export-amf.svg - icons/svg-default/svg/export-csg.svg - icons/svg-default/svg/export-dxf.svg - icons/svg-default/svg/export-obj.svg - icons/svg-default/svg/export-off.svg - icons/svg-default/svg/export-pdf.svg - icons/svg-default/svg/export-png.svg - icons/svg-default/svg/export-pov.svg - icons/svg-default/svg/export-stl.svg - icons/svg-default/svg/export-svg.svg - icons/svg-default/svg/export-wrl.svg - icons/svg-default/svg/indent.svg - icons/svg-default/svg/measure-ang.svg - icons/svg-default/svg/measure-dist.svg - icons/svg-default/svg/new.svg - icons/svg-default/svg/open.svg - icons/svg-default/svg/orthogonal.svg - icons/svg-default/svg/parameter.svg - icons/svg-default/svg/perspective.svg - icons/svg-default/svg/preview.svg - icons/svg-default/svg/redo.svg - icons/svg-default/svg/remove.svg - icons/svg-default/svg/render.svg - icons/svg-default/svg/reset-view.svg - icons/svg-default/svg/save.svg - icons/svg-default/svg/scalemarkers.svg - icons/svg-default/svg/send.svg - icons/svg-default/svg/show-edges.svg - icons/svg-default/svg/surface.svg - icons/svg-default/svg/throwntogether.svg - icons/svg-default/svg/undo.svg - icons/svg-default/svg/unindent.svg - icons/svg-default/svg/up.svg - icons/svg-default/svg/vcr-control-end.svg - icons/svg-default/svg/vcr-control-pause.svg - icons/svg-default/svg/vcr-control-play.svg - icons/svg-default/svg/vcr-control-start.svg - icons/svg-default/svg/vcr-control-step-back.svg - icons/svg-default/svg/vcr-control-step-forward.svg - icons/svg-default/svg/view-back.svg - icons/svg-default/svg/view-bottom.svg - icons/svg-default/svg/view-front.svg - icons/svg-default/svg/view-left.svg - icons/svg-default/svg/view-right.svg - icons/svg-default/svg/view-top.svg - icons/svg-default/svg/wireframe.svg - icons/svg-default/svg/zoom-all.svg - icons/svg-default/svg/zoom-in.svg - icons/svg-default/svg/zoom-out.svg - icons/svg-default/svg/zoom-text-in.svg - icons/svg-default/svg/zoom-text-out.svg - - diff --git a/resources/icons/svg-default-dark/index.theme b/resources/icons/chokusen-dark/index.theme similarity index 100% rename from resources/icons/svg-default-dark/index.theme rename to resources/icons/chokusen-dark/index.theme diff --git a/resources/icons/svg-default-dark/svg/add.svg b/resources/icons/chokusen-dark/svg/chokusen-add.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/add.svg rename to resources/icons/chokusen-dark/svg/chokusen-add.svg diff --git a/resources/icons/svg-default-dark/svg/animate_disabled.svg b/resources/icons/chokusen-dark/svg/chokusen-animate-disabled.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/animate_disabled.svg rename to resources/icons/chokusen-dark/svg/chokusen-animate-disabled.svg diff --git a/resources/icons/svg-default-dark/svg/animate_pause.svg b/resources/icons/chokusen-dark/svg/chokusen-animate-pause.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/animate_pause.svg rename to resources/icons/chokusen-dark/svg/chokusen-animate-pause.svg diff --git a/resources/icons/svg-default-dark/svg/animate.svg b/resources/icons/chokusen-dark/svg/chokusen-animate-play.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/animate.svg rename to resources/icons/chokusen-dark/svg/chokusen-animate-play.svg diff --git a/resources/icons/svg-default-dark/svg/axes.svg b/resources/icons/chokusen-dark/svg/chokusen-axes.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/axes.svg rename to resources/icons/chokusen-dark/svg/chokusen-axes.svg diff --git a/resources/icons/svg-default-dark/svg/crosshairs.svg b/resources/icons/chokusen-dark/svg/chokusen-crosshairs.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/crosshairs.svg rename to resources/icons/chokusen-dark/svg/chokusen-crosshairs.svg diff --git a/resources/icons/svg-default-dark/svg/down.svg b/resources/icons/chokusen-dark/svg/chokusen-down.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/down.svg rename to resources/icons/chokusen-dark/svg/chokusen-down.svg diff --git a/resources/icons/svg-default-dark/svg/edit-copy.svg b/resources/icons/chokusen-dark/svg/chokusen-edit-copy.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/edit-copy.svg rename to resources/icons/chokusen-dark/svg/chokusen-edit-copy.svg diff --git a/resources/icons/svg-default-dark/svg/export-3mf.svg b/resources/icons/chokusen-dark/svg/chokusen-export-3mf.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/export-3mf.svg rename to resources/icons/chokusen-dark/svg/chokusen-export-3mf.svg diff --git a/resources/icons/svg-default-dark/svg/export-amf.svg b/resources/icons/chokusen-dark/svg/chokusen-export-amf.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/export-amf.svg rename to resources/icons/chokusen-dark/svg/chokusen-export-amf.svg diff --git a/resources/icons/svg-default-dark/svg/export-csg.svg b/resources/icons/chokusen-dark/svg/chokusen-export-csg.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/export-csg.svg rename to resources/icons/chokusen-dark/svg/chokusen-export-csg.svg diff --git a/resources/icons/svg-default-dark/svg/export-dxf.svg b/resources/icons/chokusen-dark/svg/chokusen-export-dxf.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/export-dxf.svg rename to resources/icons/chokusen-dark/svg/chokusen-export-dxf.svg diff --git a/resources/icons/svg-default-dark/svg/export-obj.svg b/resources/icons/chokusen-dark/svg/chokusen-export-obj.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/export-obj.svg rename to resources/icons/chokusen-dark/svg/chokusen-export-obj.svg diff --git a/resources/icons/svg-default-dark/svg/export-off.svg b/resources/icons/chokusen-dark/svg/chokusen-export-off.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/export-off.svg rename to resources/icons/chokusen-dark/svg/chokusen-export-off.svg diff --git a/resources/icons/svg-default-dark/svg/export-pdf.svg b/resources/icons/chokusen-dark/svg/chokusen-export-pdf.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/export-pdf.svg rename to resources/icons/chokusen-dark/svg/chokusen-export-pdf.svg diff --git a/resources/icons/svg-default-dark/svg/export-png.svg b/resources/icons/chokusen-dark/svg/chokusen-export-png.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/export-png.svg rename to resources/icons/chokusen-dark/svg/chokusen-export-png.svg diff --git a/resources/icons/svg-default-dark/svg/export-pov.svg b/resources/icons/chokusen-dark/svg/chokusen-export-pov.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/export-pov.svg rename to resources/icons/chokusen-dark/svg/chokusen-export-pov.svg diff --git a/resources/icons/svg-default-dark/svg/export-stl.svg b/resources/icons/chokusen-dark/svg/chokusen-export-stl.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/export-stl.svg rename to resources/icons/chokusen-dark/svg/chokusen-export-stl.svg diff --git a/resources/icons/svg-default-dark/svg/export-svg.svg b/resources/icons/chokusen-dark/svg/chokusen-export-svg.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/export-svg.svg rename to resources/icons/chokusen-dark/svg/chokusen-export-svg.svg diff --git a/resources/icons/svg-default-dark/svg/export-wrl.svg b/resources/icons/chokusen-dark/svg/chokusen-export-wrl.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/export-wrl.svg rename to resources/icons/chokusen-dark/svg/chokusen-export-wrl.svg diff --git a/resources/icons/svg-default-dark/svg/indent.svg b/resources/icons/chokusen-dark/svg/chokusen-indent.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/indent.svg rename to resources/icons/chokusen-dark/svg/chokusen-indent.svg diff --git a/resources/icons/svg-default-dark/svg/measure-ang.svg b/resources/icons/chokusen-dark/svg/chokusen-measure-angle.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/measure-ang.svg rename to resources/icons/chokusen-dark/svg/chokusen-measure-angle.svg diff --git a/resources/icons/svg-default-dark/svg/measure-dist.svg b/resources/icons/chokusen-dark/svg/chokusen-measure-distance.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/measure-dist.svg rename to resources/icons/chokusen-dark/svg/chokusen-measure-distance.svg diff --git a/resources/icons/svg-default-dark/svg/new.svg b/resources/icons/chokusen-dark/svg/chokusen-new.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/new.svg rename to resources/icons/chokusen-dark/svg/chokusen-new.svg diff --git a/resources/icons/svg-default-dark/svg/open.svg b/resources/icons/chokusen-dark/svg/chokusen-open.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/open.svg rename to resources/icons/chokusen-dark/svg/chokusen-open.svg diff --git a/resources/icons/svg-default-dark/svg/orthogonal.svg b/resources/icons/chokusen-dark/svg/chokusen-orthogonal.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/orthogonal.svg rename to resources/icons/chokusen-dark/svg/chokusen-orthogonal.svg diff --git a/resources/icons/svg-default-dark/svg/parameter.svg b/resources/icons/chokusen-dark/svg/chokusen-parameter.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/parameter.svg rename to resources/icons/chokusen-dark/svg/chokusen-parameter.svg diff --git a/resources/icons/svg-default-dark/svg/perspective.svg b/resources/icons/chokusen-dark/svg/chokusen-perspective.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/perspective.svg rename to resources/icons/chokusen-dark/svg/chokusen-perspective.svg diff --git a/resources/icons/svg-default-dark/svg/preview.svg b/resources/icons/chokusen-dark/svg/chokusen-preview.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/preview.svg rename to resources/icons/chokusen-dark/svg/chokusen-preview.svg diff --git a/resources/icons/svg-default-dark/svg/redo.svg b/resources/icons/chokusen-dark/svg/chokusen-redo.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/redo.svg rename to resources/icons/chokusen-dark/svg/chokusen-redo.svg diff --git a/resources/icons/svg-default-dark/svg/remove.svg b/resources/icons/chokusen-dark/svg/chokusen-remove.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/remove.svg rename to resources/icons/chokusen-dark/svg/chokusen-remove.svg diff --git a/resources/icons/svg-default-dark/svg/render.svg b/resources/icons/chokusen-dark/svg/chokusen-render.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/render.svg rename to resources/icons/chokusen-dark/svg/chokusen-render.svg diff --git a/resources/icons/svg-default-dark/svg/reset-view.svg b/resources/icons/chokusen-dark/svg/chokusen-reset-view.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/reset-view.svg rename to resources/icons/chokusen-dark/svg/chokusen-reset-view.svg diff --git a/resources/icons/svg-default-dark/svg/save.svg b/resources/icons/chokusen-dark/svg/chokusen-save.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/save.svg rename to resources/icons/chokusen-dark/svg/chokusen-save.svg diff --git a/resources/icons/svg-default-dark/svg/scalemarkers.svg b/resources/icons/chokusen-dark/svg/chokusen-scalemarkers.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/scalemarkers.svg rename to resources/icons/chokusen-dark/svg/chokusen-scalemarkers.svg diff --git a/resources/icons/svg-default-dark/svg/send.svg b/resources/icons/chokusen-dark/svg/chokusen-send.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/send.svg rename to resources/icons/chokusen-dark/svg/chokusen-send.svg diff --git a/resources/icons/svg-default-dark/svg/show-edges.svg b/resources/icons/chokusen-dark/svg/chokusen-show-edges.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/show-edges.svg rename to resources/icons/chokusen-dark/svg/chokusen-show-edges.svg diff --git a/resources/icons/svg-default-dark/svg/surface.svg b/resources/icons/chokusen-dark/svg/chokusen-surface.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/surface.svg rename to resources/icons/chokusen-dark/svg/chokusen-surface.svg diff --git a/resources/icons/svg-default-dark/svg/throwntogether.svg b/resources/icons/chokusen-dark/svg/chokusen-throwntogether.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/throwntogether.svg rename to resources/icons/chokusen-dark/svg/chokusen-throwntogether.svg diff --git a/resources/icons/svg-default-dark/svg/undo.svg b/resources/icons/chokusen-dark/svg/chokusen-undo.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/undo.svg rename to resources/icons/chokusen-dark/svg/chokusen-undo.svg diff --git a/resources/icons/svg-default-dark/svg/unindent.svg b/resources/icons/chokusen-dark/svg/chokusen-unindent.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/unindent.svg rename to resources/icons/chokusen-dark/svg/chokusen-unindent.svg diff --git a/resources/icons/svg-default-dark/svg/up.svg b/resources/icons/chokusen-dark/svg/chokusen-up.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/up.svg rename to resources/icons/chokusen-dark/svg/chokusen-up.svg diff --git a/resources/icons/svg-default-dark/svg/vcr-control-end.svg b/resources/icons/chokusen-dark/svg/chokusen-vcr-control-end.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/vcr-control-end.svg rename to resources/icons/chokusen-dark/svg/chokusen-vcr-control-end.svg diff --git a/resources/icons/svg-default-dark/svg/vcr-control-pause.svg b/resources/icons/chokusen-dark/svg/chokusen-vcr-control-pause.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/vcr-control-pause.svg rename to resources/icons/chokusen-dark/svg/chokusen-vcr-control-pause.svg diff --git a/resources/icons/svg-default-dark/svg/vcr-control-play.svg b/resources/icons/chokusen-dark/svg/chokusen-vcr-control-play.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/vcr-control-play.svg rename to resources/icons/chokusen-dark/svg/chokusen-vcr-control-play.svg diff --git a/resources/icons/svg-default-dark/svg/vcr-control-start.svg b/resources/icons/chokusen-dark/svg/chokusen-vcr-control-start.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/vcr-control-start.svg rename to resources/icons/chokusen-dark/svg/chokusen-vcr-control-start.svg diff --git a/resources/icons/svg-default-dark/svg/vcr-control-step-back.svg b/resources/icons/chokusen-dark/svg/chokusen-vcr-control-step-back.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/vcr-control-step-back.svg rename to resources/icons/chokusen-dark/svg/chokusen-vcr-control-step-back.svg diff --git a/resources/icons/svg-default-dark/svg/vcr-control-step-forward.svg b/resources/icons/chokusen-dark/svg/chokusen-vcr-control-step-forward.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/vcr-control-step-forward.svg rename to resources/icons/chokusen-dark/svg/chokusen-vcr-control-step-forward.svg diff --git a/resources/icons/svg-default-dark/svg/view-back.svg b/resources/icons/chokusen-dark/svg/chokusen-view-back.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/view-back.svg rename to resources/icons/chokusen-dark/svg/chokusen-view-back.svg diff --git a/resources/icons/svg-default-dark/svg/view-bottom.svg b/resources/icons/chokusen-dark/svg/chokusen-view-bottom.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/view-bottom.svg rename to resources/icons/chokusen-dark/svg/chokusen-view-bottom.svg diff --git a/resources/icons/svg-default-dark/svg/view-front.svg b/resources/icons/chokusen-dark/svg/chokusen-view-front.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/view-front.svg rename to resources/icons/chokusen-dark/svg/chokusen-view-front.svg diff --git a/resources/icons/svg-default-dark/svg/view-left.svg b/resources/icons/chokusen-dark/svg/chokusen-view-left.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/view-left.svg rename to resources/icons/chokusen-dark/svg/chokusen-view-left.svg diff --git a/resources/icons/svg-default-dark/svg/view-right.svg b/resources/icons/chokusen-dark/svg/chokusen-view-right.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/view-right.svg rename to resources/icons/chokusen-dark/svg/chokusen-view-right.svg diff --git a/resources/icons/svg-default-dark/svg/view-top.svg b/resources/icons/chokusen-dark/svg/chokusen-view-top.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/view-top.svg rename to resources/icons/chokusen-dark/svg/chokusen-view-top.svg diff --git a/resources/icons/svg-default-dark/svg/wireframe.svg b/resources/icons/chokusen-dark/svg/chokusen-wireframe.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/wireframe.svg rename to resources/icons/chokusen-dark/svg/chokusen-wireframe.svg diff --git a/resources/icons/svg-default-dark/svg/zoom-all.svg b/resources/icons/chokusen-dark/svg/chokusen-zoom-all.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/zoom-all.svg rename to resources/icons/chokusen-dark/svg/chokusen-zoom-all.svg diff --git a/resources/icons/svg-default-dark/svg/zoom-in.svg b/resources/icons/chokusen-dark/svg/chokusen-zoom-in.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/zoom-in.svg rename to resources/icons/chokusen-dark/svg/chokusen-zoom-in.svg diff --git a/resources/icons/svg-default-dark/svg/zoom-out.svg b/resources/icons/chokusen-dark/svg/chokusen-zoom-out.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/zoom-out.svg rename to resources/icons/chokusen-dark/svg/chokusen-zoom-out.svg diff --git a/resources/icons/svg-default-dark/svg/zoom-text-in.svg b/resources/icons/chokusen-dark/svg/chokusen-zoom-text-in.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/zoom-text-in.svg rename to resources/icons/chokusen-dark/svg/chokusen-zoom-text-in.svg diff --git a/resources/icons/svg-default-dark/svg/zoom-text-out.svg b/resources/icons/chokusen-dark/svg/chokusen-zoom-text-out.svg similarity index 100% rename from resources/icons/svg-default-dark/svg/zoom-text-out.svg rename to resources/icons/chokusen-dark/svg/chokusen-zoom-text-out.svg diff --git a/resources/icons/svg-default/index.theme b/resources/icons/chokusen/index.theme similarity index 100% rename from resources/icons/svg-default/index.theme rename to resources/icons/chokusen/index.theme diff --git a/resources/icons/svg-default/svg/add.svg b/resources/icons/chokusen/svg/chokusen-add.svg similarity index 100% rename from resources/icons/svg-default/svg/add.svg rename to resources/icons/chokusen/svg/chokusen-add.svg diff --git a/resources/icons/svg-default/svg/animate_disabled.svg b/resources/icons/chokusen/svg/chokusen-animate-disabled.svg similarity index 100% rename from resources/icons/svg-default/svg/animate_disabled.svg rename to resources/icons/chokusen/svg/chokusen-animate-disabled.svg diff --git a/resources/icons/svg-default/svg/animate_pause.svg b/resources/icons/chokusen/svg/chokusen-animate-pause.svg similarity index 100% rename from resources/icons/svg-default/svg/animate_pause.svg rename to resources/icons/chokusen/svg/chokusen-animate-pause.svg diff --git a/resources/icons/svg-default/svg/animate.svg b/resources/icons/chokusen/svg/chokusen-animate-play.svg similarity index 100% rename from resources/icons/svg-default/svg/animate.svg rename to resources/icons/chokusen/svg/chokusen-animate-play.svg diff --git a/resources/icons/svg-default/svg/axes.svg b/resources/icons/chokusen/svg/chokusen-axes.svg similarity index 100% rename from resources/icons/svg-default/svg/axes.svg rename to resources/icons/chokusen/svg/chokusen-axes.svg diff --git a/resources/icons/svg-default/svg/crosshairs.svg b/resources/icons/chokusen/svg/chokusen-crosshairs.svg similarity index 100% rename from resources/icons/svg-default/svg/crosshairs.svg rename to resources/icons/chokusen/svg/chokusen-crosshairs.svg diff --git a/resources/icons/svg-default/svg/down.svg b/resources/icons/chokusen/svg/chokusen-down.svg similarity index 100% rename from resources/icons/svg-default/svg/down.svg rename to resources/icons/chokusen/svg/chokusen-down.svg diff --git a/resources/icons/svg-default/svg/edit-copy.svg b/resources/icons/chokusen/svg/chokusen-edit-copy.svg similarity index 100% rename from resources/icons/svg-default/svg/edit-copy.svg rename to resources/icons/chokusen/svg/chokusen-edit-copy.svg diff --git a/resources/icons/svg-default/svg/export-3mf.svg b/resources/icons/chokusen/svg/chokusen-export-3mf.svg similarity index 100% rename from resources/icons/svg-default/svg/export-3mf.svg rename to resources/icons/chokusen/svg/chokusen-export-3mf.svg diff --git a/resources/icons/svg-default/svg/export-amf.svg b/resources/icons/chokusen/svg/chokusen-export-amf.svg similarity index 100% rename from resources/icons/svg-default/svg/export-amf.svg rename to resources/icons/chokusen/svg/chokusen-export-amf.svg diff --git a/resources/icons/svg-default/svg/export-csg.svg b/resources/icons/chokusen/svg/chokusen-export-csg.svg similarity index 100% rename from resources/icons/svg-default/svg/export-csg.svg rename to resources/icons/chokusen/svg/chokusen-export-csg.svg diff --git a/resources/icons/svg-default/svg/export-dxf.svg b/resources/icons/chokusen/svg/chokusen-export-dxf.svg similarity index 100% rename from resources/icons/svg-default/svg/export-dxf.svg rename to resources/icons/chokusen/svg/chokusen-export-dxf.svg diff --git a/resources/icons/svg-default/svg/export-obj.svg b/resources/icons/chokusen/svg/chokusen-export-obj.svg similarity index 100% rename from resources/icons/svg-default/svg/export-obj.svg rename to resources/icons/chokusen/svg/chokusen-export-obj.svg diff --git a/resources/icons/svg-default/svg/export-off.svg b/resources/icons/chokusen/svg/chokusen-export-off.svg similarity index 100% rename from resources/icons/svg-default/svg/export-off.svg rename to resources/icons/chokusen/svg/chokusen-export-off.svg diff --git a/resources/icons/svg-default/svg/export-pdf.svg b/resources/icons/chokusen/svg/chokusen-export-pdf.svg similarity index 100% rename from resources/icons/svg-default/svg/export-pdf.svg rename to resources/icons/chokusen/svg/chokusen-export-pdf.svg diff --git a/resources/icons/svg-default/svg/export-png.svg b/resources/icons/chokusen/svg/chokusen-export-png.svg similarity index 100% rename from resources/icons/svg-default/svg/export-png.svg rename to resources/icons/chokusen/svg/chokusen-export-png.svg diff --git a/resources/icons/svg-default/svg/export-pov.svg b/resources/icons/chokusen/svg/chokusen-export-pov.svg similarity index 100% rename from resources/icons/svg-default/svg/export-pov.svg rename to resources/icons/chokusen/svg/chokusen-export-pov.svg diff --git a/resources/icons/svg-default/svg/export-stl.svg b/resources/icons/chokusen/svg/chokusen-export-stl.svg similarity index 100% rename from resources/icons/svg-default/svg/export-stl.svg rename to resources/icons/chokusen/svg/chokusen-export-stl.svg diff --git a/resources/icons/svg-default/svg/export-svg.svg b/resources/icons/chokusen/svg/chokusen-export-svg.svg similarity index 100% rename from resources/icons/svg-default/svg/export-svg.svg rename to resources/icons/chokusen/svg/chokusen-export-svg.svg diff --git a/resources/icons/svg-default/svg/export-wrl.svg b/resources/icons/chokusen/svg/chokusen-export-wrl.svg similarity index 100% rename from resources/icons/svg-default/svg/export-wrl.svg rename to resources/icons/chokusen/svg/chokusen-export-wrl.svg diff --git a/resources/icons/svg-default/svg/indent.svg b/resources/icons/chokusen/svg/chokusen-indent.svg similarity index 100% rename from resources/icons/svg-default/svg/indent.svg rename to resources/icons/chokusen/svg/chokusen-indent.svg diff --git a/resources/icons/svg-default/svg/measure-ang.svg b/resources/icons/chokusen/svg/chokusen-measure-angle.svg similarity index 100% rename from resources/icons/svg-default/svg/measure-ang.svg rename to resources/icons/chokusen/svg/chokusen-measure-angle.svg diff --git a/resources/icons/svg-default/svg/measure-dist.svg b/resources/icons/chokusen/svg/chokusen-measure-distance.svg similarity index 100% rename from resources/icons/svg-default/svg/measure-dist.svg rename to resources/icons/chokusen/svg/chokusen-measure-distance.svg diff --git a/resources/icons/svg-default/svg/new.svg b/resources/icons/chokusen/svg/chokusen-new.svg similarity index 100% rename from resources/icons/svg-default/svg/new.svg rename to resources/icons/chokusen/svg/chokusen-new.svg diff --git a/resources/icons/svg-default/svg/open.svg b/resources/icons/chokusen/svg/chokusen-open.svg similarity index 100% rename from resources/icons/svg-default/svg/open.svg rename to resources/icons/chokusen/svg/chokusen-open.svg diff --git a/resources/icons/svg-default/svg/orthogonal.svg b/resources/icons/chokusen/svg/chokusen-orthogonal.svg similarity index 100% rename from resources/icons/svg-default/svg/orthogonal.svg rename to resources/icons/chokusen/svg/chokusen-orthogonal.svg diff --git a/resources/icons/svg-default/svg/parameter.svg b/resources/icons/chokusen/svg/chokusen-parameter.svg similarity index 100% rename from resources/icons/svg-default/svg/parameter.svg rename to resources/icons/chokusen/svg/chokusen-parameter.svg diff --git a/resources/icons/svg-default/svg/perspective.svg b/resources/icons/chokusen/svg/chokusen-perspective.svg similarity index 100% rename from resources/icons/svg-default/svg/perspective.svg rename to resources/icons/chokusen/svg/chokusen-perspective.svg diff --git a/resources/icons/svg-default/svg/preview.svg b/resources/icons/chokusen/svg/chokusen-preview.svg similarity index 100% rename from resources/icons/svg-default/svg/preview.svg rename to resources/icons/chokusen/svg/chokusen-preview.svg diff --git a/resources/icons/svg-default/svg/redo.svg b/resources/icons/chokusen/svg/chokusen-redo.svg similarity index 100% rename from resources/icons/svg-default/svg/redo.svg rename to resources/icons/chokusen/svg/chokusen-redo.svg diff --git a/resources/icons/svg-default/svg/remove.svg b/resources/icons/chokusen/svg/chokusen-remove.svg similarity index 100% rename from resources/icons/svg-default/svg/remove.svg rename to resources/icons/chokusen/svg/chokusen-remove.svg diff --git a/resources/icons/svg-default/svg/render.svg b/resources/icons/chokusen/svg/chokusen-render.svg similarity index 100% rename from resources/icons/svg-default/svg/render.svg rename to resources/icons/chokusen/svg/chokusen-render.svg diff --git a/resources/icons/svg-default/svg/reset-view.svg b/resources/icons/chokusen/svg/chokusen-reset-view.svg similarity index 100% rename from resources/icons/svg-default/svg/reset-view.svg rename to resources/icons/chokusen/svg/chokusen-reset-view.svg diff --git a/resources/icons/svg-default/svg/save.svg b/resources/icons/chokusen/svg/chokusen-save.svg similarity index 100% rename from resources/icons/svg-default/svg/save.svg rename to resources/icons/chokusen/svg/chokusen-save.svg diff --git a/resources/icons/svg-default/svg/scalemarkers.svg b/resources/icons/chokusen/svg/chokusen-scalemarkers.svg similarity index 100% rename from resources/icons/svg-default/svg/scalemarkers.svg rename to resources/icons/chokusen/svg/chokusen-scalemarkers.svg diff --git a/resources/icons/svg-default/svg/send.svg b/resources/icons/chokusen/svg/chokusen-send.svg similarity index 100% rename from resources/icons/svg-default/svg/send.svg rename to resources/icons/chokusen/svg/chokusen-send.svg diff --git a/resources/icons/svg-default/svg/show-edges.svg b/resources/icons/chokusen/svg/chokusen-show-edges.svg similarity index 100% rename from resources/icons/svg-default/svg/show-edges.svg rename to resources/icons/chokusen/svg/chokusen-show-edges.svg diff --git a/resources/icons/svg-default/svg/surface.svg b/resources/icons/chokusen/svg/chokusen-surface.svg similarity index 100% rename from resources/icons/svg-default/svg/surface.svg rename to resources/icons/chokusen/svg/chokusen-surface.svg diff --git a/resources/icons/svg-default/svg/throwntogether.svg b/resources/icons/chokusen/svg/chokusen-throwntogether.svg similarity index 100% rename from resources/icons/svg-default/svg/throwntogether.svg rename to resources/icons/chokusen/svg/chokusen-throwntogether.svg diff --git a/resources/icons/svg-default/svg/undo.svg b/resources/icons/chokusen/svg/chokusen-undo.svg similarity index 100% rename from resources/icons/svg-default/svg/undo.svg rename to resources/icons/chokusen/svg/chokusen-undo.svg diff --git a/resources/icons/svg-default/svg/unindent.svg b/resources/icons/chokusen/svg/chokusen-unindent.svg similarity index 100% rename from resources/icons/svg-default/svg/unindent.svg rename to resources/icons/chokusen/svg/chokusen-unindent.svg diff --git a/resources/icons/svg-default/svg/up.svg b/resources/icons/chokusen/svg/chokusen-up.svg similarity index 100% rename from resources/icons/svg-default/svg/up.svg rename to resources/icons/chokusen/svg/chokusen-up.svg diff --git a/resources/icons/svg-default/svg/vcr-control-end.svg b/resources/icons/chokusen/svg/chokusen-vcr-control-end.svg similarity index 100% rename from resources/icons/svg-default/svg/vcr-control-end.svg rename to resources/icons/chokusen/svg/chokusen-vcr-control-end.svg diff --git a/resources/icons/svg-default/svg/vcr-control-pause.svg b/resources/icons/chokusen/svg/chokusen-vcr-control-pause.svg similarity index 100% rename from resources/icons/svg-default/svg/vcr-control-pause.svg rename to resources/icons/chokusen/svg/chokusen-vcr-control-pause.svg diff --git a/resources/icons/svg-default/svg/vcr-control-play.svg b/resources/icons/chokusen/svg/chokusen-vcr-control-play.svg similarity index 100% rename from resources/icons/svg-default/svg/vcr-control-play.svg rename to resources/icons/chokusen/svg/chokusen-vcr-control-play.svg diff --git a/resources/icons/svg-default/svg/vcr-control-start.svg b/resources/icons/chokusen/svg/chokusen-vcr-control-start.svg similarity index 100% rename from resources/icons/svg-default/svg/vcr-control-start.svg rename to resources/icons/chokusen/svg/chokusen-vcr-control-start.svg diff --git a/resources/icons/svg-default/svg/vcr-control-step-back.svg b/resources/icons/chokusen/svg/chokusen-vcr-control-step-back.svg similarity index 100% rename from resources/icons/svg-default/svg/vcr-control-step-back.svg rename to resources/icons/chokusen/svg/chokusen-vcr-control-step-back.svg diff --git a/resources/icons/svg-default/svg/vcr-control-step-forward.svg b/resources/icons/chokusen/svg/chokusen-vcr-control-step-forward.svg similarity index 100% rename from resources/icons/svg-default/svg/vcr-control-step-forward.svg rename to resources/icons/chokusen/svg/chokusen-vcr-control-step-forward.svg diff --git a/resources/icons/svg-default/svg/view-back.svg b/resources/icons/chokusen/svg/chokusen-view-back.svg similarity index 100% rename from resources/icons/svg-default/svg/view-back.svg rename to resources/icons/chokusen/svg/chokusen-view-back.svg diff --git a/resources/icons/svg-default/svg/view-bottom.svg b/resources/icons/chokusen/svg/chokusen-view-bottom.svg similarity index 100% rename from resources/icons/svg-default/svg/view-bottom.svg rename to resources/icons/chokusen/svg/chokusen-view-bottom.svg diff --git a/resources/icons/svg-default/svg/view-front.svg b/resources/icons/chokusen/svg/chokusen-view-front.svg similarity index 100% rename from resources/icons/svg-default/svg/view-front.svg rename to resources/icons/chokusen/svg/chokusen-view-front.svg diff --git a/resources/icons/svg-default/svg/view-left.svg b/resources/icons/chokusen/svg/chokusen-view-left.svg similarity index 100% rename from resources/icons/svg-default/svg/view-left.svg rename to resources/icons/chokusen/svg/chokusen-view-left.svg diff --git a/resources/icons/svg-default/svg/view-right.svg b/resources/icons/chokusen/svg/chokusen-view-right.svg similarity index 100% rename from resources/icons/svg-default/svg/view-right.svg rename to resources/icons/chokusen/svg/chokusen-view-right.svg diff --git a/resources/icons/svg-default/svg/view-top.svg b/resources/icons/chokusen/svg/chokusen-view-top.svg similarity index 100% rename from resources/icons/svg-default/svg/view-top.svg rename to resources/icons/chokusen/svg/chokusen-view-top.svg diff --git a/resources/icons/svg-default/svg/wireframe.svg b/resources/icons/chokusen/svg/chokusen-wireframe.svg similarity index 100% rename from resources/icons/svg-default/svg/wireframe.svg rename to resources/icons/chokusen/svg/chokusen-wireframe.svg diff --git a/resources/icons/svg-default/svg/zoom-all.svg b/resources/icons/chokusen/svg/chokusen-zoom-all.svg similarity index 100% rename from resources/icons/svg-default/svg/zoom-all.svg rename to resources/icons/chokusen/svg/chokusen-zoom-all.svg diff --git a/resources/icons/svg-default/svg/zoom-in.svg b/resources/icons/chokusen/svg/chokusen-zoom-in.svg similarity index 100% rename from resources/icons/svg-default/svg/zoom-in.svg rename to resources/icons/chokusen/svg/chokusen-zoom-in.svg diff --git a/resources/icons/svg-default/svg/zoom-out.svg b/resources/icons/chokusen/svg/chokusen-zoom-out.svg similarity index 100% rename from resources/icons/svg-default/svg/zoom-out.svg rename to resources/icons/chokusen/svg/chokusen-zoom-out.svg diff --git a/resources/icons/svg-default/svg/zoom-text-in.svg b/resources/icons/chokusen/svg/chokusen-zoom-text-in.svg similarity index 100% rename from resources/icons/svg-default/svg/zoom-text-in.svg rename to resources/icons/chokusen/svg/chokusen-zoom-text-in.svg diff --git a/resources/icons/svg-default/svg/zoom-text-out.svg b/resources/icons/chokusen/svg/chokusen-zoom-text-out.svg similarity index 100% rename from resources/icons/svg-default/svg/zoom-text-out.svg rename to resources/icons/chokusen/svg/chokusen-zoom-text-out.svg diff --git a/resources/icons/icons-svg-default.scad b/resources/icons/icons-svg-default.scad index abddc7bd258..846fc3a9574 100644 --- a/resources/icons/icons-svg-default.scad +++ b/resources/icons/icons-svg-default.scad @@ -56,9 +56,9 @@ icons = [ ["scalemarkers"], ["show-edges"], ["crosshairs"], - ["animate"], - ["animate_disabled"], - ["animate_pause"], + ["animate-play"], + ["animate-disabled"], + ["animate-pause"], ["surface"], ["wireframe"], ["throwntogether"], @@ -68,8 +68,8 @@ icons = [ ["vcr-control-pause"], ["vcr-control-step-forward"], ["vcr-control-end"], - ["measure-dist"], - ["measure-ang"], + ["measure-distance"], + ["measure-angle"], ["edit-copy"], ["up"], ["down"], diff --git a/scripts/generate-svg-icons.sh b/scripts/generate-svg-icons.sh index 516bfbb998b..9309ca524e8 100755 --- a/scripts/generate-svg-icons.sh +++ b/scripts/generate-svg-icons.sh @@ -3,7 +3,8 @@ set -euo pipefail DARK=-dark -ICONDIR=icons/svg-default +NAME=chokusen +ICONDIR=icons/$NAME ICONSCAD=icons/icons-svg-default.scad if [ ! -d resources/"$ICONDIR" -o ! -f resources/"$ICONSCAD" ]; then @@ -21,28 +22,45 @@ fi set -e -for i in $("$OPENSCAD" -o - --export-format echo -Dlist_icons=true "$ICONSCAD" | sed -e 's/ECHO: icon = //;' | tr -d '"') -do - SVG="$ICONDIR"/svg/"$i.svg" - SVGDARK="$ICONDIR$DARK"/svg/"$i.svg" - echo "Generating icon $SVG and $SVGDARK..." - "$OPENSCAD" -o "$SVG" --render -Dselected_icon="\"$i\"" "$ICONSCAD" 2>/dev/null - - sed -i'' -e's/ "$SVGDARK" - sed -i'' -e's/fill="lightgray"/fill="black"/' "$SVG" -done - -for s in "" "$DARK" -do -cat > icons-svg-default${s}.qrc </dev/null + + sed -i'' -e's/ "$SVGDARK" + sed -i'' -e's/fill="lightgray"/fill="black"/' "$SVG" + done +} + +write_qrc() { + FILE="$1" + PREFIX="$2" + SUBDIR="$3" + INDEX="$4" + + if [ -n "$INDEX" ]; then + I=" ${PREFIX}${INDEX} +" + else + I="" + fi + cat > "$FILE" < - icons/svg-default${s}/index.theme -$(ls "${ICONDIR}${s}"/svg/*.svg | sed -E 's,.*, &,') +${I}$(cd "${ICONDIR}"/svg && ls *.svg | sed -E "s,.*, ${PREFIX}${SUBDIR}&,") EOF -done +} + +generate_icons +write_qrc icons-$NAME.qrc icons/$NAME/ svg/ index.theme +write_qrc icons-$NAME${DARK}.qrc icons/$NAME${DARK}/ svg/ index.theme echo "Done." diff --git a/src/gui/Animate.cc b/src/gui/Animate.cc index 6153d176f28..3168a1ded2f 100644 --- a/src/gui/Animate.cc +++ b/src/gui/Animate.cc @@ -14,6 +14,7 @@ #include "utils/printutils.h" #include "gui/MainWindow.h" +#include "gui/UIUtils.h" #include "openscad_gui.h" Animate::Animate(QWidget *parent) : QWidget(parent) @@ -37,6 +38,10 @@ void Animate::initGUI() this->anim_dumping = false; this->anim_dump_start_step = 0; + this->iconRun = QIcon::fromTheme("chokusen-animate-play"); + this->iconPause = QIcon::fromTheme("chokusen-animate-pause"); + this->iconDisabled = QIcon::fromTheme("chokusen-animate-disabled"); + animate_timer = new QTimer(this); connect(animate_timer, SIGNAL(timeout()), this, SLOT(incrementTVal())); @@ -50,58 +55,18 @@ void Animate::setMainWindow(MainWindow *mainWindow) { this->mainWindow = mainWindow; - //prepare actions for inputdriver - QIcon playIcon = OpenSCAD::isDarkMode() ? QIcon(":/icons/svg-default/animate-white.svg") : QIcon(":/icons/svg-default/animate.svg"); - QIcon pauseIcon = OpenSCAD::isDarkMode() ? QIcon(":/icons/svg-default/animate_pause-white.svg") : QIcon(":/icons/svg-default/animate_pause.svg"); - - createActionAndPrepareButton( - playIcon, _("toggle pause/unpause"), - "pauseUnpause", pauseButton - ); - - initVCR(); + connectAction(this->actionAnimationPauseUnpause, pauseButton); + connectAction(this->actionAnimationStart, pushButton_MoveToBeginning); + connectAction(this->actionAnimationStepBack, pushButton_StepBack); + connectAction(this->actionAnimationStepForward, pushButton_StepForward); + connectAction(this->actionAnimationEnd, pushButton_MoveToEnd); updatePauseButtonIcon(); } -void Animate::createActionAndPrepareButton(const QIcon& icon, const QString& description, const std::string& actionName, QPushButton *button){ - auto *action = new QAction(icon, description, this); - action->setObjectName(QString::fromStdString(actionName)); - - connect(action, SIGNAL(triggered()), button, SLOT(click())); +void Animate::connectAction(QAction *action, QPushButton *button) +{ + connect(action, &QAction::triggered, button, &QPushButton::click); this->action_list.append(action); - - button->setIcon(icon); - button->setToolTip(description); - button->setText(""); -} - -void Animate::initVCR(){ - QString suffix(""); - if (OpenSCAD::isDarkMode()) { - suffix = QString("-white"); - } - static QIcon startIcon = QIcon(":/icons/svg-default/vcr-control-start" + suffix + ".svg"); - static QIcon stepBackIcon = QIcon(":/icons/svg-default/vcr-control-step-back" + suffix + ".svg"); - static QIcon playIcon = QIcon(":/icons/svg-default/vcr-control-play" + suffix + ".svg"); - static QIcon pauseIcon = QIcon(":/icons/svg-default/vcr-control-pause" + suffix + ".svg"); - static QIcon stepFwrdIcon = QIcon(":/icons/svg-default/vcr-control-step-forward" + suffix + ".svg"); - static QIcon endIcon = QIcon(":/icons/svg-default/vcr-control-end" + suffix + ".svg"); - - createActionAndPrepareButton( - startIcon, _("Move to beginning (first frame)"), - "start", pushButton_MoveToBeginning); - - createActionAndPrepareButton( - stepBackIcon, _("Step one frame back"), - "stepBack", pushButton_StepBack); - - createActionAndPrepareButton( - stepFwrdIcon, _("Step one frame forward"), - "stepFwrd", pushButton_StepForward); - - createActionAndPrepareButton( - endIcon, _("Move to end (last frame)"), - "end", pushButton_MoveToEnd); } void Animate::updatedAnimTval() @@ -141,18 +106,20 @@ void Animate::updatedAnimFpsAndAnimSteps() animate_timer->start(); } - QString redBackground = QString(OpenSCAD::isDarkMode() ? "background-color:#502020;" : "background-color:#ffaaaa;"); + QPalette defaultPalette; + const auto bgColor = defaultPalette.base().color().toRgb(); + QString redStyleSheet = UIUtils::blendForBackgroundColorStyleSheet(bgColor, errorBlendColor); if (this->steps_ok || this->e_fsteps->text() == "") { this->e_fsteps->setStyleSheet(""); } else { - this->e_fsteps->setStyleSheet(redBackground); + this->e_fsteps->setStyleSheet(redStyleSheet); } if (this->fps_ok || this->e_fps->text() == "") { this->e_fps->setStyleSheet(""); } else { - this->e_fps->setStyleSheet(redBackground); + this->e_fps->setStyleSheet(redStyleSheet); } updatePauseButtonIcon(); @@ -228,24 +195,15 @@ void Animate::on_pauseButton_pressed() void Animate::updatePauseButtonIcon() { - static QIcon runDark(":/icons/svg-default/animate.svg"); - static QIcon runLight(":/icons/svg-default/animate-white.svg"); - - static QIcon pauseDark(":/icons/svg-default/animate_pause.svg"); - static QIcon pauseLight(":/icons/svg-default/animate_pause-white.svg"); - - static QIcon disabledDark(":/icons/svg-default/animate_disabled.svg"); - static QIcon disabledLight(":/icons/svg-default/animate_disabled-white.svg"); - if (animate_timer->isActive()) { - pauseButton->setIcon(OpenSCAD::isDarkMode() ? pauseLight : pauseDark); + pauseButton->setIcon(this->iconPause); pauseButton->setToolTip(_("press to pause animation") ); } else { if (this->fps_ok && this->steps_ok) { - pauseButton->setIcon(OpenSCAD::isDarkMode() ? runLight : runDark); + pauseButton->setIcon(this->iconRun); pauseButton->setToolTip(_("press to start animation") ); } else { - pauseButton->setIcon(OpenSCAD::isDarkMode() ? disabledLight : disabledDark); + pauseButton->setIcon(this->iconDisabled); pauseButton->setToolTip(_("incorrect values") ); } } diff --git a/src/gui/Animate.h b/src/gui/Animate.h index 1e0451fdae6..6c4a4b87627 100644 --- a/src/gui/Animate.h +++ b/src/gui/Animate.h @@ -58,7 +58,7 @@ public slots: MainWindow *mainWindow; void updatePauseButtonIcon(); - void initVCR(); + void connectAction(QAction *, QPushButton *); double anim_tval; bool anim_dumping; @@ -66,16 +66,17 @@ public slots: int anim_step; int anim_numsteps; - bool isLightTheme(); - bool fps_ok; bool t_ok; bool steps_ok; int initMinWidth; + QIcon iconRun; + QIcon iconPause; + QIcon iconDisabled; QList action_list; - void createActionAndPrepareButton(const QIcon& icon, const QString& description, const std::string& actionName, QPushButton *button); + QColor errorBlendColor{"red"}; signals: diff --git a/src/gui/Animate.ui b/src/gui/Animate.ui index e357506f75f..d388472e2ac 100644 --- a/src/gui/Animate.ui +++ b/src/gui/Animate.ui @@ -64,7 +64,7 @@ 0 0 879 - 148 + 143 @@ -91,6 +91,9 @@ Time: + + e_tval + @@ -127,6 +130,9 @@ FPS: + + e_fps + @@ -163,6 +169,9 @@ Steps: + + e_fsteps + @@ -248,8 +257,7 @@ - - :/icons/svg-default/vcr-control-start.svg:/icons/svg-default/vcr-control-start.svg + @@ -265,8 +273,7 @@ - - :/icons/svg-default/vcr-control-step-back.svg:/icons/svg-default/vcr-control-step-back.svg + @@ -282,8 +289,7 @@ - - :/icons/svg-default/animate.svg:/icons/svg-default/animate.svg + @@ -299,8 +305,7 @@ - - :/icons/svg-default/vcr-control-step-forward.svg:/icons/svg-default/vcr-control-step-forward.svg + @@ -316,8 +321,7 @@ - - :/icons/svg-default/vcr-control-end.svg:/icons/svg-default/vcr-control-end.svg + @@ -351,12 +355,59 @@ - + + + + + + Toggle animation pause/unpause + + + Toggle animation pause/unpause + + + + + + + + Move to beginning (first frame) + + + Move to beginning (first frame) + + + + + + + + Step one frame back + + + Step one frame back + + + + + + + + Step one frame forward + + + Step one frame forward + + + + + + - RowSelected + Move to end (last frame) - - Return + + Move to end (last frame) diff --git a/src/gui/MainWindow.cc b/src/gui/MainWindow.cc index 4b29bd9acf1..dfb96294f3e 100644 --- a/src/gui/MainWindow.cc +++ b/src/gui/MainWindow.cc @@ -624,43 +624,6 @@ MainWindow::MainWindow(const QStringList& filenames) Preferences *instance = Preferences::inst(); - initActionIcon(editActionZoomTextIn, ":/icons/svg-default/zoom-text-in.svg", ":/icons/svg-default/zoom-text-in-white.svg"); - initActionIcon(editActionZoomTextOut, ":/icons/svg-default/zoom-text-out.svg", ":/icons/svg-default/zoom-text-out-white.svg"); - initActionIcon(viewActionShowAxes, ":/icons/svg-default/axes.svg", ":/icons/svg-default/axes-white.svg"); - initActionIcon(viewActionShowEdges, ":/icons/svg-default/show-edges.svg", ":/icons/svg-default/show-edges-white.svg"); - initActionIcon(viewActionZoomIn, ":/icons/svg-default/zoom-in.svg", ":/icons/svg-default/zoom-in-white.svg"); - initActionIcon(viewActionZoomOut, ":/icons/svg-default/zoom-out.svg", ":/icons/svg-default/zoom-out-white.svg"); - initActionIcon(viewActionTop, ":/icons/svg-default/view-top.svg", ":/icons/svg-default/view-top-white.svg"); - initActionIcon(viewActionBottom, ":/icons/svg-default/view-bottom.svg", ":/icons/svg-default/view-bottom-white.svg"); - initActionIcon(viewActionLeft, ":/icons/svg-default/view-left.svg", ":/icons/svg-default/view-left-white.svg"); - initActionIcon(viewActionRight, ":/icons/svg-default/view-right.svg", ":/icons/svg-default/view-right-white.svg"); - initActionIcon(viewActionFront, ":/icons/svg-default/view-front.svg", ":/icons/svg-default/view-front-white.svg"); - initActionIcon(viewActionBack, ":/icons/svg-default/view-back.svg", ":/icons/svg-default/view-back-white.svg"); - initActionIcon(viewActionSurfaces, ":/icons/svg-default/surface.svg", ":/icons/svg-default/surface-white.svg"); - initActionIcon(viewActionWireframe, ":/icons/svg-default/wireframe.svg", ":/icons/svg-default/wireframe-white.svg"); - initActionIcon(viewActionShowCrosshairs, ":/icons/svg-default/crosshairs.svg", ":/icons/svg-default/crosshairs-white.svg"); - initActionIcon(viewActionThrownTogether, ":/icons/svg-default/throwntogether.svg", ":/icons/svg-default/throwntogether-white.svg"); - initActionIcon(viewActionPerspective, ":/icons/svg-default/perspective.svg", ":/icons/svg-default/perspective-white.svg"); - initActionIcon(viewActionOrthogonal, ":/icons/svg-default/orthogonal.svg", ":/icons/svg-default/orthogonal-white.svg"); - initActionIcon(designActionMeasureDist, ":/icons/svg-default/measure-dist.svg", ":/icons/svg-default/measure-dist-white.svg"); - initActionIcon(designActionMeasureAngle, ":/icons/svg-default/measure-ang.svg", ":/icons/svg-default/measure-ang-white.svg"); - initActionIcon(fileActionExportBinarySTL, ":/icons/svg-default/export-stl.svg", ":/icons/svg-default/export-stl-white.svg"); - initActionIcon(fileActionExportAsciiSTL, ":/icons/svg-default/export-stl.svg", ":/icons/svg-default/export-stl-white.svg"); - initActionIcon(fileActionExportAMF, ":/icons/svg-default/export-amf.svg", ":/icons/svg-default/export-amf-white.svg"); - initActionIcon(fileActionExport3MF, ":/icons/svg-default/export-3mf.svg", ":/icons/svg-default/export-3mf-white.svg"); - initActionIcon(fileActionExportOBJ, ":/icons/svg-default/export-obj.svg", ":/icons/svg-default/export-obj-white.svg"); - initActionIcon(fileActionExportOFF, ":/icons/svg-default/export-off.svg", ":/icons/svg-default/export-off-white.svg"); - initActionIcon(fileActionExportWRL, ":/icons/svg-default/export-wrl.svg", ":/icons/svg-default/export-wrl-white.svg"); - initActionIcon(fileActionExportPOV, ":/icons/svg-default/export-pov.svg", ":/icons/svg-default/export-pov-white.svg"); - initActionIcon(fileActionExportDXF, ":/icons/svg-default/export-dxf.svg", ":/icons/svg-default/export-dxf-white.svg"); - initActionIcon(fileActionExportSVG, ":/icons/svg-default/export-svg.svg", ":/icons/svg-default/export-svg-white.svg"); - initActionIcon(fileActionExportCSG, ":/icons/svg-default/export-csg.svg", ":/icons/svg-default/export-csg-white.svg"); - initActionIcon(fileActionExportPDF, ":/icons/svg-default/export-pdf.svg", ":/icons/svg-default/export-pdf-white.svg"); - initActionIcon(fileActionExportImage, ":/icons/svg-default/export-png.svg", ":/icons/svg-default/export-png-white.svg"); - initActionIcon(viewActionViewAll, ":/icons/svg-default/zoom-all.svg", ":/icons/svg-default/zoom-all-white.svg"); - initActionIcon(viewActionResetView, ":/icons/svg-default/reset-view.svg", ":/icons/svg-default/reset-view-white.svg"); - initActionIcon(viewActionShowScaleProportional, ":/icons/svg-default/scalemarkers.svg", ":/icons/svg-default/scalemarkers-white.svg"); - InputDriverManager::instance()->registerActions(this->menuBar()->actions(), "", ""); InputDriverManager::instance()->registerActions(this->animateWidget->actions(), "animation", "animate"); instance->ButtonConfig->init(); @@ -788,12 +751,6 @@ void MainWindow::openFileFromPath(const QString& path, int line) } } -void MainWindow::initActionIcon(QAction *action, const char *darkResource, const char *lightResource) -{ - const char *resource = OpenSCAD::isDarkMode() ? lightResource : darkResource; - action->setIcon(QIcon(resource)); -} - void MainWindow::addKeyboardShortCut(const QList& actions) { for (auto& action : actions) { diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h index 80e72452de5..17ffad039be 100644 --- a/src/gui/MainWindow.h +++ b/src/gui/MainWindow.h @@ -153,7 +153,6 @@ private slots: void UnknownExceptionCleanup(std::string msg = ""); private: - void initActionIcon(QAction *action, const char *darkResource, const char *lightResource); void setRenderVariables(ContextHandle& context); void updateCompileResult(); void compile(bool reload, bool forcedone = false); diff --git a/src/gui/MainWindow.ui b/src/gui/MainWindow.ui index ecf15a24f76..6ca66e9e25f 100644 --- a/src/gui/MainWindow.ui +++ b/src/gui/MainWindow.ui @@ -205,8 +205,8 @@ 0 0 - 1354 - 29 + 1431 + 24 @@ -739,7 +739,8 @@ - + + .. &New File @@ -755,7 +756,8 @@ - + + .. &Open File @@ -771,7 +773,8 @@ - + + .. &Save @@ -822,7 +825,8 @@ false - + + .. &Undo @@ -836,7 +840,8 @@ - + + .. &Redo @@ -891,7 +896,8 @@ - + + .. &Indent @@ -964,6 +970,10 @@ + + + .. + Increase Font &Size @@ -972,6 +982,10 @@ + + + .. + Decrease Font Si&ze @@ -997,7 +1011,8 @@ - + + .. &Preview @@ -1008,7 +1023,8 @@ - + + .. R&ender @@ -1019,7 +1035,8 @@ - + + .. &3D Print @@ -1029,6 +1046,9 @@ + + + Measure &Distance @@ -1037,6 +1057,9 @@ + + + Measure &Angle @@ -1065,6 +1088,9 @@ + + + Export as &STL (binary)... @@ -1073,26 +1099,41 @@ + + + Export as &STL (ascii)... + + + Export as &OBJ... + + + Export as &POV... + + + Export as &OFF... + + + Export as &WRL... @@ -1112,6 +1153,9 @@ true + + + Surfaces @@ -1123,6 +1167,9 @@ true + + + Wireframe @@ -1134,6 +1181,9 @@ true + + + Thrown Together @@ -1145,6 +1195,10 @@ true + + + .. + Show Edges @@ -1156,6 +1210,10 @@ true + + + .. + Show Axes @@ -1167,6 +1225,9 @@ true + + + Show Crosshairs @@ -1178,11 +1239,17 @@ true + + + Show Scale Markers + + + &Top @@ -1191,6 +1258,9 @@ + + + &Bottom @@ -1199,6 +1269,9 @@ + + + &Left @@ -1207,6 +1280,9 @@ + + + &Right @@ -1215,6 +1291,9 @@ + + + &Front @@ -1223,6 +1302,9 @@ + + + Bac&k @@ -1250,6 +1332,9 @@ true + + + &Perspective @@ -1258,6 +1343,9 @@ true + + + &Orthogonal @@ -1302,6 +1390,9 @@ + + + Export as &DXF... @@ -1394,11 +1485,17 @@ + + + Export as &Image... + + + Export as &CSG... @@ -1414,6 +1511,9 @@ + + + Reset View @@ -1424,21 +1524,34 @@ + + + Export as S&VG... + + + Export as &AMF... + + + Export as &3MF... + + + .. + Zoom In @@ -1447,6 +1560,10 @@ + + + .. + Zoom Out @@ -1455,6 +1572,9 @@ + + + View All @@ -1501,7 +1621,8 @@ - + + .. U&nindent @@ -1527,6 +1648,9 @@ + + + Export as PDF... @@ -1702,8 +1826,6 @@ - - diff --git a/src/gui/Preferences.h b/src/gui/Preferences.h index 2f6a6ad379a..570b98a32a8 100644 --- a/src/gui/Preferences.h +++ b/src/gui/Preferences.h @@ -41,10 +41,10 @@ class Preferences : public QMainWindow, public Ui::Preferences, public InitConfi template QListWidgetItem * createListItem(const item_type& itemType, const QString& text = "", bool editable = false) { - const auto iconResource = QString(":/icons/svg-default/%1%2.svg").arg(QString::fromStdString(itemType.icon()), OpenSCAD::isDarkMode() ? "-white" : ""); + const auto icon = QIcon::fromTheme(QString::fromStdString(itemType.icon())); std::string description = itemType.description(); const auto itemText = description.empty() ? text : QString::fromStdString(description); - const auto listItem = new QListWidgetItem(QIcon(iconResource), itemText, + const auto listItem = new QListWidgetItem(icon, itemText, nullptr, static_cast(QListWidgetItem::UserType) + static_cast(itemType)); if (editable) { diff --git a/src/gui/UIUtils.cc b/src/gui/UIUtils.cc index 3632201f927..f56bf7ca2c2 100644 --- a/src/gui/UIUtils.cc +++ b/src/gui/UIUtils.cc @@ -235,3 +235,12 @@ void UIUtils::openOfflineCheatSheet() QDesktopServices::openUrl(QUrl(docPath)); } } + +QString UIUtils::blendForBackgroundColorStyleSheet(const QColor& input, const QColor& blend, float transparency) +{ + const auto result = QColor( + 255.0 * (transparency * blend.redF() + (1 - transparency) * input.redF()), + 255.0 * (transparency * blend.greenF() + (1 - transparency) * input.greenF()), + 255.0 * (transparency * blend.blueF() + (1 - transparency) * input.blueF())); + return QString("background-color:%1;").arg(result.toRgb().name()); +} diff --git a/src/gui/UIUtils.h b/src/gui/UIUtils.h index 536b05a7751..677863054ca 100644 --- a/src/gui/UIUtils.h +++ b/src/gui/UIUtils.h @@ -33,6 +33,7 @@ namespace fs = std::filesystem; namespace UIUtils { + static const int maxRecentFiles = 10; QFileInfo openFile(QWidget *parent = nullptr); @@ -64,4 +65,7 @@ fs::path returnOfflineCheatSheetPath(); bool hasOfflineCheatSheet(); void openOfflineCheatSheet(); + +QString blendForBackgroundColorStyleSheet(const QColor& input, const QColor& blend, float transparency = 0.2); + } // namespace UIUtils diff --git a/src/gui/ViewportControl.cc b/src/gui/ViewportControl.cc index a521a792ff4..de41b8b1c88 100644 --- a/src/gui/ViewportControl.cc +++ b/src/gui/ViewportControl.cc @@ -51,12 +51,18 @@ void ViewportControl::setMainWindow(MainWindow *mainWindow) QString ViewportControl::yellowHintBackground() { - return {OpenSCAD::isDarkMode() ? "background-color:#303006;" : "background-color:#ffffaa;"}; + QPalette defaultPalette; + const auto bgColor = defaultPalette.base().color().toRgb(); + QString styleSheet = UIUtils::blendForBackgroundColorStyleSheet(bgColor, warnBlendColor); + return styleSheet; } QString ViewportControl::redHintBackground() { - return {OpenSCAD::isDarkMode() ? "background-color:#502020;" : "background-color:#ffaaaa;"}; + QPalette defaultPalette; + const auto bgColor = defaultPalette.base().color().toRgb(); + QString styleSheet = UIUtils::blendForBackgroundColorStyleSheet(bgColor, errorBlendColor); + return styleSheet; } void ViewportControl::resizeEvent(QResizeEvent *event) diff --git a/src/gui/ViewportControl.h b/src/gui/ViewportControl.h index 207e9565128..f2a758e9735 100644 --- a/src/gui/ViewportControl.h +++ b/src/gui/ViewportControl.h @@ -44,6 +44,8 @@ private slots: std::mutex resizeMutex; QString yellowHintBackground(); QString redHintBackground(); + QColor warnBlendColor{"yellow"}; + QColor errorBlendColor{"red"}; signals: void openFile(const QString, int); diff --git a/src/openscad_gui.cc b/src/openscad_gui.cc index b3757709c1b..71f10a0f30c 100644 --- a/src/openscad_gui.cc +++ b/src/openscad_gui.cc @@ -31,7 +31,6 @@ #include #include #include -#include #include #include #include @@ -73,7 +72,14 @@ extern std::string arg_colorscheme; #define STRINGIFY(x) #x #define TOSTRING(x) STRINGIFY(x) -namespace OpenSCAD { +namespace { + +// Check if running with light or dark theme. This should really just be used +// to switch the icon theme globally. +// +// For applying a color change, e.g. highlighting the background of an input +// field, see: +// UIUtils::blendForBackgroundColorStyleSheet(const QColor& input, const QColor& blend) bool isDarkMode() { #if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0) @@ -154,7 +160,7 @@ int gui(std::vector& inputFiles, const std::filesystem::path& origi OpenSCADApp app(argc, argv); // remove ugly frames in the QStatusBar when using additional widgets app.setStyleSheet("QStatusBar::item { border: 0px solid black; }"); - QIcon::setThemeName(OpenSCAD::isDarkMode() ? "svg-default-dark" : "svg-default"); + QIcon::setThemeName(isDarkMode() ? "chokusen-dark" : "chokusen"); // set up groups for QSettings QCoreApplication::setOrganizationName("OpenSCAD"); diff --git a/src/openscad_gui.h b/src/openscad_gui.h index 96ac42331c0..1910a6b2a20 100644 --- a/src/openscad_gui.h +++ b/src/openscad_gui.h @@ -31,10 +31,4 @@ #include -namespace OpenSCAD { - -bool isDarkMode(); - -} - int gui(std::vector& inputFiles, const std::filesystem::path& original_path, int argc, char **argv); From aff3647b3831eadf69835d7254db5c27f71d0e8f Mon Sep 17 00:00:00 2001 From: Torsten Paul Date: Mon, 6 Jan 2025 05:28:53 +0100 Subject: [PATCH 07/10] Final icon updates; Add custom temp folder, e.g. for PrusaSlicer Flatpak. --- src/gui/ExternalToolInterface.cc | 25 +++- src/gui/ExternalToolInterface.h | 5 +- src/gui/FontList.ui | 21 +-- src/gui/Preferences.cc | 30 ++++- src/gui/Preferences.h | 4 +- src/gui/Preferences.ui | 218 ++++++++++++++++++------------- src/gui/Settings.cc | 1 + src/gui/Settings.h | 13 +- 8 files changed, 195 insertions(+), 122 deletions(-) diff --git a/src/gui/ExternalToolInterface.cc b/src/gui/ExternalToolInterface.cc index 2dbea31947f..a346da0410d 100644 --- a/src/gui/ExternalToolInterface.cc +++ b/src/gui/ExternalToolInterface.cc @@ -26,10 +26,11 @@ #include "gui/ExternalToolInterface.h" -#include -#include -#include -#include +#include +#include +#include +#include +#include #include "Settings.h" #include "gui/OctoPrint.h" @@ -48,7 +49,7 @@ bool ExternalToolInterface::exportTemporaryFile(const std::shared_ptr progress_cb) { QProcess process; diff --git a/src/gui/ExternalToolInterface.h b/src/gui/ExternalToolInterface.h index 0dbeb7c5938..4ab16d86cb5 100644 --- a/src/gui/ExternalToolInterface.h +++ b/src/gui/ExternalToolInterface.h @@ -28,7 +28,8 @@ #include -#include +#include +#include #include "gui/PrintService.h" #include "geometry/Geometry.h" @@ -46,6 +47,7 @@ class ExternalToolInterface FileFormat fileFormat() const { return exportFormat_; } virtual std::string getURL() const { return ""; }; + virtual QDir getTempDir() const { return QDir::temp(); }; protected: std::string sourceFilename_; FileFormat exportFormat_; @@ -86,6 +88,7 @@ class LocalProgramService : public ExternalToolInterface public: LocalProgramService(FileFormat fileFormat) : ExternalToolInterface(fileFormat) {} bool process(const std::string& displayName, std::function) override; + QDir getTempDir() const override; }; std::unique_ptr createLocalProgramService(FileFormat fileFormat); diff --git a/src/gui/FontList.ui b/src/gui/FontList.ui index e58244f0e89..64c91651d20 100644 --- a/src/gui/FontList.ui +++ b/src/gui/FontList.ui @@ -287,8 +287,7 @@ - - :/icons/svg-default/undo.svg:/icons/svg-default/undo.svg + ResetSampleText @@ -296,8 +295,7 @@ - - :/icons/svg-default/open.svg:/icons/svg-default/open.svg + Open Font Folder @@ -305,8 +303,7 @@ - - :/icons/svg-default/edit-copy.svg:/icons/svg-default/edit-copy.svg + Copy Font Folder @@ -314,8 +311,7 @@ - - :/icons/svg-default/edit-copy.svg:/icons/svg-default/edit-copy.svg + Copy Full Path to Font @@ -323,8 +319,7 @@ - - :/icons/svg-default/edit-copy.svg:/icons/svg-default/edit-copy.svg + Copy Font Style @@ -332,8 +327,7 @@ - - :/icons/svg-default/edit-copy.svg:/icons/svg-default/edit-copy.svg + Copy Font Name @@ -389,8 +383,7 @@ - - :/icons/svg-default/undo.svg:/icons/svg-default/undo.svg + Reset Columns diff --git a/src/gui/Preferences.cc b/src/gui/Preferences.cc index 823b3a671b2..1ed2b67dee5 100644 --- a/src/gui/Preferences.cc +++ b/src/gui/Preferences.cc @@ -240,6 +240,7 @@ void Preferences::init() { const QString profile = QString::fromStdString(Settings::Settings::octoPrintSlicerProfile.value()); const QString profileDesc = QString::fromStdString(Settings::Settings::octoPrintSlicerProfileDesc.value()); BlockSignals(this->lineEditLocalAppExecutable)->setText(QString::fromStdString(Settings::Settings::localAppExecutable.value())); + BlockSignals(this->lineEditLocalAppTempDir)->setText(QString::fromStdString(Settings::Settings::localAppTempDir.value())); this->comboBoxOctoPrintSlicingEngine->clear(); this->comboBoxOctoPrintSlicingEngine->addItem(_(""), QVariant{""}); if (!slicer.isEmpty()) { @@ -868,7 +869,19 @@ void Preferences::on_comboBoxOctoPrintFileFormat_activated(int val) applyComboBox(this->comboBoxOctoPrintFileFormat, val, Settings::Settings::octoPrintFileFormat); } -void Preferences::on_toolButtonSelectLocalAppPath_clicked() +void Preferences::on_comboBoxLocalAppFileFormat_activated(int val) +{ + applyComboBox(this->comboBoxLocalAppFileFormat, val, Settings::Settings::localAppFileFormat); + writeSettings(); +} + +void Preferences::on_lineEditLocalAppExecutable_editingFinished() +{ + Settings::Settings::localAppExecutable.setValue(this->lineEditLocalAppExecutable->text().toStdString()); + writeSettings(); +} + +void Preferences::on_toolButtonLocalAppSelectExecutable_clicked() { const QString fileName = QFileDialog::getOpenFileName(this, "Select application"); if (fileName.isEmpty()) { @@ -879,16 +892,21 @@ void Preferences::on_toolButtonSelectLocalAppPath_clicked() on_lineEditLocalAppExecutable_editingFinished(); } -void Preferences::on_comboBoxLocalAppFileFormat_activated(int val) +void Preferences::on_lineEditLocalAppTempDir_editingFinished() { - applyComboBox(this->comboBoxLocalAppFileFormat, val, Settings::Settings::localAppFileFormat); + Settings::Settings::localAppTempDir.setValue(this->lineEditLocalAppTempDir->text().toStdString()); writeSettings(); } -void Preferences::on_lineEditLocalAppExecutable_editingFinished() +void Preferences::on_toolButtonLocalAppSelectTempDir_clicked() { - Settings::Settings::localAppExecutable.setValue(this->lineEditLocalAppExecutable->text().toStdString()); - writeSettings(); + const QString tempDir = QFileDialog::getExistingDirectory(this, "Select temporary directory"); + if (tempDir.isEmpty()) { + return; + } + + this->lineEditLocalAppTempDir->setText(tempDir); + on_lineEditLocalAppTempDir_editingFinished(); } void Preferences::moveListBoxRow(QListWidget *listBox, int offset) diff --git a/src/gui/Preferences.h b/src/gui/Preferences.h index 570b98a32a8..2d91028d338 100644 --- a/src/gui/Preferences.h +++ b/src/gui/Preferences.h @@ -140,8 +140,10 @@ public slots: void on_lineEditOctoPrintURL_editingFinished(); void on_lineEditOctoPrintApiKey_editingFinished(); void on_pushButtonOctoPrintApiKey_clicked(); - void on_toolButtonSelectLocalAppPath_clicked(); void on_lineEditLocalAppExecutable_editingFinished(); + void on_toolButtonLocalAppSelectExecutable_clicked(); + void on_lineEditLocalAppTempDir_editingFinished(); + void on_toolButtonLocalAppSelectTempDir_clicked(); void on_comboBoxLocalAppFileFormat_activated(int); void on_toolButtonLocalAppParameterRemove_clicked(); void on_toolButtonLocalAppParameterAdd_clicked(); diff --git a/src/gui/Preferences.ui b/src/gui/Preferences.ui index 86e2534a86c..c21079a261a 100644 --- a/src/gui/Preferences.ui +++ b/src/gui/Preferences.ui @@ -7,7 +7,7 @@ 0 0 841 - 853 + 843 @@ -1302,7 +1302,7 @@ 0 0 - 84 + 98 26 @@ -1360,7 +1360,7 @@ 0 0 821 - 763 + 753 @@ -1671,7 +1671,7 @@ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - + 0 @@ -1688,31 +1688,8 @@ - - - - QAbstractItemView::SelectRows - - - - 16 - 16 - - - - - - - - Local application path - - - true - - - - + QLayout::SetDefaultConstraint @@ -1728,28 +1705,44 @@ 0 - - + + + + + 0 + 0 + + + + File + + + QToolButton::MenuButtonPopup + + + + + + + false + - + - - - - Qt::Vertical + + + + - - - 20 - 40 - + + - + @@ -1766,7 +1759,7 @@ - + @@ -1785,41 +1778,61 @@ - - - - - - - - false - - - - - - + - - - - - 0 - 0 - - - - File + + + + Qt::Vertical - - QToolButton::MenuButtonPopup + + + 20 + 40 + - + + + + + QAbstractItemView::SelectRows + + + + 16 + 16 + + + + + + + + Executable + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + lineEditLocalAppExecutable + + + + + + + ... + + + Qt::NoArrow + + + @@ -1840,6 +1853,16 @@ + + + + Local application path + + + true + + + @@ -1853,26 +1876,30 @@ - - - - Executable + + + + Directory for storing the exported file, leave empty to use the default system location. - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + - - lineEditLocalAppExecutable + + true - - + + - ... + Temp Dir - - Qt::NoArrow + + + + + + ... @@ -2848,28 +2875,43 @@ + + + - actionLocalAppParameterDir + Directory of the output file + + + - actionLocalAppParameterExtension + Extension of the output file without leading dot + + + - actionLocalAppParameterSource + Full path to the main source file + + + - actionLocalAppParameterSourceDir + Directory of the main source file + + + - actionLocalAppParameterFile + Full path to the output file @@ -2889,8 +2931,6 @@ - - diff --git a/src/gui/Settings.cc b/src/gui/Settings.cc index 16592ad42ad..415c15635bb 100644 --- a/src/gui/Settings.cc +++ b/src/gui/Settings.cc @@ -186,6 +186,7 @@ SettingsEntryEnum Settings::octoPrintFileFormat( fileformat::info(FileFormat::ASCII_STL).description); SettingsEntryString Settings::localAppExecutable("printing", "localAppExecutable", ""); +SettingsEntryString Settings::localAppTempDir("printing", "localAppTempDir", ""); SettingsEntryEnum Settings::localAppFileFormat( "printing", "localAppFileFormat", createFileFormatItems(fileformat::all3D()), fileformat::info(FileFormat::ASCII_STL).description); diff --git a/src/gui/Settings.h b/src/gui/Settings.h index 27de94f563d..76d6f597d96 100644 --- a/src/gui/Settings.h +++ b/src/gui/Settings.h @@ -175,12 +175,12 @@ class LocalAppParameterType std::string icon() const { switch (value) { - case string: return "parameter"; - case file: return "orthogonal"; - case dir: return "parameter"; - case extension: return "parameter"; - case source: return "parameter"; - case sourcedir: return "parameter"; + case string: return "chokusen-parameter"; + case file: return "chokusen-orthogonal"; + case dir: return "chokusen-parameter"; + case extension: return "chokusen-parameter"; + case source: return "chokusen-parameter"; + case sourcedir: return "chokusen-parameter"; default: return "*invalid*"; } } @@ -288,6 +288,7 @@ class Settings static SettingsEntryString octoPrintSlicerProfileDesc; static SettingsEntryString localAppExecutable; + static SettingsEntryString localAppTempDir; static SettingsEntryList localAppParameterList; static SettingsEntryEnum localAppFileFormat; From 46cc9ba9aef3b650048cf5a33dc5f36422a39707 Mon Sep 17 00:00:00 2001 From: Torsten Paul Date: Mon, 6 Jan 2025 18:44:05 +0100 Subject: [PATCH 08/10] Add more icons. --- resources/icons-chokusen-dark.qrc | 2 + resources/icons-chokusen.qrc | 2 + .../icons/chokusen-dark/svg/chokusen-file.svg | 55 ++++++++++++++++ .../chokusen-dark/svg/chokusen-folder.svg | 48 ++++++++++++++ .../icons/chokusen-dark/svg/chokusen-open.svg | 47 ++++++------- .../icons/chokusen/svg/chokusen-file.svg | 55 ++++++++++++++++ .../icons/chokusen/svg/chokusen-folder.svg | 48 ++++++++++++++ .../icons/chokusen/svg/chokusen-open.svg | 47 ++++++------- resources/icons/icons-svg-default.scad | 66 +++++++++++++++---- src/gui/Preferences.ui | 12 ++-- src/gui/Settings.h | 6 +- 11 files changed, 321 insertions(+), 67 deletions(-) create mode 100644 resources/icons/chokusen-dark/svg/chokusen-file.svg create mode 100644 resources/icons/chokusen-dark/svg/chokusen-folder.svg create mode 100644 resources/icons/chokusen/svg/chokusen-file.svg create mode 100644 resources/icons/chokusen/svg/chokusen-folder.svg diff --git a/resources/icons-chokusen-dark.qrc b/resources/icons-chokusen-dark.qrc index 42bd869409c..ab2c00f9aec 100644 --- a/resources/icons-chokusen-dark.qrc +++ b/resources/icons-chokusen-dark.qrc @@ -21,6 +21,8 @@ icons/chokusen-dark/svg/chokusen-export-stl.svg icons/chokusen-dark/svg/chokusen-export-svg.svg icons/chokusen-dark/svg/chokusen-export-wrl.svg + icons/chokusen-dark/svg/chokusen-file.svg + icons/chokusen-dark/svg/chokusen-folder.svg icons/chokusen-dark/svg/chokusen-indent.svg icons/chokusen-dark/svg/chokusen-measure-angle.svg icons/chokusen-dark/svg/chokusen-measure-distance.svg diff --git a/resources/icons-chokusen.qrc b/resources/icons-chokusen.qrc index 02f75791541..17a63715158 100644 --- a/resources/icons-chokusen.qrc +++ b/resources/icons-chokusen.qrc @@ -21,6 +21,8 @@ icons/chokusen/svg/chokusen-export-stl.svg icons/chokusen/svg/chokusen-export-svg.svg icons/chokusen/svg/chokusen-export-wrl.svg + icons/chokusen/svg/chokusen-file.svg + icons/chokusen/svg/chokusen-folder.svg icons/chokusen/svg/chokusen-indent.svg icons/chokusen/svg/chokusen-measure-angle.svg icons/chokusen/svg/chokusen-measure-distance.svg diff --git a/resources/icons/chokusen-dark/svg/chokusen-file.svg b/resources/icons/chokusen-dark/svg/chokusen-file.svg new file mode 100644 index 00000000000..1977f2b6fba --- /dev/null +++ b/resources/icons/chokusen-dark/svg/chokusen-file.svg @@ -0,0 +1,55 @@ + + + +OpenSCAD Model + + diff --git a/resources/icons/chokusen-dark/svg/chokusen-folder.svg b/resources/icons/chokusen-dark/svg/chokusen-folder.svg new file mode 100644 index 00000000000..a1a8abebd25 --- /dev/null +++ b/resources/icons/chokusen-dark/svg/chokusen-folder.svg @@ -0,0 +1,48 @@ + + + +OpenSCAD Model + + diff --git a/resources/icons/chokusen-dark/svg/chokusen-open.svg b/resources/icons/chokusen-dark/svg/chokusen-open.svg index 1c1b6b7ec5d..1da9760744f 100644 --- a/resources/icons/chokusen-dark/svg/chokusen-open.svg +++ b/resources/icons/chokusen-dark/svg/chokusen-open.svg @@ -3,7 +3,7 @@ OpenSCAD Model diff --git a/resources/icons/chokusen/svg/chokusen-file.svg b/resources/icons/chokusen/svg/chokusen-file.svg new file mode 100644 index 00000000000..2a37563fc05 --- /dev/null +++ b/resources/icons/chokusen/svg/chokusen-file.svg @@ -0,0 +1,55 @@ + + + +OpenSCAD Model + + diff --git a/resources/icons/chokusen/svg/chokusen-folder.svg b/resources/icons/chokusen/svg/chokusen-folder.svg new file mode 100644 index 00000000000..1672c052a6c --- /dev/null +++ b/resources/icons/chokusen/svg/chokusen-folder.svg @@ -0,0 +1,48 @@ + + + +OpenSCAD Model + + diff --git a/resources/icons/chokusen/svg/chokusen-open.svg b/resources/icons/chokusen/svg/chokusen-open.svg index cc9ccf5701d..24634f00a9d 100644 --- a/resources/icons/chokusen/svg/chokusen-open.svg +++ b/resources/icons/chokusen/svg/chokusen-open.svg @@ -3,7 +3,7 @@ OpenSCAD Model diff --git a/resources/icons/icons-svg-default.scad b/resources/icons/icons-svg-default.scad index 846fc3a9574..8a8460a8d10 100644 --- a/resources/icons/icons-svg-default.scad +++ b/resources/icons/icons-svg-default.scad @@ -41,8 +41,10 @@ icons = [ ["indent"], ["unindent"], ["new"], - ["save"], + ["file"], + ["folder"], ["open"], + ["save"], ["reset-view"], ["view-right"], ["view-left"], @@ -104,8 +106,10 @@ icon(selected_icon) { indent(); unindent(); new(); - save(); + file(); + folder(); open(); + save(); reset_view(); view_right(); view_left(); @@ -450,26 +454,64 @@ module new() { } } +module file() { + u = height/32; + translate([10, 0]) { + export_paper(); + } + translate([8,6]*u) square([16,1]*u); + translate([8,11]*u) square([16,1]*u); + translate([8,16]*u) square([16,1]*u); + translate([16,21]*u) square([8,1]*u); + translate([16,24]*u) square([8,1]*u); +} + +module folder_backside() { + u = height/32; + w = rounding + thin; + square([24,28]*u-[w,w]); + translate([5.5,0]*u) square([22,22]*u-[w,w]); +} + +module folder_outline() { + w = rounding + thin; + difference() { + translate([rounding, rounding]) + offset(r=rounding) + folder_backside(); + translate([rounding, rounding]) + offset(r=rounding) + offset(-w) + folder_backside(); + } +} + +module folder_flap() { + u = height/32; + translate([rounding,rounding]) + offset(r=rounding) + polygon([[3,0]*u, [26,0]*u, [30,15]*u, [7,15]*u]); +} + +module folder() { + folder_outline(); + folder_flap(); +} + module open() { module small_paper() translate([4.5,5]*u) scale(0.77) export_paper(); - module folder() { - square([20,22]*u-[w,w]); - translate([5.5,0]*u) square([20,19]*u-[w,w]); - } - module flap() translate([rounding,rounding]) offset(r=rounding) polygon([[3,0]*u, [24,0]*u, [30,12]*u, [9,12]*u]); u = height/32; w = rounding + thin; difference() { - translate([rounding, rounding]) offset(r=rounding) folder(); - translate([rounding, rounding]) offset(r=rounding) offset(-w) folder(); - offset(r=rounding) hull() small_paper(); + folder_outline(); + offset(r=rounding) hull() small_paper(); } difference() { small_paper(); - offset(r=rounding) flap(); + offset(r=rounding) folder_flap(); } - flap(); + folder_flap(); } module save() { diff --git a/src/gui/Preferences.ui b/src/gui/Preferences.ui index c21079a261a..39d484be2ce 100644 --- a/src/gui/Preferences.ui +++ b/src/gui/Preferences.ui @@ -1302,8 +1302,8 @@ 0 0 - 98 - 26 + 100 + 30 @@ -2876,7 +2876,7 @@ - + Directory of the output file @@ -2892,7 +2892,7 @@ - + Full path to the main source file @@ -2900,7 +2900,7 @@ - + Directory of the main source file @@ -2908,7 +2908,7 @@ - + Full path to the output file diff --git a/src/gui/Settings.h b/src/gui/Settings.h index 76d6f597d96..bf2eb914d87 100644 --- a/src/gui/Settings.h +++ b/src/gui/Settings.h @@ -177,10 +177,10 @@ class LocalAppParameterType switch (value) { case string: return "chokusen-parameter"; case file: return "chokusen-orthogonal"; - case dir: return "chokusen-parameter"; + case dir: return "chokusen-folder"; case extension: return "chokusen-parameter"; - case source: return "chokusen-parameter"; - case sourcedir: return "chokusen-parameter"; + case source: return "chokusen-file"; + case sourcedir: return "chokusen-folder"; default: return "*invalid*"; } } From e597a17b2a55ff74cac317472cf2c03aee6d58ba Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Mon, 6 Jan 2025 22:18:10 -0500 Subject: [PATCH 09/10] Pass on supplied arguments on macOS --- src/gui/ExternalToolInterface.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/ExternalToolInterface.cc b/src/gui/ExternalToolInterface.cc index a346da0410d..747b6e84889 100644 --- a/src/gui/ExternalToolInterface.cc +++ b/src/gui/ExternalToolInterface.cc @@ -116,9 +116,6 @@ bool LocalProgramService::process(const std::string& displayName, std::function< return false; } -#ifdef Q_OS_MACOS - if (!process.startDetached("open", {"-a", application, QString::fromStdString(exportedFilename_)})) { -#else QStringList args; const auto info = QFileInfo(QString::fromStdString(exportedFilename_)); for (const auto& arg : Settings::Settings::localAppParameterList.items()) { @@ -147,6 +144,9 @@ bool LocalProgramService::process(const std::string& displayName, std::function< } const auto argsStr = args.empty() ? "" : "['" + args.join("', '").toStdString() + "']"; PRINTDB("Running application '%s' with arguments: %s", application.toStdString() % argsStr); +#ifdef Q_OS_MACOS + if (!process.startDetached("open", QStringList({"-a", application, "--args"}) + args)) { +#else if (!process.startDetached(application, args)) { #endif LOG(message_group::Error, "Could not start Slicer '%1$s': %2$s", application.toStdString(), process.errorString().toStdString()); From e32b0ccd26328a5b11e8629adf75be6194ff7c8b Mon Sep 17 00:00:00 2001 From: Torsten Paul Date: Tue, 7 Jan 2025 04:50:28 +0100 Subject: [PATCH 10/10] Fix includes --- src/gui/InitConfigurator.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/gui/InitConfigurator.cc b/src/gui/InitConfigurator.cc index 04d7cb9a363..f5f9db9d659 100644 --- a/src/gui/InitConfigurator.cc +++ b/src/gui/InitConfigurator.cc @@ -1,7 +1,6 @@ #include "gui/InitConfigurator.h" -#include -#include +#include #include #include