diff --git a/rtdata/images/themed/png/dark/color-picker-add-hicontrast.png b/rtdata/images/themed/png/dark/color-picker-add-hicontrast.png
index 53eaabf60..5dcdacf1f 100644
Binary files a/rtdata/images/themed/png/dark/color-picker-add-hicontrast.png and b/rtdata/images/themed/png/dark/color-picker-add-hicontrast.png differ
diff --git a/rtdata/images/themed/png/dark/color-picker-add.png b/rtdata/images/themed/png/dark/color-picker-add.png
index a752ee2f4..fc4b040e2 100644
Binary files a/rtdata/images/themed/png/dark/color-picker-add.png and b/rtdata/images/themed/png/dark/color-picker-add.png differ
diff --git a/rtdata/images/themed/png/dark/color-picker-show.png b/rtdata/images/themed/png/dark/color-picker-bars.png
similarity index 50%
rename from rtdata/images/themed/png/dark/color-picker-show.png
rename to rtdata/images/themed/png/dark/color-picker-bars.png
index acd3699eb..66e749864 100644
Binary files a/rtdata/images/themed/png/dark/color-picker-show.png and b/rtdata/images/themed/png/dark/color-picker-bars.png differ
diff --git a/rtdata/images/themed/png/dark/color-picker-hicontrast.png b/rtdata/images/themed/png/dark/color-picker-hicontrast.png
index c2592a8b7..c7bfb850b 100644
Binary files a/rtdata/images/themed/png/dark/color-picker-hicontrast.png and b/rtdata/images/themed/png/dark/color-picker-hicontrast.png differ
diff --git a/rtdata/images/themed/png/dark/color-picker-hide.png b/rtdata/images/themed/png/dark/color-picker-hide.png
index 992ee2354..0bd4fafba 100644
Binary files a/rtdata/images/themed/png/dark/color-picker-hide.png and b/rtdata/images/themed/png/dark/color-picker-hide.png differ
diff --git a/rtdata/images/themed/png/dark/color-picker.png b/rtdata/images/themed/png/dark/color-picker.png
index 1a39d857a..f0174fd44 100644
Binary files a/rtdata/images/themed/png/dark/color-picker.png and b/rtdata/images/themed/png/dark/color-picker.png differ
diff --git a/rtdata/images/themed/png/light/node-move-x.png b/rtdata/images/themed/png/dark/crop-point-hicontrast.png
similarity index 59%
rename from rtdata/images/themed/png/light/node-move-x.png
rename to rtdata/images/themed/png/dark/crop-point-hicontrast.png
index 7687ad6e9..65aa29856 100644
Binary files a/rtdata/images/themed/png/light/node-move-x.png and b/rtdata/images/themed/png/dark/crop-point-hicontrast.png differ
diff --git a/rtdata/images/themed/png/dark/crosshair-adjust.png b/rtdata/images/themed/png/dark/crosshair-adjust.png
index 72704177c..8536e8f09 100644
Binary files a/rtdata/images/themed/png/dark/crosshair-adjust.png and b/rtdata/images/themed/png/dark/crosshair-adjust.png differ
diff --git a/rtdata/images/themed/png/dark/crosshair-node-curve.png b/rtdata/images/themed/png/dark/crosshair-node-curve.png
new file mode 100644
index 000000000..08d6e00ff
Binary files /dev/null and b/rtdata/images/themed/png/dark/crosshair-node-curve.png differ
diff --git a/rtdata/images/themed/png/dark/crosshair-small.png b/rtdata/images/themed/png/dark/crosshair-small.png
new file mode 100644
index 000000000..66db0bd42
Binary files /dev/null and b/rtdata/images/themed/png/dark/crosshair-small.png differ
diff --git a/rtdata/images/themed/png/dark/edit-point.png b/rtdata/images/themed/png/dark/edit-point.png
index 1c3317f86..8ead1ea66 100644
Binary files a/rtdata/images/themed/png/dark/edit-point.png and b/rtdata/images/themed/png/dark/edit-point.png differ
diff --git a/rtdata/images/themed/png/dark/hand-open-hicontrast.png b/rtdata/images/themed/png/dark/hand-open-hicontrast.png
new file mode 100644
index 000000000..2ee26e375
Binary files /dev/null and b/rtdata/images/themed/png/dark/hand-open-hicontrast.png differ
diff --git a/rtdata/images/themed/png/dark/hand-open.png b/rtdata/images/themed/png/dark/hand-open.png
index e5ab821d5..85fcaaacc 100644
Binary files a/rtdata/images/themed/png/dark/hand-open.png and b/rtdata/images/themed/png/dark/hand-open.png differ
diff --git a/rtdata/images/themed/png/dark/node-move-nw-se-hicontrast.png b/rtdata/images/themed/png/dark/node-move-nw-se-hicontrast.png
new file mode 100644
index 000000000..b802c5849
Binary files /dev/null and b/rtdata/images/themed/png/dark/node-move-nw-se-hicontrast.png differ
diff --git a/rtdata/images/themed/png/dark/node-move-sw-ne-hicontrast.png b/rtdata/images/themed/png/dark/node-move-sw-ne-hicontrast.png
new file mode 100644
index 000000000..2e51e88a3
Binary files /dev/null and b/rtdata/images/themed/png/dark/node-move-sw-ne-hicontrast.png differ
diff --git a/rtdata/images/themed/png/dark/node-move-x-hicontrast.png b/rtdata/images/themed/png/dark/node-move-x-hicontrast.png
index 92a1c49e2..1cc871dbb 100644
Binary files a/rtdata/images/themed/png/dark/node-move-x-hicontrast.png and b/rtdata/images/themed/png/dark/node-move-x-hicontrast.png differ
diff --git a/rtdata/images/themed/png/dark/node-move-x.png b/rtdata/images/themed/png/dark/node-move-x.png
deleted file mode 100644
index ed06b8700..000000000
Binary files a/rtdata/images/themed/png/dark/node-move-x.png and /dev/null differ
diff --git a/rtdata/images/themed/png/dark/node-move-xy-hicontrast.png b/rtdata/images/themed/png/dark/node-move-xy-hicontrast.png
index 3984385af..8b843958d 100644
Binary files a/rtdata/images/themed/png/dark/node-move-xy-hicontrast.png and b/rtdata/images/themed/png/dark/node-move-xy-hicontrast.png differ
diff --git a/rtdata/images/themed/png/dark/node-move-xy.png b/rtdata/images/themed/png/dark/node-move-xy.png
deleted file mode 100644
index 7fcaf111a..000000000
Binary files a/rtdata/images/themed/png/dark/node-move-xy.png and /dev/null differ
diff --git a/rtdata/images/themed/png/dark/node-move-y-hicontrast.png b/rtdata/images/themed/png/dark/node-move-y-hicontrast.png
index e2fc55da8..f80690851 100644
Binary files a/rtdata/images/themed/png/dark/node-move-y-hicontrast.png and b/rtdata/images/themed/png/dark/node-move-y-hicontrast.png differ
diff --git a/rtdata/images/themed/png/dark/node-move-y.png b/rtdata/images/themed/png/dark/node-move-y.png
deleted file mode 100644
index 137c79039..000000000
Binary files a/rtdata/images/themed/png/dark/node-move-y.png and /dev/null differ
diff --git a/rtdata/images/themed/png/dark/star-gold-hollow.png b/rtdata/images/themed/png/dark/star-gold-hollow.png
deleted file mode 100644
index 44bf29d12..000000000
Binary files a/rtdata/images/themed/png/dark/star-gold-hollow.png and /dev/null differ
diff --git a/rtdata/images/themed/png/dark/star-gold.png b/rtdata/images/themed/png/dark/star-gold.png
deleted file mode 100644
index 5e3805005..000000000
Binary files a/rtdata/images/themed/png/dark/star-gold.png and /dev/null differ
diff --git a/rtdata/images/themed/png/dark/star-hollow.png b/rtdata/images/themed/png/dark/star-hollow.png
deleted file mode 100644
index dd7015f8a..000000000
Binary files a/rtdata/images/themed/png/dark/star-hollow.png and /dev/null differ
diff --git a/rtdata/images/themed/png/dark/star.png b/rtdata/images/themed/png/dark/star.png
deleted file mode 100644
index 6dde0fbe3..000000000
Binary files a/rtdata/images/themed/png/dark/star.png and /dev/null differ
diff --git a/rtdata/images/themed/png/dark/template-narrow.png b/rtdata/images/themed/png/dark/template-narrow.png
new file mode 100644
index 000000000..78c374503
Binary files /dev/null and b/rtdata/images/themed/png/dark/template-narrow.png differ
diff --git a/rtdata/images/themed/png/dark/trash-show.png b/rtdata/images/themed/png/dark/trash-show.png
deleted file mode 100644
index 983979634..000000000
Binary files a/rtdata/images/themed/png/dark/trash-show.png and /dev/null differ
diff --git a/rtdata/images/themed/png/dark/undo-small.png b/rtdata/images/themed/png/dark/undo-small.png
index 5649efd39..0908ba6d5 100644
Binary files a/rtdata/images/themed/png/dark/undo-small.png and b/rtdata/images/themed/png/dark/undo-small.png differ
diff --git a/rtdata/images/themed/png/light/color-picker-add-hicontrast.png b/rtdata/images/themed/png/light/color-picker-add-hicontrast.png
index 53eaabf60..5dcdacf1f 100644
Binary files a/rtdata/images/themed/png/light/color-picker-add-hicontrast.png and b/rtdata/images/themed/png/light/color-picker-add-hicontrast.png differ
diff --git a/rtdata/images/themed/png/light/color-picker-add.png b/rtdata/images/themed/png/light/color-picker-add.png
index b1f5b7424..593e69b3d 100644
Binary files a/rtdata/images/themed/png/light/color-picker-add.png and b/rtdata/images/themed/png/light/color-picker-add.png differ
diff --git a/rtdata/images/themed/png/light/color-picker-bars.png b/rtdata/images/themed/png/light/color-picker-bars.png
new file mode 100644
index 000000000..a7a9b0f07
Binary files /dev/null and b/rtdata/images/themed/png/light/color-picker-bars.png differ
diff --git a/rtdata/images/themed/png/light/color-picker-hicontrast.png b/rtdata/images/themed/png/light/color-picker-hicontrast.png
index c2592a8b7..c7bfb850b 100644
Binary files a/rtdata/images/themed/png/light/color-picker-hicontrast.png and b/rtdata/images/themed/png/light/color-picker-hicontrast.png differ
diff --git a/rtdata/images/themed/png/light/color-picker-hide.png b/rtdata/images/themed/png/light/color-picker-hide.png
index 2a0ae672a..418b5b929 100644
Binary files a/rtdata/images/themed/png/light/color-picker-hide.png and b/rtdata/images/themed/png/light/color-picker-hide.png differ
diff --git a/rtdata/images/themed/png/light/color-picker-show.png b/rtdata/images/themed/png/light/color-picker-show.png
deleted file mode 100644
index aa4eb4f06..000000000
Binary files a/rtdata/images/themed/png/light/color-picker-show.png and /dev/null differ
diff --git a/rtdata/images/themed/png/light/color-picker.png b/rtdata/images/themed/png/light/color-picker.png
index 7a4d746a5..0d01785a0 100644
Binary files a/rtdata/images/themed/png/light/color-picker.png and b/rtdata/images/themed/png/light/color-picker.png differ
diff --git a/rtdata/images/themed/png/light/crop-point-hicontrast.png b/rtdata/images/themed/png/light/crop-point-hicontrast.png
new file mode 100644
index 000000000..65aa29856
Binary files /dev/null and b/rtdata/images/themed/png/light/crop-point-hicontrast.png differ
diff --git a/rtdata/images/themed/png/light/crosshair-adjust.png b/rtdata/images/themed/png/light/crosshair-adjust.png
index d0a11b753..b8b17dfa1 100644
Binary files a/rtdata/images/themed/png/light/crosshair-adjust.png and b/rtdata/images/themed/png/light/crosshair-adjust.png differ
diff --git a/rtdata/images/themed/png/light/crosshair-node-curve.png b/rtdata/images/themed/png/light/crosshair-node-curve.png
new file mode 100644
index 000000000..0af7379c2
Binary files /dev/null and b/rtdata/images/themed/png/light/crosshair-node-curve.png differ
diff --git a/rtdata/images/themed/png/light/crosshair-small.png b/rtdata/images/themed/png/light/crosshair-small.png
new file mode 100644
index 000000000..a898a2fdb
Binary files /dev/null and b/rtdata/images/themed/png/light/crosshair-small.png differ
diff --git a/rtdata/images/themed/png/light/edit-point.png b/rtdata/images/themed/png/light/edit-point.png
index 73090d4aa..b75f3670a 100644
Binary files a/rtdata/images/themed/png/light/edit-point.png and b/rtdata/images/themed/png/light/edit-point.png differ
diff --git a/rtdata/images/themed/png/light/hand-open-hicontrast.png b/rtdata/images/themed/png/light/hand-open-hicontrast.png
new file mode 100644
index 000000000..2ee26e375
Binary files /dev/null and b/rtdata/images/themed/png/light/hand-open-hicontrast.png differ
diff --git a/rtdata/images/themed/png/light/hand-open.png b/rtdata/images/themed/png/light/hand-open.png
index 8a180934f..bb01eac88 100644
Binary files a/rtdata/images/themed/png/light/hand-open.png and b/rtdata/images/themed/png/light/hand-open.png differ
diff --git a/rtdata/images/themed/png/light/node-move-nw-se-hicontrast.png b/rtdata/images/themed/png/light/node-move-nw-se-hicontrast.png
new file mode 100644
index 000000000..b802c5849
Binary files /dev/null and b/rtdata/images/themed/png/light/node-move-nw-se-hicontrast.png differ
diff --git a/rtdata/images/themed/png/light/node-move-sw-ne-hicontrast.png b/rtdata/images/themed/png/light/node-move-sw-ne-hicontrast.png
new file mode 100644
index 000000000..2e51e88a3
Binary files /dev/null and b/rtdata/images/themed/png/light/node-move-sw-ne-hicontrast.png differ
diff --git a/rtdata/images/themed/png/light/node-move-x-hicontrast.png b/rtdata/images/themed/png/light/node-move-x-hicontrast.png
index 92a1c49e2..1cc871dbb 100644
Binary files a/rtdata/images/themed/png/light/node-move-x-hicontrast.png and b/rtdata/images/themed/png/light/node-move-x-hicontrast.png differ
diff --git a/rtdata/images/themed/png/light/node-move-xy-hicontrast.png b/rtdata/images/themed/png/light/node-move-xy-hicontrast.png
index 3984385af..8b843958d 100644
Binary files a/rtdata/images/themed/png/light/node-move-xy-hicontrast.png and b/rtdata/images/themed/png/light/node-move-xy-hicontrast.png differ
diff --git a/rtdata/images/themed/png/light/node-move-xy.png b/rtdata/images/themed/png/light/node-move-xy.png
deleted file mode 100644
index cd426f68c..000000000
Binary files a/rtdata/images/themed/png/light/node-move-xy.png and /dev/null differ
diff --git a/rtdata/images/themed/png/light/node-move-y-hicontrast.png b/rtdata/images/themed/png/light/node-move-y-hicontrast.png
index e2fc55da8..f80690851 100644
Binary files a/rtdata/images/themed/png/light/node-move-y-hicontrast.png and b/rtdata/images/themed/png/light/node-move-y-hicontrast.png differ
diff --git a/rtdata/images/themed/png/light/node-move-y.png b/rtdata/images/themed/png/light/node-move-y.png
deleted file mode 100644
index 2fbf0b7a3..000000000
Binary files a/rtdata/images/themed/png/light/node-move-y.png and /dev/null differ
diff --git a/rtdata/images/themed/png/light/star-gold-hollow.png b/rtdata/images/themed/png/light/star-gold-hollow.png
deleted file mode 100644
index 44bf29d12..000000000
Binary files a/rtdata/images/themed/png/light/star-gold-hollow.png and /dev/null differ
diff --git a/rtdata/images/themed/png/light/star-gold.png b/rtdata/images/themed/png/light/star-gold.png
deleted file mode 100644
index 5e3805005..000000000
Binary files a/rtdata/images/themed/png/light/star-gold.png and /dev/null differ
diff --git a/rtdata/images/themed/png/light/star-hollow.png b/rtdata/images/themed/png/light/star-hollow.png
deleted file mode 100644
index 3e610948d..000000000
Binary files a/rtdata/images/themed/png/light/star-hollow.png and /dev/null differ
diff --git a/rtdata/images/themed/png/light/star.png b/rtdata/images/themed/png/light/star.png
deleted file mode 100644
index f29ccfdcd..000000000
Binary files a/rtdata/images/themed/png/light/star.png and /dev/null differ
diff --git a/rtdata/images/themed/png/light/template-narrow.png b/rtdata/images/themed/png/light/template-narrow.png
new file mode 100644
index 000000000..78c374503
Binary files /dev/null and b/rtdata/images/themed/png/light/template-narrow.png differ
diff --git a/rtdata/images/themed/png/light/trash-show.png b/rtdata/images/themed/png/light/trash-show.png
deleted file mode 100644
index 9e4ade318..000000000
Binary files a/rtdata/images/themed/png/light/trash-show.png and /dev/null differ
diff --git a/rtdata/images/themed/png/light/undo-small.png b/rtdata/images/themed/png/light/undo-small.png
index 534c5b4fb..6d16726ac 100644
Binary files a/rtdata/images/themed/png/light/undo-small.png and b/rtdata/images/themed/png/light/undo-small.png differ
diff --git a/rtdata/images/themed/svg/color-picker-add-hicontrast.svg b/rtdata/images/themed/svg/color-picker-add-hicontrast.svg
index 3d51dd31f..09870ff48 100644
--- a/rtdata/images/themed/svg/color-picker-add-hicontrast.svg
+++ b/rtdata/images/themed/svg/color-picker-add-hicontrast.svg
@@ -26,7 +26,7 @@
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
- inkscape:zoom="34.25"
+ inkscape:zoom="33.75"
inkscape:cx="12"
inkscape:cy="12"
inkscape:document-units="px"
@@ -65,7 +65,7 @@
image/svg+xml
-
+
Maciej Dworak
@@ -101,42 +101,36 @@
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
-
-
-
-
-
-
+ sodipodi:nodetypes="ccccccccccccc" />
+
+
+
+
+
diff --git a/rtdata/images/themed/svg/color-picker-add.svg b/rtdata/images/themed/svg/color-picker-add.svg
index 1535ca260..b42b8371d 100644
--- a/rtdata/images/themed/svg/color-picker-add.svg
+++ b/rtdata/images/themed/svg/color-picker-add.svg
@@ -26,9 +26,9 @@
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
- inkscape:zoom="8"
- inkscape:cx="-35.100971"
- inkscape:cy="6.1695344"
+ inkscape:zoom="33.75"
+ inkscape:cx="12"
+ inkscape:cy="12"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -101,31 +101,36 @@
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
-
-
-
-
+
+
+
+
+
+
diff --git a/rtdata/images/themed/svg/color-picker-show.svg b/rtdata/images/themed/svg/color-picker-bars.svg
similarity index 50%
rename from rtdata/images/themed/svg/color-picker-show.svg
rename to rtdata/images/themed/svg/color-picker-bars.svg
index 351c51011..f6c57ea40 100644
--- a/rtdata/images/themed/svg/color-picker-show.svg
+++ b/rtdata/images/themed/svg/color-picker-bars.svg
@@ -18,7 +18,7 @@
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
inkscape:version="0.92.2 2405546, 2018-03-11"
- sodipodi:docname="color-picker-show.svg">
+ sodipodi:docname="color-picker-bars.svg">
-
-
-
-
+
+
+
+
+
+
diff --git a/rtdata/images/themed/svg/color-picker-hicontrast.svg b/rtdata/images/themed/svg/color-picker-hicontrast.svg
index 867f9730b..20ece03b7 100644
--- a/rtdata/images/themed/svg/color-picker-hicontrast.svg
+++ b/rtdata/images/themed/svg/color-picker-hicontrast.svg
@@ -26,8 +26,8 @@
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
- inkscape:zoom="34.25"
- inkscape:cx="12"
+ inkscape:zoom="33.75"
+ inkscape:cx="7.6740741"
inkscape:cy="12"
inkscape:document-units="px"
inkscape:current-layer="layer1"
@@ -42,9 +42,9 @@
inkscape:snap-bbox="true"
inkscape:bbox-nodes="true"
inkscape:snap-others="false"
- inkscape:object-nodes="false"
+ inkscape:object-nodes="true"
inkscape:snap-grids="true"
- inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-bbox-midpoints="true"
showguides="true"
inkscape:snap-global="true">
image/svg+xml
-
+
Maciej Dworak
@@ -101,37 +101,25 @@
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
-
-
-
-
-
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.3266921"
+ d="m 19.925781,1.0039062 c -1.58641,0.1326355 -2.759269,1.3658728 -3.638672,2.5839844 -0.30321,0.4144601 -0.688746,0.7937159 -1.207031,0.8945313 -0.630431,0.360278 -1.152864,0.9161911 -1.572266,1.5019531 -0.547003,0.8984348 0.0482,1.9358775 0.640626,2.640625 0.817234,0.9044466 1.820357,1.880312 3.107421,1.943359 0.889563,-0.02811 1.502887,-0.8099611 2.082032,-1.396484 C 19.575097,8.6352599 19.779974,8.0379511 20.316406,7.7265625 21.40338,6.7821111 22.639686,5.7804332 22.919922,4.2832031 23.243079,3.0583515 22.571361,1.6511303 21.359375,1.21875 20.905795,1.0309215 20.412996,0.98294526 19.925781,1.0039062 Z m -4.11914,4.7363282 c 0.723717,-0.019419 2.332675,1.2432107 2.392578,2.4648437 -0.03984,0.2570324 -0.552186,0.6690001 -0.884766,0.9023438 C 17.04034,9.327167 16.877887,9.2353204 16.628906,9.1621094 15.922112,8.8485353 15.342642,8.3120018 14.8125,7.4042969 14.667763,7.0628521 14.490162,6.9461703 14.888672,6.484375 c 0.656089,-0.6665108 -0.25284,0.2482286 0.667969,-0.6542969 0.06015,-0.05896 0.146611,-0.08707 0.25,-0.089844 z"
+ id="path9921-9-3-9-8-3" />
+
+
+
diff --git a/rtdata/images/themed/svg/color-picker-hide.svg b/rtdata/images/themed/svg/color-picker-hide.svg
index 9fa9203cf..be180885e 100644
--- a/rtdata/images/themed/svg/color-picker-hide.svg
+++ b/rtdata/images/themed/svg/color-picker-hide.svg
@@ -18,7 +18,7 @@
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
inkscape:version="0.92.2 2405546, 2018-03-11"
- sodipodi:docname="colorPickers-hide.svg">
+ sodipodi:docname="color-picker-hide.svg">
image/svg+xml
-
+
Maciej Dworak
@@ -102,26 +102,26 @@
inkscape:groupmode="layer"
inkscape:label="Layer 1">
+ style="opacity:0.3;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a7fff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ d="m 5.5,21 c 0,0.828427 -0.6715729,1.5 -1.5,1.5 -0.8284271,0 -1.5,-0.671573 -1.5,-1.5 0,-0.828427 0.6715729,-1.5 1.5,-1.5 0.8284271,0 1.5,0.671573 1.5,1.5 z"
+ id="path822"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ssscs" />
diff --git a/rtdata/images/themed/svg/color-picker.svg b/rtdata/images/themed/svg/color-picker.svg
index bff4a0edc..d52d96633 100644
--- a/rtdata/images/themed/svg/color-picker.svg
+++ b/rtdata/images/themed/svg/color-picker.svg
@@ -26,9 +26,9 @@
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
- inkscape:zoom="8"
- inkscape:cx="-16.850971"
- inkscape:cy="6.1695344"
+ inkscape:zoom="33.833333"
+ inkscape:cx="12"
+ inkscape:cy="12"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,9 +42,9 @@
inkscape:snap-bbox="true"
inkscape:bbox-nodes="true"
inkscape:snap-others="false"
- inkscape:object-nodes="false"
+ inkscape:object-nodes="true"
inkscape:snap-grids="true"
- inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-bbox-midpoints="true"
showguides="true"
inkscape:snap-global="true">
image/svg+xml
-
+
Maciej Dworak
@@ -101,27 +101,32 @@
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
+
+
+
+
+
-
-
-
+ style="opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a7fff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ d="m 5.5,21 c 0,0.828427 -0.6715729,1.5 -1.5,1.5 -0.8284271,0 -1.5,-0.671573 -1.5,-1.5 0,-0.828427 0.6715729,-1.5 1.5,-1.5 0.8284271,0 1.5,0.671573 1.5,1.5 z"
+ id="path822"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ssscs" />
diff --git a/rtdata/images/themed/svg/crop-point-hicontrast.svg b/rtdata/images/themed/svg/crop-point-hicontrast.svg
new file mode 100644
index 000000000..4a06bfcba
--- /dev/null
+++ b/rtdata/images/themed/svg/crop-point-hicontrast.svg
@@ -0,0 +1,176 @@
+
+
+
+
diff --git a/rtdata/images/themed/svg/crosshair-adjust.svg b/rtdata/images/themed/svg/crosshair-adjust.svg
index 16ff954ac..4cde3415a 100644
--- a/rtdata/images/themed/svg/crosshair-adjust.svg
+++ b/rtdata/images/themed/svg/crosshair-adjust.svg
@@ -26,7 +26,7 @@
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
- inkscape:zoom="34.25"
+ inkscape:zoom="33.833333"
inkscape:cx="12"
inkscape:cy="12"
inkscape:document-units="px"
@@ -63,7 +63,7 @@
image/svg+xml
-
+
Maciej Dworak
@@ -101,16 +101,16 @@
inkscape:label="Layer 1">
diff --git a/rtdata/images/themed/svg/crosshair-node-curve.svg b/rtdata/images/themed/svg/crosshair-node-curve.svg
new file mode 100644
index 000000000..d72c2a929
--- /dev/null
+++ b/rtdata/images/themed/svg/crosshair-node-curve.svg
@@ -0,0 +1,134 @@
+
+
+
+
diff --git a/rtdata/images/themed/svg/crosshair-small.svg b/rtdata/images/themed/svg/crosshair-small.svg
new file mode 100644
index 000000000..2e5e6596a
--- /dev/null
+++ b/rtdata/images/themed/svg/crosshair-small.svg
@@ -0,0 +1,172 @@
+
+
+
+
diff --git a/rtdata/images/themed/svg/edit-point.svg b/rtdata/images/themed/svg/edit-point.svg
index b3e16abdf..9f686d6e9 100644
--- a/rtdata/images/themed/svg/edit-point.svg
+++ b/rtdata/images/themed/svg/edit-point.svg
@@ -26,12 +26,12 @@
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
- inkscape:zoom="33.833333"
+ inkscape:zoom="34.25"
inkscape:cx="12"
inkscape:cy="12"
inkscape:document-units="px"
inkscape:current-layer="layer1"
- showgrid="false"
+ showgrid="true"
inkscape:window-width="1920"
inkscape:window-height="1019"
inkscape:window-x="0"
@@ -44,8 +44,7 @@
inkscape:snap-others="false"
inkscape:object-nodes="false"
inkscape:snap-grids="true"
- inkscape:snap-bbox-midpoints="false"
- showborder="false">
+ inkscape:snap-bbox-midpoints="false">
-
-
-
-
-
+ id="defs815" />
@@ -112,31 +99,58 @@
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
+
+
+
+
diff --git a/rtdata/images/themed/svg/hand-open-hicontrast.svg b/rtdata/images/themed/svg/hand-open-hicontrast.svg
new file mode 100644
index 000000000..310eda2d1
--- /dev/null
+++ b/rtdata/images/themed/svg/hand-open-hicontrast.svg
@@ -0,0 +1,126 @@
+
+
+
+
diff --git a/rtdata/images/themed/svg/hand-open.svg b/rtdata/images/themed/svg/hand-open.svg
index d49d10d5f..a7597b482 100644
--- a/rtdata/images/themed/svg/hand-open.svg
+++ b/rtdata/images/themed/svg/hand-open.svg
@@ -26,12 +26,12 @@
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
- inkscape:zoom="34.25"
+ inkscape:zoom="33.833333"
inkscape:cx="12"
inkscape:cy="12"
inkscape:document-units="px"
inkscape:current-layer="layer1"
- showgrid="true"
+ showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1019"
inkscape:window-x="0"
@@ -119,7 +119,8 @@
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ d="m 36.455078,1.1015625 c -0.657515,-0.025842 -1.353006,0.4514359 -1.388672,1.2167969 0.02103,2.1794281 0.362572,4.3446075 0.34375,6.5253906 C 34.704462,6.7462413 33.696458,4.7625164 33.007812,2.6601562 32.699764,1.4053767 30.686393,1.3462201 30.712891,2.7910156 c 0.148468,1.5137205 0.593614,2.9947661 1.144531,4.4121094 0.579646,1.5250885 1.19498,3.114871 1.074219,4.777344 -0.211465,1.328048 -1.80517,1.750258 -2.697266,0.580078 -0.416475,-0.393564 -0.544424,-0.651727 -0.960938,-1.238281 -0.416513,-0.586553 -1.122246,-1.5013905 -1.86914,-1.220704 -1.49767,0.876327 -0.29335,2.450372 0.320312,3.476563 0.529141,1.049899 1.266424,1.94363 2.097657,2.765625 1.139405,1.210646 2.00714,2.79189 1.927734,4.496094 0.04404,1.388514 1.55807,2.053559 2.763672,2.126953 1.546216,0.08721 3.126794,0.01908 4.630859,-0.367188 0.822251,-0.241424 1.611734,-0.89878 1.595703,-1.824218 C 40.98435,16.701293 42.787358,12.966248 43.802734,9.0625 44.093836,8.0059864 44.448353,6.9326448 44.445312,5.828125 44.177193,4.6456298 42.537354,4.6959782 42.236328,6.0273438 41.967568,6.973985 41.870664,7.9687737 41.496094,8.8847656 41.242569,6.9262668 41.683518,4.9338681 41.367188,2.9785156 41.412433,1.450498 39.214266,1.5287748 38.957031,2.8378906 38.705507,4.763864 38.797888,6.7201513 38.556641,8.6484375 37.992758,6.3776292 38.26795,3.9551294 37.447266,1.7402344 37.23158,1.3141238 36.849587,1.1170679 36.455078,1.1015625 Z m -0.03125,0.4941406 c 0.22785,2.006e-4 0.425241,0.1051019 0.5625,0.3632813 0.747739,2.0597572 0.494913,4.4363486 1.083984,6.8085937 l 0.982422,-0.056641 C 39.29984,6.7358274 39.21188,4.7904773 39.451172,2.9316406 39.530361,2.5430223 39.900196,2.3387264 40.269531,2.34375 c 0.185458,0.00252 0.342359,0.063217 0.439453,0.1523438 0.09709,0.089127 0.167925,0.206397 0.160157,0.46875 l -0.002,0.046875 0.0078,0.046875 C 41.171104,4.8885486 40.731427,6.8744709 41,8.9492188 l 0.242188,1.8750002 0.716796,-1.7500002 c 0.411093,-1.0053067 0.505532,-2.0215571 0.757813,-2.9101563 l 0.0039,-0.013672 0.0039,-0.013672 c 0.107736,-0.4764885 0.395184,-0.6352244 0.660157,-0.6523438 0.251375,-0.016241 0.449106,0.1022573 0.542968,0.4316406 -0.01505,0.9710696 -0.318057,1.9705536 -0.605468,3.0136719 l -0.002,0.00391 v 0.00195 C 42.321624,12.774915 40.493948,16.543442 40.24213,20.746094 l -0.002,0.01953 v 0.01953 c 0.0055,0.318516 -0.117945,0.577694 -0.34375,0.8125 -0.223319,0.232223 -0.551559,0.418326 -0.882812,0.517578 -1.43352,0.367311 -2.960591,0.436603 -4.470703,0.351563 C 34.01895,22.434887 33.408681,22.263531 32.96875,21.976562 32.528819,21.689595 32.264389,21.339493 32.248047,20.824219 32.321056,18.952282 31.378689,17.267743 30.185547,16 l -0.0059,-0.0059 -0.0059,-0.0059 C 29.366435,15.189941 28.66843,14.338759 28.171875,13.353516 l -0.0078,-0.01758 -0.0098,-0.01563 c -0.322956,-0.540054 -0.748063,-1.170179 -0.902342,-1.681634 -0.07714,-0.255727 -0.08634,-0.461023 -0.03711,-0.621094 0.04425,-0.143897 0.168741,-0.284663 0.398437,-0.435547 0.148566,-0.04428 0.2911,-0.0095 0.53125,0.189453 0.254362,0.210719 0.520624,0.555332 0.722657,0.839844 0.388512,0.547122 0.564085,0.853027 0.984375,1.261719 0.550791,0.711482 1.379594,0.989291 2.101562,0.820312 0.726883,-0.170128 1.337556,-0.786297 1.472656,-1.634765 l 0.002,-0.02149 0.0019,-0.02148 C 33.56099,10.207825 32.903082,8.5484755 32.324198,7.0253906 v -0.00195 -0.00195 c -0.537613,-1.3831218 -0.962413,-2.8116317 -1.107422,-4.25 -7.18e-4,-0.2313914 0.05782,-0.3441971 0.140625,-0.421875 0.0851,-0.079836 0.22003,-0.1338908 0.384765,-0.1367188 0.329471,-0.00566 0.684997,0.1822887 0.779297,0.5664063 l 0.0059,0.017578 0.0059,0.017578 c 0.704593,2.151049 1.712136,4.1379729 2.402344,6.1894531 l 0.974609,-0.15625 C 35.929397,6.6206215 35.591319,4.4623326 35.56836,2.33985 c 0.01905,-0.3764264 0.286845,-0.6247291 0.619141,-0.7109376 0.08191,-0.021249 0.160378,-0.03327 0.236328,-0.033203 z"
+ id="path825"
+ inkscape:connector-curvature="0" />
diff --git a/rtdata/images/themed/svg/node-move-x.svg b/rtdata/images/themed/svg/node-move-nw-se-hicontrast.svg
similarity index 64%
rename from rtdata/images/themed/svg/node-move-x.svg
rename to rtdata/images/themed/svg/node-move-nw-se-hicontrast.svg
index 3215ce9f4..375c8ea27 100644
--- a/rtdata/images/themed/svg/node-move-x.svg
+++ b/rtdata/images/themed/svg/node-move-nw-se-hicontrast.svg
@@ -18,7 +18,7 @@
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
inkscape:version="0.92.2 2405546, 2018-03-11"
- sodipodi:docname="node-move-x.svg">
+ sodipodi:docname="node-move-nw-se-hicontrast.svg">
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-center="true">
+ empspacing="2"
+ dotted="false"
+ spacingx="0.5"
+ spacingy="0.5" />
@@ -64,7 +67,7 @@
image/svg+xml
-
+
Maciej Dworak
@@ -100,21 +103,29 @@
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
-
-
-
+
+
+
+
+
diff --git a/rtdata/images/themed/svg/node-move-xy.svg b/rtdata/images/themed/svg/node-move-sw-ne-hicontrast.svg
similarity index 64%
rename from rtdata/images/themed/svg/node-move-xy.svg
rename to rtdata/images/themed/svg/node-move-sw-ne-hicontrast.svg
index 47c25e81f..fdda47505 100644
--- a/rtdata/images/themed/svg/node-move-xy.svg
+++ b/rtdata/images/themed/svg/node-move-sw-ne-hicontrast.svg
@@ -18,7 +18,7 @@
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
inkscape:version="0.92.2 2405546, 2018-03-11"
- sodipodi:docname="node-move-xy.svg">
+ sodipodi:docname="node-move-sw-ne-hicontrast.svg">
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-center="true">
+ empspacing="2"
+ dotted="false"
+ spacingx="0.5"
+ spacingy="0.5" />
@@ -64,7 +67,7 @@
image/svg+xml
-
+
Maciej Dworak
@@ -100,31 +103,29 @@
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
-
-
-
-
-
+
+
+
+
+
diff --git a/rtdata/images/themed/svg/node-move-x-hicontrast.svg b/rtdata/images/themed/svg/node-move-x-hicontrast.svg
index 6e6079901..a24af10ef 100644
--- a/rtdata/images/themed/svg/node-move-x-hicontrast.svg
+++ b/rtdata/images/themed/svg/node-move-x-hicontrast.svg
@@ -41,18 +41,21 @@
inkscape:pagecheckerboard="false"
inkscape:snap-bbox="true"
inkscape:bbox-nodes="true"
- inkscape:snap-others="false"
- inkscape:object-nodes="false"
+ inkscape:snap-others="true"
+ inkscape:object-nodes="true"
inkscape:snap-grids="true"
- inkscape:snap-bbox-midpoints="false"
- inkscape:snap-bbox-edge-midpoints="true">
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-center="true">
+ empspacing="2"
+ dotted="false"
+ spacingx="0.5"
+ spacingy="0.5" />
@@ -64,7 +67,7 @@
image/svg+xml
-
+
Maciej Dworak
@@ -101,20 +104,24 @@
inkscape:groupmode="layer"
inkscape:label="Layer 1">
-
+ sodipodi:nodetypes="cccc" />
+
diff --git a/rtdata/images/themed/svg/node-move-xy-hicontrast.svg b/rtdata/images/themed/svg/node-move-xy-hicontrast.svg
index 9c3915804..05d291870 100644
--- a/rtdata/images/themed/svg/node-move-xy-hicontrast.svg
+++ b/rtdata/images/themed/svg/node-move-xy-hicontrast.svg
@@ -26,9 +26,9 @@
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
- inkscape:zoom="34.25"
- inkscape:cx="12"
- inkscape:cy="12"
+ inkscape:zoom="24.218407"
+ inkscape:cx="6.3691263"
+ inkscape:cy="12.072563"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -41,18 +41,21 @@
inkscape:pagecheckerboard="false"
inkscape:snap-bbox="true"
inkscape:bbox-nodes="true"
- inkscape:snap-others="false"
- inkscape:object-nodes="false"
+ inkscape:snap-others="true"
+ inkscape:object-nodes="true"
inkscape:snap-grids="true"
- inkscape:snap-bbox-midpoints="false"
- inkscape:snap-bbox-edge-midpoints="true">
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-center="true">
+ empspacing="2"
+ dotted="false"
+ spacingx="0.5"
+ spacingy="0.5" />
@@ -100,31 +103,69 @@
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
+
+
+
+
+
+
+
-
-
+ id="path5657"
+ d="M -31.508539,18.321948 -28.000003,23 l 3.508542,-4.678052 z"
+ style="display:inline;opacity:0.9;fill:#2a7fff;fill-opacity:1;stroke:none;stroke-width:0.0348262" />
+ r="3" />
+
+
diff --git a/rtdata/images/themed/svg/node-move-y-hicontrast.svg b/rtdata/images/themed/svg/node-move-y-hicontrast.svg
index fe7b285e7..615f3f94a 100644
--- a/rtdata/images/themed/svg/node-move-y-hicontrast.svg
+++ b/rtdata/images/themed/svg/node-move-y-hicontrast.svg
@@ -41,18 +41,21 @@
inkscape:pagecheckerboard="false"
inkscape:snap-bbox="true"
inkscape:bbox-nodes="true"
- inkscape:snap-others="false"
- inkscape:object-nodes="false"
+ inkscape:snap-others="true"
+ inkscape:object-nodes="true"
inkscape:snap-grids="true"
- inkscape:snap-bbox-midpoints="false"
- inkscape:snap-bbox-edge-midpoints="true">
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-center="true">
+ empspacing="2"
+ dotted="false"
+ spacingx="0.5"
+ spacingy="0.5" />
@@ -64,7 +67,7 @@
image/svg+xml
-
+
Maciej Dworak
@@ -100,21 +103,29 @@
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
-
-
-
+
+
+
+
+
diff --git a/rtdata/images/themed/svg/node-move-y.svg b/rtdata/images/themed/svg/node-move-y.svg
deleted file mode 100644
index 3c6e5cfd7..000000000
--- a/rtdata/images/themed/svg/node-move-y.svg
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
diff --git a/rtdata/images/themed/svg/undo-small.svg b/rtdata/images/themed/svg/undo-small.svg
index 137c343e6..83b4663a0 100644
--- a/rtdata/images/themed/svg/undo-small.svg
+++ b/rtdata/images/themed/svg/undo-small.svg
@@ -44,7 +44,8 @@
inkscape:snap-others="false"
inkscape:object-nodes="false"
inkscape:snap-grids="true"
- inkscape:snap-bbox-midpoints="false">
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-global="false">
header :not(#CloseButton) > image {
+#MainNotebook > stack > :nth-child(2) > box:nth-child(3) image,
+#MainNotebook > header button:not(#CloseButton) image {
-gtk-icon-transform: scale(calc(22/24));
}
@@ -777,13 +778,13 @@ notebook header.left tab {
notebook header tab > grid > image {
min-height: 2.5em;
min-width: 0;
- padding: 0 0.16667em 0 0;
+ padding: 0 0.25em 0 0;
margin: 0;
}
notebook header.left tab > grid > image {
min-height: 0;
min-width: 2.5em;
- padding: 0.16667em 0 0;
+ padding: 0.25em 0 0;
}
notebook header tab label {
margin: 0.08334em;
@@ -982,7 +983,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
#MetaPanelNotebook > stack > box > grid > button {
margin-top: 0.08334em;
margin-bottom: 0.08334em;
- min-height: 2.33334em;
+ min-height: 2.16667em;
}
#MetaPanelNotebook label {
@@ -1024,8 +1025,8 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
padding: 0;
margin: 0;
}
-#ToolBarPanelFileBrowser .smallbuttonbox:nth-child(1) {
- margin: 0 0 2px 0;
+#ToolBarPanelFileBrowser .smallbuttonbox:nth-child(2) {
+ margin: 1px 0 -1px 0;
}
#ToolBarPanelFileBrowser .smallbuttonbox button.smallbutton {
min-height: 0;
@@ -1042,7 +1043,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
background-color: @bg-dark-grey;
}
#ToolBarPanelFileBrowser .smallbuttonbox button.smallbutton image{
- -gtk-icon-transform: scale(calc(14/16));
+ -gtk-icon-transform: scale(calc(13/16));
margin: -2px
}
@@ -1114,8 +1115,8 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
}
#EditorTopPanel button {
margin: 0 0.08334em;
- min-height: 2.33334em;
- min-width: 2.33334em;
+ min-height: 2.16667em;
+ min-width: 2.16667em;
}
/* Removes margin from the last button. Otherwise the filmstrip will cut of the right border. */
#EditorTopPanel :last-child > button:last-child {
@@ -1305,7 +1306,7 @@ popover.background modelbutton:hover {
/*** Switch ***********************************************************************************/
switch {
- min-height: 2.33334em;
+ min-height: 2.16667em;
min-width: 11em;
margin: 0;
padding: 0;
@@ -1350,8 +1351,8 @@ switch:disabled:not(:checked) {
/*** Buttons ***********************************************************************************/
button {
- min-height: 2.33334em;
- min-width: 2.33334em;
+ min-height: 2.16667em;
+ min-width: 2.16667em;
margin: 0;
padding: 0; /* x */
border-radius: 0.2em;
@@ -1391,28 +1392,26 @@ button.flat {
}
/* Resetbutton */
-#MyExpander button.flat,
+#MyExpander button:last-child.flat,
+#MyExpander scale + button.flat,
dialog scale + button.flat,
-scale + button.flat,
-dialog entry + button.flat {
+#MainNotebook > stack > :nth-child(2) > box:nth-child(1) scale + button.flat,
+entry + button.flat {
min-height: 1.16667em;
- min-width: 1.66667em;
+ min-width: 1.5em;
margin: 0.08334em 0 0.08334em 0.16667em;
- padding: 0;
+ padding: 0 0 0 0.16667em;
}
-dialog entry + button.flat {
+dialog entry + button:last-child.flat {
min-height: 1.66667em;
}
-#MyExpander scale + button.flat {
+#MyExpander scale + button:last-child.flat,
+#MyExpander spinbutton + button:last-child.flat {
margin: 0 0 0 0.16667em;
}
-#MyExpander image + button.flat {
- margin: 0 0 0 0.41667em;
-}
-#MyExpander spinbutton + button.flat {
- margin: 0 0 0 0.16667em;
- padding-top: 0.08334em;
+#MyExpander image + button:last-child.flat {
+ margin: 0 0 0 0.25em;
}
/**/
@@ -1426,7 +1425,7 @@ dialog entry + button.flat {
}
#MyExpander button.flat + button.flat image,
#MyExpander button.flat:first-child image{
- -gtk-icon-transform: scale(calc(20/24));
+ -gtk-icon-transform: scale(calc(20/24));
margin: -2px;
}
/**/
@@ -1573,7 +1572,7 @@ buttonbox:not(.dialog-action-area) button{
#MyExpander .image-combo button.Left {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
- min-width: 2.33334em;
+ min-width: 2.16667em;
}
/**/
@@ -1606,7 +1605,7 @@ button.color {
/* Save, Cancel, OK ... buttons */
.dialog-action-area button {
- min-height: 2.33334em;
+ min-height: 2.16667em;
margin-top: 0.33334em;
}
messagedialog .dialog-action-area button {
@@ -1752,7 +1751,7 @@ messagedialog headerbar button.titlebutton {
#MainNotebook tab #CloseButton {
padding: 0;
- margin: 0.41667em -2px 0.5em 0.25em;
+ margin: 0.33334em -2px 0.5em 0.25em;
min-width: 1.5em;
min-height: 1.5em;
}
diff --git a/rtengine/iimage.h b/rtengine/iimage.h
index 503f7cd44..af2969581 100644
--- a/rtengine/iimage.h
+++ b/rtengine/iimage.h
@@ -1773,8 +1773,9 @@ public:
/** @brief Saves the image to file in a tif format.
* @param fname is the name of the file
* @param bps can be 8 or 16 depending on the bits per pixels the output file will have
+ * @param isFloat is true for saving float images. Will be ignored by file format not supporting float data
@return the error code, 0 if none */
- virtual int saveAsTIFF (Glib::ustring fname, int bps = -1, bool uncompressed = false) = 0;
+ virtual int saveAsTIFF (Glib::ustring fname, int bps = -1, float isFloat = false, bool uncompressed = false) = 0;
/** @brief Sets the progress listener if you want to follow the progress of the image saving operations (optional).
* @param pl is the pointer to the class implementing the ProgressListener interface */
virtual void setSaveProgressListener (ProgressListener* pl) = 0;
diff --git a/rtengine/image16.cc b/rtengine/image16.cc
index 20f9ab281..c014d1c06 100644
--- a/rtengine/image16.cc
+++ b/rtengine/image16.cc
@@ -60,7 +60,7 @@ Image16::~Image16()
{
}
-void Image16::getScanline(int row, unsigned char* buffer, int bps)
+void Image16::getScanline(int row, unsigned char* buffer, int bps, bool isFloat)
{
if (data == nullptr) {
@@ -74,20 +74,13 @@ void Image16::getScanline(int row, unsigned char* buffer, int bps)
}
}
-/*
- * void Image16::setScanline (int row, unsigned char* buffer, int bps, int minValue[3], int maxValue[3]);
- * has not been implemented yet, because as of now, this method is called for IIOSF_FLOATxx sample format only
- */
-void Image16::setScanline(int row, unsigned char* buffer, int bps, unsigned int numSamples, float *minValue, float *maxValue)
+void Image16::setScanline(int row, unsigned char* buffer, int bps, unsigned int numSamples)
{
if (data == nullptr) {
return;
}
- // For optimization purpose, we're assuming that this class never has to provide min/max bounds
- assert(!minValue);
-
switch (sampleFormat) {
case (IIOSF_UNSIGNED_CHAR): {
int ix = 0;
diff --git a/rtengine/image16.h b/rtengine/image16.h
index add1d6f09..1c5504bd9 100644
--- a/rtengine/image16.h
+++ b/rtengine/image16.h
@@ -55,8 +55,8 @@ public:
{
return 8 * sizeof(unsigned short);
}
- virtual void getScanline(int row, unsigned char* buffer, int bps);
- virtual void setScanline(int row, unsigned char* buffer, int bps, unsigned int numSamples, float *minValue = nullptr, float *maxValue = nullptr);
+ virtual void getScanline(int row, unsigned char* buffer, int bps, bool isFloat = false);
+ virtual void setScanline(int row, unsigned char* buffer, int bps, unsigned int numSamples);
// functions inherited from IImage16:
virtual MyMutex& getMutex()
@@ -83,9 +83,9 @@ public:
{
return saveJPEG(fname, quality, subSamp);
}
- virtual int saveAsTIFF(Glib::ustring fname, int bps = -1, bool uncompressed = false)
+ virtual int saveAsTIFF(Glib::ustring fname, int bps = -1, float isFloat = false, bool uncompressed = false)
{
- return saveTIFF(fname, bps, uncompressed);
+ return saveTIFF(fname, bps, isFloat, uncompressed);
}
virtual void setSaveProgressListener(ProgressListener* pl)
{
diff --git a/rtengine/image8.cc b/rtengine/image8.cc
index 69066f2dd..ab7393100 100644
--- a/rtengine/image8.cc
+++ b/rtengine/image8.cc
@@ -37,7 +37,7 @@ Image8::~Image8 ()
{
}
-void Image8::getScanline (int row, unsigned char* buffer, int bps)
+void Image8::getScanline (int row, unsigned char* buffer, int bps, bool isFloat)
{
if (data == nullptr) {
@@ -55,16 +55,13 @@ void Image8::getScanline (int row, unsigned char* buffer, int bps)
}
}
-void Image8::setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples, float *minValue, float *maxValue)
+void Image8::setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples)
{
if (data == nullptr) {
return;
}
- // For optimization purpose, we're assuming that this class never have to provide min/max bound
- assert(!minValue);
-
switch (sampleFormat) {
case (IIOSF_UNSIGNED_CHAR):
if(numSamples == 1) {
diff --git a/rtengine/image8.h b/rtengine/image8.h
index eafaa2d46..59d13c298 100644
--- a/rtengine/image8.h
+++ b/rtengine/image8.h
@@ -50,8 +50,8 @@ public:
{
return 8 * sizeof(unsigned char);
}
- virtual void getScanline (int row, unsigned char* buffer, int bps);
- virtual void setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples, float *minValue = nullptr, float *maxValue = nullptr);
+ virtual void getScanline (int row, unsigned char* buffer, int bps, bool isFloat = false);
+ virtual void setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples);
// functions inherited from IImage*:
virtual MyMutex& getMutex ()
@@ -78,9 +78,9 @@ public:
{
return saveJPEG (fname, quality, subSamp);
}
- virtual int saveAsTIFF (Glib::ustring fname, int bps = -1, bool uncompressed = false)
+ virtual int saveAsTIFF (Glib::ustring fname, int bps = -1, float isFloat = false, bool uncompressed = false)
{
- return saveTIFF (fname, bps, uncompressed);
+ return saveTIFF (fname, bps, isFloat, uncompressed);
}
virtual void setSaveProgressListener (ProgressListener* pl)
{
diff --git a/rtengine/imagefloat.cc b/rtengine/imagefloat.cc
index 277ed32ce..2cf73204d 100644
--- a/rtengine/imagefloat.cc
+++ b/rtengine/imagefloat.cc
@@ -44,7 +44,7 @@ Imagefloat::~Imagefloat ()
}
// Call this method to handle floating points input values of different size
-void Imagefloat::setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples, float *minValue, float *maxValue)
+void Imagefloat::setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples)
{
if (data == nullptr) {
@@ -55,45 +55,27 @@ void Imagefloat::setScanline (int row, unsigned char* buffer, int bps, unsigned
// DNG_HalfToFloat and DNG_FP24ToFloat from dcraw.cc can be used to manually convert
// from 16 and 24 bits to 32 bits float respectively
switch (sampleFormat) {
- case (IIOSF_FLOAT16):
- case (IIOSF_FLOAT24):
+ case (IIOSF_FLOAT16): {
+ int ix = 0;
+ uint16_t* sbuffer = (uint16_t*) buffer;
+
+ for (int i = 0; i < width; i++) {
+ r(row, i) = 65535.f * DNG_HalfToFloat(sbuffer[ix++]);
+ g(row, i) = 65535.f * DNG_HalfToFloat(sbuffer[ix++]);
+ b(row, i) = 65535.f * DNG_HalfToFloat(sbuffer[ix++]);
+ }
+
+ break;
+ }
+ //case (IIOSF_FLOAT24):
case (IIOSF_FLOAT32): {
int ix = 0;
float* sbuffer = (float*) buffer;
for (int i = 0; i < width; i++) {
- r(row, i) = 65535.f * sbuffer[ix];
-
- if (minValue) {
- if (sbuffer[ix] < minValue[0]) {
- minValue[0] = sbuffer[ix];
- } else if (sbuffer[ix] > maxValue[0]) {
- maxValue[0] = sbuffer[ix];
- }
- }
- ++ix;
-
- g(row, i) = 65535.f * sbuffer[ix];
-
- if (minValue) {
- if (sbuffer[ix] < minValue[1]) {
- minValue[1] = sbuffer[ix];
- } else if (sbuffer[ix] > maxValue[1]) {
- maxValue[1] = sbuffer[ix];
- }
- }
- ++ix;
-
- b(row, i) = 65535.f * sbuffer[ix];
-
- if (minValue) {
- if (sbuffer[ix] < minValue[2]) {
- minValue[2] = sbuffer[ix];
- } else if (sbuffer[ix] > maxValue[2]) {
- maxValue[2] = sbuffer[ix];
- }
- }
- ++ix;
+ r(row, i) = 65535.f * sbuffer[ix++];
+ g(row, i) = 65535.f * sbuffer[ix++];
+ b(row, i) = 65535.f * sbuffer[ix++];
}
break;
@@ -112,34 +94,8 @@ void Imagefloat::setScanline (int row, unsigned char* buffer, int bps, unsigned
// TODO: we may have to handle other color space than sRGB!
Color::xyz2srgb(xyzvalues[0], xyzvalues[1], xyzvalues[2], rgbvalues[0], rgbvalues[1], rgbvalues[2]);
r(row, i) = rgbvalues[0];
-
- if (minValue) {
- if (rgbvalues[0] < minValue[0]) {
- minValue[0] = rgbvalues[0];
- } else if (rgbvalues[0] > maxValue[0]) {
- maxValue[0] = rgbvalues[0];
- }
- }
-
g(row, i) = rgbvalues[1];
-
- if (minValue) {
- if (rgbvalues[1] < minValue[1]) {
- minValue[1] = rgbvalues[1];
- } else if (rgbvalues[1] > maxValue[1]) {
- maxValue[1] = rgbvalues[1];
- }
- }
-
b(row, i) = rgbvalues[2];
-
- if (minValue) {
- if (rgbvalues[2] < minValue[2]) {
- minValue[2] = rgbvalues[2];
- } else if (rgbvalues[2] > maxValue[2]) {
- maxValue[2] = rgbvalues[2];
- }
- }
}
break;
@@ -154,22 +110,32 @@ void Imagefloat::setScanline (int row, unsigned char* buffer, int bps, unsigned
namespace rtengine { extern void filmlike_clip(float *r, float *g, float *b); }
-void Imagefloat::getScanline (int row, unsigned char* buffer, int bps)
+void Imagefloat::getScanline (int row, unsigned char* buffer, int bps, bool isFloat)
{
if (data == nullptr) {
return;
}
- if (bps == 32) {
- int ix = 0;
- float* sbuffer = (float*) buffer;
-
- // agriggio -- assume the image is normalized to [0, 65535]
- for (int i = 0; i < width; i++) {
- sbuffer[ix++] = r(row, i) / 65535.f;
- sbuffer[ix++] = g(row, i) / 65535.f;
- sbuffer[ix++] = b(row, i) / 65535.f;
+ if (isFloat) {
+ if (bps == 32) {
+ int ix = 0;
+ float* sbuffer = (float*) buffer;
+ // agriggio -- assume the image is normalized to [0, 65535]
+ for (int i = 0; i < width; i++) {
+ sbuffer[ix++] = r(row, i) / 65535.f;
+ sbuffer[ix++] = g(row, i) / 65535.f;
+ sbuffer[ix++] = b(row, i) / 65535.f;
+ }
+ } else if (bps == 16) {
+ int ix = 0;
+ uint16_t* sbuffer = (uint16_t*) buffer;
+ // agriggio -- assume the image is normalized to [0, 65535]
+ for (int i = 0; i < width; i++) {
+ sbuffer[ix++] = DNG_FloatToHalf(r(row, i) / 65535.f);
+ sbuffer[ix++] = DNG_FloatToHalf(g(row, i) / 65535.f);
+ sbuffer[ix++] = DNG_FloatToHalf(b(row, i) / 65535.f);
+ }
}
} else {
unsigned short *sbuffer = (unsigned short *)buffer;
diff --git a/rtengine/imagefloat.h b/rtengine/imagefloat.h
index d48e51cee..65c291775 100644
--- a/rtengine/imagefloat.h
+++ b/rtengine/imagefloat.h
@@ -59,8 +59,8 @@ public:
{
return 8 * sizeof(float);
}
- virtual void getScanline (int row, unsigned char* buffer, int bps);
- virtual void setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples, float *minValue = nullptr, float *maxValue = nullptr);
+ virtual void getScanline (int row, unsigned char* buffer, int bps, bool isFloat = false);
+ virtual void setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples);
// functions inherited from IImagefloat:
virtual MyMutex& getMutex ()
@@ -87,9 +87,9 @@ public:
{
return saveJPEG (fname, quality, subSamp);
}
- virtual int saveAsTIFF (Glib::ustring fname, int bps = -1, bool uncompressed = false)
+ virtual int saveAsTIFF (Glib::ustring fname, int bps = -1, float isFloat = false, bool uncompressed = false)
{
- return saveTIFF (fname, bps, uncompressed);
+ return saveTIFF (fname, bps, isFloat, uncompressed);
}
virtual void setSaveProgressListener (ProgressListener* pl)
{
@@ -100,6 +100,122 @@ public:
delete this;
}
+ inline uint16_t DNG_FloatToHalf(float f)
+ {
+ union {
+ float f;
+ uint32_t i;
+ } tmp;
+
+ tmp.f = f;
+ int32_t sign = (tmp.i >> 16) & 0x00008000;
+ int32_t exponent = ((tmp.i >> 23) & 0x000000ff) - (127 - 15);
+ int32_t mantissa = tmp.i & 0x007fffff;
+ if (exponent <= 0) {
+ if (exponent < -10) {
+ return (uint16_t)sign;
+ }
+ mantissa = (mantissa | 0x00800000) >> (1 - exponent);
+ if (mantissa & 0x00001000)
+ mantissa += 0x00002000;
+ return (uint16_t)(sign | (mantissa >> 13));
+ } else if (exponent == 0xff - (127 - 15)) {
+ if (mantissa == 0) {
+ return (uint16_t)(sign | 0x7c00);
+ } else {
+ return (uint16_t)(sign | 0x7c00 | (mantissa >> 13));
+ }
+ }
+ if (mantissa & 0x00001000) {
+ mantissa += 0x00002000;
+ if (mantissa & 0x00800000) {
+ mantissa = 0; // overflow in significand,
+ exponent += 1; // adjust exponent
+ }
+ }
+ if (exponent > 30) {
+ return (uint16_t)(sign | 0x7c00); // infinity with the same sign as f.
+ }
+ return (uint16_t)(sign | (exponent << 10) | (mantissa >> 13));
+ }
+
+ // From DNG SDK dng_utils.h
+ inline float DNG_HalfToFloat(uint16_t halfValue)
+ {
+ union {
+ float f;
+ uint32_t i;
+ } tmp;
+
+ int32_t sign = (halfValue >> 15) & 0x00000001;
+ int32_t exponent = (halfValue >> 10) & 0x0000001f;
+ int32_t mantissa = halfValue & 0x000003ff;
+ if (exponent == 0) {
+ if (mantissa == 0) {
+ // Plus or minus zero
+ tmp.i = (uint32_t) (sign << 31);
+ return tmp.f;
+ } else {
+ // Denormalized number -- renormalize it
+ while (!(mantissa & 0x00000400)) {
+ mantissa <<= 1;
+ exponent -= 1;
+ }
+ exponent += 1;
+ mantissa &= ~0x00000400;
+ }
+ } else if (exponent == 31) {
+ if (mantissa == 0) {
+ // Positive or negative infinity, convert to maximum (16 bit) values.
+ tmp.i = (uint32_t)((sign << 31) | ((0x1eL + 127 - 15) << 23) | (0x3ffL << 13));
+ return tmp.f;
+ } else {
+ // Nan -- Just set to zero.
+ return 0;
+ }
+ }
+ // Normalized number
+ exponent += (127 - 15);
+ mantissa <<= 13;
+ // Assemble sign, exponent and mantissa.
+ tmp.i = (uint32_t) ((sign << 31) | (exponent << 23) | mantissa);
+ return tmp.f;
+ }
+
+ inline uint32_t DNG_FP24ToFloat(const uint8_t * input)
+ {
+ int32_t sign = (input [0] >> 7) & 0x01;
+ int32_t exponent = (input [0] ) & 0x7F;
+ int32_t mantissa = (((int32_t) input [1]) << 8) | input[2];
+ if (exponent == 0) {
+ if (mantissa == 0) {
+ // Plus or minus zero
+ return (uint32_t) (sign << 31);
+ } else {
+ // Denormalized number -- renormalize it
+ while (!(mantissa & 0x00010000)) {
+ mantissa <<= 1;
+ exponent -= 1;
+ }
+ exponent += 1;
+ mantissa &= ~0x00010000;
+ }
+ } else if (exponent == 127) {
+ if (mantissa == 0) {
+ // Positive or negative infinity, convert to maximum (24 bit) values.
+ return (uint32_t) ((sign << 31) | ((0x7eL + 128 - 64) << 23) | (0xffffL << 7));
+ } else {
+ // Nan -- Just set to zero.
+ return 0;
+ }
+ }
+ // Normalized number
+ exponent += (128 - 64);
+ mantissa <<= 7;
+ // Assemble sign, exponent and mantissa.
+ return (uint32_t) ((sign << 31) | (exponent << 23) | mantissa);
+ }
+
virtual void normalizeFloat(float srcMinVal, float srcMaxVal);
void normalizeFloatTo1();
void normalizeFloatTo65535();
diff --git a/rtengine/imageio.cc b/rtengine/imageio.cc
index 6c70869ec..8bfe81504 100644
--- a/rtengine/imageio.cc
+++ b/rtengine/imageio.cc
@@ -1027,6 +1027,9 @@ int ImageIO::savePNG (Glib::ustring fname, volatile int bps)
if (bps < 0) {
bps = getBPS ();
}
+ if (bps > 16) {
+ bps = 16;
+ }
png_set_IHDR(png, info, width, height, bps, PNG_COLOR_TYPE_RGB,
PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_BASE);
@@ -1298,13 +1301,12 @@ int ImageIO::saveJPEG (Glib::ustring fname, int quality, int subSamp)
return IMIO_SUCCESS;
}
-int ImageIO::saveTIFF (Glib::ustring fname, int bps, bool uncompressed)
+int ImageIO::saveTIFF (Glib::ustring fname, int bps, float isFloat, bool uncompressed)
{
if (getWidth() < 1 || getHeight() < 1) {
return IMIO_HEADERERROR;
}
- //TODO: Handling 32 bits floating point output images!
bool writeOk = true;
int width = getWidth ();
int height = getHeight ();
@@ -1456,26 +1458,36 @@ int ImageIO::saveTIFF (Glib::ustring fname, int bps, bool uncompressed)
TIFFSetField (out, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
TIFFSetField (out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB);
TIFFSetField (out, TIFFTAG_COMPRESSION, uncompressed ? COMPRESSION_NONE : COMPRESSION_ADOBE_DEFLATE);
- TIFFSetField (out, TIFFTAG_SAMPLEFORMAT, bps == 32 ? SAMPLEFORMAT_IEEEFP : SAMPLEFORMAT_UINT);
+ TIFFSetField (out, TIFFTAG_SAMPLEFORMAT, (bps == 16 || bps == 32) && isFloat ? SAMPLEFORMAT_IEEEFP : SAMPLEFORMAT_UINT);
if (!uncompressed) {
- TIFFSetField (out, TIFFTAG_PREDICTOR, bps == 32 ? PREDICTOR_FLOATINGPOINT : PREDICTOR_HORIZONTAL);
+ TIFFSetField (out, TIFFTAG_PREDICTOR, (bps == 16 || bps == 32) && isFloat ? PREDICTOR_FLOATINGPOINT : PREDICTOR_HORIZONTAL);
}
if (profileData) {
TIFFSetField (out, TIFFTAG_ICCPROFILE, profileLength, profileData);
}
for (int row = 0; row < height; row++) {
- getScanline (row, linebuffer, bps);
+ getScanline (row, linebuffer, bps, isFloat);
- if(needsReverse && !uncompressed && bps == 32) {
- for(int i = 0; i < lineWidth; i += 4) {
- char temp = linebuffer[i];
- linebuffer[i] = linebuffer[i + 3];
- linebuffer[i + 3] = temp;
- temp = linebuffer[i + 1];
- linebuffer[i + 1] = linebuffer[i + 2];
- linebuffer[i + 2] = temp;
+ if (bps == 16) {
+ if(needsReverse && !uncompressed) {
+ for(int i = 0; i < lineWidth; i += 2) {
+ char temp = linebuffer[i];
+ linebuffer[i] = linebuffer[i + 1];
+ linebuffer[i + 1] = temp;
+ }
+ }
+ } else if (bps == 32) {
+ if(needsReverse && !uncompressed) {
+ for(int i = 0; i < lineWidth; i += 4) {
+ char temp = linebuffer[i];
+ linebuffer[i] = linebuffer[i + 3];
+ linebuffer[i + 3] = temp;
+ temp = linebuffer[i + 1];
+ linebuffer[i + 1] = linebuffer[i + 2];
+ linebuffer[i + 2] = temp;
+ }
}
}
diff --git a/rtengine/imageio.h b/rtengine/imageio.h
index 294a3d476..cbf245291 100644
--- a/rtengine/imageio.h
+++ b/rtengine/imageio.h
@@ -112,8 +112,8 @@ public:
}
virtual int getBPS () = 0;
- virtual void getScanline (int row, unsigned char* buffer, int bps) {}
- virtual void setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples = 3, float minValue[3] = nullptr, float maxValue[3] = nullptr) {}
+ virtual void getScanline (int row, unsigned char* buffer, int bps, bool isFloat = false) {}
+ virtual void setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples = 3) {}
virtual bool readImage (Glib::ustring &fname, FILE *fh)
{
@@ -138,7 +138,7 @@ public:
int savePNG (Glib::ustring fname, volatile int bps = -1);
int saveJPEG (Glib::ustring fname, int quality = 100, int subSamp = 3);
- int saveTIFF (Glib::ustring fname, int bps = -1, bool uncompressed = false);
+ int saveTIFF (Glib::ustring fname, int bps = -1, float isFloat = false, bool uncompressed = false);
cmsHPROFILE getEmbeddedProfile ()
{
diff --git a/rtgui/batchqueue.cc b/rtgui/batchqueue.cc
index 9e5086fef..d3e3ef9f0 100644
--- a/rtgui/batchqueue.cc
+++ b/rtgui/batchqueue.cc
@@ -228,7 +228,7 @@ bool BatchQueue::saveBatchQueue ()
// The column's header is mandatory (the first line will be skipped when loaded)
file << "input image full path|param file full path|output image full path|file format|jpeg quality|jpeg subsampling|"
- << "png bit depth|png compression|tiff bit depth|uncompressed tiff|save output params|force format options|fast export|"
+ << "png bit depth|png compression|tiff bit depth|tiff is float|uncompressed tiff|save output params|force format options|fast export|"
<< std::endl;
// method is already running with entryLock, so no need to lock again
@@ -246,7 +246,7 @@ bool BatchQueue::saveBatchQueue ()
#endif
<< saveFormat.jpegQuality << '|' << saveFormat.jpegSubSamp << '|'
<< saveFormat.pngBits << '|'
- << saveFormat.tiffBits << '|' << saveFormat.tiffUncompressed << '|'
+ << saveFormat.tiffBits << '|' << (saveFormat.tiffFloat ? 1 : 0) << '|' << saveFormat.tiffUncompressed << '|'
<< saveFormat.saveParams << '|' << entry->forceFormatOpts << '|'
<< entry->fast_pipeline << '|'
<< std::endl;
@@ -311,6 +311,7 @@ bool BatchQueue::loadBatchQueue ()
const auto jpegSubSamp = nextIntOr (options.saveFormat.jpegSubSamp);
const auto pngBits = nextIntOr (options.saveFormat.pngBits);
const auto tiffBits = nextIntOr (options.saveFormat.tiffBits);
+ const auto tiffFloat = nextIntOr (options.saveFormat.tiffFloat);
const auto tiffUncompressed = nextIntOr (options.saveFormat.tiffUncompressed);
const auto saveParams = nextIntOr (options.saveFormat.saveParams);
const auto forceFormatOpts = nextIntOr (options.forceFormatOpts);
@@ -352,6 +353,7 @@ bool BatchQueue::loadBatchQueue ()
saveFormat.jpegSubSamp = jpegSubSamp;
saveFormat.pngBits = pngBits;
saveFormat.tiffBits = tiffBits;
+ saveFormat.tiffFloat = tiffFloat == 1;
saveFormat.tiffUncompressed = tiffUncompressed != 0;
saveFormat.saveParams = saveParams != 0;
entry->forceFormatOpts = forceFormatOpts != 0;
@@ -608,7 +610,7 @@ rtengine::ProcessingJob* BatchQueue::imageReady (rtengine::IImagefloat* img)
int err = 0;
if (saveFormat.format == "tif") {
- err = img->saveAsTIFF (fname, saveFormat.tiffBits, saveFormat.tiffUncompressed);
+ err = img->saveAsTIFF (fname, saveFormat.tiffBits, saveFormat.tiffFloat, saveFormat.tiffUncompressed);
} else if (saveFormat.format == "png") {
err = img->saveAsPNG (fname, saveFormat.pngBits);
} else if (saveFormat.format == "jpg") {
diff --git a/rtgui/batchqueueentry.cc b/rtgui/batchqueueentry.cc
index 336e81ab9..b5383205f 100644
--- a/rtgui/batchqueueentry.cc
+++ b/rtgui/batchqueueentry.cc
@@ -175,9 +175,10 @@ Glib::ustring BatchQueueEntry::getToolTip (int x, int y)
tooltip += Glib::ustring::compose("\n\n%1: %2", M("BATCHQUEUE_DESTFILENAME"), outFileName);
if (forceFormatOpts) {
- tooltip += Glib::ustring::compose("\n\n%1: %2 (%3 bits)", M("SAVEDLG_FILEFORMAT"), saveFormat.format,
+ tooltip += Glib::ustring::compose("\n\n%1: %2 (%3-bits%4)", M("SAVEDLG_FILEFORMAT"), saveFormat.format,
saveFormat.format == "png" ? saveFormat.pngBits :
- saveFormat.format == "tif" ? saveFormat.tiffBits : 8);
+ saveFormat.format == "tif" ? saveFormat.tiffBits : 8,
+ saveFormat.format == "tif" && saveFormat.tiffFloat ? M("SAVEDLG_FILEFORMAT_FLOAT") : "");
if (saveFormat.format == "jpg") {
tooltip += Glib::ustring::compose("\n%1: %2\n%3: %4",
diff --git a/rtgui/bayerprocess.cc b/rtgui/bayerprocess.cc
index 1770dcbb0..d68f5c2d3 100644
--- a/rtgui/bayerprocess.cc
+++ b/rtgui/bayerprocess.cc
@@ -46,6 +46,20 @@ BayerProcess::BayerProcess () : FoldableToolPanel(this, "bayerprocess", M("TP_RA
hb1->pack_end (*method, Gtk::PACK_EXPAND_WIDGET, 4);
pack_start( *hb1, Gtk::PACK_SHRINK, 4);
+
+ dualDemosaicOptions = Gtk::manage (new Gtk::VBox ());
+
+ dualDemosaicContrast = Gtk::manage(new Adjuster (M("TP_RAW_DUALDEMOSAICCONTRAST"), 0, 100, 1, 20));
+ dualDemosaicContrast->setAdjusterListener (this);
+
+ if (dualDemosaicContrast->delay < options.adjusterMaxDelay) {
+ dualDemosaicContrast->delay = options.adjusterMaxDelay;
+ }
+
+ dualDemosaicContrast->show();
+ dualDemosaicOptions->pack_start(*dualDemosaicContrast);
+ pack_start( *dualDemosaicOptions, Gtk::PACK_SHRINK, 4);
+
borderbox = Gtk::manage(new Gtk::HBox());
border = Gtk::manage(new Adjuster(M("TP_RAW_BORDER"), 0, 16, 1, 4));
border->setAdjusterListener (this);
@@ -112,20 +126,6 @@ BayerProcess::BayerProcess () : FoldableToolPanel(this, "bayerprocess", M("TP_RA
lmmseOptions->pack_start(*lmmseIterations);
pack_start( *lmmseOptions, Gtk::PACK_SHRINK, 4);
- dualDemosaicOptions = Gtk::manage (new Gtk::VBox ());
-
- dualDemosaicContrast = Gtk::manage(new Adjuster (M("TP_RAW_DUALDEMOSAICCONTRAST"), 0, 100, 1, 20));
- dualDemosaicContrast->setAdjusterListener (this);
-
- if (dualDemosaicContrast->delay < options.adjusterMaxDelay) {
- dualDemosaicContrast->delay = options.adjusterMaxDelay;
- }
-
- dualDemosaicContrast->show();
- dualDemosaicOptions->pack_start(*dualDemosaicContrast);
- pack_start( *dualDemosaicOptions, Gtk::PACK_SHRINK, 4);
-
-
// -------------------- PixelShift ----------------------
diff --git a/rtgui/cropwindow.cc b/rtgui/cropwindow.cc
index ed2031f81..db5b5ca91 100644
--- a/rtgui/cropwindow.cc
+++ b/rtgui/cropwindow.cc
@@ -1249,7 +1249,7 @@ void CropWindow::updateCursor (int x, int y)
if (onArea (CropObserved, x, y)) {
newType = CSMove;
} else {
- newType = CSOpenHand;
+ newType = CSCrosshair;
}
} else if (tm == TMSpotWB) {
newType = CSSpotWB;
@@ -1282,7 +1282,7 @@ void CropWindow::updateCursor (int x, int y)
} else if (state == SCropMove || state == SCropWinMove || state == SObservedMove) {
newType = CSMove;
} else if (state == SHandMove || state == SCropImgMove) {
- newType = CSClosedHand;
+ newType = CSHandClosed;
} else if (state == SResizeW1 || state == SResizeW2) {
newType = CSResizeWidth;
} else if (state == SResizeH1 || state == SResizeH2) {
diff --git a/rtgui/cursormanager.cc b/rtgui/cursormanager.cc
index 6c280ee8c..34efbcac8 100644
--- a/rtgui/cursormanager.cc
+++ b/rtgui/cursormanager.cc
@@ -36,40 +36,45 @@ void CursorManager::init (Glib::RefPtr mainWindow)
#endif
- cResizeWidth = Gdk::Cursor::create (display, Gdk::SB_H_DOUBLE_ARROW);
- cResizeHeight = Gdk::Cursor::create (display, Gdk::SB_V_DOUBLE_ARROW);
- cResizeDiag = Gdk::Cursor::create (display, Gdk::BOTTOM_RIGHT_CORNER);
- cResizeTopLeft = Gdk::Cursor::create (display, Gdk::TOP_LEFT_CORNER);
- cResizeTopRight = Gdk::Cursor::create (display, Gdk::TOP_RIGHT_CORNER);
- cResizeBottomLeft = Gdk::Cursor::create (display, Gdk::BOTTOM_LEFT_CORNER);
- cResizeBottomRight = Gdk::Cursor::create (display, Gdk::BOTTOM_RIGHT_CORNER);
- cCropMove = Gdk::Cursor::create (display, Gdk::FLEUR);
- cCropMoving = Gdk::Cursor::create (display, Gdk::HAND2);
- cCropSelection = Gdk::Cursor::create (display, Gdk::CROSSHAIR);
- cLeftTanMove = Gdk::Cursor::create (display, Gdk::SB_LEFT_ARROW);
- cRightTanMove = Gdk::Cursor::create (display, Gdk::SB_RIGHT_ARROW);
- cAdd = Gdk::Cursor::create (display, Gdk::PLUS);
- cWait = Gdk::Cursor::create (display, Gdk::CLOCK);
+ Glib::RefPtr add = RTImage::createFromFile("crosshair-small.png");
+ Glib::RefPtr colPick = RTImage::createFromFile("color-picker-hicontrast.png");
+ Glib::RefPtr colPickAdd = RTImage::createFromFile("color-picker-add-hicontrast.png");
+ Glib::RefPtr cropDraw = RTImage::createFromFile("crop-point-hicontrast.png");
+ Glib::RefPtr crosshair = RTImage::createFromFile("crosshair-hicontrast.png");
+ Glib::RefPtr empty = RTImage::createFromFile("empty.png");
+ Glib::RefPtr handClosed = RTImage::createFromFile("hand-closed-hicontrast.png");
+ Glib::RefPtr handOpen = RTImage::createFromFile("hand-open-hicontrast.png");
+ Glib::RefPtr moveBL = RTImage::createFromFile("node-move-sw-ne-hicontrast.png");
+ Glib::RefPtr moveBR = RTImage::createFromFile("node-move-nw-se-hicontrast.png");
+ Glib::RefPtr moveL = RTImage::createFromFile("node-move-x-hicontrast.png");
+ Glib::RefPtr moveR = RTImage::createFromFile("node-move-x-hicontrast.png");
+ Glib::RefPtr moveTL = RTImage::createFromFile("node-move-nw-se-hicontrast.png");
+ Glib::RefPtr moveTR = RTImage::createFromFile("node-move-sw-ne-hicontrast.png");
+ Glib::RefPtr moveX = RTImage::createFromFile("node-move-x-hicontrast.png");
+ Glib::RefPtr moveXY = RTImage::createFromFile("node-move-xy-hicontrast.png");
+ Glib::RefPtr moveY = RTImage::createFromFile("node-move-y-hicontrast.png");
+ Glib::RefPtr rotate = RTImage::createFromFile("rotate-aroundnode-hicontrast.png");
+ Glib::RefPtr wait = RTImage::createFromFile("gears.png"); // Currently unused, create *-hicontrast once used.
- Glib::RefPtr hand = RTImage::createFromFile ("crosshair-hicontrast.png");
- Glib::RefPtr close_hand = RTImage::createFromFile ("hand-closed-hicontrast.png");
- Glib::RefPtr wbpick = RTImage::createFromFile ("color-picker-hicontrast.png");
- Glib::RefPtr cpick = RTImage::createFromFile ("color-picker-add-hicontrast.png");
- Glib::RefPtr empty = RTImage::createFromFile ("empty.png");
- Glib::RefPtr move2D = RTImage::createFromFile ("node-move-xy-hicontrast.png");
- Glib::RefPtr move1DH = RTImage::createFromFile ("node-move-x-hicontrast.png");
- Glib::RefPtr move1DV = RTImage::createFromFile ("node-move-y-hicontrast.png");
- Glib::RefPtr moveRotate = RTImage::createFromFile ("rotate-aroundnode-hicontrast.png");
-
- cHand = hand ? Gdk::Cursor::create (cAdd->get_display(), hand, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2);
- cClosedHand = close_hand ? Gdk::Cursor::create (cAdd->get_display(), close_hand, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2);
- cWB = wbpick ? Gdk::Cursor::create (cAdd->get_display(), wbpick, 4, 21) : Gdk::Cursor::create (cAdd->get_display(), Gdk::ARROW);
- cAddPicker = cpick ? Gdk::Cursor::create (cAdd->get_display(), cpick, 4, 21) : Gdk::Cursor::create (cAdd->get_display(), Gdk::ARROW);
- cHidden = empty ? Gdk::Cursor::create (cAdd->get_display(), empty, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::FLEUR);
- cMove2D = move2D ? Gdk::Cursor::create (cAdd->get_display(), move2D, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::FLEUR);
- cMove1DH = move1DH ? Gdk::Cursor::create (cAdd->get_display(), move1DH, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::FLEUR);
- cMove1DV = move1DV ? Gdk::Cursor::create (cAdd->get_display(), move1DV, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::FLEUR);
- cMoveRotate = moveRotate ? Gdk::Cursor::create (cAdd->get_display(), moveRotate, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::CIRCLE);
+ cAdd = add ? Gdk::Cursor::create(display, add, 8, 8) : Gdk::Cursor::create(display, Gdk::PLUS);
+ cAddPicker = colPickAdd ? Gdk::Cursor::create(display, colPickAdd, 4, 21) : Gdk::Cursor::create(display, Gdk::PLUS);
+ cCropDraw = cropDraw ? Gdk::Cursor::create(display, cropDraw, 3, 3) : Gdk::Cursor::create(display, Gdk::DIAMOND_CROSS);
+ cCrosshair = crosshair ? Gdk::Cursor::create(display, crosshair, 12, 12) : Gdk::Cursor::create(display, Gdk::CROSSHAIR);
+ cEmpty = empty ? Gdk::Cursor::create(display, empty, 12, 12) : Gdk::Cursor::create(display, Gdk::BLANK_CURSOR);
+ cHandClosed = handClosed ? Gdk::Cursor::create(display, handClosed, 12, 12) : Gdk::Cursor::create(display, Gdk::HAND1);
+ cHandOpen = handOpen ? Gdk::Cursor::create(display, handOpen, 12, 12) : Gdk::Cursor::create(display, Gdk::HAND2);
+ cMoveBL = moveBL ? Gdk::Cursor::create(display, moveBL, 12, 12) : Gdk::Cursor::create(display, Gdk::BOTTOM_LEFT_CORNER);
+ cMoveBR = moveBR ? Gdk::Cursor::create(display, moveBR, 12, 12) : Gdk::Cursor::create(display, Gdk::BOTTOM_RIGHT_CORNER);
+ cMoveL = moveL ? Gdk::Cursor::create(display, moveL, 12, 12) : Gdk::Cursor::create(display, Gdk::SB_LEFT_ARROW);
+ cMoveR = moveR ? Gdk::Cursor::create(display, moveR, 12, 12) : Gdk::Cursor::create(display, Gdk::SB_RIGHT_ARROW);
+ cMoveTL = moveTL ? Gdk::Cursor::create(display, moveTL, 12, 12) : Gdk::Cursor::create(display, Gdk::TOP_LEFT_CORNER);
+ cMoveTR = moveTR ? Gdk::Cursor::create(display, moveTR, 12, 12) : Gdk::Cursor::create(display, Gdk::TOP_RIGHT_CORNER);
+ cMoveX = moveX ? Gdk::Cursor::create(display, moveX, 12, 12) : Gdk::Cursor::create(display, Gdk::SB_H_DOUBLE_ARROW);
+ cMoveXY = moveXY ? Gdk::Cursor::create(display, moveXY, 12, 12) : Gdk::Cursor::create(display, Gdk::FLEUR);
+ cMoveY = moveY ? Gdk::Cursor::create(display, moveY, 12, 12) : Gdk::Cursor::create(display, Gdk::SB_V_DOUBLE_ARROW);
+ cRotate = rotate ? Gdk::Cursor::create(display, rotate, 12, 12) : Gdk::Cursor::create(display, Gdk::EXCHANGE);
+ cWB = colPick ? Gdk::Cursor::create(display, colPick, 4, 21) : Gdk::Cursor::create(display, Gdk::TARGET);
+ cWait = wait ? Gdk::Cursor::create(display, wait, 12, 12) : Gdk::Cursor::create(display, Gdk::CLOCK);
window = mainWindow;
}
@@ -77,57 +82,87 @@ void CursorManager::init (Glib::RefPtr mainWindow)
/* Set the cursor of the given window */
void CursorManager::setCursor (Glib::RefPtr window, CursorShape shape)
{
-
- if (shape == CSArrow)
- // set_cursor without any arguments to select system default
+ switch (shape)
{
- window->set_cursor ();
- } else if (shape == CSOpenHand) {
- window->set_cursor (cHand);
- } else if (shape == CSClosedHand) {
- window->set_cursor (cClosedHand);
- } else if (shape == CSMove) {
- window->set_cursor (cCropMove);
- } else if (shape == CSResizeWidth) {
- window->set_cursor (cResizeWidth);
- } else if (shape == CSResizeHeight) {
- window->set_cursor (cResizeHeight);
- } else if (shape == CSResizeDiagonal) {
- window->set_cursor (cResizeDiag);
- } else if (shape == CSResizeTopLeft) {
- window->set_cursor (cResizeTopLeft);
- } else if (shape == CSResizeTopRight) {
- window->set_cursor (cResizeTopRight);
- } else if (shape == CSResizeBottomLeft) {
- window->set_cursor (cResizeBottomLeft);
- } else if (shape == CSResizeBottomRight) {
- window->set_cursor (cResizeBottomRight);
- } else if (shape == CSMove2D) {
- window->set_cursor (cMove2D);
- } else if (shape == CSMove1DH) {
- window->set_cursor (cMove1DH);
- } else if (shape == CSMove1DV) {
- window->set_cursor (cMove1DV);
- } else if (shape == CSMoveRotate) {
- window->set_cursor (cMoveRotate);
- } else if (shape == CSSpotWB) {
- window->set_cursor (cWB);
- } else if (shape == CSAddColPicker) {
- window->set_cursor (cAddPicker);
- } else if (shape == CSCropSelect) {
- window->set_cursor (cHand);
- } else if (shape == CSMoveLeft) {
- window->set_cursor (cLeftTanMove);
- } else if (shape == CSMoveRight) {
- window->set_cursor (cRightTanMove);
- } else if (shape == CSStraighten) {
- window->set_cursor (cHand);
- } else if (shape == CSWait) {
- window->set_cursor (cWait);
- } else if (shape == CSPlus) {
- window->set_cursor (cAdd);
- } else if (shape == CSEmpty) {
- window->set_cursor (cHidden);
+ case CursorShape::CSAddColPicker:
+ window->set_cursor(cAddPicker);
+ break;
+ case CursorShape::CSArrow:
+ window->set_cursor(); // set_cursor without any arguments to select system default
+ break;
+ case CursorShape::CSCropSelect:
+ window->set_cursor(cCropDraw);
+ break;
+ case CursorShape::CSCrosshair:
+ window->set_cursor(cCrosshair);
+ break;
+ case CursorShape::CSEmpty:
+ window->set_cursor(cEmpty);
+ break;
+ case CursorShape::CSHandClosed:
+ window->set_cursor(cHandClosed);
+ break;
+ case CursorShape::CSHandOpen:
+ window->set_cursor(cHandOpen);
+ break;
+ case CursorShape::CSMove:
+ window->set_cursor(cHandClosed);
+ break;
+ case CursorShape::CSMove1DH:
+ window->set_cursor(cMoveX);
+ break;
+ case CursorShape::CSMove1DV:
+ window->set_cursor(cMoveY);
+ break;
+ case CursorShape::CSMove2D:
+ window->set_cursor(cMoveXY);
+ break;
+ case CursorShape::CSMoveLeft:
+ window->set_cursor(cMoveL);
+ break;
+ case CursorShape::CSMoveRight:
+ window->set_cursor(cMoveR);
+ break;
+ case CursorShape::CSMoveRotate:
+ window->set_cursor(cRotate);
+ break;
+ case CursorShape::CSPlus:
+ window->set_cursor(cAdd);
+ break;
+ case CursorShape::CSResizeBottomLeft:
+ window->set_cursor(cMoveBL);
+ break;
+ case CursorShape::CSResizeBottomRight:
+ window->set_cursor(cMoveBR);
+ break;
+ case CursorShape::CSResizeDiagonal:
+ window->set_cursor(cMoveXY);
+ break;
+ case CursorShape::CSResizeHeight:
+ window->set_cursor(cMoveY);
+ break;
+ case CursorShape::CSResizeTopLeft:
+ window->set_cursor(cMoveTL);
+ break;
+ case CursorShape::CSResizeTopRight:
+ window->set_cursor(cMoveTR);
+ break;
+ case CursorShape::CSResizeWidth:
+ window->set_cursor(cMoveX);
+ break;
+ case CursorShape::CSSpotWB:
+ window->set_cursor(cWB);
+ break;
+ case CursorShape::CSStraighten:
+ window->set_cursor(cRotate);
+ break;
+ case CursorShape::CSUndefined:
+ break;
+ case CursorShape::CSWait:
+ window->set_cursor(cWait);
+ break;
+ default:
+ window->set_cursor(cCrosshair);
}
}
diff --git a/rtgui/cursormanager.h b/rtgui/cursormanager.h
index fcd856509..7d3f068b2 100644
--- a/rtgui/cursormanager.h
+++ b/rtgui/cursormanager.h
@@ -22,41 +22,57 @@
#include
enum CursorShape {
- CSUndefined, CSArrow, CSOpenHand, CSClosedHand, CSMove, CSMoveLeft,
- CSMoveRight, CSResizeWidth, CSResizeHeight, CSResizeDiagonal,
- CSResizeTopLeft, CSResizeTopRight, CSResizeBottomLeft, CSResizeBottomRight,
- CSMove2D, CSMove1DH, CSMove1DV, CSMoveRotate,
- CSSpotWB, CSAddColPicker, CSCropSelect, CSStraighten, CSPlus, CSWait, CSEmpty
+ CSAddColPicker,
+ CSArrow,
+ CSCropSelect,
+ CSCrosshair,
+ CSEmpty,
+ CSHandClosed,
+ CSHandOpen,
+ CSMove,
+ CSMove1DH,
+ CSMove1DV,
+ CSMove2D,
+ CSMoveLeft,
+ CSMoveRight,
+ CSMoveRotate,
+ CSPlus,
+ CSResizeBottomLeft,
+ CSResizeBottomRight,
+ CSResizeDiagonal,
+ CSResizeHeight,
+ CSResizeTopLeft,
+ CSResizeTopRight,
+ CSResizeWidth,
+ CSSpotWB,
+ CSStraighten,
+ CSUndefined,
+ CSWait
};
class CursorManager
{
private:
- Glib::RefPtr cResizeWidth;
- Glib::RefPtr cResizeHeight;
- Glib::RefPtr cResizeDiag;
- Glib::RefPtr cResizeTopLeft;
- Glib::RefPtr cResizeTopRight;
- Glib::RefPtr cResizeBottomLeft;
- Glib::RefPtr cResizeBottomRight;
- Glib::RefPtr cCropMove;
- Glib::RefPtr cCropMoving;
- Glib::RefPtr cLeftTanMove;
- Glib::RefPtr cRightTanMove;
- Glib::RefPtr cNormal;
- Glib::RefPtr cCropSelection;
Glib::RefPtr cAdd;
- Glib::RefPtr cWait;
- Glib::RefPtr cHand;
- Glib::RefPtr cClosedHand;
- Glib::RefPtr cWB;
Glib::RefPtr cAddPicker;
- Glib::RefPtr cHidden;
- Glib::RefPtr cMove2D;
- Glib::RefPtr cMove1DH;
- Glib::RefPtr cMove1DV;
- Glib::RefPtr cMoveRotate;
+ Glib::RefPtr cCropDraw;
+ Glib::RefPtr cCrosshair;
+ Glib::RefPtr cHandClosed;
+ Glib::RefPtr cHandOpen;
+ Glib::RefPtr cEmpty;
+ Glib::RefPtr cMoveBL;
+ Glib::RefPtr cMoveBR;
+ Glib::RefPtr cMoveL;
+ Glib::RefPtr cMoveR;
+ Glib::RefPtr cMoveTL;
+ Glib::RefPtr cMoveTR;
+ Glib::RefPtr cMoveX;
+ Glib::RefPtr cMoveY;
+ Glib::RefPtr cMoveXY;
+ Glib::RefPtr cRotate;
+ Glib::RefPtr cWB;
+ Glib::RefPtr cWait;
Glib::RefPtr display;
Glib::RefPtr window;
diff --git a/rtgui/curveeditor.cc b/rtgui/curveeditor.cc
index 8b319ecbe..a65f8b451 100644
--- a/rtgui/curveeditor.cc
+++ b/rtgui/curveeditor.cc
@@ -443,5 +443,5 @@ CursorShape CurveEditor::getCursor(const int objectID)
return CSResizeHeight;
}
- return CSOpenHand;
+ return CSHandOpen;
}
diff --git a/rtgui/diagonalcurveeditorsubgroup.cc b/rtgui/diagonalcurveeditorsubgroup.cc
index e7599b502..6455f6cb9 100644
--- a/rtgui/diagonalcurveeditorsubgroup.cc
+++ b/rtgui/diagonalcurveeditorsubgroup.cc
@@ -69,7 +69,7 @@ DiagonalCurveEditorSubGroup::DiagonalCurveEditorSubGroup (CurveEditorGroup* prt,
editPointCustom = Gtk::manage (new Gtk::ToggleButton ());
initButton(*editPointCustom, Glib::ustring("edit-point.png"), Gtk::ALIGN_START, false, "CURVEEDITOR_EDITPOINT_HINT");
editCustom = Gtk::manage (new Gtk::ToggleButton());
- initButton(*editCustom, Glib::ustring("crosshair-adjust.png"), Gtk::ALIGN_START, false, "EDIT_PIPETTE_TOOLTIP");
+ initButton(*editCustom, Glib::ustring("crosshair-node-curve.png"), Gtk::ALIGN_START, false, "EDIT_PIPETTE_TOOLTIP");
editCustom->hide();
copyCustom = Gtk::manage (new Gtk::Button ());
initButton(*copyCustom, Glib::ustring("copy.png"), Gtk::ALIGN_END, true);
@@ -146,7 +146,7 @@ DiagonalCurveEditorSubGroup::DiagonalCurveEditorSubGroup (CurveEditorGroup* prt,
editPointNURBS = Gtk::manage (new Gtk::ToggleButton ());
initButton(*editPointNURBS, Glib::ustring("edit-point.png"), Gtk::ALIGN_START, false, "CURVEEDITOR_EDITPOINT_HINT");
editNURBS = Gtk::manage (new Gtk::ToggleButton());
- initButton(*editNURBS, Glib::ustring("crosshair-adjust.png"), Gtk::ALIGN_START, false, "EDIT_PIPETTE_TOOLTIP");
+ initButton(*editNURBS, Glib::ustring("crosshair-node-curve.png"), Gtk::ALIGN_START, false, "EDIT_PIPETTE_TOOLTIP");
editNURBS->hide();
copyNURBS = Gtk::manage (new Gtk::Button ());
initButton(*copyNURBS, Glib::ustring("copy.png"), Gtk::ALIGN_END, true);
@@ -224,7 +224,7 @@ DiagonalCurveEditorSubGroup::DiagonalCurveEditorSubGroup (CurveEditorGroup* prt,
shcSelector->set_name("CurveSHCSelector"); // To handle the 4px gap between the SHCSelector and the curve through CSS
editParam = Gtk::manage (new Gtk::ToggleButton());
- initButton(*editParam, Glib::ustring("crosshair-adjust.png"), Gtk::ALIGN_START, false, "EDIT_PIPETTE_TOOLTIP");
+ initButton(*editParam, Glib::ustring("crosshair-node-curve.png"), Gtk::ALIGN_START, false, "EDIT_PIPETTE_TOOLTIP");
editParam->hide();
copyParam = Gtk::manage (new Gtk::Button ());
initButton(*copyParam, Glib::ustring("copy.png"), Gtk::ALIGN_END, true);
diff --git a/rtgui/edit.cc b/rtgui/edit.cc
index 9ee0d63ba..e68fec15c 100644
--- a/rtgui/edit.cc
+++ b/rtgui/edit.cc
@@ -1140,7 +1140,7 @@ CursorShape EditDataProvider::getCursor(int objectID)
currSubscriber->getCursor(objectID);
}
- return CSOpenHand;
+ return CSHandOpen;
}
EditSubscriber* EditDataProvider::getCurrSubscriber()
diff --git a/rtgui/edit.h b/rtgui/edit.h
index c6878c54a..611d95e1c 100644
--- a/rtgui/edit.h
+++ b/rtgui/edit.h
@@ -717,7 +717,7 @@ inline EditDataProvider* EditSubscriber::getEditProvider () {
}
inline CursorShape EditSubscriber::getCursor (const int objectID) {
- return CSOpenHand;
+ return CSHandOpen;
}
inline bool EditSubscriber::mouseOver (const int modifierKey) {
diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc
index 3b717abe7..3f0909d88 100644
--- a/rtgui/editorpanel.cc
+++ b/rtgui/editorpanel.cc
@@ -1776,7 +1776,7 @@ bool EditorPanel::idle_saveImage (ProgressConnector *pc,
img->setSaveProgressListener (parent->getProgressListener());
if (sf.format == "tif")
- ld->startFunc (sigc::bind (sigc::mem_fun (img, &rtengine::IImagefloat::saveAsTIFF), fname, sf.tiffBits, sf.tiffUncompressed),
+ ld->startFunc (sigc::bind (sigc::mem_fun (img, &rtengine::IImagefloat::saveAsTIFF), fname, sf.tiffBits, sf.tiffFloat, sf.tiffUncompressed),
sigc::bind (sigc::mem_fun (*this, &EditorPanel::idle_imageSaved), ld, img, fname, sf, pparams));
else if (sf.format == "png")
ld->startFunc (sigc::bind (sigc::mem_fun (img, &rtengine::IImagefloat::saveAsPNG), fname, sf.pngBits),
@@ -1993,9 +1993,9 @@ bool EditorPanel::saveImmediately (const Glib::ustring &filename, const SaveForm
int err = 0;
if (gimpPlugin) {
- err = img->saveAsTIFF (filename, 32, true);
+ err = img->saveAsTIFF (filename, 32, true, true);
} else if (sf.format == "tif") {
- err = img->saveAsTIFF (filename, sf.tiffBits, sf.tiffUncompressed);
+ err = img->saveAsTIFF (filename, sf.tiffBits, sf.tiffFloat, sf.tiffUncompressed);
} else if (sf.format == "png") {
err = img->saveAsPNG (filename, sf.pngBits);
} else if (sf.format == "jpg") {
@@ -2051,6 +2051,7 @@ bool EditorPanel::idle_sendToGimp ( ProgressConnector *p
SaveFormat sf;
sf.format = "tif";
sf.tiffBits = 16;
+ sf.tiffFloat = false;
sf.tiffUncompressed = true;
sf.saveParams = true;
@@ -2071,7 +2072,7 @@ bool EditorPanel::idle_sendToGimp ( ProgressConnector *p
ProgressConnector *ld = new ProgressConnector();
img->setSaveProgressListener (parent->getProgressListener());
- ld->startFunc (sigc::bind (sigc::mem_fun (img, &rtengine::IImagefloat::saveAsTIFF), fileName, sf.tiffBits, sf.tiffUncompressed),
+ ld->startFunc (sigc::bind (sigc::mem_fun (img, &rtengine::IImagefloat::saveAsTIFF), fileName, sf.tiffBits, sf.tiffFloat, sf.tiffUncompressed),
sigc::bind (sigc::mem_fun (*this, &EditorPanel::idle_sentToGimp), ld, img, fileName));
} else {
Glib::ustring msg_ = Glib::ustring (" Error during image processing\n");
diff --git a/rtgui/flatcurveeditorsubgroup.cc b/rtgui/flatcurveeditorsubgroup.cc
index 055a8a92f..2cc96a184 100644
--- a/rtgui/flatcurveeditorsubgroup.cc
+++ b/rtgui/flatcurveeditorsubgroup.cc
@@ -63,7 +63,7 @@ FlatCurveEditorSubGroup::FlatCurveEditorSubGroup (CurveEditorGroup* prt, Glib::u
}
editCPoints = Gtk::manage (new Gtk::ToggleButton());
- initButton(*editCPoints, Glib::ustring("crosshair-adjust.png"), Gtk::ALIGN_START, false, "EDIT_PIPETTE_TOOLTIP");
+ initButton(*editCPoints, Glib::ustring("crosshair-node-curve.png"), Gtk::ALIGN_START, false, "EDIT_PIPETTE_TOOLTIP");
editPointCPoints = Gtk::manage (new Gtk::ToggleButton ());
initButton(*editPointCPoints, Glib::ustring("edit-point.png"), Gtk::ALIGN_START, false, "CURVEEDITOR_EDITPOINT_HINT");
copyCPoints = Gtk::manage (new Gtk::Button ());
diff --git a/rtgui/gradient.cc b/rtgui/gradient.cc
index 88e67adb3..40c9f01ab 100644
--- a/rtgui/gradient.cc
+++ b/rtgui/gradient.cc
@@ -346,7 +346,7 @@ CursorShape Gradient::getCursor(const int objectID)
return CSMove2D;
default:
- return CSOpenHand;
+ return CSHandOpen;
}
}
diff --git a/rtgui/main-cli.cc b/rtgui/main-cli.cc
index 6643b0913..347161cd5 100644
--- a/rtgui/main-cli.cc
+++ b/rtgui/main-cli.cc
@@ -211,7 +211,7 @@ int main (int argc, char **argv)
int ret = 0;
// printing RT's version in all case, particularly useful for the 'verbose' mode, but also for the batch processing
- std::cout << "RawTherapee, version " << RTVERSION << ", command line" << std::endl;
+ std::cout << "RawTherapee, version " << RTVERSION << ", command line." << std::endl;
if (argc > 1) {
ret = processLineParams (argc, argv);
@@ -267,6 +267,7 @@ int processLineParams ( int argc, char **argv )
int compression = 92;
int subsampling = 3;
int bits = -1;
+ bool isFloat = false;
std::string outputType = "";
unsigned errors = 0;
@@ -314,7 +315,7 @@ int processLineParams ( int argc, char **argv )
#endif
if (fname.at (0) == '-') {
- std::cerr << "Error: filename missing next to the -p switch" << std::endl;
+ std::cerr << "Error: filename missing next to the -p switch." << std::endl;
deleteProcParams (processingParams);
return -3;
}
@@ -324,7 +325,7 @@ int processLineParams ( int argc, char **argv )
if (! (currentParams->load ( fname ))) {
processingParams.push_back (currentParams);
} else {
- std::cerr << "Error: \"" << fname << "\" not found" << std::endl;
+ std::cerr << "Error: \"" << fname << "\" not found." << std::endl;
deleteProcParams (processingParams);
return -3;
}
@@ -391,12 +392,26 @@ int processLineParams ( int argc, char **argv )
case 'b':
bits = atoi (currParam.substr (2).c_str());
- if (bits != 8 && bits != 16) {
- std::cerr << "Error: specify -b8 for 8-bit or -b16 for 16-bit output." << std::endl;
+ if (currParam.length() >= 3 && currParam.at(2) == '8') { // -b8
+ bits = 8;
+ } else if (currParam.length() >= 4 && currParam.length() <= 5 && currParam.at(2) == '1' && currParam.at(3) == '6') { // -b16, -b16f
+ bits = 16;
+ if (currParam.length() == 5 && currParam.at(4) == 'f') {
+ isFloat = true;
+ }
+ } else if (currParam.length() >= 4 && currParam.length() <= 5 && currParam.at(2) == '3' && currParam.at(3) == '2') { // -b32 == -b32f
+ bits = 32;
+ isFloat = true;
+ }
+
+ if (bits != 8 && bits != 16 && bits != 32) {
+ std::cerr << "Error: specify output bit depth per channel as -b8 for 8-bit integer, -b16 for 16-bit integer, -b16f for 16-bit float or -b32 for 32-bit float." << std::endl;
deleteProcParams (processingParams);
return -3;
}
+ std::cout << "Output is " << bits << "-bit " << (isFloat ? "floating-point" : "integer") << "." << std::endl;
+
break;
case 't':
@@ -422,7 +437,7 @@ int processLineParams ( int argc, char **argv )
#endif
if (!Glib::file_test (argument, Glib::FILE_TEST_EXISTS)) {
- std::cout << "\"" << argument << "\" doesn't exist !" << std::endl;
+ std::cout << "\"" << argument << "\" doesn't exist!" << std::endl;
continue;
}
@@ -432,9 +447,9 @@ int processLineParams ( int argc, char **argv )
if (notAll || notRetained) {
if (notAll) {
- std::cout << "\"" << argument << "\" is not one of the file format to process: skipped" << std::endl;
+ std::cout << "\"" << argument << "\" is not one of the parsed extensions. Image skipped." << std::endl;
} else if (notRetained) {
- std::cout << "\"" << argument << "\" is not one of the retained file format to process: skipped" << std::endl;
+ std::cout << "\"" << argument << "\" is not one of the selected parsed extensions. Image skipped." << std::endl;
}
} else {
inputFiles.emplace_back (argument);
@@ -465,11 +480,11 @@ int processLineParams ( int argc, char **argv )
if (isDir || notAll || notRetained) {
if (isDir) {
- std::cout << "\"" << fileName << "\" is a directory: skipped" << std::endl;
+ std::cout << "\"" << fileName << "\" is a folder. Folder skipped" << std::endl;
} else if (notAll) {
- std::cout << "\"" << fileName << "\" is not one of the file format to process: skipped" << std::endl;
+ std::cout << "\"" << fileName << "\" is not one of the parsed extensions. Image skipped." << std::endl;
} else if (notRetained) {
- std::cout << "\"" << fileName << "\" is not one of the retained file format to process: skipped" << std::endl;
+ std::cout << "\"" << fileName << "\" is not one of the selected parsed extensions. Image skipped." << std::endl;
}
continue;
@@ -479,7 +494,7 @@ int processLineParams ( int argc, char **argv )
if (sideProcParams && skipIfNoSidecar) {
// look for the sidecar proc params
if (!Glib::file_test (fileName + paramFileExtension, Glib::FILE_TEST_EXISTS)) {
- std::cout << "\"" << fileName << "\" has no side-car file: image skipped" << std::endl;
+ std::cout << "\"" << fileName << "\" has no side-car file. Image skipped." << std::endl;
continue;
}
}
@@ -519,11 +534,11 @@ int processLineParams ( int argc, char **argv )
std::cout << " " << Glib::path_get_basename (argv[0]) << " -c | Convert files in batch with your own settings." << std::endl;
std::cout << std::endl;
std::cout << "Options:" << std::endl;
- std::cout << " " << Glib::path_get_basename (argv[0]) << "[-o