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 @@ + + + + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + 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 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - 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 |-O ] [-q] [-a] [-s|-S] [-p [-p ...] ] [-d] [ -j[1-100] [-js<1-3>] | [-b<8|16>] [-t[z] | [-n]] ] [-Y] [-f] -c " << std::endl; + std::cout << " " << Glib::path_get_basename (argv[0]) << "[-o |-O ] [-q] [-a] [-s|-S] [-p [-p ...] ] [-d] [ -j[1-100] -js<1-3> | -t[z] -b<8|16|16f|32> | -n -b<8|16> ] [-Y] [-f] -c " << std::endl; std::cout << std::endl; - std::cout << " -c Specify one or more input files or directory." << std::endl; - std::cout << " When specifying directories, Rawtherapee will look for images files that comply with the" << std::endl; - std::cout << " selected extensions (see also '-a')." << std::endl; + std::cout << " -c Specify one or more input files or folders." << std::endl; + std::cout << " When specifying folders, Rawtherapee will look for image file types which comply" << std::endl; + std::cout << " with the selected extensions (see also '-a')." << std::endl; std::cout << " -c must be the last option." << std::endl; std::cout << " -o | Set output file or folder." << std::endl; std::cout << " Saves output file alongside input file if -o is not specified." << std::endl; @@ -550,12 +565,15 @@ int processLineParams ( int argc, char **argv ) std::cout << " Chroma halved horizontally." << std::endl; std::cout << " 3 = Best quality: 1x1, 1x1, 1x1 (4:4:4)" << std::endl; std::cout << " No chroma subsampling." << std::endl; - std::cout << " -b<8|16> Specify bit depth per channel (default value: 16 for TIFF, 8 for PNG)." << std::endl; - std::cout << " Only applies to TIFF and PNG output, JPEG is always 8." << std::endl; + std::cout << " -b<8|16|16f|32> Specify bit depth per channel." << std::endl; + std::cout << " 8 = 8-bit integer. Applies to JPEG, PNG and TIFF. Default for JPEG and PNG." << std::endl; + std::cout << " 16 = 16-bit integer. Applies to TIFF and PNG. Default for TIFF." << std::endl; + std::cout << " 16f = 16-bit float. Applies to TIFF." << std::endl; + std::cout << " 32 = 32-bit float. Applies to TIFF." << std::endl; std::cout << " -t[z] Specify output to be TIFF." << std::endl; std::cout << " Uncompressed by default, or deflate compression with 'z'." << std::endl; std::cout << " -n Specify output to be compressed PNG." << std::endl; - std::cout << " Compression is hard-coded to PNG_FILTER_PAETH, Z_RLE" << std::endl; + std::cout << " Compression is hard-coded to PNG_FILTER_PAETH, Z_RLE." << std::endl; std::cout << " -Y Overwrite output if present." << std::endl; std::cout << " -f Use the custom fast-export processing pipeline." << std::endl; std::cout << std::endl; @@ -617,7 +635,7 @@ int processLineParams ( int argc, char **argv ) Glib::ustring profPath = options.findProfilePath (options.defProfRaw); if (options.is_defProfRawMissing() || profPath.empty() || (profPath != DEFPROFILE_DYNAMIC && rawParams->load (profPath == DEFPROFILE_INTERNAL ? DEFPROFILE_INTERNAL : Glib::build_filename (profPath, Glib::path_get_basename (options.defProfRaw) + paramFileExtension)))) { - std::cerr << "Error: default raw processing profile not found" << std::endl; + std::cerr << "Error: default raw processing profile not found." << std::endl; rawParams->deleteInstance(); delete rawParams; deleteProcParams (processingParams); @@ -628,7 +646,7 @@ int processLineParams ( int argc, char **argv ) profPath = options.findProfilePath (options.defProfImg); if (options.is_defProfImgMissing() || profPath.empty() || (profPath != DEFPROFILE_DYNAMIC && imgParams->load (profPath == DEFPROFILE_INTERNAL ? DEFPROFILE_INTERNAL : Glib::build_filename (profPath, Glib::path_get_basename (options.defProfImg) + paramFileExtension)))) { - std::cerr << "Error: default non-raw processing profile not found" << std::endl; + std::cerr << "Error: default non-raw processing profile not found." << std::endl; imgParams->deleteInstance(); delete imgParams; rawParams->deleteInstance(); @@ -709,7 +727,7 @@ int processLineParams ( int argc, char **argv ) rawParams = ProfileStore::getInstance()->loadDynamicProfile (ii->getMetaData()); } - std::cout << " Merging default raw processing profile" << std::endl; + std::cout << " Merging default raw processing profile." << std::endl; rawParams->applyTo (¤tParams); } else { if (options.defProfImg == DEFPROFILE_DYNAMIC) { @@ -718,7 +736,7 @@ int processLineParams ( int argc, char **argv ) imgParams = ProfileStore::getInstance()->loadDynamicProfile (ii->getMetaData()); } - std::cout << " Merging default non-raw processing profile" << std::endl; + std::cout << " Merging default non-raw processing profile." << std::endl; imgParams->applyTo (¤tParams); } } @@ -737,7 +755,7 @@ int processLineParams ( int argc, char **argv ) std::cerr << "Warning: sidecar file requested but not found for: " << sideProcessingParams << std::endl; } else { sideCarFound = true; - std::cout << " Merging sidecar procparams" << std::endl; + std::cout << " Merging sidecar procparams." << std::endl; } } @@ -779,7 +797,7 @@ int processLineParams ( int argc, char **argv ) if ( outputType == "jpg" ) { errorCode = resultImage->saveAsJPEG ( outputFile, compression, subsampling ); } else if ( outputType == "tif" ) { - errorCode = resultImage->saveAsTIFF ( outputFile, bits, compression == 0 ); + errorCode = resultImage->saveAsTIFF ( outputFile, bits, isFloat, compression == 0 ); } else if ( outputType == "png" ) { errorCode = resultImage->saveAsPNG ( outputFile, bits ); } else { diff --git a/rtgui/mydiagonalcurve.cc b/rtgui/mydiagonalcurve.cc index e7874dad2..0bc58f28e 100644 --- a/rtgui/mydiagonalcurve.cc +++ b/rtgui/mydiagonalcurve.cc @@ -559,7 +559,7 @@ bool MyDiagonalCurve::handleEvents (GdkEvent* event) getCursorPosition(Gdk::EventType(event->type), event->motion.is_hint != 0, int(event->button.x), int(event->button.y), Gdk::ModifierType(event->button.state)); findClosestPoint(); - new_type = CSMove; + new_type = CSMove2D; // Shown when dragging a node. if (distanceX > minDistanceX) { if (mod_type & GDK_CONTROL_MASK) { @@ -735,7 +735,7 @@ bool MyDiagonalCurve::handleEvents (GdkEvent* event) } if (distanceX <= minDistanceX) { - new_type = CSMove; + new_type = CSMove2D; // Shown on node release. lit_point = closest_point; } else { new_type = CSPlus; @@ -799,7 +799,7 @@ bool MyDiagonalCurve::handleEvents (GdkEvent* event) lit_point = -1; } else if (distanceX <= minDistanceX) { // the cursor is close to an existing point - new_type = CSMove; + new_type = CSPlus; // Shown when hovering over node snapping distance (not necessarily over node). lit_point = closest_point; } else { // the cursor is inside the graph but away from existing points diff --git a/rtgui/myflatcurve.cc b/rtgui/myflatcurve.cc index 4da683b0c..70fc0c7d7 100644 --- a/rtgui/myflatcurve.cc +++ b/rtgui/myflatcurve.cc @@ -630,7 +630,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event) switch (area) { case (FCT_Area_Insertion): - new_type = CSMove; + new_type = CSMove2D; // Shown when adding a new node in a blank area, both click and drag. /* insert a new control point */ if (num > 0) { @@ -681,7 +681,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event) break; case (FCT_Area_Point): - new_type = CSMove; + new_type = CSMove2D; // Shown when node clicked and dragged. editedHandle = FCT_EditedHandle_CPoint; ugpX = curve.x.at(lit_point); ugpY = curve.y.at(lit_point); @@ -689,7 +689,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event) case (FCT_Area_H): case (FCT_Area_V): - new_type = CSMove; + new_type = CSMove2D; // Shown when vertical line clicked, not dragged. editedHandle = FCT_EditedHandle_CPointUD; ugpX = curve.x.at(lit_point); ugpY = curve.y.at(lit_point); @@ -876,7 +876,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event) break; case (FCT_Area_Point): - new_type = CSMove; + new_type = CSMove2D; // Shown when node released. break; case (FCT_Area_H): @@ -884,7 +884,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event) break; case (FCT_Area_V): - new_type = CSMove; + new_type = CSMove2D; // Shown when line released. break; case (FCT_Area_LeftTan): @@ -1008,7 +1008,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event) //new_type = CSMove; //break; case (FCT_Area_V): - new_type = CSMove; + new_type = CSPlus; // Shown when hovering over vertical line. break; case (FCT_Area_H): diff --git a/rtgui/options.cc b/rtgui/options.cc index 9c7e0baf9..8107b43f0 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -301,6 +301,7 @@ void Options::setDefaults() saveFormat.jpegSubSamp = 2; saveFormat.pngBits = 8; saveFormat.tiffBits = 16; + saveFormat.tiffFloat = false; saveFormat.tiffUncompressed = true; saveFormat.saveParams = true; @@ -309,6 +310,7 @@ void Options::setDefaults() saveFormatBatch.jpegSubSamp = 2; saveFormatBatch.pngBits = 8; saveFormatBatch.tiffBits = 16; + saveFormatBatch.tiffFloat = false; saveFormatBatch.tiffUncompressed = true; saveFormatBatch.saveParams = true; @@ -759,6 +761,10 @@ void Options::readFromFile(Glib::ustring fname) saveFormat.tiffBits = keyFile.get_integer("Output", "TiffBps"); } + if (keyFile.has_key ("Output", "TiffFloat")) { + saveFormat.tiffFloat = keyFile.get_boolean ("Output", "TiffFloat"); + } + if (keyFile.has_key("Output", "TiffUncompressed")) { saveFormat.tiffUncompressed = keyFile.get_boolean("Output", "TiffUncompressed"); } @@ -788,6 +794,10 @@ void Options::readFromFile(Glib::ustring fname) saveFormatBatch.tiffBits = keyFile.get_integer("Output", "TiffBpsBatch"); } + if (keyFile.has_key ("Output", "TiffFloatBatch")) { + saveFormatBatch.tiffFloat = keyFile.get_boolean ("Output", "TiffFloatBatch"); + } + if (keyFile.has_key("Output", "TiffUncompressedBatch")) { saveFormatBatch.tiffUncompressed = keyFile.get_boolean("Output", "TiffUncompressedBatch"); } @@ -1977,6 +1987,7 @@ void Options::saveToFile(Glib::ustring fname) keyFile.set_integer("Output", "JpegSubSamp", saveFormat.jpegSubSamp); keyFile.set_integer("Output", "PngBps", saveFormat.pngBits); keyFile.set_integer("Output", "TiffBps", saveFormat.tiffBits); + keyFile.set_boolean("Output", "TiffFloat", saveFormat.tiffFloat); keyFile.set_boolean("Output", "TiffUncompressed", saveFormat.tiffUncompressed); keyFile.set_boolean("Output", "SaveProcParams", saveFormat.saveParams); @@ -1985,6 +1996,7 @@ void Options::saveToFile(Glib::ustring fname) keyFile.set_integer("Output", "JpegSubSampBatch", saveFormatBatch.jpegSubSamp); keyFile.set_integer("Output", "PngBpsBatch", saveFormatBatch.pngBits); keyFile.set_integer("Output", "TiffBpsBatch", saveFormatBatch.tiffBits); + keyFile.set_boolean("Output", "TiffFloatBatch", saveFormatBatch.tiffFloat); keyFile.set_boolean("Output", "TiffUncompressedBatch", saveFormatBatch.tiffUncompressed); keyFile.set_boolean("Output", "SaveProcParamsBatch", saveFormatBatch.saveParams); diff --git a/rtgui/options.h b/rtgui/options.h index 149fa2135..6c473949b 100644 --- a/rtgui/options.h +++ b/rtgui/options.h @@ -50,6 +50,7 @@ struct SaveFormat { jpegQuality (90), jpegSubSamp (2), tiffBits (8), + tiffFloat(false), tiffUncompressed (true), saveParams (true) { @@ -60,6 +61,7 @@ struct SaveFormat { int jpegQuality; int jpegSubSamp; // 1=best compression, 3=best quality int tiffBits; + bool tiffFloat; bool tiffUncompressed; bool saveParams; }; diff --git a/rtgui/previewwindow.cc b/rtgui/previewwindow.cc index 06ce3ad18..5c7cce997 100644 --- a/rtgui/previewwindow.cc +++ b/rtgui/previewwindow.cc @@ -230,8 +230,9 @@ bool PreviewWindow::on_motion_notify_event (GdkEventMotion* event) mainCropWin->remoteMove ((event->x - press_x) / zoom, (event->y - press_y) / zoom); press_x = event->x; press_y = event->y; + newType = CSHandClosed; } else if (inside) { - newType = CSClosedHand; + newType = CSHandOpen; } else { newType = CSArrow; } @@ -262,8 +263,8 @@ bool PreviewWindow::on_button_press_event (GdkEventButton* event) press_x = event->x; press_y = event->y; - if (cursor_type != CSClosedHand) { - cursor_type = CSClosedHand; + if (cursor_type != CSHandClosed) { + cursor_type = CSHandClosed; CursorManager::setWidgetCursor(get_window(), cursor_type); } } diff --git a/rtgui/saveformatpanel.cc b/rtgui/saveformatpanel.cc index a14a7359c..2a6d5cad1 100644 --- a/rtgui/saveformatpanel.cc +++ b/rtgui/saveformatpanel.cc @@ -40,6 +40,7 @@ SaveFormatPanel::SaveFormatPanel () : listener (nullptr) format->append ("JPEG (8-bit)"); format->append ("TIFF (8-bit)"); format->append ("TIFF (16-bit)"); + format->append ("TIFF (16-bit float)"); format->append ("TIFF (32-bit float)"); format->append ("PNG (8-bit)"); format->append ("PNG (16-bit)"); @@ -48,8 +49,9 @@ SaveFormatPanel::SaveFormatPanel () : listener (nullptr) fstr[1] = "tif"; fstr[2] = "tif"; fstr[3] = "tif"; - fstr[4] = "png"; + fstr[4] = "tif"; fstr[5] = "png"; + fstr[6] = "png"; hb1->attach (*flab, 0, 0, 1, 1); hb1->attach (*format, 1, 0, 1, 1); @@ -123,10 +125,12 @@ void SaveFormatPanel::init (SaveFormat &sf) if (sf.format == "jpg") { format->set_active (0); } else if (sf.format == "png" && sf.pngBits == 16) { - format->set_active (5); + format->set_active (6); } else if (sf.format == "png" && sf.pngBits == 8) { - format->set_active (4); + format->set_active (5); } else if (sf.format == "tif" && sf.tiffBits == 32) { + format->set_active (4); + } else if (sf.format == "tif" && sf.tiffBits == 16 && sf.tiffFloat) { format->set_active (3); } else if (sf.format == "tif" && sf.tiffBits == 16) { format->set_active (2); @@ -150,20 +154,22 @@ SaveFormat SaveFormatPanel::getFormat () int sel = format->get_active_row_number(); sf.format = fstr[sel]; - if (sel == 5) { + if (sel == 6) { sf.pngBits = 16; } else { sf.pngBits = 8; } - if (sel == 2) { + if (sel == 2 || sel == 3) { sf.tiffBits = 16; - } else if (sel == 3) { + } else if (sel == 4) { sf.tiffBits = 32; } else { sf.tiffBits = 8; } + sf.tiffFloat = sel == 4 || sel == 3; + sf.jpegQuality = (int) jpegQual->getValue (); sf.jpegSubSamp = jpegSubSamp->get_active_row_number() + 1; sf.tiffUncompressed = tiffUncompressed->get_active(); diff --git a/rtgui/saveformatpanel.h b/rtgui/saveformatpanel.h index 8dc493051..788593d9e 100644 --- a/rtgui/saveformatpanel.h +++ b/rtgui/saveformatpanel.h @@ -44,7 +44,7 @@ protected: Gtk::Grid* jpegOpts; Gtk::Label* jpegSubSampLabel; FormatChangeListener* listener; - Glib::ustring fstr[6]; + Glib::ustring fstr[7]; Gtk::CheckButton* savesPP; diff --git a/rtgui/sharpenmicro.cc b/rtgui/sharpenmicro.cc index 7c2b4d9fb..9beb5a340 100644 --- a/rtgui/sharpenmicro.cc +++ b/rtgui/sharpenmicro.cc @@ -44,15 +44,15 @@ SharpenMicro::SharpenMicro () : FoldableToolPanel(this, "sharpenmicro", M("TP_SH uniformity->setAdjusterListener (this); uniformity->show(); + pack_start( *contrast, Gtk::PACK_SHRINK, 0); + pack_start( *amount, Gtk::PACK_SHRINK, 0); + pack_start( *uniformity, Gtk::PACK_SHRINK, 0); + matrix = Gtk::manage (new Gtk::CheckButton (M("TP_SHARPENMICRO_MATRIX"))); matrix->set_active (true); pack_start(*matrix, Gtk::PACK_SHRINK, 0); matrix->show (); - pack_start( *contrast, Gtk::PACK_SHRINK, 0); - pack_start( *amount, Gtk::PACK_SHRINK, 0); - pack_start( *uniformity, Gtk::PACK_SHRINK, 0); - matrixconn = matrix->signal_toggled().connect( sigc::mem_fun(*this, &SharpenMicro::matrix_toggled) ); } diff --git a/rtgui/toolbar.cc b/rtgui/toolbar.cc index f82911e80..9bed78768 100644 --- a/rtgui/toolbar.cc +++ b/rtgui/toolbar.cc @@ -46,7 +46,7 @@ ToolBar::ToolBar () : showColPickers(true), listener (nullptr), pickerListener(n pack_start (*wbTool); - showcolpickersimg.reset(new RTImage("color-picker-show.png")); + showcolpickersimg.reset(new RTImage("color-picker-bars.png")); hidecolpickersimg.reset(new RTImage("color-picker-hide.png")); colPickerTool = Gtk::manage (new Gtk::ToggleButton ());