merge with dev
@ -63,4 +63,5 @@ Other contributors (profiles, ideas, mockups, testing, forum activity, translati
|
|||||||
Johan Thor
|
Johan Thor
|
||||||
Vitalis Tiknius
|
Vitalis Tiknius
|
||||||
TooWaBoo
|
TooWaBoo
|
||||||
|
Franz Trischberger
|
||||||
Colin Walker
|
Colin Walker
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
if(APPLE)
|
if(APPLE)
|
||||||
cmake_minimum_required(VERSION 3.3)
|
cmake_minimum_required(VERSION 3.3)
|
||||||
CMAKE_POLICY(SET CMP0025 NEW)
|
cmake_policy(SET CMP0025 NEW)
|
||||||
else()
|
else()
|
||||||
cmake_minimum_required(VERSION 2.8.8)
|
cmake_minimum_required(VERSION 2.8.8)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Must stay before the PROJECT() command:
|
# Must stay before the project() command:
|
||||||
if(${CMAKE_EXTRA_GENERATOR} MATCHES "Eclipse CDT4")
|
if(${CMAKE_EXTRA_GENERATOR} MATCHES "Eclipse CDT4")
|
||||||
set(CMAKE_CXX_COMPILER_ARG1 "-std=c++11" CACHE STRING "C++ version for eclipse" FORCE)
|
set(CMAKE_CXX_COMPILER_ARG1 "-std=c++11" CACHE STRING "C++ version for eclipse" FORCE)
|
||||||
# Users building with Eclipse should set CMAKE_ECLIPSE_VERSION through the
|
# Users building with Eclipse should set CMAKE_ECLIPSE_VERSION through the
|
||||||
@ -13,7 +13,7 @@ if(${CMAKE_EXTRA_GENERATOR} MATCHES "Eclipse CDT4")
|
|||||||
#set(CMAKE_ECLIPSE_VERSION "4.6.0" CACHE STRING "Eclipse version" FORCE)
|
#set(CMAKE_ECLIPSE_VERSION "4.6.0" CACHE STRING "Eclipse version" FORCE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
PROJECT(RawTherapee)
|
project(RawTherapee)
|
||||||
|
|
||||||
# The default target is Debug:
|
# The default target is Debug:
|
||||||
if(CMAKE_BUILD_TYPE STREQUAL "")
|
if(CMAKE_BUILD_TYPE STREQUAL "")
|
||||||
@ -23,8 +23,8 @@ endif()
|
|||||||
string(TOUPPER ${CMAKE_BUILD_TYPE} UPPER_CMAKE_BUILD_TYPE)
|
string(TOUPPER ${CMAKE_BUILD_TYPE} UPPER_CMAKE_BUILD_TYPE)
|
||||||
|
|
||||||
# Set required C and C++ standards and check GCC version:
|
# Set required C and C++ standards and check GCC version:
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11")
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||||
|
|
||||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.9")
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.9")
|
||||||
message(FATAL_ERROR "Building RawTherapee requires using GCC version 4.9 or higher!")
|
message(FATAL_ERROR "Building RawTherapee requires using GCC version 4.9 or higher!")
|
||||||
@ -342,41 +342,42 @@ endif()
|
|||||||
|
|
||||||
if(WITH_LTO)
|
if(WITH_LTO)
|
||||||
# Using LTO with older versions of binutils requires setting extra flags
|
# Using LTO with older versions of binutils requires setting extra flags
|
||||||
SET(BINUTILS_VERSION_MININUM "2.29")
|
set(BINUTILS_VERSION_MININUM "2.29")
|
||||||
execute_process(COMMAND ar --version OUTPUT_VARIABLE BINUTILS_VERSION_DETECTED)
|
execute_process(COMMAND ar --version OUTPUT_VARIABLE BINUTILS_VERSION_DETECTED)
|
||||||
string(REGEX REPLACE ".* ([0-9.]+)\n.*" "\\1" BINUTILS_VERSION_DETECTED "${BINUTILS_VERSION_DETECTED}")
|
string(REGEX REPLACE ".* ([0-9.]+)\n.*" "\\1" BINUTILS_VERSION_DETECTED "${BINUTILS_VERSION_DETECTED}")
|
||||||
if("${BINUTILS_VERSION_DETECTED}" VERSION_LESS "${BINUTILS_VERSION_MININUM}")
|
if("${BINUTILS_VERSION_DETECTED}" VERSION_LESS "${BINUTILS_VERSION_MININUM}")
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
SET(CMAKE_AR "/opt/local/bin/ar")
|
set(CMAKE_AR "/opt/local/bin/ar")
|
||||||
SET(CMAKE_RANLIB "/opt/local/bin/ranlib")
|
set(CMAKE_RANLIB "/opt/local/bin/ranlib")
|
||||||
else()
|
else()
|
||||||
SET(CMAKE_AR "/usr/bin/gcc-ar")
|
set(CMAKE_AR "/usr/bin/gcc-ar")
|
||||||
SET(CMAKE_RANLIB "/usr/bin/gcc-ranlib")
|
set(CMAKE_RANLIB "/usr/bin/gcc-ranlib")
|
||||||
endif()
|
endif()
|
||||||
message(STATUS "Binutils version detected as less than " ${BINUTILS_VERSION_MININUM} " - setting CMake parameters to enable LTO linking:\n CMAKE_AR=\"" ${CMAKE_AR} "\"\n CMAKE_RANLIB=\"" ${CMAKE_RANLIB} "\"")
|
message(STATUS "Binutils version detected as less than " ${BINUTILS_VERSION_MININUM} " - setting CMake parameters to enable LTO linking:\n CMAKE_AR=\"" ${CMAKE_AR} "\"\n CMAKE_RANLIB=\"" ${CMAKE_RANLIB} "\"")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -flto")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -flto")
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto")
|
||||||
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_SAN)
|
if(WITH_SAN)
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=${WITH_SAN}")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=${WITH_SAN}")
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=${WITH_SAN}")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=${WITH_SAN}")
|
||||||
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=${WITH_SAN}")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=${WITH_SAN}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_PROF)
|
if(WITH_PROF)
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg")
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pg")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pg")
|
||||||
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wuninitialized -Wno-deprecated-declarations -Wno-unused-result")
|
||||||
if(OPTION_OMP)
|
if(OPTION_OMP)
|
||||||
find_package(OpenMP)
|
find_package(OpenMP)
|
||||||
if(OPENMP_FOUND)
|
if(OPENMP_FOUND)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS} -Werror=unknown-pragmas -Wall -Wno-unused-result -Wno-deprecated-declarations")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS} -Werror=unknown-pragmas")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
BIN
rtdata/images/themed/png/dark/curve-catmullrom-small.png
Normal file
After Width: | Height: | Size: 430 B |
BIN
rtdata/images/themed/png/dark/curve-catmullrom.png
Normal file
After Width: | Height: | Size: 463 B |
BIN
rtdata/images/themed/png/dark/warning.png
Normal file
After Width: | Height: | Size: 560 B |
BIN
rtdata/images/themed/png/light/curve-catmullrom-small.png
Normal file
After Width: | Height: | Size: 437 B |
BIN
rtdata/images/themed/png/light/curve-catmullrom.png
Normal file
After Width: | Height: | Size: 490 B |
BIN
rtdata/images/themed/png/light/warning.png
Normal file
After Width: | Height: | Size: 579 B |
159
rtdata/images/themed/svg/curve-catmullrom-small.svg
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="16"
|
||||||
|
height="16"
|
||||||
|
viewBox="0 0 16 16"
|
||||||
|
version="1.1"
|
||||||
|
id="SVGRoot"
|
||||||
|
inkscape:export-filename="/tmp/template.png"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:export-ydpi="96"
|
||||||
|
inkscape:version="0.92.2 2405546, 2018-03-11"
|
||||||
|
sodipodi:docname="curve-catmullrom-small.svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#E0E1E2"
|
||||||
|
bordercolor="#666768"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="50.5"
|
||||||
|
inkscape:cx="8"
|
||||||
|
inkscape:cy="8"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1017"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:grid-bbox="true"
|
||||||
|
inkscape:pagecheckerboard="false"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-others="false"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-grids="true"
|
||||||
|
inkscape:snap-bbox-midpoints="false"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:snap-midpoints="true"
|
||||||
|
inkscape:snap-object-midpoints="true"
|
||||||
|
inkscape:snap-nodes="false"
|
||||||
|
showborder="true"
|
||||||
|
borderlayer="false"
|
||||||
|
inkscape:showpageshadow="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid1374"
|
||||||
|
originx="1"
|
||||||
|
originy="1"
|
||||||
|
empspacing="7"
|
||||||
|
dotted="false" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<defs
|
||||||
|
id="defs815" />
|
||||||
|
<metadata
|
||||||
|
id="metadata818">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
<dc:creator>
|
||||||
|
<cc:Agent>
|
||||||
|
<dc:title>Maciej Dworak</dc:title>
|
||||||
|
</cc:Agent>
|
||||||
|
</dc:creator>
|
||||||
|
<dc:rights>
|
||||||
|
<cc:Agent>
|
||||||
|
<dc:title />
|
||||||
|
</cc:Agent>
|
||||||
|
</dc:rights>
|
||||||
|
<dc:description>RawTherapee icon.</dc:description>
|
||||||
|
<cc:license
|
||||||
|
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
||||||
|
</cc:Work>
|
||||||
|
<cc:License
|
||||||
|
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||||
|
</cc:License>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
id="layer1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
transform="translate(0,-8)">
|
||||||
|
<circle
|
||||||
|
r="2.1000001"
|
||||||
|
cy="-7.5"
|
||||||
|
cx="10.5"
|
||||||
|
id="circle3732"
|
||||||
|
style="opacity:0.7;fill:#2a7fff;fill-opacity:1;fill-rule:nonzero;stroke:#2a7fff;stroke-width:0.80000007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1;paint-order:normal" />
|
||||||
|
<circle
|
||||||
|
style="opacity:0.7;fill:#2a7fff;fill-opacity:1;fill-rule:nonzero;stroke:#2a7fff;stroke-width:0.80000007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="circle3734"
|
||||||
|
cx="6.5"
|
||||||
|
cy="0.5"
|
||||||
|
r="2.1000001" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="caac"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3736"
|
||||||
|
d="M 2,2 C 2,2 5.336352,1.536652 6.539604,0.490099 8.782506,-1.46071 8.57285,-5.236736 10.5,-7.5 11.429492,-8.591604 14,-10 14,-10"
|
||||||
|
style="opacity:0.9;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a7fff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
|
||||||
|
<circle
|
||||||
|
r="2.6000001"
|
||||||
|
cy="-8"
|
||||||
|
cx="30"
|
||||||
|
id="circle4393"
|
||||||
|
style="opacity:0.7;fill:#2a7fff;fill-opacity:1;fill-rule:nonzero;stroke:#2a7fff;stroke-width:0.80000007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1;paint-order:normal" />
|
||||||
|
<circle
|
||||||
|
style="opacity:0.7;fill:#2a7fff;fill-opacity:1;fill-rule:nonzero;stroke:#2a7fff;stroke-width:0.80000007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="circle4395"
|
||||||
|
cx="26"
|
||||||
|
cy="0"
|
||||||
|
r="2.6000001" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="caac"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4397"
|
||||||
|
d="m 22,2 c 0,0 2.945907,-0.945907 4,-2 2.108185,-2.108185 1.891815,-5.891815 4,-8 1.054093,-1.054093 4,-2 4,-2"
|
||||||
|
style="opacity:0.9;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a7fff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
|
||||||
|
<path
|
||||||
|
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:#2a7fff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 13.957617,9.0010308 a 0.99703958,0.99930081 0 0 0 -0.445902,0.128803 c 0,0 -0.669824,0.3673832 -1.458413,0.8762522 -0.134886,0.08704 -0.27712,0.195722 -0.416691,0.288832 -0.342359,-0.177992 -0.724456,-0.288832 -1.135186,-0.288832 -1.3717587,0 -2.4923491,1.123128 -2.4923491,2.498002 0,0.549878 0.1839155,1.055935 0.4867858,1.469528 -0.3263981,0.787192 -0.5622541,1.587644 -0.8002735,2.336023 -0.202987,0.638199 -0.4127132,1.221238 -0.6522978,1.750553 -0.1713441,-0.03761 -0.3473737,-0.0605 -0.5296243,-0.0605 -1.3717594,0 -2.4923497,1.123128 -2.4923497,2.498002 0,0.01 0.00179,0.0193 0.00189,0.02928 -0.1454635,0.04365 -0.2824131,0.102887 -0.424477,0.138561 -0.9240894,0.232048 -1.7076443,0.341524 -1.7076443,0.341524 a 0.99703958,0.99930081 0 1 0 0.2726033,1.978885 c 0,0 0.8810157,-0.121637 1.9198869,-0.382506 0.2647274,-0.06648 0.5384671,-0.139215 0.8158557,-0.220527 0.4365799,0.376198 0.996262,0.612788 1.6142351,0.612788 1.3717594,0 2.4923497,-1.123127 2.4923497,-2.498002 0,-0.438945 -0.1230822,-0.846798 -0.3232278,-1.206066 0.3946885,-0.776236 0.6653676,-1.595807 0.9132168,-2.375054 0.2181704,-0.685981 0.4272682,-1.338908 0.6620272,-1.939855 0.08137,0.0081 0.159969,0.02537 0.243393,0.02537 1.37176,0 2.49235,-1.123128 2.49235,-2.498002 0,-0.226332 -0.0405,-0.44107 -0.09736,-0.649871 0.08068,-0.05425 0.158822,-0.11703 0.237551,-0.167834 0.724416,-0.467449 1.33575,-0.804045 1.33575,-0.804045 A 0.99703958,0.99930081 0 0 0 13.957617,9.0010308 Z"
|
||||||
|
id="circle4399"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
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:#2a7fff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 33.95898,8.996094 a 1.0001,1.0001 0 0 0 -0.26562,0.05273 c 0,0 -0.77575,0.247246 -1.68945,0.634765 -0.026,0.01104 -0.0539,0.02398 -0.0801,0.03516 C 31.40115,9.277093 30.735,9 30,9 c -1.65212,0 -3,1.347884 -3,3 0,0.717059 0.26501,1.367657 0.6875,1.884766 -0.24334,0.608424 -0.45019,1.221586 -0.63867,1.808593 -0.15423,0.480329 -0.31093,0.93057 -0.47461,1.363282 C 26.38812,17.020277 26.19646,17 26,17 c -1.65212,0 -3,1.347884 -3,3 0,0.183819 0.0228,0.362261 0.0547,0.537109 -0.74094,0.305136 -1.36133,0.511719 -1.36133,0.511719 a 1.0001,1.0001 0 1 0 0.61328,1.902344 c 0,0 0.77575,-0.247247 1.68945,-0.634766 0.026,-0.01103 0.0539,-0.02398 0.0801,-0.03516 C 24.59885,22.722907 25.265,23 26,23 c 1.65212,0 3,-1.347884 3,-3 0,-0.717059 -0.26501,-1.367657 -0.6875,-1.884766 0.24334,-0.608424 0.45019,-1.221586 0.63867,-1.808593 0.15423,-0.480329 0.31093,-0.93057 0.47461,-1.363282 C 29.61188,14.979723 29.80354,15 30,15 c 1.65212,0 3,-1.347884 3,-3 0,-0.183819 -0.0228,-0.362261 -0.0547,-0.537109 0.74094,-0.305136 1.36133,-0.511719 1.36133,-0.511719 a 1.0001,1.0001 0 0 0 -0.24805,-1.955078 1.0001,1.0001 0 0 0 -0.0996,0 z"
|
||||||
|
id="circle4405"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 11 KiB |
131
rtdata/images/themed/svg/curve-catmullrom.svg
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="24px"
|
||||||
|
height="24px"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
version="1.1"
|
||||||
|
id="SVGRoot"
|
||||||
|
inkscape:export-filename="/tmp/template.png"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:export-ydpi="96"
|
||||||
|
inkscape:version="0.92.2 2405546, 2018-03-11"
|
||||||
|
sodipodi:docname="curve-catmullrom.svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#E0E1E2"
|
||||||
|
bordercolor="#666768"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="33.666667"
|
||||||
|
inkscape:cx="12"
|
||||||
|
inkscape:cy="12"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1017"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:grid-bbox="true"
|
||||||
|
inkscape:pagecheckerboard="false"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-others="true"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-grids="true"
|
||||||
|
inkscape:snap-bbox-midpoints="true"
|
||||||
|
inkscape:snap-intersection-paths="false"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
inkscape:snap-smooth-nodes="false"
|
||||||
|
inkscape:snap-midpoints="false"
|
||||||
|
inkscape:snap-object-midpoints="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid1374"
|
||||||
|
originx="1"
|
||||||
|
originy="1"
|
||||||
|
empspacing="11"
|
||||||
|
dotted="false" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<defs
|
||||||
|
id="defs815" />
|
||||||
|
<metadata
|
||||||
|
id="metadata818">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
<dc:creator>
|
||||||
|
<cc:Agent>
|
||||||
|
<dc:title>Maciej Dworak</dc:title>
|
||||||
|
</cc:Agent>
|
||||||
|
</dc:creator>
|
||||||
|
<dc:rights>
|
||||||
|
<cc:Agent>
|
||||||
|
<dc:title />
|
||||||
|
</cc:Agent>
|
||||||
|
</dc:rights>
|
||||||
|
<dc:description>RawTherapee icon.</dc:description>
|
||||||
|
<cc:license
|
||||||
|
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
||||||
|
</cc:Work>
|
||||||
|
<cc:License
|
||||||
|
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||||
|
</cc:License>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
id="layer1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
inkscape:label="Layer 1">
|
||||||
|
<path
|
||||||
|
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:#2a7fff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 21.961385,1.0008339 a 0.99786946,0.99965853 0 0 0 -0.446268,0.1249448 c 0,0 -1.320539,0.7149725 -2.872486,1.7101822 -0.726935,0.4661586 -1.500431,0.9886892 -2.23134,1.5422877 -0.422327,-0.229707 -0.896874,-0.3728822 -1.407011,-0.3728822 -1.641341,0 -2.993309,1.3543922 -2.993309,2.9986757 0,0.7218688 0.270322,1.3795002 0.701557,1.8995517 -0.64861,1.4824552 -1.035206,3.0616262 -1.445987,4.5448682 -0.377799,1.364155 -0.775111,2.628847 -1.331009,3.713203 -0.2915113,-0.09608 -0.5961135,-0.162037 -0.9178702,-0.162037 -1.6413407,0 -2.9933091,1.354392 -2.9933091,2.998676 0,0.08674 0.017964,0.168817 0.025334,0.253794 -0.4669772,0.137993 -0.9444077,0.264577 -1.4089603,0.357264 -1.453702,0.290044 -2.689301,0.392405 -2.689301,0.392405 a 0.99786946,0.99965853 0 1 0 0.1636965,1.991308 c 0,0 1.336573,-0.108641 2.9153582,-0.423641 0.6045648,-0.120624 1.2415233,-0.274321 1.8708182,-0.458782 0.543473,0.546411 1.293738,0.886327 2.1163631,0.886327 1.6413416,0 2.9933096,-1.354391 2.9933096,-2.998675 0,-0.580391 -0.175599,-1.119993 -0.465756,-1.581333 0.775824,-1.387713 1.230097,-2.936322 1.644762,-4.433589 0.394368,-1.423985 0.765718,-2.808151 1.268648,-4.0353276 0.177472,0.033413 0.359151,0.054663 0.545655,0.054663 1.641341,0 2.993309,-1.3543916 2.993309,-2.998675 0,-0.3989768 -0.08399,-0.7787742 -0.228006,-1.1284079 C 18.400516,5.4015772 19.076546,4.930379 19.718352,4.518811 21.202494,3.5670816 22.462218,2.8867193 22.462218,2.8867193 A 0.99786946,0.99965853 0 0 0 21.961385,1.0008339 Z"
|
||||||
|
id="circle817"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<circle
|
||||||
|
style="opacity:0.7;fill:#2a7fff;fill-opacity:1;stroke:#2a7fff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="circle5141"
|
||||||
|
cx="-25"
|
||||||
|
cy="7"
|
||||||
|
r="2" />
|
||||||
|
<circle
|
||||||
|
r="2"
|
||||||
|
cy="20"
|
||||||
|
cx="-31"
|
||||||
|
id="circle5143"
|
||||||
|
style="opacity:0.7;fill:#2a7fff;fill-opacity:1;stroke:#2a7fff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="caac"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path5145"
|
||||||
|
d="m -38,22 c 0,0 5.157064,-0.421242 7,-2 3.62451,-3.104949 2.956624,-9.323638 6,-13 1.828498,-2.2088042 7,-5 7,-5"
|
||||||
|
style="opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a7fff;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1;paint-order:normal" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 7.1 KiB |
134
rtdata/images/themed/svg/warning.svg
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="24px"
|
||||||
|
height="24px"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
version="1.1"
|
||||||
|
id="SVGRoot"
|
||||||
|
inkscape:export-filename="/tmp/template.png"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:export-ydpi="96"
|
||||||
|
inkscape:version="0.92.2 2405546, 2018-03-11"
|
||||||
|
sodipodi:docname="warning.svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#E0E1E2"
|
||||||
|
bordercolor="#666768"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="33.833333"
|
||||||
|
inkscape:cx="7.684729"
|
||||||
|
inkscape:cy="12.059113"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1017"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:grid-bbox="true"
|
||||||
|
inkscape:pagecheckerboard="false"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-others="false"
|
||||||
|
inkscape:object-nodes="false"
|
||||||
|
inkscape:snap-grids="true"
|
||||||
|
inkscape:snap-bbox-midpoints="false"
|
||||||
|
inkscape:bbox-paths="false"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid1374"
|
||||||
|
originx="1"
|
||||||
|
originy="1"
|
||||||
|
empspacing="11"
|
||||||
|
dotted="false" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<defs
|
||||||
|
id="defs815" />
|
||||||
|
<metadata
|
||||||
|
id="metadata818">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
<dc:creator>
|
||||||
|
<cc:Agent>
|
||||||
|
<dc:title>Maciej Dworak</dc:title>
|
||||||
|
</cc:Agent>
|
||||||
|
</dc:creator>
|
||||||
|
<dc:rights>
|
||||||
|
<cc:Agent>
|
||||||
|
<dc:title />
|
||||||
|
</cc:Agent>
|
||||||
|
</dc:rights>
|
||||||
|
<dc:description>RawTherapee icon.</dc:description>
|
||||||
|
<cc:license
|
||||||
|
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
||||||
|
</cc:Work>
|
||||||
|
<cc:License
|
||||||
|
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||||
|
</cc:License>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
id="layer1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
inkscape:label="Layer 1">
|
||||||
|
<path
|
||||||
|
sodipodi:type="star"
|
||||||
|
style="opacity:0.7;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a7fff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:2.00314951;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="path851"
|
||||||
|
sodipodi:sides="3"
|
||||||
|
sodipodi:cx="12"
|
||||||
|
sodipodi:cy="15"
|
||||||
|
sodipodi:r1="12"
|
||||||
|
sodipodi:r2="6"
|
||||||
|
sodipodi:arg1="-1.5707963"
|
||||||
|
sodipodi:arg2="-0.52359878"
|
||||||
|
inkscape:flatsided="true"
|
||||||
|
inkscape:rounded="0"
|
||||||
|
inkscape:randomized="0"
|
||||||
|
d="M 12,3 22.392305,21 1.6076952,21 Z"
|
||||||
|
inkscape:transform-center-y="-3" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="csssc"
|
||||||
|
id="path4562-5"
|
||||||
|
d="m 13.207467,10.82925 c 0,2.185129 -0.540947,5.087874 -1.207468,5.087874 -0.666523,0 -1.207467,-2.902745 -1.207467,-5.087874 0,-2.1851257 0.540944,-2.8292503 1.207467,-2.8292503 0.666521,0 1.207468,0.6441246 1.207468,2.8292503 z"
|
||||||
|
style="opacity:0.9;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999988" />
|
||||||
|
<ellipse
|
||||||
|
ry="1.2399021"
|
||||||
|
rx="1.2388306"
|
||||||
|
cy="17.753935"
|
||||||
|
cx="12"
|
||||||
|
id="path4565-0"
|
||||||
|
style="opacity:0.9;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.18797946" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.5 KiB |
@ -1001,6 +1001,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: <b>-</b>
|
|||||||
!GENERAL_ASIMAGE;As Image
|
!GENERAL_ASIMAGE;As Image
|
||||||
!GENERAL_AUTO;Automatic
|
!GENERAL_AUTO;Automatic
|
||||||
!GENERAL_CLOSE;Close
|
!GENERAL_CLOSE;Close
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_OPEN;Open
|
!GENERAL_OPEN;Open
|
||||||
!GENERAL_RESET;Reset
|
!GENERAL_RESET;Reset
|
||||||
!GENERAL_SAVE_AS;Save as...
|
!GENERAL_SAVE_AS;Save as...
|
||||||
|
@ -1016,6 +1016,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: <b>-</b>
|
|||||||
!FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;Show unsaved images.\nShortcut: <b>Alt-6</b>
|
!FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;Show unsaved images.\nShortcut: <b>Alt-6</b>
|
||||||
!FILEBROWSER_SHOWUNCOLORHINT;Show images without a color label.\nShortcut: <b>Alt-0</b>
|
!FILEBROWSER_SHOWUNCOLORHINT;Show images without a color label.\nShortcut: <b>Alt-0</b>
|
||||||
!FILEBROWSER_UNRANK_TOOLTIP;Unrank.\nShortcut: <b>Shift-0</b>
|
!FILEBROWSER_UNRANK_TOOLTIP;Unrank.\nShortcut: <b>Shift-0</b>
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_RESET;Reset
|
!GENERAL_RESET;Reset
|
||||||
!GENERAL_SAVE_AS;Save as...
|
!GENERAL_SAVE_AS;Save as...
|
||||||
!GENERAL_SLIDER;Slider
|
!GENERAL_SLIDER;Slider
|
||||||
|
@ -574,6 +574,7 @@ TP_WBALANCE_TEMPERATURE;色溫
|
|||||||
!GENERAL_ASIMAGE;As Image
|
!GENERAL_ASIMAGE;As Image
|
||||||
!GENERAL_AUTO;Automatic
|
!GENERAL_AUTO;Automatic
|
||||||
!GENERAL_CLOSE;Close
|
!GENERAL_CLOSE;Close
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_FILE;File
|
!GENERAL_FILE;File
|
||||||
!GENERAL_NONE;None
|
!GENERAL_NONE;None
|
||||||
!GENERAL_OPEN;Open
|
!GENERAL_OPEN;Open
|
||||||
|
@ -2168,6 +2168,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: <b>-</b>
|
|||||||
!DYNPROFILEEDITOR_IMGTYPE_STD;Standard
|
!DYNPROFILEEDITOR_IMGTYPE_STD;Standard
|
||||||
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
||||||
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_RESET;Reset
|
!GENERAL_RESET;Reset
|
||||||
!GENERAL_SAVE_AS;Save as...
|
!GENERAL_SAVE_AS;Save as...
|
||||||
!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram.
|
!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram.
|
||||||
|
@ -568,6 +568,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
|
|||||||
!GENERAL_AUTO;Automatic
|
!GENERAL_AUTO;Automatic
|
||||||
!GENERAL_BEFORE;Before
|
!GENERAL_BEFORE;Before
|
||||||
!GENERAL_CLOSE;Close
|
!GENERAL_CLOSE;Close
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_FILE;File
|
!GENERAL_FILE;File
|
||||||
!GENERAL_NONE;None
|
!GENERAL_NONE;None
|
||||||
!GENERAL_OPEN;Open
|
!GENERAL_OPEN;Open
|
||||||
|
@ -73,6 +73,7 @@
|
|||||||
#72 05.10.2018 Korrekturen (TooWaBoo) RT 5.5
|
#72 05.10.2018 Korrekturen (TooWaBoo) RT 5.5
|
||||||
#73 21.11.2018 Erweiterung (TooWaBoo) RT 5.5
|
#73 21.11.2018 Erweiterung (TooWaBoo) RT 5.5
|
||||||
#74 24.11.2018 Erweiterung (TooWaBoo) RT 5.5
|
#74 24.11.2018 Erweiterung (TooWaBoo) RT 5.5
|
||||||
|
#75 02.12.2018 Erweiterung (TooWaBoo) RT 5.5
|
||||||
|
|
||||||
ABOUT_TAB_BUILD;Version
|
ABOUT_TAB_BUILD;Version
|
||||||
ABOUT_TAB_CREDITS;Danksagungen
|
ABOUT_TAB_CREDITS;Danksagungen
|
||||||
@ -295,6 +296,7 @@ GENERAL_AUTO;Automatisch
|
|||||||
GENERAL_BEFORE;Vorher
|
GENERAL_BEFORE;Vorher
|
||||||
GENERAL_CANCEL;Abbrechen
|
GENERAL_CANCEL;Abbrechen
|
||||||
GENERAL_CLOSE;Schließen
|
GENERAL_CLOSE;Schließen
|
||||||
|
GENERAL_CURRENT;Aktuell
|
||||||
GENERAL_DISABLE;Deaktivieren
|
GENERAL_DISABLE;Deaktivieren
|
||||||
GENERAL_DISABLED;Deaktiviert
|
GENERAL_DISABLED;Deaktiviert
|
||||||
GENERAL_ENABLE;Aktivieren
|
GENERAL_ENABLE;Aktivieren
|
||||||
|
@ -339,6 +339,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
|
|||||||
!GENERAL_BEFORE;Before
|
!GENERAL_BEFORE;Before
|
||||||
!GENERAL_CANCEL;Cancel
|
!GENERAL_CANCEL;Cancel
|
||||||
!GENERAL_CLOSE;Close
|
!GENERAL_CLOSE;Close
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_DISABLE;Disable
|
!GENERAL_DISABLE;Disable
|
||||||
!GENERAL_DISABLED;Disabled
|
!GENERAL_DISABLED;Disabled
|
||||||
!GENERAL_ENABLE;Enable
|
!GENERAL_ENABLE;Enable
|
||||||
|
@ -224,6 +224,7 @@
|
|||||||
!GENERAL_BEFORE;Before
|
!GENERAL_BEFORE;Before
|
||||||
!GENERAL_CANCEL;Cancel
|
!GENERAL_CANCEL;Cancel
|
||||||
!GENERAL_CLOSE;Close
|
!GENERAL_CLOSE;Close
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_DISABLE;Disable
|
!GENERAL_DISABLE;Disable
|
||||||
!GENERAL_DISABLED;Disabled
|
!GENERAL_DISABLED;Disabled
|
||||||
!GENERAL_ENABLE;Enable
|
!GENERAL_ENABLE;Enable
|
||||||
|
@ -569,6 +569,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
|
|||||||
!GENERAL_AUTO;Automatic
|
!GENERAL_AUTO;Automatic
|
||||||
!GENERAL_BEFORE;Before
|
!GENERAL_BEFORE;Before
|
||||||
!GENERAL_CLOSE;Close
|
!GENERAL_CLOSE;Close
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_FILE;File
|
!GENERAL_FILE;File
|
||||||
!GENERAL_NONE;None
|
!GENERAL_NONE;None
|
||||||
!GENERAL_OPEN;Open
|
!GENERAL_OPEN;Open
|
||||||
|
@ -221,6 +221,7 @@ GENERAL_AUTO;Automatique
|
|||||||
GENERAL_BEFORE;Avant
|
GENERAL_BEFORE;Avant
|
||||||
GENERAL_CANCEL;Annuler
|
GENERAL_CANCEL;Annuler
|
||||||
GENERAL_CLOSE;Fermer
|
GENERAL_CLOSE;Fermer
|
||||||
|
GENERAL_CURRENT;Actuel
|
||||||
GENERAL_DISABLE;Désactiver
|
GENERAL_DISABLE;Désactiver
|
||||||
GENERAL_DISABLED;Désactivé
|
GENERAL_DISABLED;Désactivé
|
||||||
GENERAL_ENABLE;Activer
|
GENERAL_ENABLE;Activer
|
||||||
@ -509,33 +510,33 @@ HISTORY_MSG_254;CpND - Teinte chair
|
|||||||
HISTORY_MSG_255;Réd. de bruit - Filtre médian
|
HISTORY_MSG_255;Réd. de bruit - Filtre médian
|
||||||
HISTORY_MSG_256;Réd. de bruit - Médian - Type
|
HISTORY_MSG_256;Réd. de bruit - Médian - Type
|
||||||
HISTORY_MSG_257;Virage Partiel
|
HISTORY_MSG_257;Virage Partiel
|
||||||
HISTORY_MSG_258;Virage Partiel - Couleur
|
HISTORY_MSG_258;VP - Couleur
|
||||||
HISTORY_MSG_259;Virage Partiel - Opacité
|
HISTORY_MSG_259;VP - Opacité
|
||||||
HISTORY_MSG_260;Virage Partiel - Opacité 'a[b]'
|
HISTORY_MSG_260;VP - Opacité 'a[b]'
|
||||||
HISTORY_MSG_261;Virage Partiel - Méthode
|
HISTORY_MSG_261;VP - Méthode
|
||||||
HISTORY_MSG_262;Virage Partiel - Opacité 'b'
|
HISTORY_MSG_262;VP - Opacité 'b'
|
||||||
HISTORY_MSG_263;Virage Partiel - Ombres - Rouge
|
HISTORY_MSG_263;VP - Ombres - Rouge
|
||||||
HISTORY_MSG_264;Virage Partiel - Ombres - Vert
|
HISTORY_MSG_264;VP - Ombres - Vert
|
||||||
HISTORY_MSG_265;Virage Partiel - Ombres - Bleu
|
HISTORY_MSG_265;VP - Ombres - Bleu
|
||||||
HISTORY_MSG_266;Virage Partiel - Moyen - Rouge
|
HISTORY_MSG_266;VP - Moyen - Rouge
|
||||||
HISTORY_MSG_267;Virage Partiel - Moyen - Vert
|
HISTORY_MSG_267;VP - Moyen - Vert
|
||||||
HISTORY_MSG_268;Virage Partiel - Moyen - Bleu
|
HISTORY_MSG_268;VP - Moyen - Bleu
|
||||||
HISTORY_MSG_269;Virage Partiel - HL - Rouge
|
HISTORY_MSG_269;VP - HL - Rouge
|
||||||
HISTORY_MSG_270;Virage Partiel - HL - Vert
|
HISTORY_MSG_270;VP - HL - Vert
|
||||||
HISTORY_MSG_271;Virage Partiel - HL - Bleu
|
HISTORY_MSG_271;VP - HL - Bleu
|
||||||
HISTORY_MSG_272;Virage Partiel - Balance
|
HISTORY_MSG_272;VP - Balance
|
||||||
HISTORY_MSG_273;Virage Partiel - Balance Couleur O/TM/HL
|
HISTORY_MSG_273;VP - Balance Couleur O/TM/HL
|
||||||
HISTORY_MSG_274;Virage Partiel - Saturation des ombres
|
HISTORY_MSG_274;VP - Saturation des ombres
|
||||||
HISTORY_MSG_275;Virage Partiel - Saturation des HL
|
HISTORY_MSG_275;VP - Saturation des HL
|
||||||
HISTORY_MSG_276;Virage Partiel - Opacité
|
HISTORY_MSG_276;VP - Opacité
|
||||||
HISTORY_MSG_277;--inutilisé--
|
HISTORY_MSG_277;--inutilisé--
|
||||||
HISTORY_MSG_278;Virage Partiel - Préserver luminance
|
HISTORY_MSG_278;VP - Préserver luminance
|
||||||
HISTORY_MSG_279;Virage partiel - Ombres
|
HISTORY_MSG_279;VP - Ombres
|
||||||
HISTORY_MSG_280;Virage partiel - Hautes lumières
|
HISTORY_MSG_280;VP - Hautes lumières
|
||||||
HISTORY_MSG_281;Virage partiel - Protect. Saturé
|
HISTORY_MSG_281;VP - Protect. Saturé
|
||||||
HISTORY_MSG_282;Virage partiel - Seuil de protection
|
HISTORY_MSG_282;VP - Seuil de protection
|
||||||
HISTORY_MSG_283;Virage partiel - Force
|
HISTORY_MSG_283;VP - Force
|
||||||
HISTORY_MSG_284;Virage partiel - Protect. saturé auto
|
HISTORY_MSG_284;VP - Protect. saturé auto
|
||||||
HISTORY_MSG_285;Réd. de bruit - Médiane - Méthode
|
HISTORY_MSG_285;Réd. de bruit - Médiane - Méthode
|
||||||
HISTORY_MSG_286;Réd. de bruit - Médiane - Type
|
HISTORY_MSG_286;Réd. de bruit - Médiane - Type
|
||||||
HISTORY_MSG_287;Réd. de bruit - Médiane - Itérations
|
HISTORY_MSG_287;Réd. de bruit - Médiane - Itérations
|
||||||
@ -730,15 +731,20 @@ HISTORY_MSG_491;Balances des Blancs
|
|||||||
HISTORY_MSG_492;Courbes RVB
|
HISTORY_MSG_492;Courbes RVB
|
||||||
HISTORY_MSG_493;Ajustements L*a*b*
|
HISTORY_MSG_493;Ajustements L*a*b*
|
||||||
HISTORY_MSG_CLAMPOOG;Tronquer les couleurs hors gamut
|
HISTORY_MSG_CLAMPOOG;Tronquer les couleurs hors gamut
|
||||||
HISTORY_MSG_COLORTONING_LABGRID_VALUE;Virage Partiel - Correction couleur
|
HISTORY_MSG_COLORTONING_LABGRID_VALUE;VP - Correction couleur
|
||||||
HISTORY_MSG_COLORTONING_LABREGION_AB;Virage Partiel - Correction couleur
|
HISTORY_MSG_COLORTONING_LABREGION_AB;VP - Correction couleur
|
||||||
HISTORY_MSG_COLORTONING_LABREGION_CHROMATICITYMASK;Virage Partiel - Masque C
|
HISTORY_MSG_COLORTONING_LABREGION_CHANNEL;VP - Canal
|
||||||
HISTORY_MSG_COLORTONING_LABREGION_HUEMASK;Virage Partiel - Masque T
|
HISTORY_MSG_COLORTONING_LABREGION_CHROMATICITYMASK;VP - Masque C
|
||||||
HISTORY_MSG_COLORTONING_LABREGION_LIGHTNESS;Virage Partiel - Luminosité
|
HISTORY_MSG_COLORTONING_LABREGION_HUEMASK;VP - Masque T
|
||||||
HISTORY_MSG_COLORTONING_LABREGION_LIGHTNESSMASK;Virage Partiel - Masque L
|
HISTORY_MSG_COLORTONING_LABREGION_LIGHTNESS;VP - Luminosité
|
||||||
HISTORY_MSG_COLORTONING_LABREGION_LIST;Virage Partiel - Liste
|
HISTORY_MSG_COLORTONING_LABREGION_LIGHTNESSMASK;VP - Masque L
|
||||||
HISTORY_MSG_COLORTONING_LABREGION_SATURATION;Virage Partiel - Saturation
|
HISTORY_MSG_COLORTONING_LABREGION_LIST;VP - Liste
|
||||||
HISTORY_MSG_COLORTONING_LABREGION_SHOWMASK;Virage Partiel - Montrer le masque
|
HISTORY_MSG_COLORTONING_LABREGION_MASKBLUR;VP - Masque flou local
|
||||||
|
HISTORY_MSG_COLORTONING_LABREGION_OFFSET;VP - Offset local
|
||||||
|
HISTORY_MSG_COLORTONING_LABREGION_POWER;VP - Puissance locale
|
||||||
|
HISTORY_MSG_COLORTONING_LABREGION_SATURATION;VP - Saturation
|
||||||
|
HISTORY_MSG_COLORTONING_LABREGION_SHOWMASK;VP - Montrer le masque
|
||||||
|
HISTORY_MSG_COLORTONING_LABREGION_SLOPE;VP - Pente locale
|
||||||
HISTORY_MSG_DEHAZE_DEPTH;EB - Profondeur
|
HISTORY_MSG_DEHAZE_DEPTH;EB - Profondeur
|
||||||
HISTORY_MSG_DEHAZE_ENABLED;Élimination de la Brume
|
HISTORY_MSG_DEHAZE_ENABLED;Élimination de la Brume
|
||||||
HISTORY_MSG_DEHAZE_SHOW_DEPTH_MAP;EB - Montrer carte de profondeur
|
HISTORY_MSG_DEHAZE_SHOW_DEPTH_MAP;EB - Montrer carte de profondeur
|
||||||
@ -1036,9 +1042,15 @@ PARTIALPASTE_VIGNETTING;Correction du vignettage
|
|||||||
PARTIALPASTE_WAVELETGROUP;Niveaux d'ondelette
|
PARTIALPASTE_WAVELETGROUP;Niveaux d'ondelette
|
||||||
PARTIALPASTE_WHITEBALANCE;Balance des blancs
|
PARTIALPASTE_WHITEBALANCE;Balance des blancs
|
||||||
PREFERENCES_ADD;Ajoute
|
PREFERENCES_ADD;Ajoute
|
||||||
|
PREFERENCES_APPEARANCE;Apparence
|
||||||
|
PREFERENCES_APPEARANCE_COLORPICKERFONT;Police des ancres de vérification couleur
|
||||||
|
PREFERENCES_APPEARANCE_CROPMASKCOLOR;Couleur du masque de recadrage
|
||||||
|
PREFERENCES_APPEARANCE_MAINFONT;Police principale
|
||||||
PREFERENCES_APPEARANCE_NAVGUIDECOLOR;Couleur du cadre dans le Navigateur
|
PREFERENCES_APPEARANCE_NAVGUIDECOLOR;Couleur du cadre dans le Navigateur
|
||||||
|
PREFERENCES_APPEARANCE_THEME;Thème
|
||||||
PREFERENCES_APPLNEXTSTARTUP;appliqué au prochain lancement
|
PREFERENCES_APPLNEXTSTARTUP;appliqué au prochain lancement
|
||||||
PREFERENCES_AUTOMONPROFILE;Utiliser automatiquement le profil de l'écran principal
|
PREFERENCES_AUTOMONPROFILE;Utiliser automatiquement le profil de l'écran principal
|
||||||
|
PREFERENCES_AUTOSAVE_TP_OPEN;Sauvegarder l'état ouvert/fermé des outils en quittant
|
||||||
PREFERENCES_BATCH_PROCESSING;Traitement par lot
|
PREFERENCES_BATCH_PROCESSING;Traitement par lot
|
||||||
PREFERENCES_BEHADDALL;Tout à 'Ajoute'
|
PREFERENCES_BEHADDALL;Tout à 'Ajoute'
|
||||||
PREFERENCES_BEHADDALLHINT;Règle tous les paramètres sur le mode <b>Ajoute</b>.\nLa modification des paramètres dans le panneau d'édition en par lot sera des <b>deltas</b> par-rapport aux valeurs existantes
|
PREFERENCES_BEHADDALLHINT;Règle tous les paramètres sur le mode <b>Ajoute</b>.\nLa modification des paramètres dans le panneau d'édition en par lot sera des <b>deltas</b> par-rapport aux valeurs existantes
|
||||||
@ -1097,6 +1109,7 @@ PREFERENCES_EDITORCMDLINE;Ligne de commande personnelle
|
|||||||
PREFERENCES_EDITORLAYOUT;Disposition de l'éditeur
|
PREFERENCES_EDITORLAYOUT;Disposition de l'éditeur
|
||||||
PREFERENCES_EXTERNALEDITOR;Éditeur externe
|
PREFERENCES_EXTERNALEDITOR;Éditeur externe
|
||||||
PREFERENCES_FBROWSEROPTS;Options du navigateur de fichiers et de vignettes
|
PREFERENCES_FBROWSEROPTS;Options du navigateur de fichiers et de vignettes
|
||||||
|
PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Barre d'outil compact dans le Navigateur de Fichiers
|
||||||
PREFERENCES_FILEFORMAT;Format du fichier
|
PREFERENCES_FILEFORMAT;Format du fichier
|
||||||
PREFERENCES_FLATFIELDFOUND;Trouvé
|
PREFERENCES_FLATFIELDFOUND;Trouvé
|
||||||
PREFERENCES_FLATFIELDSDIR;Dossier des images de Champ Uniforme
|
PREFERENCES_FLATFIELDSDIR;Dossier des images de Champ Uniforme
|
||||||
@ -1379,6 +1392,7 @@ TP_COARSETRAF_TOOLTIP_HFLIP;Symétriser / axe vertical
|
|||||||
TP_COARSETRAF_TOOLTIP_ROTLEFT;Rotation vers la gauche\nRaccourci: <b>[</b>\n\nRaccourci en mode Éditeur unique: <b>Alt-[</b>
|
TP_COARSETRAF_TOOLTIP_ROTLEFT;Rotation vers la gauche\nRaccourci: <b>[</b>\n\nRaccourci en mode Éditeur unique: <b>Alt-[</b>
|
||||||
TP_COARSETRAF_TOOLTIP_ROTRIGHT;Rotation vers la droite\nRaccourci: <b>]</b>\n\nRaccourci en mode Éditeur unique: <b>Alt-]</b>
|
TP_COARSETRAF_TOOLTIP_ROTRIGHT;Rotation vers la droite\nRaccourci: <b>]</b>\n\nRaccourci en mode Éditeur unique: <b>Alt-]</b>
|
||||||
TP_COARSETRAF_TOOLTIP_VFLIP;Symétriser / axe horizontal
|
TP_COARSETRAF_TOOLTIP_VFLIP;Symétriser / axe horizontal
|
||||||
|
TP_COLORAPP_ABSOLUTELUMINANCE;Luminance absolue
|
||||||
TP_COLORAPP_ALGO;Algorithme
|
TP_COLORAPP_ALGO;Algorithme
|
||||||
TP_COLORAPP_ALGO_ALL;Tout
|
TP_COLORAPP_ALGO_ALL;Tout
|
||||||
TP_COLORAPP_ALGO_JC;Luminosité + Chroma (JC)
|
TP_COLORAPP_ALGO_JC;Luminosité + Chroma (JC)
|
||||||
@ -1389,6 +1403,7 @@ TP_COLORAPP_BADPIXSL;Filtrer les pixels chauds/morts
|
|||||||
TP_COLORAPP_BADPIXSL_TOOLTIP;Suppression des pixels chauds/morts (colorés de manière intense).\n0=Aucun effet 1=Médian 2=Gaussien.\n\nCes artefacts sont dus aux limitations de CIECAM02. Vous pouvez également adjuster l'image afin d'éviter les ombres très sombres.
|
TP_COLORAPP_BADPIXSL_TOOLTIP;Suppression des pixels chauds/morts (colorés de manière intense).\n0=Aucun effet 1=Médian 2=Gaussien.\n\nCes artefacts sont dus aux limitations de CIECAM02. Vous pouvez également adjuster l'image afin d'éviter les ombres très sombres.
|
||||||
TP_COLORAPP_BRIGHT;Brillance (Q)
|
TP_COLORAPP_BRIGHT;Brillance (Q)
|
||||||
TP_COLORAPP_BRIGHT_TOOLTIP;Brillance dans CIECAM02 est différent de Lab et RVB, prend en compte la luminosité du blanc
|
TP_COLORAPP_BRIGHT_TOOLTIP;Brillance dans CIECAM02 est différent de Lab et RVB, prend en compte la luminosité du blanc
|
||||||
|
TP_COLORAPP_CAT02ADAPTATION_TOOLTIP;Lorsque réglé manuellement, les valeurs au-dessus de 65 sont recommandées.
|
||||||
TP_COLORAPP_CHROMA;Chroma (C)
|
TP_COLORAPP_CHROMA;Chroma (C)
|
||||||
TP_COLORAPP_CHROMA_M;Niveau de couleurs (M)
|
TP_COLORAPP_CHROMA_M;Niveau de couleurs (M)
|
||||||
TP_COLORAPP_CHROMA_M_TOOLTIP;Niveau de couleurs dans CIECAM02 est différent de Lab et RVB
|
TP_COLORAPP_CHROMA_M_TOOLTIP;Niveau de couleurs dans CIECAM02 est différent de Lab et RVB
|
||||||
@ -1419,6 +1434,7 @@ TP_COLORAPP_LABEL_SCENE;Conditions de la scène
|
|||||||
TP_COLORAPP_LABEL_VIEWING;Conditions de visionnage
|
TP_COLORAPP_LABEL_VIEWING;Conditions de visionnage
|
||||||
TP_COLORAPP_LIGHT;Luminosité (J)
|
TP_COLORAPP_LIGHT;Luminosité (J)
|
||||||
TP_COLORAPP_LIGHT_TOOLTIP;Luminosité dans CIECAM02 est différent de celui de Lab et RVB
|
TP_COLORAPP_LIGHT_TOOLTIP;Luminosité dans CIECAM02 est différent de celui de Lab et RVB
|
||||||
|
TP_COLORAPP_MEANLUMINANCE;Luminance moyenne (Yb%)
|
||||||
TP_COLORAPP_MODEL;Modèle de Point Blanc
|
TP_COLORAPP_MODEL;Modèle de Point Blanc
|
||||||
TP_COLORAPP_MODEL_TOOLTIP;Modèle de Point Blanc\n\n<b>BB [RT] + [sortie]:</b>\nLa BB de RT est utilisée pour la scène, CIECAM est réglé sur D50, le blanc du périphérique de sortie utilise la valeur réglée dans Préférences\n\n<b>BB [RT+CAT02] + [sortie]:</b>\nLes réglages de BB de RT sont utilisés par CAT02 et le blanc du périphérique de sortie utilise la valeur réglée dans Préférences
|
TP_COLORAPP_MODEL_TOOLTIP;Modèle de Point Blanc\n\n<b>BB [RT] + [sortie]:</b>\nLa BB de RT est utilisée pour la scène, CIECAM est réglé sur D50, le blanc du périphérique de sortie utilise la valeur réglée dans Préférences\n\n<b>BB [RT+CAT02] + [sortie]:</b>\nLes réglages de BB de RT sont utilisés par CAT02 et le blanc du périphérique de sortie utilise la valeur réglée dans Préférences
|
||||||
TP_COLORAPP_NEUTRAL;Résinitialiser
|
TP_COLORAPP_NEUTRAL;Résinitialiser
|
||||||
@ -1462,14 +1478,23 @@ TP_COLORTONING_LABGRID;Grille de correction L*a*b*
|
|||||||
TP_COLORTONING_LABGRID_VALUES;HL: a=%1 b=%2\nO: a=%3 b=%4
|
TP_COLORTONING_LABGRID_VALUES;HL: a=%1 b=%2\nO: a=%3 b=%4
|
||||||
TP_COLORTONING_LABREGIONS;Régions de correction L*a*b*
|
TP_COLORTONING_LABREGIONS;Régions de correction L*a*b*
|
||||||
TP_COLORTONING_LABREGION_ABVALUES;a=%1 b=%2
|
TP_COLORTONING_LABREGION_ABVALUES;a=%1 b=%2
|
||||||
|
TP_COLORTONING_LABREGION_CHANNEL;Canal
|
||||||
|
TP_COLORTONING_LABREGION_CHANNEL_ALL;Tous
|
||||||
|
TP_COLORTONING_LABREGION_CHANNEL_B;Bleu
|
||||||
|
TP_COLORTONING_LABREGION_CHANNEL_G;Vert
|
||||||
|
TP_COLORTONING_LABREGION_CHANNEL_R;Rouge
|
||||||
TP_COLORTONING_LABREGION_CHROMATICITYMASK;C
|
TP_COLORTONING_LABREGION_CHROMATICITYMASK;C
|
||||||
TP_COLORTONING_LABREGION_HUEMASK;T
|
TP_COLORTONING_LABREGION_HUEMASK;T
|
||||||
TP_COLORTONING_LABREGION_LIGHTNESS;Luminosité
|
TP_COLORTONING_LABREGION_LIGHTNESS;Luminosité
|
||||||
TP_COLORTONING_LABREGION_LIGHTNESSMASK;L
|
TP_COLORTONING_LABREGION_LIGHTNESSMASK;L
|
||||||
TP_COLORTONING_LABREGION_LIST_TITLE;Correction
|
TP_COLORTONING_LABREGION_LIST_TITLE;Correction
|
||||||
TP_COLORTONING_LABREGION_MASK;Masque
|
TP_COLORTONING_LABREGION_MASK;Masque
|
||||||
|
TP_COLORTONING_LABREGION_MASKBLUR;Masque Flou
|
||||||
|
TP_COLORTONING_LABREGION_OFFSET;Décalage
|
||||||
|
TP_COLORTONING_LABREGION_POWER;Puissance
|
||||||
TP_COLORTONING_LABREGION_SATURATION;Saturation
|
TP_COLORTONING_LABREGION_SATURATION;Saturation
|
||||||
TP_COLORTONING_LABREGION_SHOWMASK;Montrer le masque
|
TP_COLORTONING_LABREGION_SHOWMASK;Montrer le masque
|
||||||
|
TP_COLORTONING_LABREGION_SLOPE;Pente
|
||||||
TP_COLORTONING_LUMA;Luminance
|
TP_COLORTONING_LUMA;Luminance
|
||||||
TP_COLORTONING_LUMAMODE;Préserver la luminance
|
TP_COLORTONING_LUMAMODE;Préserver la luminance
|
||||||
TP_COLORTONING_LUMAMODE_TOOLTIP;Si activé, lorsque vous changez la couleur (rouge, vert, cyan, bleu, etc.), la luminance de chaque pixel est préservé
|
TP_COLORTONING_LUMAMODE_TOOLTIP;Si activé, lorsque vous changez la couleur (rouge, vert, cyan, bleu, etc.), la luminance de chaque pixel est préservé
|
||||||
@ -1509,6 +1534,8 @@ TP_CROP_GUIDETYPE;Type de guide:
|
|||||||
TP_CROP_H;H
|
TP_CROP_H;H
|
||||||
TP_CROP_LABEL;Recadrage
|
TP_CROP_LABEL;Recadrage
|
||||||
TP_CROP_PPI;PPI=
|
TP_CROP_PPI;PPI=
|
||||||
|
TP_CROP_RESETCROP;Réinitialiser
|
||||||
|
TP_CROP_SELECTCROP;Sélectionner
|
||||||
TP_CROP_W;L
|
TP_CROP_W;L
|
||||||
TP_CROP_X;X
|
TP_CROP_X;X
|
||||||
TP_CROP_Y;Y
|
TP_CROP_Y;Y
|
||||||
@ -1760,7 +1787,16 @@ TP_LABCURVE_RSTPRO_TOOLTIP;Peut être utilisé avec le curseur Chromaticité et
|
|||||||
TP_LENSGEOM_AUTOCROP;Recadrage auto
|
TP_LENSGEOM_AUTOCROP;Recadrage auto
|
||||||
TP_LENSGEOM_FILL;Remplir
|
TP_LENSGEOM_FILL;Remplir
|
||||||
TP_LENSGEOM_LABEL;Objectif / Géométrie
|
TP_LENSGEOM_LABEL;Objectif / Géométrie
|
||||||
|
TP_LENSPROFILE_CORRECTION_AUTOMATCH;Automatiquement
|
||||||
|
TP_LENSPROFILE_CORRECTION_LCPFILE;Fichier LCP
|
||||||
|
TP_LENSPROFILE_CORRECTION_MANUAL;Manuellement
|
||||||
TP_LENSPROFILE_LABEL;Profil de correction d'objectif
|
TP_LENSPROFILE_LABEL;Profil de correction d'objectif
|
||||||
|
TP_LENSPROFILE_LENS_WARNING;Attention: le facteur de recadrage utilisé pour la caractérisation d'un objectif est plus grand que le facteur de recadrage de l'appareil photo, les résultats pourraient être faux.
|
||||||
|
TP_LENSPROFILE_MODE_HEADER;Sélectionner le profil d'objectif:
|
||||||
|
TP_LENSPROFILE_USE_CA;Aberration chromatique
|
||||||
|
TP_LENSPROFILE_USE_GEOMETRIC;Géometrique
|
||||||
|
TP_LENSPROFILE_USE_HEADER;Sélectionner les distortions à corriger:
|
||||||
|
TP_LENSPROFILE_USE_VIGNETTING;Vignetage
|
||||||
TP_LOCALCONTRAST_AMOUNT;Quantité
|
TP_LOCALCONTRAST_AMOUNT;Quantité
|
||||||
TP_LOCALCONTRAST_DARKNESS;Niveau des ombres
|
TP_LOCALCONTRAST_DARKNESS;Niveau des ombres
|
||||||
TP_LOCALCONTRAST_LABEL;Contraste Local
|
TP_LOCALCONTRAST_LABEL;Contraste Local
|
||||||
@ -1803,6 +1839,7 @@ TP_PRSHARPENING_LABEL;Netteté post-redimensionnement
|
|||||||
TP_PRSHARPENING_TOOLTIP;Augmente la netteté de l'image après le redimentionnement. Ne fonctionne que si la méthode de redimensionnement "Lanczos" est utilisé. Il est impossible de prévisualiser les effets de cet outil. Cf. RawPedia pour les instructions d'utilisation.
|
TP_PRSHARPENING_TOOLTIP;Augmente la netteté de l'image après le redimentionnement. Ne fonctionne que si la méthode de redimensionnement "Lanczos" est utilisé. Il est impossible de prévisualiser les effets de cet outil. Cf. RawPedia pour les instructions d'utilisation.
|
||||||
TP_RAWCACORR_AUTO;Correction automatique
|
TP_RAWCACORR_AUTO;Correction automatique
|
||||||
TP_RAWCACORR_AUTOIT;Itérations
|
TP_RAWCACORR_AUTOIT;Itérations
|
||||||
|
TP_RAWCACORR_AUTOIT_TOOLTIP;Ce réglage est disponible si "Correction-auto" est activé.\nCorrection-auto est conservatif, signifiant qu'il ne corrige souvent pas toute l'aberration chromatique.\nPour corriger l'aberration restante, vous pouvez uttiliser jusqu'à cinq itérations de de la correction automatique de l'aberration chromatique.\nChaque itération réduira l'aberration restante de l'itération précédente avec un prix d'un temps de traitement plus long.
|
||||||
TP_RAWCACORR_AVOIDCOLORSHIFT;Éviter les dérives couleurs
|
TP_RAWCACORR_AVOIDCOLORSHIFT;Éviter les dérives couleurs
|
||||||
TP_RAWCACORR_CABLUE;Bleu
|
TP_RAWCACORR_CABLUE;Bleu
|
||||||
TP_RAWCACORR_CARED;Rouge
|
TP_RAWCACORR_CARED;Rouge
|
||||||
@ -1926,6 +1963,7 @@ TP_RESIZE_WIDTH;Largeur
|
|||||||
TP_RETINEX_CONTEDIT_HSL;Égaliseur d'histogramme TSV
|
TP_RETINEX_CONTEDIT_HSL;Égaliseur d'histogramme TSV
|
||||||
TP_RETINEX_CONTEDIT_LAB;Égaliseur d'histogramme L*a*b*
|
TP_RETINEX_CONTEDIT_LAB;Égaliseur d'histogramme L*a*b*
|
||||||
TP_RETINEX_CONTEDIT_LH;Égaliseur de teinte
|
TP_RETINEX_CONTEDIT_LH;Égaliseur de teinte
|
||||||
|
TP_RETINEX_CONTEDIT_MAP;Égaliseur
|
||||||
TP_RETINEX_CURVEEDITOR_CD;L=f(L)
|
TP_RETINEX_CURVEEDITOR_CD;L=f(L)
|
||||||
TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance en fonction de la luminance L=f(L)\nCorrige les données raw pour réduire halos et artéfacts.
|
TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance en fonction de la luminance L=f(L)\nCorrige les données raw pour réduire halos et artéfacts.
|
||||||
TP_RETINEX_CURVEEDITOR_LH;Force=f(T)
|
TP_RETINEX_CURVEEDITOR_LH;Force=f(T)
|
||||||
@ -1963,6 +2001,7 @@ TP_RETINEX_LABEL;Retinex
|
|||||||
TP_RETINEX_LABEL_MASK;Masque
|
TP_RETINEX_LABEL_MASK;Masque
|
||||||
TP_RETINEX_LABSPACE;L*a*b*
|
TP_RETINEX_LABSPACE;L*a*b*
|
||||||
TP_RETINEX_LOW;Bas
|
TP_RETINEX_LOW;Bas
|
||||||
|
TP_RETINEX_MAP;Méthode
|
||||||
TP_RETINEX_MAP_GAUS;Masque gaussien
|
TP_RETINEX_MAP_GAUS;Masque gaussien
|
||||||
TP_RETINEX_MAP_MAPP;Masque pointu (ondelettes partielles)
|
TP_RETINEX_MAP_MAPP;Masque pointu (ondelettes partielles)
|
||||||
TP_RETINEX_MAP_MAPT;Masque pointu (ondelettes totales)
|
TP_RETINEX_MAP_MAPT;Masque pointu (ondelettes totales)
|
||||||
@ -2272,6 +2311,7 @@ TP_WBALANCE_LED_CRS;CRS SP12 WWMR16
|
|||||||
TP_WBALANCE_LED_HEADER;LED
|
TP_WBALANCE_LED_HEADER;LED
|
||||||
TP_WBALANCE_LED_LSI;LSI Lumelex 2040
|
TP_WBALANCE_LED_LSI;LSI Lumelex 2040
|
||||||
TP_WBALANCE_METHOD;Méthode
|
TP_WBALANCE_METHOD;Méthode
|
||||||
|
TP_WBALANCE_PICKER;Sélectionner
|
||||||
TP_WBALANCE_SHADE;Ombre
|
TP_WBALANCE_SHADE;Ombre
|
||||||
TP_WBALANCE_SIZE;Taille:
|
TP_WBALANCE_SIZE;Taille:
|
||||||
TP_WBALANCE_SOLUX35;Solux 3500K
|
TP_WBALANCE_SOLUX35;Solux 3500K
|
||||||
@ -2294,46 +2334,3 @@ ZOOMPANEL_ZOOMFITSCREEN;Affiche l'image entière\nRaccourci: <b>Alt</b>-<b>f</b>
|
|||||||
ZOOMPANEL_ZOOMIN;Zoom Avant\nRaccourci: <b>+</b>
|
ZOOMPANEL_ZOOMIN;Zoom Avant\nRaccourci: <b>+</b>
|
||||||
ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: <b>-</b>
|
ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: <b>-</b>
|
||||||
|
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
! Untranslated keys follow; remove the ! prefix after an entry is translated.
|
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
|
|
||||||
!HISTORY_MSG_COLORTONING_LABREGION_CHANNEL;CT - Channel
|
|
||||||
!HISTORY_MSG_COLORTONING_LABREGION_MASKBLUR;CT - region mask blur
|
|
||||||
!HISTORY_MSG_COLORTONING_LABREGION_OFFSET;CT - region offset
|
|
||||||
!HISTORY_MSG_COLORTONING_LABREGION_POWER;CT - region power
|
|
||||||
!HISTORY_MSG_COLORTONING_LABREGION_SLOPE;CT - region slope
|
|
||||||
!PREFERENCES_APPEARANCE;Appearance
|
|
||||||
!PREFERENCES_APPEARANCE_COLORPICKERFONT;Color picker font
|
|
||||||
!PREFERENCES_APPEARANCE_CROPMASKCOLOR;Crop mask color
|
|
||||||
!PREFERENCES_APPEARANCE_MAINFONT;Main font
|
|
||||||
!PREFERENCES_APPEARANCE_THEME;Theme
|
|
||||||
!PREFERENCES_AUTOSAVE_TP_OPEN;Save tool collapsed/expanded state on exit
|
|
||||||
!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Compact toolbars in File Browser
|
|
||||||
!TP_COLORAPP_ABSOLUTELUMINANCE;Absolute luminance
|
|
||||||
!TP_COLORAPP_CAT02ADAPTATION_TOOLTIP;When setting manually, values above 65 are recommended.
|
|
||||||
!TP_COLORAPP_MEANLUMINANCE;Mean luminance (Yb%)
|
|
||||||
!TP_COLORTONING_LABREGION_CHANNEL;Channel
|
|
||||||
!TP_COLORTONING_LABREGION_CHANNEL_ALL;All
|
|
||||||
!TP_COLORTONING_LABREGION_CHANNEL_B;Blue
|
|
||||||
!TP_COLORTONING_LABREGION_CHANNEL_G;Green
|
|
||||||
!TP_COLORTONING_LABREGION_CHANNEL_R;Red
|
|
||||||
!TP_COLORTONING_LABREGION_MASKBLUR;Mask Blur
|
|
||||||
!TP_COLORTONING_LABREGION_OFFSET;Offset
|
|
||||||
!TP_COLORTONING_LABREGION_POWER;Power
|
|
||||||
!TP_COLORTONING_LABREGION_SLOPE;Slope
|
|
||||||
!TP_CROP_RESETCROP;Reset
|
|
||||||
!TP_CROP_SELECTCROP;Select
|
|
||||||
!TP_LENSPROFILE_CORRECTION_AUTOMATCH;Automatically
|
|
||||||
!TP_LENSPROFILE_CORRECTION_LCPFILE;LCP file
|
|
||||||
!TP_LENSPROFILE_CORRECTION_MANUAL;Manually
|
|
||||||
!TP_LENSPROFILE_LENS_WARNING;Warning: the crop factor used for lens profiling is larger than the crop factor of the camera, the results might be wrong.
|
|
||||||
!TP_LENSPROFILE_MODE_HEADER;Select the lens profile:
|
|
||||||
!TP_LENSPROFILE_USE_CA;Chromatic aberration
|
|
||||||
!TP_LENSPROFILE_USE_GEOMETRIC;Geometric
|
|
||||||
!TP_LENSPROFILE_USE_HEADER;Select distortions to correct:
|
|
||||||
!TP_LENSPROFILE_USE_VIGNETTING;Vignetting
|
|
||||||
!TP_RAWCACORR_AUTOIT_TOOLTIP;This setting is available if "Auto-correction" is checked.\nAuto-correction is conservative, meaning that it often does not correct all chromatic aberration.\nTo correct the remaining chromatic aberration, you can use up to five iterations of automatic chromatic aberration correction.\nEach iteration will reduce the remaining chromatic aberration from the last iteration at the cost of additional processing time.
|
|
||||||
!TP_RETINEX_CONTEDIT_MAP;Equalizer
|
|
||||||
!TP_RETINEX_MAP;Method
|
|
||||||
!TP_WBALANCE_PICKER;Pick
|
|
||||||
|
@ -568,6 +568,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
|
|||||||
!GENERAL_AUTO;Automatic
|
!GENERAL_AUTO;Automatic
|
||||||
!GENERAL_BEFORE;Before
|
!GENERAL_BEFORE;Before
|
||||||
!GENERAL_CLOSE;Close
|
!GENERAL_CLOSE;Close
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_FILE;File
|
!GENERAL_FILE;File
|
||||||
!GENERAL_NONE;None
|
!GENERAL_NONE;None
|
||||||
!GENERAL_OPEN;Open
|
!GENERAL_OPEN;Open
|
||||||
|
@ -569,6 +569,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום
|
|||||||
!GENERAL_AUTO;Automatic
|
!GENERAL_AUTO;Automatic
|
||||||
!GENERAL_BEFORE;Before
|
!GENERAL_BEFORE;Before
|
||||||
!GENERAL_CLOSE;Close
|
!GENERAL_CLOSE;Close
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_FILE;File
|
!GENERAL_FILE;File
|
||||||
!GENERAL_NONE;None
|
!GENERAL_NONE;None
|
||||||
!GENERAL_OPEN;Open
|
!GENERAL_OPEN;Open
|
||||||
|
@ -1328,6 +1328,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: <b>-</b>
|
|||||||
!FILECHOOSER_FILTER_TIFF;TIFF files
|
!FILECHOOSER_FILTER_TIFF;TIFF files
|
||||||
!GENERAL_APPLY;Apply
|
!GENERAL_APPLY;Apply
|
||||||
!GENERAL_ASIMAGE;As Image
|
!GENERAL_ASIMAGE;As Image
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_OPEN;Open
|
!GENERAL_OPEN;Open
|
||||||
!GENERAL_RESET;Reset
|
!GENERAL_RESET;Reset
|
||||||
!GENERAL_SAVE_AS;Save as...
|
!GENERAL_SAVE_AS;Save as...
|
||||||
|
@ -765,13 +765,18 @@ HISTORY_MSG_493;L*a*b*調整
|
|||||||
HISTORY_MSG_CLAMPOOG;色域外の色を切り取る
|
HISTORY_MSG_CLAMPOOG;色域外の色を切り取る
|
||||||
HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - カラー補正
|
HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - カラー補正
|
||||||
HISTORY_MSG_COLORTONING_LABREGION_AB;CT - 色の補正
|
HISTORY_MSG_COLORTONING_LABREGION_AB;CT - 色の補正
|
||||||
|
HISTORY_MSG_COLORTONING_LABREGION_CHANNEL;CT - 色チャンネル
|
||||||
HISTORY_MSG_COLORTONING_LABREGION_CHROMATICITYMASK;CT - 色度のマスク
|
HISTORY_MSG_COLORTONING_LABREGION_CHROMATICITYMASK;CT - 色度のマスク
|
||||||
HISTORY_MSG_COLORTONING_LABREGION_HUEMASK;CT - 色相のマスク
|
HISTORY_MSG_COLORTONING_LABREGION_HUEMASK;CT - 色相のマスク
|
||||||
HISTORY_MSG_COLORTONING_LABREGION_LIGHTNESS;CT - 明度
|
HISTORY_MSG_COLORTONING_LABREGION_LIGHTNESS;CT - 明度
|
||||||
HISTORY_MSG_COLORTONING_LABREGION_LIGHTNESSMASK;CT - 輝度のマスク
|
HISTORY_MSG_COLORTONING_LABREGION_LIGHTNESSMASK;CT - 輝度のマスク
|
||||||
HISTORY_MSG_COLORTONING_LABREGION_LIST;CT - リスト
|
HISTORY_MSG_COLORTONING_LABREGION_LIST;CT - リスト
|
||||||
|
HISTORY_MSG_COLORTONING_LABREGION_MASKBLUR;CT - マスクぼかし
|
||||||
|
HISTORY_MSG_COLORTONING_LABREGION_OFFSET;CT - オフセット
|
||||||
|
HISTORY_MSG_COLORTONING_LABREGION_POWER;CT - 強化
|
||||||
HISTORY_MSG_COLORTONING_LABREGION_SATURATION;CT - 彩度
|
HISTORY_MSG_COLORTONING_LABREGION_SATURATION;CT - 彩度
|
||||||
HISTORY_MSG_COLORTONING_LABREGION_SHOWMASK;CT - マスクの表示
|
HISTORY_MSG_COLORTONING_LABREGION_SHOWMASK;CT - マスクの表示
|
||||||
|
HISTORY_MSG_COLORTONING_LABREGION_SLOPE;CT - スロープ
|
||||||
HISTORY_MSG_DEHAZE_DEPTH;霞除去 - 深度
|
HISTORY_MSG_DEHAZE_DEPTH;霞除去 - 深度
|
||||||
HISTORY_MSG_DEHAZE_ENABLED;霞除去
|
HISTORY_MSG_DEHAZE_ENABLED;霞除去
|
||||||
HISTORY_MSG_DEHAZE_SHOW_DEPTH_MAP;霞除去 - 深度マップの表示
|
HISTORY_MSG_DEHAZE_SHOW_DEPTH_MAP;霞除去 - 深度マップの表示
|
||||||
@ -1065,9 +1070,15 @@ PARTIALPASTE_VIBRANCE;自然な彩度
|
|||||||
PARTIALPASTE_VIGNETTING;周辺光量補正
|
PARTIALPASTE_VIGNETTING;周辺光量補正
|
||||||
PARTIALPASTE_WHITEBALANCE;ホワイトバランス
|
PARTIALPASTE_WHITEBALANCE;ホワイトバランス
|
||||||
PREFERENCES_ADD;追加
|
PREFERENCES_ADD;追加
|
||||||
|
PREFERENCES_APPEARANCE;外観
|
||||||
|
PREFERENCES_APPEARANCE_COLORPICKERFONT;カラーピッカーのフォント
|
||||||
|
PREFERENCES_APPEARANCE_CROPMASKCOLOR;切り抜きのマスクカラー
|
||||||
|
PREFERENCES_APPEARANCE_MAINFONT;メインフォント
|
||||||
PREFERENCES_APPEARANCE_NAVGUIDECOLOR;ナビゲーターのガイドカラー
|
PREFERENCES_APPEARANCE_NAVGUIDECOLOR;ナビゲーターのガイドカラー
|
||||||
|
PREFERENCES_APPEARANCE_THEME;テーマ
|
||||||
PREFERENCES_APPLNEXTSTARTUP;要再起動
|
PREFERENCES_APPLNEXTSTARTUP;要再起動
|
||||||
PREFERENCES_AUTOMONPROFILE;OSのメインモニター・プロファイルを使用
|
PREFERENCES_AUTOMONPROFILE;OSのメインモニター・プロファイルを使用
|
||||||
|
PREFERENCES_AUTOSAVE_TP_OPEN;プログラム終了時の機能パネルの開閉状態を保存
|
||||||
PREFERENCES_BATCH_PROCESSING;バッチ処理
|
PREFERENCES_BATCH_PROCESSING;バッチ処理
|
||||||
PREFERENCES_BEHADDALL;すべて '追加'
|
PREFERENCES_BEHADDALL;すべて '追加'
|
||||||
PREFERENCES_BEHADDALLHINT;すべてのパラメータを <b>追加</b>モードにします\nバッチツールパネルで設定される調整値が、各画像の既定値に<b>加算</b>されます
|
PREFERENCES_BEHADDALLHINT;すべてのパラメータを <b>追加</b>モードにします\nバッチツールパネルで設定される調整値が、各画像の既定値に<b>加算</b>されます
|
||||||
@ -1080,12 +1091,12 @@ PREFERENCES_CACHECLEAR_ALL;cacheに入れられたファイルを全てクリア
|
|||||||
PREFERENCES_CACHECLEAR_ALLBUTPROFILES;cacheに入れた処理プロファイル以外をクリア:
|
PREFERENCES_CACHECLEAR_ALLBUTPROFILES;cacheに入れた処理プロファイル以外をクリア:
|
||||||
PREFERENCES_CACHECLEAR_ONLYPROFILES;cacheに入れた処理プロファイルだけをクリア:
|
PREFERENCES_CACHECLEAR_ONLYPROFILES;cacheに入れた処理プロファイルだけをクリア:
|
||||||
PREFERENCES_CACHECLEAR_SAFETY;casheに入れたファイルだけをクリア。元画像に付随した処理プロファイルはそのまま
|
PREFERENCES_CACHECLEAR_SAFETY;casheに入れたファイルだけをクリア。元画像に付随した処理プロファイルはそのまま
|
||||||
PREFERENCES_CACHEMAXENTRIES;キャッシュエントリーの最大数
|
PREFERENCES_CACHEMAXENTRIES;cacheに入れるファイルの最大数
|
||||||
PREFERENCES_CACHEOPTS;cache オプション
|
PREFERENCES_CACHEOPTS;cache オプション
|
||||||
PREFERENCES_CACHETHUMBHEIGHT;サムネイル縦の最大値
|
PREFERENCES_CACHETHUMBHEIGHT;サムネイル縦の最大値
|
||||||
PREFERENCES_CLIPPINGIND;クリッピング領域の表示
|
PREFERENCES_CLIPPINGIND;クリッピング領域の表示
|
||||||
PREFERENCES_CLUTSCACHE;HaldCLUT cache
|
PREFERENCES_CLUTSCACHE;HaldCLUT cache
|
||||||
PREFERENCES_CLUTSCACHE_LABEL;cacheに置けるHaldCLUTの最大数
|
PREFERENCES_CLUTSCACHE_LABEL;cacheに入れるHaldCLUTの最大数
|
||||||
PREFERENCES_CLUTSDIR;HaldCLUTのディレクトリー
|
PREFERENCES_CLUTSDIR;HaldCLUTのディレクトリー
|
||||||
PREFERENCES_CMMBPC;ブラックポイントの補正
|
PREFERENCES_CMMBPC;ブラックポイントの補正
|
||||||
PREFERENCES_CROP;切り抜き画像の編集
|
PREFERENCES_CROP;切り抜き画像の編集
|
||||||
@ -1126,6 +1137,7 @@ PREFERENCES_EDITORCMDLINE;カスタムコマンドライン
|
|||||||
PREFERENCES_EDITORLAYOUT;編集 レイアウト
|
PREFERENCES_EDITORLAYOUT;編集 レイアウト
|
||||||
PREFERENCES_EXTERNALEDITOR;外部エディタ
|
PREFERENCES_EXTERNALEDITOR;外部エディタ
|
||||||
PREFERENCES_FBROWSEROPTS;ファイルブラウザ/サムネイルのオプション
|
PREFERENCES_FBROWSEROPTS;ファイルブラウザ/サムネイルのオプション
|
||||||
|
PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;ファイルブラウザのツールバーを圧縮
|
||||||
PREFERENCES_FILEFORMAT;ファイル形式
|
PREFERENCES_FILEFORMAT;ファイル形式
|
||||||
PREFERENCES_FLATFIELDFOUND;検出
|
PREFERENCES_FLATFIELDFOUND;検出
|
||||||
PREFERENCES_FLATFIELDSDIR;フラットフィールド・ディレクトリ
|
PREFERENCES_FLATFIELDSDIR;フラットフィールド・ディレクトリ
|
||||||
@ -1223,13 +1235,13 @@ PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;現在の画像のズームレベルとパ
|
|||||||
PREFERENCES_SAVE_TP_OPEN_NOW;機能パネルの今の開閉状態を保存する
|
PREFERENCES_SAVE_TP_OPEN_NOW;機能パネルの今の開閉状態を保存する
|
||||||
PREFERENCES_SELECTLANG;言語選択
|
PREFERENCES_SELECTLANG;言語選択
|
||||||
PREFERENCES_SERIALIZE_TIFF_READ;TIFFファイルの読み込み設定
|
PREFERENCES_SERIALIZE_TIFF_READ;TIFFファイルの読み込み設定
|
||||||
PREFERENCES_SERIALIZE_TIFF_READ_LABEL;TIFFファイルのシリアル化
|
PREFERENCES_SERIALIZE_TIFF_READ_LABEL;TIFFファイルの読み込みをシリアライズ
|
||||||
PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;画像フォルダーが多数の非圧縮のTIFFファイルで閉められている場合、このオプションを有効にすることで、サムネイル画像生成の効率が上がります
|
PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;画像フォルダーが多数の非圧縮のTIFFファイルで閉められている場合、このオプションを有効にすることで、サムネイル画像生成の効率が上がります
|
||||||
PREFERENCES_SET;設定
|
PREFERENCES_SET;設定
|
||||||
PREFERENCES_SHOWBASICEXIF;基本Exif情報を表示
|
PREFERENCES_SHOWBASICEXIF;基本Exif情報を表示
|
||||||
PREFERENCES_SHOWDATETIME;日付表示
|
PREFERENCES_SHOWDATETIME;日付表示
|
||||||
PREFERENCES_SHOWEXPOSURECOMPENSATION;露光補正追加
|
PREFERENCES_SHOWEXPOSURECOMPENSATION;露光補正追加
|
||||||
PREFERENCES_SHOWFILMSTRIPTOOLBAR;画像スライドのツールバーを表示する
|
PREFERENCES_SHOWFILMSTRIPTOOLBAR;画像スライドにツールバーを表示する
|
||||||
PREFERENCES_SHTHRESHOLD;シャドウ・クリッピング領域のしきい値
|
PREFERENCES_SHTHRESHOLD;シャドウ・クリッピング領域のしきい値
|
||||||
PREFERENCES_SINGLETAB;シングルタブモードモード
|
PREFERENCES_SINGLETAB;シングルタブモードモード
|
||||||
PREFERENCES_SINGLETABVERTAB;シングル編集タブモード, 垂直タブ
|
PREFERENCES_SINGLETABVERTAB;シングル編集タブモード, 垂直タブ
|
||||||
@ -1407,6 +1419,7 @@ TP_COARSETRAF_TOOLTIP_HFLIP;左右反転
|
|||||||
TP_COARSETRAF_TOOLTIP_ROTLEFT;90度左回転\nショートカット: <b>[</b>\n\nシングル・エディタ・タブのショートカット: <b>Alt-[</b>
|
TP_COARSETRAF_TOOLTIP_ROTLEFT;90度左回転\nショートカット: <b>[</b>\n\nシングル・エディタ・タブのショートカット: <b>Alt-[</b>
|
||||||
TP_COARSETRAF_TOOLTIP_ROTRIGHT;90度右回転\nショートカット: <b>]</b>\n\nシングル・エディタ・タブのショートカット: <b>Alt-]</b>
|
TP_COARSETRAF_TOOLTIP_ROTRIGHT;90度右回転\nショートカット: <b>]</b>\n\nシングル・エディタ・タブのショートカット: <b>Alt-]</b>
|
||||||
TP_COARSETRAF_TOOLTIP_VFLIP;上下反転
|
TP_COARSETRAF_TOOLTIP_VFLIP;上下反転
|
||||||
|
TP_COLORAPP_ABSOLUTELUMINANCE;絶対輝度
|
||||||
TP_COLORAPP_ALGO;アルゴリズム
|
TP_COLORAPP_ALGO;アルゴリズム
|
||||||
TP_COLORAPP_ALGO_ALL;すべて
|
TP_COLORAPP_ALGO_ALL;すべて
|
||||||
TP_COLORAPP_ALGO_JC;明度 + 色度 (JC)
|
TP_COLORAPP_ALGO_JC;明度 + 色度 (JC)
|
||||||
@ -1417,6 +1430,7 @@ TP_COLORAPP_BADPIXSL;ホット/バッドピクセルフィルター
|
|||||||
TP_COLORAPP_BADPIXSL_TOOLTIP;明るい部分のホット/バッドピクセルを圧縮します\n 0は効果なし 1は中間 2はガウスほかし\n\nこれらアーティファクトはCIECAM02の限界に起因するものです。色域を抑制する代わりに、イメージに暗い影が現れるのを防ぎます
|
TP_COLORAPP_BADPIXSL_TOOLTIP;明るい部分のホット/バッドピクセルを圧縮します\n 0は効果なし 1は中間 2はガウスほかし\n\nこれらアーティファクトはCIECAM02の限界に起因するものです。色域を抑制する代わりに、イメージに暗い影が現れるのを防ぎます
|
||||||
TP_COLORAPP_BRIGHT;明るさ (Q)
|
TP_COLORAPP_BRIGHT;明るさ (Q)
|
||||||
TP_COLORAPP_BRIGHT_TOOLTIP;CIECAM02の明るさは L*a*b*やRGBとは異なり、白の輝度を計算に入れます
|
TP_COLORAPP_BRIGHT_TOOLTIP;CIECAM02の明るさは L*a*b*やRGBとは異なり、白の輝度を計算に入れます
|
||||||
|
TP_COLORAPP_CAT02ADAPTATION_TOOLTIP;設定を手動で行う場合、65以上の設定値を推奨
|
||||||
TP_COLORAPP_CHROMA;色度 (C)
|
TP_COLORAPP_CHROMA;色度 (C)
|
||||||
TP_COLORAPP_CHROMA_M;鮮やかさ (M)
|
TP_COLORAPP_CHROMA_M;鮮やかさ (M)
|
||||||
TP_COLORAPP_CHROMA_M_TOOLTIP;CIECAM02の鮮やかさは L*a*b*やRGBの鮮やかさとは異なります
|
TP_COLORAPP_CHROMA_M_TOOLTIP;CIECAM02の鮮やかさは L*a*b*やRGBの鮮やかさとは異なります
|
||||||
@ -1447,6 +1461,7 @@ TP_COLORAPP_LABEL_SCENE;撮影環境条件
|
|||||||
TP_COLORAPP_LABEL_VIEWING;観視条件
|
TP_COLORAPP_LABEL_VIEWING;観視条件
|
||||||
TP_COLORAPP_LIGHT;明度 (J)
|
TP_COLORAPP_LIGHT;明度 (J)
|
||||||
TP_COLORAPP_LIGHT_TOOLTIP;CIECAM02の明度は L*a*b*やRGBの明度とは異なります
|
TP_COLORAPP_LIGHT_TOOLTIP;CIECAM02の明度は L*a*b*やRGBの明度とは異なります
|
||||||
|
TP_COLORAPP_MEANLUMINANCE;中間輝度 (Yb%)
|
||||||
TP_COLORAPP_MODEL;ホワイトポイント・モデル
|
TP_COLORAPP_MODEL;ホワイトポイント・モデル
|
||||||
TP_COLORAPP_MODEL_TOOLTIP;<b>WB [RT] + [出力]:</b>\nRTのホワイトバランスは、撮影環境に使用されます。CIECAM02はD50の設定, 出力デバイスのホワイトバランスは「環境設定」の「カラーマネジメント」の設定\n\n<b>WB [RT+CAT02] + [出力]:</b>\nRTのホワイトバランス設定は、CAT02で使用され、出力デバイスのホワイトバランスは環境設定の値を使用します
|
TP_COLORAPP_MODEL_TOOLTIP;<b>WB [RT] + [出力]:</b>\nRTのホワイトバランスは、撮影環境に使用されます。CIECAM02はD50の設定, 出力デバイスのホワイトバランスは「環境設定」の「カラーマネジメント」の設定\n\n<b>WB [RT+CAT02] + [出力]:</b>\nRTのホワイトバランス設定は、CAT02で使用され、出力デバイスのホワイトバランスは環境設定の値を使用します
|
||||||
TP_COLORAPP_NEUTRAL;リセット
|
TP_COLORAPP_NEUTRAL;リセット
|
||||||
@ -1490,14 +1505,23 @@ TP_COLORTONING_LABGRID;L*a*b*カラー補正グリッド
|
|||||||
TP_COLORTONING_LABGRID_VALUES;HL: a=%1 b=%2\nS: a=%3 b=%4
|
TP_COLORTONING_LABGRID_VALUES;HL: a=%1 b=%2\nS: a=%3 b=%4
|
||||||
TP_COLORTONING_LABREGIONS;L*a*b*の補正領域
|
TP_COLORTONING_LABREGIONS;L*a*b*の補正領域
|
||||||
TP_COLORTONING_LABREGION_ABVALUES;a=%1 b=%2
|
TP_COLORTONING_LABREGION_ABVALUES;a=%1 b=%2
|
||||||
|
TP_COLORTONING_LABREGION_CHANNEL;色チャンネル
|
||||||
|
TP_COLORTONING_LABREGION_CHANNEL_ALL;全ての色チャンネル
|
||||||
|
TP_COLORTONING_LABREGION_CHANNEL_B;ブルー
|
||||||
|
TP_COLORTONING_LABREGION_CHANNEL_G;グリーン
|
||||||
|
TP_COLORTONING_LABREGION_CHANNEL_R;レッド
|
||||||
TP_COLORTONING_LABREGION_CHROMATICITYMASK;色度
|
TP_COLORTONING_LABREGION_CHROMATICITYMASK;色度
|
||||||
TP_COLORTONING_LABREGION_HUEMASK;色相
|
TP_COLORTONING_LABREGION_HUEMASK;色相
|
||||||
TP_COLORTONING_LABREGION_LIGHTNESS;明度
|
TP_COLORTONING_LABREGION_LIGHTNESS;明度
|
||||||
TP_COLORTONING_LABREGION_LIGHTNESSMASK;明度
|
TP_COLORTONING_LABREGION_LIGHTNESSMASK;明度
|
||||||
TP_COLORTONING_LABREGION_LIST_TITLE;補正
|
TP_COLORTONING_LABREGION_LIST_TITLE;補正
|
||||||
TP_COLORTONING_LABREGION_MASK;マスク
|
TP_COLORTONING_LABREGION_MASK;マスク
|
||||||
|
TP_COLORTONING_LABREGION_MASKBLUR;マスクぼかし
|
||||||
|
TP_COLORTONING_LABREGION_OFFSET;オフセット
|
||||||
|
TP_COLORTONING_LABREGION_POWER;強化
|
||||||
TP_COLORTONING_LABREGION_SATURATION;彩度
|
TP_COLORTONING_LABREGION_SATURATION;彩度
|
||||||
TP_COLORTONING_LABREGION_SHOWMASK;マスクの表示
|
TP_COLORTONING_LABREGION_SHOWMASK;マスクの表示
|
||||||
|
TP_COLORTONING_LABREGION_SLOPE;スロープ
|
||||||
TP_COLORTONING_LUMA;明度
|
TP_COLORTONING_LUMA;明度
|
||||||
TP_COLORTONING_LUMAMODE;明度を維持
|
TP_COLORTONING_LUMAMODE;明度を維持
|
||||||
TP_COLORTONING_LUMAMODE_TOOLTIP;カラー(レッド、グリーン、シアン、ブルーなど)を変える際に、これを有効にすると、各ピクセルの明度は維持されます。
|
TP_COLORTONING_LUMAMODE_TOOLTIP;カラー(レッド、グリーン、シアン、ブルーなど)を変える際に、これを有効にすると、各ピクセルの明度は維持されます。
|
||||||
@ -1537,6 +1561,8 @@ TP_CROP_GUIDETYPE;ガイドタイプ:
|
|||||||
TP_CROP_H;高さ
|
TP_CROP_H;高さ
|
||||||
TP_CROP_LABEL;切り抜き
|
TP_CROP_LABEL;切り抜き
|
||||||
TP_CROP_PPI;PPI=
|
TP_CROP_PPI;PPI=
|
||||||
|
TP_CROP_RESETCROP;リセット
|
||||||
|
TP_CROP_SELECTCROP;セレクト
|
||||||
TP_CROP_W;W 幅
|
TP_CROP_W;W 幅
|
||||||
TP_CROP_X;X
|
TP_CROP_X;X
|
||||||
TP_CROP_Y;Y
|
TP_CROP_Y;Y
|
||||||
@ -1782,7 +1808,16 @@ TP_LABCURVE_RSTPRO_TOOLTIP;色度スライダーとCCカーブを使用するこ
|
|||||||
TP_LENSGEOM_AUTOCROP;自動的に切り抜き選択
|
TP_LENSGEOM_AUTOCROP;自動的に切り抜き選択
|
||||||
TP_LENSGEOM_FILL;オートフィル
|
TP_LENSGEOM_FILL;オートフィル
|
||||||
TP_LENSGEOM_LABEL;レンズ / ジオメトリ
|
TP_LENSGEOM_LABEL;レンズ / ジオメトリ
|
||||||
|
TP_LENSPROFILE_CORRECTION_AUTOMATCH;自動で
|
||||||
|
TP_LENSPROFILE_CORRECTION_LCPFILE;LCPファイル
|
||||||
|
TP_LENSPROFILE_CORRECTION_MANUAL;手動で
|
||||||
TP_LENSPROFILE_LABEL;レンズ補正 プロファイル
|
TP_LENSPROFILE_LABEL;レンズ補正 プロファイル
|
||||||
|
TP_LENSPROFILE_LENS_WARNING;注意:レンズプロファイルに使われるクロップファクターはカメラのクロップファクターより大きいので、誤った結果になる可能性があります。
|
||||||
|
TP_LENSPROFILE_MODE_HEADER;レンズプロファイルを選択
|
||||||
|
TP_LENSPROFILE_USE_CA;色収差
|
||||||
|
TP_LENSPROFILE_USE_GEOMETRIC;歪曲収差
|
||||||
|
TP_LENSPROFILE_USE_HEADER;補正する収差を選択:
|
||||||
|
TP_LENSPROFILE_USE_VIGNETTING;周辺光量
|
||||||
TP_LOCALCONTRAST_AMOUNT;量
|
TP_LOCALCONTRAST_AMOUNT;量
|
||||||
TP_LOCALCONTRAST_DARKNESS;暗い部分のレベル
|
TP_LOCALCONTRAST_DARKNESS;暗い部分のレベル
|
||||||
TP_LOCALCONTRAST_LABEL;ローカルコントラスト
|
TP_LOCALCONTRAST_LABEL;ローカルコントラスト
|
||||||
@ -1825,6 +1860,7 @@ TP_PRSHARPENING_LABEL;リサイズ後のシャープ化
|
|||||||
TP_PRSHARPENING_TOOLTIP;リサイズ後の画像をシャープ化します。但し、リサイズの方式がランチョスの場合に限ります。プレビュー画面でこの機能の効果を見ることは出来ません。使用法に関してはRawPediaを参照して下さい。
|
TP_PRSHARPENING_TOOLTIP;リサイズ後の画像をシャープ化します。但し、リサイズの方式がランチョスの場合に限ります。プレビュー画面でこの機能の効果を見ることは出来ません。使用法に関してはRawPediaを参照して下さい。
|
||||||
TP_RAWCACORR_AUTO;自動補正
|
TP_RAWCACORR_AUTO;自動補正
|
||||||
TP_RAWCACORR_AUTOIT;繰り返し
|
TP_RAWCACORR_AUTOIT;繰り返し
|
||||||
|
TP_RAWCACORR_AUTOIT_TOOLTIP;”自動補正”が有効になっている場合にこの設定が可能です。\n自動補正の作用は控えめなため、全ての色収差が常に補正されるとは限りません。\n残りの色収差を補正するためには、自動色収差補正の繰り返しを最大5回行います。\n繰り返すたびに、直前の繰り返しで残った色収差を軽減しますが、その分処理時間は増えます。
|
||||||
TP_RAWCACORR_AVOIDCOLORSHIFT;色ずれを回避
|
TP_RAWCACORR_AVOIDCOLORSHIFT;色ずれを回避
|
||||||
TP_RAWCACORR_CABLUE;ブルー
|
TP_RAWCACORR_CABLUE;ブルー
|
||||||
TP_RAWCACORR_CARED;レッド
|
TP_RAWCACORR_CARED;レッド
|
||||||
@ -1929,6 +1965,7 @@ TP_RESIZE_WIDTH;幅
|
|||||||
TP_RETINEX_CONTEDIT_HSL;ヒストグラムイコライザ HSL
|
TP_RETINEX_CONTEDIT_HSL;ヒストグラムイコライザ HSL
|
||||||
TP_RETINEX_CONTEDIT_LAB;ヒストグラムイコライザ L*a*b*
|
TP_RETINEX_CONTEDIT_LAB;ヒストグラムイコライザ L*a*b*
|
||||||
TP_RETINEX_CONTEDIT_LH;色相イコライザ
|
TP_RETINEX_CONTEDIT_LH;色相イコライザ
|
||||||
|
TP_RETINEX_CONTEDIT_MAP;イコライザ
|
||||||
TP_RETINEX_CURVEEDITOR_CD;輝度=f(輝度)
|
TP_RETINEX_CURVEEDITOR_CD;輝度=f(輝度)
|
||||||
TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;輝度に応じた輝度の関数 L=f(L)\nハロとアーティファクトを減らすためにrawデータを補正します
|
TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;輝度に応じた輝度の関数 L=f(L)\nハロとアーティファクトを減らすためにrawデータを補正します
|
||||||
TP_RETINEX_CURVEEDITOR_LH;強さ=f(色相)
|
TP_RETINEX_CURVEEDITOR_LH;強さ=f(色相)
|
||||||
@ -1966,6 +2003,7 @@ TP_RETINEX_LABEL;レティネックス
|
|||||||
TP_RETINEX_LABEL_MASK;マスク
|
TP_RETINEX_LABEL_MASK;マスク
|
||||||
TP_RETINEX_LABSPACE;L*a*b*
|
TP_RETINEX_LABSPACE;L*a*b*
|
||||||
TP_RETINEX_LOW;低
|
TP_RETINEX_LOW;低
|
||||||
|
TP_RETINEX_MAP;方式
|
||||||
TP_RETINEX_MAP_GAUS;ガウシアンマスク
|
TP_RETINEX_MAP_GAUS;ガウシアンマスク
|
||||||
TP_RETINEX_MAP_MAPP;シャープマスク (一部ウェーブレット)
|
TP_RETINEX_MAP_MAPP;シャープマスク (一部ウェーブレット)
|
||||||
TP_RETINEX_MAP_MAPT;シャープマスク (全てウェーブレット)
|
TP_RETINEX_MAP_MAPT;シャープマスク (全てウェーブレット)
|
||||||
@ -2275,6 +2313,7 @@ TP_WBALANCE_LED_CRS;CRS SP12 WWMR16
|
|||||||
TP_WBALANCE_LED_HEADER;LED
|
TP_WBALANCE_LED_HEADER;LED
|
||||||
TP_WBALANCE_LED_LSI;LSI Lumelex 2040
|
TP_WBALANCE_LED_LSI;LSI Lumelex 2040
|
||||||
TP_WBALANCE_METHOD;モード
|
TP_WBALANCE_METHOD;モード
|
||||||
|
TP_WBALANCE_PICKER;ピック
|
||||||
TP_WBALANCE_SHADE;日陰
|
TP_WBALANCE_SHADE;日陰
|
||||||
TP_WBALANCE_SIZE;サイズ:
|
TP_WBALANCE_SIZE;サイズ:
|
||||||
TP_WBALANCE_SOLUX35;Solux 3500K
|
TP_WBALANCE_SOLUX35;Solux 3500K
|
||||||
@ -2301,42 +2340,4 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: <b>-</b>
|
|||||||
! Untranslated keys follow; remove the ! prefix after an entry is translated.
|
! Untranslated keys follow; remove the ! prefix after an entry is translated.
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!
|
!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
!HISTORY_MSG_COLORTONING_LABREGION_CHANNEL;CT - Channel
|
!GENERAL_CURRENT;Current
|
||||||
!HISTORY_MSG_COLORTONING_LABREGION_MASKBLUR;CT - region mask blur
|
|
||||||
!HISTORY_MSG_COLORTONING_LABREGION_OFFSET;CT - region offset
|
|
||||||
!HISTORY_MSG_COLORTONING_LABREGION_POWER;CT - region power
|
|
||||||
!HISTORY_MSG_COLORTONING_LABREGION_SLOPE;CT - region slope
|
|
||||||
!PREFERENCES_APPEARANCE;Appearance
|
|
||||||
!PREFERENCES_APPEARANCE_COLORPICKERFONT;Color picker font
|
|
||||||
!PREFERENCES_APPEARANCE_CROPMASKCOLOR;Crop mask color
|
|
||||||
!PREFERENCES_APPEARANCE_MAINFONT;Main font
|
|
||||||
!PREFERENCES_APPEARANCE_THEME;Theme
|
|
||||||
!PREFERENCES_AUTOSAVE_TP_OPEN;Save tool collapsed/expanded state on exit
|
|
||||||
!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Compact toolbars in File Browser
|
|
||||||
!TP_COLORAPP_ABSOLUTELUMINANCE;Absolute luminance
|
|
||||||
!TP_COLORAPP_CAT02ADAPTATION_TOOLTIP;When setting manually, values above 65 are recommended.
|
|
||||||
!TP_COLORAPP_MEANLUMINANCE;Mean luminance (Yb%)
|
|
||||||
!TP_COLORTONING_LABREGION_CHANNEL;Channel
|
|
||||||
!TP_COLORTONING_LABREGION_CHANNEL_ALL;All
|
|
||||||
!TP_COLORTONING_LABREGION_CHANNEL_B;Blue
|
|
||||||
!TP_COLORTONING_LABREGION_CHANNEL_G;Green
|
|
||||||
!TP_COLORTONING_LABREGION_CHANNEL_R;Red
|
|
||||||
!TP_COLORTONING_LABREGION_MASKBLUR;Mask Blur
|
|
||||||
!TP_COLORTONING_LABREGION_OFFSET;Offset
|
|
||||||
!TP_COLORTONING_LABREGION_POWER;Power
|
|
||||||
!TP_COLORTONING_LABREGION_SLOPE;Slope
|
|
||||||
!TP_CROP_RESETCROP;Reset
|
|
||||||
!TP_CROP_SELECTCROP;Select
|
|
||||||
!TP_LENSPROFILE_CORRECTION_AUTOMATCH;Automatically
|
|
||||||
!TP_LENSPROFILE_CORRECTION_LCPFILE;LCP file
|
|
||||||
!TP_LENSPROFILE_CORRECTION_MANUAL;Manually
|
|
||||||
!TP_LENSPROFILE_LENS_WARNING;Warning: the crop factor used for lens profiling is larger than the crop factor of the camera, the results might be wrong.
|
|
||||||
!TP_LENSPROFILE_MODE_HEADER;Select the lens profile:
|
|
||||||
!TP_LENSPROFILE_USE_CA;Chromatic aberration
|
|
||||||
!TP_LENSPROFILE_USE_GEOMETRIC;Geometric
|
|
||||||
!TP_LENSPROFILE_USE_HEADER;Select distortions to correct:
|
|
||||||
!TP_LENSPROFILE_USE_VIGNETTING;Vignetting
|
|
||||||
!TP_RAWCACORR_AUTOIT_TOOLTIP;This setting is available if "Auto-correction" is checked.\nAuto-correction is conservative, meaning that it often does not correct all chromatic aberration.\nTo correct the remaining chromatic aberration, you can use up to five iterations of automatic chromatic aberration correction.\nEach iteration will reduce the remaining chromatic aberration from the last iteration at the cost of additional processing time.
|
|
||||||
!TP_RETINEX_CONTEDIT_MAP;Equalizer
|
|
||||||
!TP_RETINEX_MAP;Method
|
|
||||||
!TP_WBALANCE_PICKER;Pick
|
|
||||||
|
@ -569,6 +569,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
|
|||||||
!GENERAL_AUTO;Automatic
|
!GENERAL_AUTO;Automatic
|
||||||
!GENERAL_BEFORE;Before
|
!GENERAL_BEFORE;Before
|
||||||
!GENERAL_CLOSE;Close
|
!GENERAL_CLOSE;Close
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_FILE;File
|
!GENERAL_FILE;File
|
||||||
!GENERAL_NONE;None
|
!GENERAL_NONE;None
|
||||||
!GENERAL_OPEN;Open
|
!GENERAL_OPEN;Open
|
||||||
|
@ -927,6 +927,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés <b>-</b>
|
|||||||
!GENERAL_ASIMAGE;As Image
|
!GENERAL_ASIMAGE;As Image
|
||||||
!GENERAL_AUTO;Automatic
|
!GENERAL_AUTO;Automatic
|
||||||
!GENERAL_CLOSE;Close
|
!GENERAL_CLOSE;Close
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_OPEN;Open
|
!GENERAL_OPEN;Open
|
||||||
!GENERAL_RESET;Reset
|
!GENERAL_RESET;Reset
|
||||||
!GENERAL_SAVE_AS;Save as...
|
!GENERAL_SAVE_AS;Save as...
|
||||||
|
@ -2058,6 +2058,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: <b>-</b>
|
|||||||
!EXIFPANEL_SHOWALL;Show all
|
!EXIFPANEL_SHOWALL;Show all
|
||||||
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
||||||
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_RESET;Reset
|
!GENERAL_RESET;Reset
|
||||||
!GENERAL_SAVE_AS;Save as...
|
!GENERAL_SAVE_AS;Save as...
|
||||||
!GENERAL_SLIDER;Slider
|
!GENERAL_SLIDER;Slider
|
||||||
|
@ -568,6 +568,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
|
|||||||
!GENERAL_AUTO;Automatic
|
!GENERAL_AUTO;Automatic
|
||||||
!GENERAL_BEFORE;Before
|
!GENERAL_BEFORE;Before
|
||||||
!GENERAL_CLOSE;Close
|
!GENERAL_CLOSE;Close
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_FILE;File
|
!GENERAL_FILE;File
|
||||||
!GENERAL_NONE;None
|
!GENERAL_NONE;None
|
||||||
!GENERAL_OPEN;Open
|
!GENERAL_OPEN;Open
|
||||||
|
@ -1450,6 +1450,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: <b>-</b>
|
|||||||
!FILECHOOSER_FILTER_TIFF;TIFF files
|
!FILECHOOSER_FILTER_TIFF;TIFF files
|
||||||
!GENERAL_APPLY;Apply
|
!GENERAL_APPLY;Apply
|
||||||
!GENERAL_ASIMAGE;As Image
|
!GENERAL_ASIMAGE;As Image
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_OPEN;Open
|
!GENERAL_OPEN;Open
|
||||||
!GENERAL_RESET;Reset
|
!GENERAL_RESET;Reset
|
||||||
!GENERAL_SAVE_AS;Save as...
|
!GENERAL_SAVE_AS;Save as...
|
||||||
|
@ -1450,6 +1450,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: <b>-</b>
|
|||||||
!FILECHOOSER_FILTER_TIFF;TIFF files
|
!FILECHOOSER_FILTER_TIFF;TIFF files
|
||||||
!GENERAL_APPLY;Apply
|
!GENERAL_APPLY;Apply
|
||||||
!GENERAL_ASIMAGE;As Image
|
!GENERAL_ASIMAGE;As Image
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_OPEN;Open
|
!GENERAL_OPEN;Open
|
||||||
!GENERAL_RESET;Reset
|
!GENERAL_RESET;Reset
|
||||||
!GENERAL_SAVE_AS;Save as...
|
!GENERAL_SAVE_AS;Save as...
|
||||||
|
@ -2225,6 +2225,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: <b>-</b>
|
|||||||
!DYNPROFILEEDITOR_IMGTYPE_STD;Standard
|
!DYNPROFILEEDITOR_IMGTYPE_STD;Standard
|
||||||
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
||||||
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram.
|
!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram.
|
||||||
!HISTORY_MSG_489;DRC - Detail
|
!HISTORY_MSG_489;DRC - Detail
|
||||||
!HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction
|
!HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction
|
||||||
|
@ -1447,6 +1447,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: <b>-</b>
|
|||||||
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
|
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
|
||||||
!FILECHOOSER_FILTER_PP;Processing profiles
|
!FILECHOOSER_FILTER_PP;Processing profiles
|
||||||
!FILECHOOSER_FILTER_SAME;Same format as current photo
|
!FILECHOOSER_FILTER_SAME;Same format as current photo
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP.
|
!GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP.
|
||||||
!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram.
|
!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram.
|
||||||
!HISTORY_MSG_235;B&W - CM - Auto
|
!HISTORY_MSG_235;B&W - CM - Auto
|
||||||
|
@ -1301,6 +1301,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике <b>-</b>
|
|||||||
!FILECHOOSER_FILTER_TIFF;TIFF files
|
!FILECHOOSER_FILTER_TIFF;TIFF files
|
||||||
!GENERAL_APPLY;Apply
|
!GENERAL_APPLY;Apply
|
||||||
!GENERAL_ASIMAGE;As Image
|
!GENERAL_ASIMAGE;As Image
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_OPEN;Open
|
!GENERAL_OPEN;Open
|
||||||
!GENERAL_RESET;Reset
|
!GENERAL_RESET;Reset
|
||||||
!GENERAL_SAVE_AS;Save as...
|
!GENERAL_SAVE_AS;Save as...
|
||||||
|
@ -1301,6 +1301,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike <b>-</b>
|
|||||||
!FILECHOOSER_FILTER_TIFF;TIFF files
|
!FILECHOOSER_FILTER_TIFF;TIFF files
|
||||||
!GENERAL_APPLY;Apply
|
!GENERAL_APPLY;Apply
|
||||||
!GENERAL_ASIMAGE;As Image
|
!GENERAL_ASIMAGE;As Image
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_OPEN;Open
|
!GENERAL_OPEN;Open
|
||||||
!GENERAL_RESET;Reset
|
!GENERAL_RESET;Reset
|
||||||
!GENERAL_SAVE_AS;Save as...
|
!GENERAL_SAVE_AS;Save as...
|
||||||
|
@ -641,6 +641,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť <b>-</b>
|
|||||||
!GENERAL_ASIMAGE;As Image
|
!GENERAL_ASIMAGE;As Image
|
||||||
!GENERAL_AUTO;Automatic
|
!GENERAL_AUTO;Automatic
|
||||||
!GENERAL_CLOSE;Close
|
!GENERAL_CLOSE;Close
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_FILE;File
|
!GENERAL_FILE;File
|
||||||
!GENERAL_NONE;None
|
!GENERAL_NONE;None
|
||||||
!GENERAL_OPEN;Open
|
!GENERAL_OPEN;Open
|
||||||
|
@ -570,6 +570,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
|
|||||||
!GENERAL_AUTO;Automatic
|
!GENERAL_AUTO;Automatic
|
||||||
!GENERAL_BEFORE;Before
|
!GENERAL_BEFORE;Before
|
||||||
!GENERAL_CLOSE;Close
|
!GENERAL_CLOSE;Close
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_FILE;File
|
!GENERAL_FILE;File
|
||||||
!GENERAL_NONE;None
|
!GENERAL_NONE;None
|
||||||
!GENERAL_OPEN;Open
|
!GENERAL_OPEN;Open
|
||||||
|
@ -1826,6 +1826,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: <b>-</b>
|
|||||||
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles
|
||||||
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles
|
||||||
!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
|
!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_RESET;Reset
|
!GENERAL_RESET;Reset
|
||||||
!GENERAL_SAVE_AS;Save as...
|
!GENERAL_SAVE_AS;Save as...
|
||||||
!GENERAL_SLIDER;Slider
|
!GENERAL_SLIDER;Slider
|
||||||
|
@ -569,6 +569,7 @@ TP_WBALANCE_TEMPERATURE;Isı
|
|||||||
!GENERAL_AUTO;Automatic
|
!GENERAL_AUTO;Automatic
|
||||||
!GENERAL_BEFORE;Before
|
!GENERAL_BEFORE;Before
|
||||||
!GENERAL_CLOSE;Close
|
!GENERAL_CLOSE;Close
|
||||||
|
!GENERAL_CURRENT;Current
|
||||||
!GENERAL_FILE;File
|
!GENERAL_FILE;File
|
||||||
!GENERAL_NONE;None
|
!GENERAL_NONE;None
|
||||||
!GENERAL_OPEN;Open
|
!GENERAL_OPEN;Open
|
||||||
|
@ -17,9 +17,10 @@ CURVEEDITOR_AXIS_IN;I:
|
|||||||
CURVEEDITOR_AXIS_LEFT_TAN;LT:
|
CURVEEDITOR_AXIS_LEFT_TAN;LT:
|
||||||
CURVEEDITOR_AXIS_OUT;O:
|
CURVEEDITOR_AXIS_OUT;O:
|
||||||
CURVEEDITOR_AXIS_RIGHT_TAN;RT:
|
CURVEEDITOR_AXIS_RIGHT_TAN;RT:
|
||||||
|
CURVEEDITOR_CATMULLROM;Flexible
|
||||||
CURVEEDITOR_CURVE;Curve
|
CURVEEDITOR_CURVE;Curve
|
||||||
CURVEEDITOR_CURVES;Curves
|
CURVEEDITOR_CURVES;Curves
|
||||||
CURVEEDITOR_CUSTOM;Custom
|
CURVEEDITOR_CUSTOM;Standard
|
||||||
CURVEEDITOR_DARKS;Darks
|
CURVEEDITOR_DARKS;Darks
|
||||||
CURVEEDITOR_EDITPOINT_HINT;Enable edition of node in/out values.\n\nRight-click on a node to select it.\nRight-click on empty space to de-select the node.
|
CURVEEDITOR_EDITPOINT_HINT;Enable edition of node in/out values.\n\nRight-click on a node to select it.\nRight-click on empty space to de-select the node.
|
||||||
CURVEEDITOR_HIGHLIGHTS;Highlights
|
CURVEEDITOR_HIGHLIGHTS;Highlights
|
||||||
@ -223,6 +224,7 @@ GENERAL_AUTO;Automatic
|
|||||||
GENERAL_BEFORE;Before
|
GENERAL_BEFORE;Before
|
||||||
GENERAL_CANCEL;Cancel
|
GENERAL_CANCEL;Cancel
|
||||||
GENERAL_CLOSE;Close
|
GENERAL_CLOSE;Close
|
||||||
|
GENERAL_CURRENT;Current
|
||||||
GENERAL_DISABLE;Disable
|
GENERAL_DISABLE;Disable
|
||||||
GENERAL_DISABLED;Disabled
|
GENERAL_DISABLED;Disabled
|
||||||
GENERAL_ENABLE;Enable
|
GENERAL_ENABLE;Enable
|
||||||
|
@ -37,8 +37,8 @@ Redchro=0
|
|||||||
Bluechro=0
|
Bluechro=0
|
||||||
Gamma=1.7
|
Gamma=1.7
|
||||||
Passes=1
|
Passes=1
|
||||||
LCurve=0
|
LCurve=0;
|
||||||
CCCurve=0
|
CCCurve=0;
|
||||||
|
|
||||||
[LensProfile]
|
[LensProfile]
|
||||||
LcMode=lfauto
|
LcMode=lfauto
|
||||||
|
@ -38,8 +38,8 @@ Redchro=0
|
|||||||
Bluechro=0
|
Bluechro=0
|
||||||
Gamma=1.7
|
Gamma=1.7
|
||||||
Passes=1
|
Passes=1
|
||||||
LCurve=0
|
LCurve=0;
|
||||||
CCCurve=0
|
CCCurve=0;
|
||||||
|
|
||||||
[LensProfile]
|
[LensProfile]
|
||||||
LcMode=lfauto
|
LcMode=lfauto
|
||||||
|
@ -38,8 +38,8 @@ Redchro=0
|
|||||||
Bluechro=0
|
Bluechro=0
|
||||||
Gamma=1.7
|
Gamma=1.7
|
||||||
Passes=1
|
Passes=1
|
||||||
LCurve=0
|
LCurve=0;
|
||||||
CCCurve=0
|
CCCurve=0;
|
||||||
|
|
||||||
[LensProfile]
|
[LensProfile]
|
||||||
LcMode=lfauto
|
LcMode=lfauto
|
||||||
|
@ -38,8 +38,8 @@ Redchro=0
|
|||||||
Bluechro=0
|
Bluechro=0
|
||||||
Gamma=1.7
|
Gamma=1.7
|
||||||
Passes=1
|
Passes=1
|
||||||
LCurve=0
|
LCurve=0;
|
||||||
CCCurve=0
|
CCCurve=0;
|
||||||
|
|
||||||
[LensProfile]
|
[LensProfile]
|
||||||
LcMode=lfauto
|
LcMode=lfauto
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
This file is part of RawTherapee.
|
This file is part of RawTherapee.
|
||||||
|
|
||||||
Copyright (c) 2016-2018 TooWaBoo
|
Copyright (c) 2016-2018 TooWaBoo
|
||||||
Version 2.98
|
Version 3.00
|
||||||
|
|
||||||
RawTherapee is free software: you can redistribute it and/or modify
|
RawTherapee is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -1191,7 +1191,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
|||||||
/*** end ***************************************************************************************/
|
/*** end ***************************************************************************************/
|
||||||
|
|
||||||
/*** Context & popups menus *****************************************************************************/
|
/*** Context & popups menus *****************************************************************************/
|
||||||
.popup > decoration {
|
.csd.popup > decoration {
|
||||||
background-image: none;
|
background-image: none;
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
border: none;
|
border: none;
|
||||||
@ -1245,47 +1245,47 @@ menu image:not(.dummy),
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*** Selection popup list (used in filechooser) ***/
|
/*** Selection popup list (used in filechooser) ***/
|
||||||
entry > window > frame {
|
entry > window > frame:not(.dummy) {
|
||||||
background-color: @bg-dark-grey;
|
background-color: @bg-dark-grey;
|
||||||
|
padding: 0;
|
||||||
}
|
}
|
||||||
entry > window > frame > border {
|
entry > window > frame > border:not(.dummy) {
|
||||||
background-color: @bg-dark-grey;
|
background-color: @bg-dark-grey;
|
||||||
padding: 0.083333333333333333em;
|
padding: 0.083333333333333333em;
|
||||||
border: 0.083333333333333333em solid @accent-color;
|
|
||||||
}
|
|
||||||
entry > window > frame > border {
|
|
||||||
margin: 0.083333333333333333em;
|
margin: 0.083333333333333333em;
|
||||||
|
border: 0.083333333333333333em solid @accent-color;
|
||||||
}
|
}
|
||||||
/* end */
|
/* end */
|
||||||
|
|
||||||
/*** end ***************************************************************************************/
|
/*** end ***************************************************************************************/
|
||||||
|
|
||||||
/*** Popover *** Context menu filechooser ******************************************************/
|
/*** Popover *** Context menu filechooser ******************************************************/
|
||||||
|
popover {
|
||||||
popover.background {
|
box-shadow: 0 1px 6px 1px rgba(0, 0, 0, 0.5), 0 0 0 1px @bg-dark-grey;
|
||||||
|
}
|
||||||
|
popover {
|
||||||
background-color: @bg-dark-grey;
|
background-color: @bg-dark-grey;
|
||||||
border: 0.083333333333333333em solid @accent-color;
|
border: 0.083333333333333333em solid @accent-color;
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
box-shadow: 0 1px 6px 1px rgba(0, 0, 0, 0.5), 0 0 0 1px @bg-dark-grey;
|
|
||||||
}
|
}
|
||||||
popover.background > box {
|
popover > box {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: -9px;
|
margin: -9px;
|
||||||
}
|
}
|
||||||
popover.background modelbutton {
|
popover modelbutton {
|
||||||
min-height: 2em;
|
min-height: 2em;
|
||||||
padding: 0 0.416666666666666666em;
|
padding: 0 0.416666666666666666em;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
popover.background label {
|
popover label {
|
||||||
margin-right: 0.5em;
|
margin-right: 0.5em;
|
||||||
}
|
}
|
||||||
popover.background modelbutton:hover label,
|
popover modelbutton:hover label,
|
||||||
popover.background modelbutton:hover {
|
popover modelbutton:hover {
|
||||||
background-color: @accent-color;
|
background-color: @accent-color;
|
||||||
color: @text-hl-color;
|
color: @text-hl-color;
|
||||||
}
|
}
|
||||||
@ -2042,7 +2042,7 @@ entry:focus > selection {
|
|||||||
/*** end ***************************************************************************************/
|
/*** end ***************************************************************************************/
|
||||||
|
|
||||||
/*** Window Layout *****************************************************************************/
|
/*** Window Layout *****************************************************************************/
|
||||||
:not(.popup):not(tooltip) > decoration {
|
.csd:not(.popup):not(tooltip) > decoration {
|
||||||
background-color: @winHeaderbar;
|
background-color: @winHeaderbar;
|
||||||
background-image: none;
|
background-image: none;
|
||||||
border-radius: 0.416666666666666666em 0.416666666666666666em 0 0;
|
border-radius: 0.416666666666666666em 0.416666666666666666em 0 0;
|
||||||
@ -2057,14 +2057,10 @@ headerbar {
|
|||||||
background-image: linear-gradient(shade(@winHeaderbar,1.14), shade(@winHeaderbar,.86));
|
background-image: linear-gradient(shade(@winHeaderbar,1.14), shade(@winHeaderbar,.86));
|
||||||
border-bottom: 0.083333333333333333em solid @bg-dark-grey;
|
border-bottom: 0.083333333333333333em solid @bg-dark-grey;
|
||||||
border-radius: 0.416666666666666666em 0.416666666666666666em 0 0;
|
border-radius: 0.416666666666666666em 0.416666666666666666em 0 0;
|
||||||
min-height: 2.333333333333333333em;
|
min-height: 2em;
|
||||||
padding: 0.083333333333333333em 0.416666666666666666em 0;
|
padding: 0.083333333333333333em 0.416666666666666666em 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
messagedialog headerbar {
|
|
||||||
min-height: 2em;
|
|
||||||
|
|
||||||
}
|
|
||||||
headerbar .title{
|
headerbar .title{
|
||||||
color: @winTitle;
|
color: @winTitle;
|
||||||
}
|
}
|
||||||
@ -2076,7 +2072,7 @@ headerbar .title{
|
|||||||
/**/
|
/**/
|
||||||
|
|
||||||
/* Window in background */
|
/* Window in background */
|
||||||
:not(.popup):not(tooltip) > decoration:backdrop {
|
.csd:not(.popup):not(tooltip) > decoration:backdrop {
|
||||||
box-shadow: 0 0.25em 0.75em 0.083333333333333333em rgba(0, 0, 0, 0.3), 0 0 0 0.083333333333333333em @bg-dark-grey;
|
box-shadow: 0 0.25em 0.75em 0.083333333333333333em rgba(0, 0, 0, 0.3), 0 0 0 0.083333333333333333em @bg-dark-grey;
|
||||||
}
|
}
|
||||||
headerbar:backdrop {
|
headerbar:backdrop {
|
||||||
|
@ -1131,6 +1131,10 @@ Camera constants:
|
|||||||
},
|
},
|
||||||
|
|
||||||
// Canon Powershot
|
// Canon Powershot
|
||||||
|
{ // Quality C, CHDK DNGs, raw frame correction
|
||||||
|
"make_model": "Canon PowerShot A3100 IS",
|
||||||
|
"raw_crop": [ 24, 12, 4032, 3024 ] // full size 4036X3026
|
||||||
|
},
|
||||||
|
|
||||||
{ // Quality C, CHDK DNGs, raw frame corrections, experimental infrared support commented out
|
{ // Quality C, CHDK DNGs, raw frame corrections, experimental infrared support commented out
|
||||||
"make_model": "Canon PowerShot A480",
|
"make_model": "Canon PowerShot A480",
|
||||||
@ -1213,6 +1217,11 @@ Camera constants:
|
|||||||
"ranges": { "white": 4050 } // nominal 4080-4093
|
"ranges": { "white": 4050 } // nominal 4080-4093
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // Quality C
|
||||||
|
"make_model": "Canon PowerShot SX150 IS",
|
||||||
|
"raw_crop": [ 26, 10, 4364, 3254 ] // cut 2pix left and right
|
||||||
|
},
|
||||||
|
|
||||||
{ // Quality C
|
{ // Quality C
|
||||||
"make_model": "Canon PowerShot SX220 HS",
|
"make_model": "Canon PowerShot SX220 HS",
|
||||||
"raw_crop": [ 92, 16, 4072, 3042 ] // Cut 2pix at lower border because of too high values in blue channel
|
"raw_crop": [ 92, 16, 4072, 3042 ] // Cut 2pix at lower border because of too high values in blue channel
|
||||||
@ -1343,6 +1352,7 @@ Camera constants:
|
|||||||
"make_model": "LG mobile LG-H815",
|
"make_model": "LG mobile LG-H815",
|
||||||
"dcraw_matrix": [ 5859,547,-1250,-6484,15547,547,-2422,5625,3906 ], // DNG D65
|
"dcraw_matrix": [ 5859,547,-1250,-6484,15547,547,-2422,5625,3906 ], // DNG D65
|
||||||
//"dcraw_matrix": [ 11563,-2891,-3203,-5313,15625,625,-781,2813,5625 ], // DNG A
|
//"dcraw_matrix": [ 11563,-2891,-3203,-5313,15625,625,-781,2813,5625 ], // DNG A
|
||||||
|
"raw_crop": [ 0, 0, 5312, 2986 ], // cropped last two rows because last row was garbage
|
||||||
"ranges": { "white": 1000 }
|
"ranges": { "white": 1000 }
|
||||||
},
|
},
|
||||||
{ // Quality C
|
{ // Quality C
|
||||||
@ -1684,6 +1694,13 @@ Camera constants:
|
|||||||
"global_green_equilibration" : true
|
"global_green_equilibration" : true
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // Quality X
|
||||||
|
"make_model": [ "Panasonic DC-LX100M2" ],
|
||||||
|
"dcraw_matrix": [ 11577, -4230, -1106, -3967, 12211, 1957, -758, 1762, 5610 ], // Adobe DNG Converter 11.0 ColorMatrix2
|
||||||
|
"raw_crop": [ 0, 0, 0, 0 ],
|
||||||
|
"ranges": { "black": 15 }
|
||||||
|
},
|
||||||
|
|
||||||
{ // Quality C, proper ISO 100-125-160 samples missing, pixelshift files have no black offset etc. #4574
|
{ // Quality C, proper ISO 100-125-160 samples missing, pixelshift files have no black offset etc. #4574
|
||||||
"make_model": [ "Panasonic DC-G9" ],
|
"make_model": [ "Panasonic DC-G9" ],
|
||||||
"dcraw_matrix": [ 7685, -2375, -634, -3687, 11700, 2249, -748, 1546, 5111 ], // Adobe DNG Converter 10.3 ColorMatrix2
|
"dcraw_matrix": [ 7685, -2375, -634, -3687, 11700, 2249, -748, 1546, 5111 ], // Adobe DNG Converter 10.3 ColorMatrix2
|
||||||
|
@ -1,13 +1,8 @@
|
|||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#pragma GCC diagnostic push
|
#pragma GCC diagnostic push
|
||||||
#pragma GCC diagnostic ignored "-Warray-bounds"
|
|
||||||
#pragma GCC diagnostic ignored "-Wsign-compare"
|
#pragma GCC diagnostic ignored "-Wsign-compare"
|
||||||
#pragma GCC diagnostic ignored "-Wparentheses"
|
|
||||||
#if (__GNUC__ >= 6)
|
#if (__GNUC__ >= 6)
|
||||||
#pragma GCC diagnostic ignored "-Wmisleading-indentation"
|
#pragma GCC diagnostic ignored "-Wmisleading-indentation"
|
||||||
#if (__GNUC__ >= 7)
|
|
||||||
#pragma GCC diagnostic ignored "-Wdangling-else"
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1045,10 +1040,11 @@ void CLASS canon_sraw_load_raw()
|
|||||||
for (row=0; row < height; row++, ip+=width) {
|
for (row=0; row < height; row++, ip+=width) {
|
||||||
if (row & (jh.sraw >> 1))
|
if (row & (jh.sraw >> 1))
|
||||||
for (col=0; col < width; col+=2)
|
for (col=0; col < width; col+=2)
|
||||||
for (c=1; c < 3; c++)
|
for (c=1; c < 3; c++) {
|
||||||
if (row == height-1)
|
if (row == height-1)
|
||||||
ip[col][c] = ip[col-width][c];
|
ip[col][c] = ip[col-width][c];
|
||||||
else ip[col][c] = (ip[col-width][c] + ip[col+width][c] + 1) >> 1;
|
else ip[col][c] = (ip[col-width][c] + ip[col+width][c] + 1) >> 1;
|
||||||
|
}
|
||||||
for (col=1; col < width; col+=2)
|
for (col=1; col < width; col+=2)
|
||||||
for (c=1; c < 3; c++)
|
for (c=1; c < 3; c++)
|
||||||
if (col == width-1)
|
if (col == width-1)
|
||||||
|
@ -343,7 +343,7 @@ void parse_qt (int end);
|
|||||||
// ph1_bithuff(int nbits, ushort *huff);
|
// ph1_bithuff(int nbits, ushort *huff);
|
||||||
class ph1_bithuff_t {
|
class ph1_bithuff_t {
|
||||||
public:
|
public:
|
||||||
ph1_bithuff_t(DCraw *p, IMFILE *i, short &o):parent(p),order(o),ifp(i),bitbuf(0),vbits(0){}
|
ph1_bithuff_t(DCraw *p, IMFILE *i, short &o):order(o),ifp(i),bitbuf(0),vbits(0){}
|
||||||
unsigned operator()(int nbits, ushort *huff);
|
unsigned operator()(int nbits, ushort *huff);
|
||||||
unsigned operator()(int nbits);
|
unsigned operator()(int nbits);
|
||||||
unsigned operator()();
|
unsigned operator()();
|
||||||
@ -376,7 +376,6 @@ private:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DCraw *parent;
|
|
||||||
short ℴ
|
short ℴ
|
||||||
IMFILE* const ifp;
|
IMFILE* const ifp;
|
||||||
UINT64 bitbuf;
|
UINT64 bitbuf;
|
||||||
|
@ -828,9 +828,9 @@ void Crop::update(int todo)
|
|||||||
const int ch = baseCrop->getHeight();
|
const int ch = baseCrop->getHeight();
|
||||||
workingCrop = new Imagefloat(cw, ch);
|
workingCrop = new Imagefloat(cw, ch);
|
||||||
//first put gamma TRC to 1
|
//first put gamma TRC to 1
|
||||||
parent->ipf.workingtrc(baseCrop, workingCrop, cw, ch, -5, params.icm.workingProfile, 2.4, 12.92310, true, false);
|
parent->ipf.workingtrc(baseCrop, workingCrop, cw, ch, -5, params.icm.workingProfile, 2.4, 12.92310, parent->getCustomTransformIn(), true, false, true);
|
||||||
//adjust gamma TRC
|
//adjust gamma TRC
|
||||||
parent->ipf.workingtrc(workingCrop, workingCrop, cw, ch, 5, params.icm.workingProfile, params.icm.workingTRCGamma, params.icm.workingTRCSlope, false, true);
|
parent->ipf.workingtrc(workingCrop, workingCrop, cw, ch, 5, params.icm.workingProfile, params.icm.workingTRCGamma, params.icm.workingTRCSlope, parent->getCustomTransformOut(), false, true, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
double rrm, ggm, bbm;
|
double rrm, ggm, bbm;
|
||||||
@ -955,7 +955,6 @@ void Crop::update(int todo)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// int moderetinex;
|
// int moderetinex;
|
||||||
// parent->ipf.MSR(labnCrop, labnCrop->W, labnCrop->H, 1);
|
|
||||||
parent->ipf.chromiLuminanceCurve(this, 1, labnCrop, labnCrop, parent->chroma_acurve, parent->chroma_bcurve, parent->satcurve, parent->lhskcurve, parent->clcurve, parent->lumacurve, utili, autili, butili, ccutili, cclutili, clcutili, dummy, dummy);
|
parent->ipf.chromiLuminanceCurve(this, 1, labnCrop, labnCrop, parent->chroma_acurve, parent->chroma_bcurve, parent->satcurve, parent->lhskcurve, parent->clcurve, parent->lumacurve, utili, autili, butili, ccutili, cclutili, clcutili, dummy, dummy);
|
||||||
parent->ipf.vibrance(labnCrop);
|
parent->ipf.vibrance(labnCrop);
|
||||||
parent->ipf.labColorCorrectionRegions(labnCrop);
|
parent->ipf.labColorCorrectionRegions(labnCrop);
|
||||||
|
@ -1425,8 +1425,6 @@ void RawImageSource::igv_interpolate(int winw, int winh)
|
|||||||
chr[2] = hdif;
|
chr[2] = hdif;
|
||||||
chr[3] = vdif;
|
chr[3] = vdif;
|
||||||
|
|
||||||
border_interpolate2(winw, winh, 7, rawData, red, green, blue);
|
|
||||||
|
|
||||||
if (plistener) {
|
if (plistener) {
|
||||||
plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::IGV)));
|
plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::IGV)));
|
||||||
plistener->setProgress (0.0);
|
plistener->setProgress (0.0);
|
||||||
@ -1781,6 +1779,7 @@ void RawImageSource::igv_interpolate(int winw, int winh)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}// End of parallelization
|
}// End of parallelization
|
||||||
|
border_interpolate2(winw, winh, 8, rawData, red, green, blue);
|
||||||
|
|
||||||
if (plistener) {
|
if (plistener) {
|
||||||
plistener->setProgress (1.0);
|
plistener->setProgress (1.0);
|
||||||
@ -1815,8 +1814,6 @@ void RawImageSource::igv_interpolate(int winw, int winh)
|
|||||||
vdif = (float (*)) calloc(width * height / 2, sizeof * vdif);
|
vdif = (float (*)) calloc(width * height / 2, sizeof * vdif);
|
||||||
hdif = (float (*)) calloc(width * height / 2, sizeof * hdif);
|
hdif = (float (*)) calloc(width * height / 2, sizeof * hdif);
|
||||||
|
|
||||||
border_interpolate2(winw, winh, 7, rawData, red, green, blue);
|
|
||||||
|
|
||||||
if (plistener) {
|
if (plistener) {
|
||||||
plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::IGV)));
|
plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::IGV)));
|
||||||
plistener->setProgress (0.0);
|
plistener->setProgress (0.0);
|
||||||
@ -2045,6 +2042,8 @@ void RawImageSource::igv_interpolate(int winw, int winh)
|
|||||||
blue [row][col] = CLIP(rgb[1][indx] - 65535.f * chr[1][indx]);
|
blue [row][col] = CLIP(rgb[1][indx] - 65535.f * chr[1][indx]);
|
||||||
}
|
}
|
||||||
}// End of parallelization
|
}// End of parallelization
|
||||||
|
border_interpolate2(winw, winh, 8, rawData, red, green, blue);
|
||||||
|
|
||||||
|
|
||||||
if (plistener) {
|
if (plistener) {
|
||||||
plistener->setProgress (1.0);
|
plistener->setProgress (1.0);
|
||||||
@ -3083,6 +3082,7 @@ BENCHFUN
|
|||||||
free(buffer0);
|
free(buffer0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
border_interpolate2(W, H, 1, rawData, red, green, blue);
|
||||||
if(plistener) {
|
if(plistener) {
|
||||||
plistener->setProgress (1.0);
|
plistener->setProgress (1.0);
|
||||||
}
|
}
|
||||||
|
@ -48,7 +48,7 @@ DiagonalCurve::DiagonalCurve (const std::vector<double>& p, int poly_pn)
|
|||||||
bool identity = true;
|
bool identity = true;
|
||||||
kind = (DiagonalCurveType)p[0];
|
kind = (DiagonalCurveType)p[0];
|
||||||
|
|
||||||
if (kind == DCT_Linear || kind == DCT_Spline || kind == DCT_NURBS) {
|
if (kind == DCT_Linear || kind == DCT_Spline || kind == DCT_NURBS || kind == DCT_CatumullRom) {
|
||||||
N = (p.size() - 1) / 2;
|
N = (p.size() - 1) / 2;
|
||||||
x = new double[N];
|
x = new double[N];
|
||||||
y = new double[N];
|
y = new double[N];
|
||||||
@ -86,11 +86,12 @@ DiagonalCurve::DiagonalCurve (const std::vector<double>& p, int poly_pn)
|
|||||||
|
|
||||||
if (!identity) {
|
if (!identity) {
|
||||||
if (kind == DCT_Spline && N > 2) {
|
if (kind == DCT_Spline && N > 2) {
|
||||||
//spline_cubic_set ();
|
spline_cubic_set ();
|
||||||
catmull_rom_set();
|
|
||||||
} else if (kind == DCT_NURBS && N > 2) {
|
} else if (kind == DCT_NURBS && N > 2) {
|
||||||
NURBS_set ();
|
NURBS_set ();
|
||||||
fillHash();
|
fillHash();
|
||||||
|
} else if (kind == DCT_CatumullRom && N > 2) {
|
||||||
|
catmull_rom_set();
|
||||||
} else {
|
} else {
|
||||||
kind = DCT_Linear;
|
kind = DCT_Linear;
|
||||||
}
|
}
|
||||||
@ -325,6 +326,9 @@ inline void catmull_rom_spline(int n_points,
|
|||||||
if (p1_y == p2_y && (p1_y == 0 || p1_y == 1)) {
|
if (p1_y == p2_y && (p1_y == 0 || p1_y == 1)) {
|
||||||
for (i = 1; i < n_points-1; ++i) {
|
for (i = 1; i < n_points-1; ++i) {
|
||||||
t = p1_x + space * i;
|
t = p1_x + space * i;
|
||||||
|
if (t >= p2_x) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
res_x.push_back(t);
|
res_x.push_back(t);
|
||||||
res_y.push_back(p1_y);
|
res_y.push_back(p1_y);
|
||||||
}
|
}
|
||||||
@ -459,7 +463,7 @@ double DiagonalCurve::getVal (double t) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
case DCT_Linear :
|
case DCT_Linear :
|
||||||
// case DCT_Spline :
|
case DCT_Spline :
|
||||||
{
|
{
|
||||||
// values under and over the first and last point
|
// values under and over the first and last point
|
||||||
if (t > x[N - 1]) {
|
if (t > x[N - 1]) {
|
||||||
@ -484,21 +488,21 @@ double DiagonalCurve::getVal (double t) const
|
|||||||
double h = x[k_hi] - x[k_lo];
|
double h = x[k_hi] - x[k_lo];
|
||||||
|
|
||||||
// linear
|
// linear
|
||||||
// if (kind == DCT_Linear) {
|
if (kind == DCT_Linear) {
|
||||||
return y[k_lo] + (t - x[k_lo]) * ( y[k_hi] - y[k_lo] ) / h;
|
return y[k_lo] + (t - x[k_lo]) * ( y[k_hi] - y[k_lo] ) / h;
|
||||||
// }
|
}
|
||||||
// // spline curve
|
// spline curve
|
||||||
// else { // if (kind==Spline) {
|
else { // if (kind==Spline) {
|
||||||
// double a = (x[k_hi] - t) / h;
|
double a = (x[k_hi] - t) / h;
|
||||||
// double b = (t - x[k_lo]) / h;
|
double b = (t - x[k_lo]) / h;
|
||||||
// double r = a * y[k_lo] + b * y[k_hi] + ((a * a * a - a) * ypp[k_lo] + (b * b * b - b) * ypp[k_hi]) * (h * h) * 0.1666666666666666666666666666666;
|
double r = a * y[k_lo] + b * y[k_hi] + ((a * a * a - a) * ypp[k_lo] + (b * b * b - b) * ypp[k_hi]) * (h * h) * 0.1666666666666666666666666666666;
|
||||||
// return CLIPD(r);
|
return CLIPD(r);
|
||||||
// }
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case DCT_Spline: {
|
case DCT_CatumullRom: {
|
||||||
auto it = std::lower_bound(poly_x.begin(), poly_x.end(), t);
|
auto it = std::lower_bound(poly_x.begin(), poly_x.end(), t);
|
||||||
if (it == poly_x.end()) {
|
if (it == poly_x.end()) {
|
||||||
return poly_y.back();
|
return poly_y.back();
|
||||||
|
@ -34,7 +34,7 @@ GamutWarning::GamutWarning(cmsHPROFILE iprof, cmsHPROFILE gamutprof, RenderingIn
|
|||||||
softproof2ref(nullptr)
|
softproof2ref(nullptr)
|
||||||
{
|
{
|
||||||
if (cmsIsMatrixShaper(gamutprof) && !cmsIsCLUT(gamutprof, intent, LCMS_USED_AS_OUTPUT)) {
|
if (cmsIsMatrixShaper(gamutprof) && !cmsIsCLUT(gamutprof, intent, LCMS_USED_AS_OUTPUT)) {
|
||||||
cmsHPROFILE aces = ICCStore::getInstance()->getProfile("RTv4_ACES-AP0");
|
cmsHPROFILE aces = ICCStore::getInstance()->workingSpace("ACESp0");
|
||||||
if (aces) {
|
if (aces) {
|
||||||
lab2ref = cmsCreateTransform(iprof, TYPE_Lab_FLT, aces, TYPE_RGB_FLT, INTENT_ABSOLUTE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE);
|
lab2ref = cmsCreateTransform(iprof, TYPE_Lab_FLT, aces, TYPE_RGB_FLT, INTENT_ABSOLUTE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE);
|
||||||
lab2softproof = cmsCreateTransform(iprof, TYPE_Lab_FLT, gamutprof, TYPE_RGB_FLT, INTENT_ABSOLUTE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE);
|
lab2softproof = cmsCreateTransform(iprof, TYPE_Lab_FLT, gamutprof, TYPE_RGB_FLT, INTENT_ABSOLUTE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE);
|
||||||
@ -81,6 +81,10 @@ void GamutWarning::markLine(Image8 *image, int y, float *srcbuf, float *buf1, fl
|
|||||||
|
|
||||||
float delta_max = lab2ref ? 0.0001f : 4.9999f;
|
float delta_max = lab2ref ? 0.0001f : 4.9999f;
|
||||||
cmsDoTransform(lab2softproof, srcbuf, buf2, width);
|
cmsDoTransform(lab2softproof, srcbuf, buf2, width);
|
||||||
|
// since we are checking for out-of-gamut, we do want to clamp here!
|
||||||
|
for (int i = 0; i < width * 3; ++i) {
|
||||||
|
buf2[i] = LIM01(buf2[i]);
|
||||||
|
}
|
||||||
cmsDoTransform(softproof2ref, buf2, buf1, width);
|
cmsDoTransform(softproof2ref, buf2, buf1, width);
|
||||||
|
|
||||||
float *proofdata = buf1;
|
float *proofdata = buf1;
|
||||||
|
@ -97,55 +97,6 @@ int findMatch(int val, const std::vector<int> &cdf, int j)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class CubicSplineCurve: public DiagonalCurve {
|
|
||||||
public:
|
|
||||||
CubicSplineCurve(const std::vector<double> &points):
|
|
||||||
DiagonalCurve({DCT_Linear})
|
|
||||||
{
|
|
||||||
N = points.size() / 2;
|
|
||||||
x = new double[N];
|
|
||||||
y = new double[N];
|
|
||||||
|
|
||||||
for (int i = 0; i < N; ++i) {
|
|
||||||
x[i] = points[2*i];
|
|
||||||
y[i] = points[2*i+1];
|
|
||||||
}
|
|
||||||
kind = DCT_Spline;
|
|
||||||
spline_cubic_set();
|
|
||||||
}
|
|
||||||
|
|
||||||
double getVal(double t) const override
|
|
||||||
{
|
|
||||||
// values under and over the first and last point
|
|
||||||
if (t > x[N - 1]) {
|
|
||||||
return y[N - 1];
|
|
||||||
} else if (t < x[0]) {
|
|
||||||
return y[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
// do a binary search for the right interval:
|
|
||||||
unsigned int k_lo = 0, k_hi = N - 1;
|
|
||||||
|
|
||||||
while (k_hi > 1 + k_lo) {
|
|
||||||
unsigned int k = (k_hi + k_lo) / 2;
|
|
||||||
|
|
||||||
if (x[k] > t) {
|
|
||||||
k_hi = k;
|
|
||||||
} else {
|
|
||||||
k_lo = k;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
double h = x[k_hi] - x[k_lo];
|
|
||||||
|
|
||||||
double a = (x[k_hi] - t) / h;
|
|
||||||
double b = (t - x[k_lo]) / h;
|
|
||||||
double r = a * y[k_lo] + b * y[k_hi] + ((a * a * a - a) * ypp[k_lo] + (b * b * b - b) * ypp[k_hi]) * (h * h) * 0.1666666666666666666666666666666;
|
|
||||||
return LIM01(r);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
void mappingToCurve(const std::vector<int> &mapping, std::vector<double> &curve)
|
void mappingToCurve(const std::vector<int> &mapping, std::vector<double> &curve)
|
||||||
{
|
{
|
||||||
curve.clear();
|
curve.clear();
|
||||||
@ -259,10 +210,11 @@ void mappingToCurve(const std::vector<int> &mapping, std::vector<double> &curve)
|
|||||||
if (curve.size() < 4) {
|
if (curve.size() < 4) {
|
||||||
curve = { DCT_Linear }; // not enough points, fall back to linear
|
curve = { DCT_Linear }; // not enough points, fall back to linear
|
||||||
} else {
|
} else {
|
||||||
CubicSplineCurve c(curve);
|
curve.insert(curve.begin(), DCT_Spline);
|
||||||
|
DiagonalCurve c(curve);
|
||||||
double gap = 0.05;
|
double gap = 0.05;
|
||||||
double x = 0.0;
|
double x = 0.0;
|
||||||
curve = { DCT_Spline };
|
curve = { DCT_CatumullRom };
|
||||||
while (x < 1.0) {
|
while (x < 1.0) {
|
||||||
curve.push_back(x);
|
curve.push_back(x);
|
||||||
curve.push_back(c.getVal(x));
|
curve.push_back(c.getVal(x));
|
||||||
|
@ -310,20 +310,6 @@ Image8* Image16::to8() const
|
|||||||
return img8;
|
return img8;
|
||||||
}
|
}
|
||||||
|
|
||||||
Imagefloat* Image16::tofloat() const
|
|
||||||
{
|
|
||||||
Imagefloat* imgfloat = new Imagefloat(width, height);
|
|
||||||
|
|
||||||
for (int h = 0; h < height; ++h) {
|
|
||||||
for (int w = 0; w < width; ++w) {
|
|
||||||
imgfloat->r(h, w) = r(h, w);
|
|
||||||
imgfloat->g(h, w) = g(h, w);
|
|
||||||
imgfloat->b(h, w) = b(h, w);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return imgfloat;
|
|
||||||
}
|
|
||||||
// Parallelized transformation; create transform with cmsFLAGS_NOCACHE!
|
// Parallelized transformation; create transform with cmsFLAGS_NOCACHE!
|
||||||
void Image16::ExecCMSTransform(cmsHTRANSFORM hTransform)
|
void Image16::ExecCMSTransform(cmsHTRANSFORM hTransform)
|
||||||
{
|
{
|
||||||
|
@ -43,7 +43,6 @@ public:
|
|||||||
Image16* copy() const;
|
Image16* copy() const;
|
||||||
|
|
||||||
Image8* to8() const;
|
Image8* to8() const;
|
||||||
Imagefloat* tofloat() const;
|
|
||||||
|
|
||||||
void getStdImage(const ColorTemp &ctemp, int tran, Imagefloat* image, PreviewProps pp) const override;
|
void getStdImage(const ColorTemp &ctemp, int tran, Imagefloat* image, PreviewProps pp) const override;
|
||||||
|
|
||||||
|
@ -76,7 +76,6 @@ public:
|
|||||||
virtual void flushRGB () {};
|
virtual void flushRGB () {};
|
||||||
virtual void HLRecovery_Global (const ToneCurveParams &hrp) {};
|
virtual void HLRecovery_Global (const ToneCurveParams &hrp) {};
|
||||||
virtual void HLRecovery_inpaint (float** red, float** green, float** blue) {};
|
virtual void HLRecovery_inpaint (float** red, float** green, float** blue) {};
|
||||||
virtual void MSR (LabImage* lab, LUTf & mapcurve, bool &mapcontlutili, int width, int height, int skip, RetinexParams deh, const RetinextransmissionCurve & dehatransmissionCurve, const RetinexgaintransmissionCurve & dehagaintransmissionCurve, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax) {};
|
|
||||||
|
|
||||||
virtual bool isRGBSourceModified () const = 0; // tracks whether cached rgb output of demosaic has been modified
|
virtual bool isRGBSourceModified () const = 0; // tracks whether cached rgb output of demosaic has been modified
|
||||||
|
|
||||||
|
@ -102,8 +102,12 @@ ImProcCoordinator::ImProcCoordinator()
|
|||||||
pW(-1), pH(-1),
|
pW(-1), pH(-1),
|
||||||
plistener(nullptr), imageListener(nullptr), aeListener(nullptr), acListener(nullptr), abwListener(nullptr), awbListener(nullptr), flatFieldAutoClipListener(nullptr), bayerAutoContrastListener(nullptr), xtransAutoContrastListener(nullptr), frameCountListener(nullptr), imageTypeListener(nullptr), actListener(nullptr), adnListener(nullptr), awavListener(nullptr), dehaListener(nullptr), hListener(nullptr),
|
plistener(nullptr), imageListener(nullptr), aeListener(nullptr), acListener(nullptr), abwListener(nullptr), awbListener(nullptr), flatFieldAutoClipListener(nullptr), bayerAutoContrastListener(nullptr), xtransAutoContrastListener(nullptr), frameCountListener(nullptr), imageTypeListener(nullptr), actListener(nullptr), adnListener(nullptr), awavListener(nullptr), dehaListener(nullptr), hListener(nullptr),
|
||||||
resultValid(false), lastOutputProfile("BADFOOD"), lastOutputIntent(RI__COUNT), lastOutputBPC(false), thread(nullptr), changeSinceLast(0), updaterRunning(false), destroying(false), utili(false), autili(false),
|
resultValid(false), lastOutputProfile("BADFOOD"), lastOutputIntent(RI__COUNT), lastOutputBPC(false), thread(nullptr), changeSinceLast(0), updaterRunning(false), destroying(false), utili(false), autili(false),
|
||||||
butili(false), ccutili(false), cclutili(false), clcutili(false), opautili(false), wavcontlutili(false),
|
butili(false), ccutili(false), cclutili(false), clcutili(false), opautili(false), wavcontlutili(false), colourToningSatLimit(0.f), colourToningSatLimitOpacity(0.f), highQualityComputed(false), customTransformIn(nullptr), customTransformOut(nullptr),
|
||||||
locallutili(false), localcutili(false), localskutili(false), localexutili(false), LHutili(false), HHutili(false),
|
locallutili(false), localcutili(false), localskutili(false), localexutili(false), LHutili(false), HHutili(false),
|
||||||
|
|
||||||
|
// plistener(nullptr), imageListener(nullptr), aeListener(nullptr), acListener(nullptr), abwListener(nullptr), awbListener(nullptr), flatFieldAutoClipListener(nullptr), bayerAutoContrastListener(nullptr), xtransAutoContrastListener(nullptr), frameCountListener(nullptr), imageTypeListener(nullptr), actListener(nullptr), adnListener(nullptr), awavListener(nullptr), dehaListener(nullptr), hListener(nullptr),
|
||||||
|
// resultValid(false), lastOutputProfile("BADFOOD"), lastOutputIntent(RI__COUNT), lastOutputBPC(false), thread(nullptr), changeSinceLast(0), updaterRunning(false), destroying(false), utili(false), autili(false),
|
||||||
|
// butili(false), ccutili(false), cclutili(false), clcutili(false), opautili(false), wavcontlutili(false), colourToningSatLimit(0.f), colourToningSatLimitOpacity(0.f), highQualityComputed(false), customTransformIn(nullptr), customTransformOut(nullptr)
|
||||||
centerx(500, -10000),
|
centerx(500, -10000),
|
||||||
centery(500, -10000),
|
centery(500, -10000),
|
||||||
|
|
||||||
@ -117,7 +121,7 @@ ImProcCoordinator::ImProcCoordinator()
|
|||||||
chromar(0),
|
chromar(0),
|
||||||
lumar(0),
|
lumar(0),
|
||||||
sobeler(0),
|
sobeler(0),
|
||||||
colourToningSatLimit(0.f), colourToningSatLimitOpacity(0.f), lastspotdup(false), highQualityComputed(false),
|
lastspotdup(false),
|
||||||
|
|
||||||
retistrsav(nullptr)
|
retistrsav(nullptr)
|
||||||
{}
|
{}
|
||||||
@ -153,6 +157,17 @@ ImProcCoordinator::~ImProcCoordinator()
|
|||||||
}
|
}
|
||||||
|
|
||||||
imgsrc->decreaseRef();
|
imgsrc->decreaseRef();
|
||||||
|
|
||||||
|
if(customTransformIn) {
|
||||||
|
cmsDeleteTransform(customTransformIn);
|
||||||
|
customTransformIn = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(customTransformOut) {
|
||||||
|
cmsDeleteTransform(customTransformOut);
|
||||||
|
customTransformOut = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
updaterThreadStart.unlock();
|
updaterThreadStart.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -545,9 +560,17 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
|
|||||||
const int cw = oprevi->getWidth();
|
const int cw = oprevi->getWidth();
|
||||||
const int ch = oprevi->getHeight();
|
const int ch = oprevi->getHeight();
|
||||||
// put gamma TRC to 1
|
// put gamma TRC to 1
|
||||||
ipf.workingtrc(oprevi, oprevi, cw, ch, -5, params.icm.workingProfile, 2.4, 12.92310, true, false);
|
if(customTransformIn) {
|
||||||
|
cmsDeleteTransform(customTransformIn);
|
||||||
|
customTransformIn = nullptr;
|
||||||
|
}
|
||||||
|
ipf.workingtrc(oprevi, oprevi, cw, ch, -5, params.icm.workingProfile, 2.4, 12.92310, customTransformIn, true, false, true);
|
||||||
//adjust TRC
|
//adjust TRC
|
||||||
ipf.workingtrc(oprevi, oprevi, cw, ch, 5, params.icm.workingProfile, params.icm.workingTRCGamma, params.icm.workingTRCSlope, false, true);
|
if(customTransformOut) {
|
||||||
|
cmsDeleteTransform(customTransformOut);
|
||||||
|
customTransformOut = nullptr;
|
||||||
|
}
|
||||||
|
ipf.workingtrc(oprevi, oprevi, cw, ch, 5, params.icm.workingProfile, params.icm.workingTRCGamma, params.icm.workingTRCSlope, customTransformOut, false, true, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -259,7 +259,8 @@ protected:
|
|||||||
float colourToningSatLimitOpacity;
|
float colourToningSatLimitOpacity;
|
||||||
bool lastspotdup;
|
bool lastspotdup;
|
||||||
bool highQualityComputed;
|
bool highQualityComputed;
|
||||||
|
cmsHTRANSFORM customTransformIn;
|
||||||
|
cmsHTRANSFORM customTransformOut;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
ImProcCoordinator ();
|
ImProcCoordinator ();
|
||||||
@ -418,6 +419,16 @@ public:
|
|||||||
return imgsrc;
|
return imgsrc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cmsHTRANSFORM& getCustomTransformIn ()
|
||||||
|
{
|
||||||
|
return customTransformIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmsHTRANSFORM& getCustomTransformOut ()
|
||||||
|
{
|
||||||
|
return customTransformOut;
|
||||||
|
}
|
||||||
|
|
||||||
struct DenoiseInfoStore {
|
struct DenoiseInfoStore {
|
||||||
DenoiseInfoStore() : chM(0), max_r{}, max_b{}, ch_M{}, valid(false) {}
|
DenoiseInfoStore() : chM(0), max_r{}, max_b{}, ch_M{}, valid(false) {}
|
||||||
float chM;
|
float chM;
|
||||||
|
@ -2484,21 +2484,7 @@ void ImProcFunctions::rgbProc(Imagefloat* working, LabImage* lab, PipetteBuffer
|
|||||||
btemp[ti * TS + tj] = b;
|
btemp[ti * TS + tj] = b;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
for (int i = istart, ti = 0; i < tH; i++, ti++) {
|
|
||||||
for (int j = jstart, tj = 0; j < tW; j++, tj++) {
|
|
||||||
// clip out of gamut colors, without distorting colour too bad
|
|
||||||
float r = std::max(rtemp[ti * TS + tj], 0.f);
|
|
||||||
float g = std::max(gtemp[ti * TS + tj], 0.f);
|
|
||||||
float b = std::max(btemp[ti * TS + tj], 0.f);
|
|
||||||
|
|
||||||
if (OOG(max(r, g, b)) && !OOG(min(r, g, b))) {
|
|
||||||
filmlike_clip(&r, &g, &b);
|
|
||||||
}
|
|
||||||
|
|
||||||
setUnlessOOG(rtemp[ti * TS + tj], gtemp[ti * TS + tj], btemp[ti * TS + tj], r, g, b);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (histToneCurveThr) {
|
if (histToneCurveThr) {
|
||||||
|
@ -407,7 +407,7 @@ public:
|
|||||||
Image8* lab2rgb(LabImage* lab, int cx, int cy, int cw, int ch, const procparams::ColorManagementParams &icm, bool consider_histogram_settings = true);
|
Image8* lab2rgb(LabImage* lab, int cx, int cy, int cw, int ch, const procparams::ColorManagementParams &icm, bool consider_histogram_settings = true);
|
||||||
Imagefloat* lab2rgbOut(LabImage* lab, int cx, int cy, int cw, int ch, const procparams::ColorManagementParams &icm);
|
Imagefloat* lab2rgbOut(LabImage* lab, int cx, int cy, int cw, int ch, const procparams::ColorManagementParams &icm);
|
||||||
// CieImage *ciec;
|
// CieImage *ciec;
|
||||||
void workingtrc(const Imagefloat* src, Imagefloat* dst, int cw, int ch, int mul, const Glib::ustring &profile, double gampos, double slpos, bool normalizeIn = true, bool normalizeOut = true);
|
void workingtrc(const Imagefloat* src, Imagefloat* dst, int cw, int ch, int mul, const Glib::ustring &profile, double gampos, double slpos, cmsHTRANSFORM &transform, bool normalizeIn = true, bool normalizeOut = true, bool keepTransForm = false) const;
|
||||||
|
|
||||||
bool transCoord(int W, int H, int x, int y, int w, int h, int& xv, int& yv, int& wv, int& hv, double ascaleDef = -1, const LensCorrection *pLCPMap = nullptr);
|
bool transCoord(int W, int H, int x, int y, int w, int h, int& xv, int& yv, int& wv, int& hv, double ascaleDef = -1, const LensCorrection *pLCPMap = nullptr);
|
||||||
bool transCoord(int W, int H, const std::vector<Coord2D> &src, std::vector<Coord2D> &red, std::vector<Coord2D> &green, std::vector<Coord2D> &blue, double ascaleDef = -1, const LensCorrection *pLCPMap = nullptr);
|
bool transCoord(int W, int H, const std::vector<Coord2D> &src, std::vector<Coord2D> &red, std::vector<Coord2D> &green, std::vector<Coord2D> &blue, double ascaleDef = -1, const LensCorrection *pLCPMap = nullptr);
|
||||||
|
@ -357,7 +357,7 @@ Imagefloat* ImProcFunctions::lab2rgbOut(LabImage* lab, int cx, int cy, int cw, i
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ImProcFunctions::workingtrc(const Imagefloat* src, Imagefloat* dst, int cw, int ch, int mul, const Glib::ustring &profile, double gampos, double slpos, bool normalizeIn, bool normalizeOut)
|
void ImProcFunctions::workingtrc(const Imagefloat* src, Imagefloat* dst, int cw, int ch, int mul, const Glib::ustring &profile, double gampos, double slpos, cmsHTRANSFORM &transform, bool normalizeIn, bool normalizeOut, bool keepTransForm) const
|
||||||
{
|
{
|
||||||
const TMatrix wprof = ICCStore::getInstance()->workingSpaceMatrix(params->icm.workingProfile);
|
const TMatrix wprof = ICCStore::getInstance()->workingSpaceMatrix(params->icm.workingProfile);
|
||||||
|
|
||||||
@ -382,6 +382,11 @@ void ImProcFunctions::workingtrc(const Imagefloat* src, Imagefloat* dst, int cw,
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
cmsHTRANSFORM hTransform = nullptr;
|
||||||
|
if (transform) {
|
||||||
|
hTransform = transform;
|
||||||
|
} else {
|
||||||
|
|
||||||
double pwr = 1.0 / gampos;
|
double pwr = 1.0 / gampos;
|
||||||
double ts = slpos;
|
double ts = slpos;
|
||||||
int five = mul;
|
int five = mul;
|
||||||
@ -527,15 +532,17 @@ void ImProcFunctions::workingtrc(const Imagefloat* src, Imagefloat* dst, int cw,
|
|||||||
{p[4], p[5], 1.0} // blue
|
{p[4], p[5], 1.0} // blue
|
||||||
};
|
};
|
||||||
const cmsHPROFILE oprofdef = cmsCreateRGBProfile(&xyD, &Primaries, GammaTRC);
|
const cmsHPROFILE oprofdef = cmsCreateRGBProfile(&xyD, &Primaries, GammaTRC);
|
||||||
|
|
||||||
cmsFreeToneCurve(GammaTRC[0]);
|
cmsFreeToneCurve(GammaTRC[0]);
|
||||||
|
|
||||||
if (oprofdef) {
|
if (oprofdef) {
|
||||||
constexpr cmsUInt32Number flags = cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE;
|
constexpr cmsUInt32Number flags = cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE;
|
||||||
const cmsHPROFILE iprof = ICCStore::getInstance()->getXYZProfile();
|
const cmsHPROFILE iprof = ICCStore::getInstance()->getXYZProfile();
|
||||||
lcmsMutex->lock();
|
lcmsMutex->lock();
|
||||||
const cmsHTRANSFORM hTransform = cmsCreateTransform(iprof, TYPE_RGB_FLT, oprofdef, TYPE_RGB_FLT, params->icm.outputIntent, flags);
|
hTransform = cmsCreateTransform(iprof, TYPE_RGB_FLT, oprofdef, TYPE_RGB_FLT, params->icm.outputIntent, flags);
|
||||||
lcmsMutex->unlock();
|
lcmsMutex->unlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (hTransform) {
|
||||||
#ifdef _OPENMP
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel if (multiThread)
|
#pragma omp parallel if (multiThread)
|
||||||
#endif
|
#endif
|
||||||
@ -567,8 +574,11 @@ void ImProcFunctions::workingtrc(const Imagefloat* src, Imagefloat* dst, int cw,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!keepTransForm) {
|
||||||
cmsDeleteTransform(hTransform);
|
cmsDeleteTransform(hTransform);
|
||||||
|
hTransform = nullptr;
|
||||||
|
}
|
||||||
|
transform = hTransform;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,10 +20,9 @@
|
|||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
#include <cstddef>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <iostream>
|
|
||||||
#include <vector>
|
|
||||||
#ifdef _OPENMP
|
#ifdef _OPENMP
|
||||||
#include <omp.h>
|
#include <omp.h>
|
||||||
#endif
|
#endif
|
||||||
@ -33,7 +32,6 @@
|
|||||||
#include "rt_algo.h"
|
#include "rt_algo.h"
|
||||||
#include "rt_math.h"
|
#include "rt_math.h"
|
||||||
#include "sleef.c"
|
#include "sleef.c"
|
||||||
#include "jaggedarray.h"
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
float calcBlendFactor(float val, float threshold) {
|
float calcBlendFactor(float val, float threshold) {
|
||||||
@ -53,6 +51,113 @@ vfloat calcBlendFactor(vfloat valv, vfloat thresholdv) {
|
|||||||
return onev / (onev + xexpf(c16v - c16v * valv / thresholdv));
|
return onev / (onev + xexpf(c16v - c16v * valv / thresholdv));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
float tileAverage(float **data, size_t tileY, size_t tileX, size_t tilesize) {
|
||||||
|
|
||||||
|
float avg = 0.f;
|
||||||
|
#ifdef __SSE2__
|
||||||
|
vfloat avgv = ZEROV;
|
||||||
|
#endif
|
||||||
|
for (std::size_t y = tileY; y < tileY + tilesize; ++y) {
|
||||||
|
std::size_t x = tileX;
|
||||||
|
#ifdef __SSE2__
|
||||||
|
for (; x < tileX + tilesize - 3; x += 4) {
|
||||||
|
avgv += LVFU(data[y][x]);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
for (; x < tileX + tilesize; ++x) {
|
||||||
|
avg += data[y][x];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifdef __SSE2__
|
||||||
|
avg += vhadd(avgv);
|
||||||
|
#endif
|
||||||
|
return avg / rtengine::SQR(tilesize);
|
||||||
|
}
|
||||||
|
|
||||||
|
float tileVariance(float **data, size_t tileY, size_t tileX, size_t tilesize, float avg) {
|
||||||
|
|
||||||
|
float var = 0.f;
|
||||||
|
#ifdef __SSE2__
|
||||||
|
vfloat varv = ZEROV;
|
||||||
|
const vfloat avgv = F2V(avg);
|
||||||
|
#endif
|
||||||
|
for (std::size_t y = tileY; y < tileY + tilesize; ++y) {
|
||||||
|
std::size_t x = tileX;
|
||||||
|
#ifdef __SSE2__
|
||||||
|
for (; x < tileX + tilesize - 3; x += 4) {
|
||||||
|
varv += SQRV(LVFU(data[y][x]) - avgv);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
for (; x < tileX + tilesize; ++x) {
|
||||||
|
var += rtengine::SQR(data[y][x] - avg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifdef __SSE2__
|
||||||
|
var += vhadd(varv);
|
||||||
|
#endif
|
||||||
|
return var / (rtengine::SQR(tilesize) * avg);
|
||||||
|
}
|
||||||
|
|
||||||
|
float calcContrastThreshold(float** luminance, int tileY, int tileX, int tilesize) {
|
||||||
|
|
||||||
|
constexpr float scale = 0.0625f / 327.68f;
|
||||||
|
std::vector<std::vector<float>> blend(tilesize - 4, std::vector<float>(tilesize - 4));
|
||||||
|
|
||||||
|
#ifdef __SSE2__
|
||||||
|
const vfloat scalev = F2V(scale);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for(int j = tileY + 2; j < tileY + tilesize - 2; ++j) {
|
||||||
|
int i = tileX + 2;
|
||||||
|
#ifdef __SSE2__
|
||||||
|
for(; i < tileX + tilesize - 5; i += 4) {
|
||||||
|
vfloat contrastv = vsqrtf(SQRV(LVFU(luminance[j][i+1]) - LVFU(luminance[j][i-1])) + SQRV(LVFU(luminance[j+1][i]) - LVFU(luminance[j-1][i])) +
|
||||||
|
SQRV(LVFU(luminance[j][i+2]) - LVFU(luminance[j][i-2])) + SQRV(LVFU(luminance[j+2][i]) - LVFU(luminance[j-2][i]))) * scalev;
|
||||||
|
STVFU(blend[j - tileY - 2][i - tileX - 2], contrastv);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
for(; i < tileX + tilesize - 2; ++i) {
|
||||||
|
|
||||||
|
float contrast = sqrtf(rtengine::SQR(luminance[j][i+1] - luminance[j][i-1]) + rtengine::SQR(luminance[j+1][i] - luminance[j-1][i]) +
|
||||||
|
rtengine::SQR(luminance[j][i+2] - luminance[j][i-2]) + rtengine::SQR(luminance[j+2][i] - luminance[j-2][i])) * scale;
|
||||||
|
|
||||||
|
blend[j - tileY - 2][i - tileX - 2] = contrast;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const float limit = rtengine::SQR(tilesize - 4) / 100.f;
|
||||||
|
|
||||||
|
int c;
|
||||||
|
for (c = 1; c < 100; ++c) {
|
||||||
|
const float contrastThreshold = c / 100.f;
|
||||||
|
float sum = 0.f;
|
||||||
|
#ifdef __SSE2__
|
||||||
|
const vfloat contrastThresholdv = F2V(contrastThreshold);
|
||||||
|
vfloat sumv = ZEROV;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for(int j = 0; j < tilesize - 4; ++j) {
|
||||||
|
int i = 0;
|
||||||
|
#ifdef __SSE2__
|
||||||
|
for(; i < tilesize - 7; i += 4) {
|
||||||
|
sumv += calcBlendFactor(LVFU(blend[j][i]), contrastThresholdv);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
for(; i < tilesize - 4; ++i) {
|
||||||
|
sum += calcBlendFactor(blend[j][i], contrastThreshold);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifdef __SSE2__
|
||||||
|
sum += vhadd(sumv);
|
||||||
|
#endif
|
||||||
|
if (sum <= limit) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return c / 100.f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace rtengine
|
namespace rtengine
|
||||||
@ -172,6 +277,7 @@ void findMinMaxPercentile(const float* data, size_t size, float minPrct, float&
|
|||||||
// go back to original range
|
// go back to original range
|
||||||
minOut /= scale;
|
minOut /= scale;
|
||||||
minOut += minVal;
|
minOut += minVal;
|
||||||
|
minOut = rtengine::LIM(minOut, minVal, maxVal);
|
||||||
|
|
||||||
// find (maxPrct*size) smallest value
|
// find (maxPrct*size) smallest value
|
||||||
const float threshmax = maxPrct * size;
|
const float threshmax = maxPrct * size;
|
||||||
@ -190,98 +296,106 @@ void findMinMaxPercentile(const float* data, size_t size, float minPrct, float&
|
|||||||
// go back to original range
|
// go back to original range
|
||||||
maxOut /= scale;
|
maxOut /= scale;
|
||||||
maxOut += minVal;
|
maxOut += minVal;
|
||||||
|
maxOut = rtengine::LIM(maxOut, minVal, maxVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
void buildBlendMask(float** luminance, float **blend, int W, int H, float &contrastThreshold, float amount, bool autoContrast) {
|
void buildBlendMask(float** luminance, float **blend, int W, int H, float &contrastThreshold, float amount, bool autoContrast) {
|
||||||
|
|
||||||
if(contrastThreshold == 0.f && !autoContrast) {
|
|
||||||
for(int j = 0; j < H; ++j) {
|
|
||||||
for(int i = 0; i < W; ++i) {
|
|
||||||
blend[j][i] = amount;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
constexpr float scale = 0.0625f / 327.68f;
|
|
||||||
if (autoContrast) {
|
if (autoContrast) {
|
||||||
|
constexpr float minLuminance = 2000.f;
|
||||||
|
constexpr float maxLuminance = 20000.f;
|
||||||
|
constexpr float minTileVariance = 0.5f;
|
||||||
for (int pass = 0; pass < 2; ++pass) {
|
for (int pass = 0; pass < 2; ++pass) {
|
||||||
const int tilesize = 80 / (pass + 1);
|
const int tilesize = 80 / (pass + 1);
|
||||||
const int numTilesW = W / tilesize;
|
const int skip = pass == 0 ? tilesize : tilesize / 4;
|
||||||
const int numTilesH = H / tilesize;
|
const int numTilesW = W / skip - 3 * pass;
|
||||||
std::vector<std::vector<std::pair<float, float>>> variances(numTilesH, std::vector<std::pair<float, float>>(numTilesW));
|
const int numTilesH = H / skip - 3 * pass;
|
||||||
|
std::vector<std::vector<float>> variances(numTilesH, std::vector<float>(numTilesW));
|
||||||
|
|
||||||
#pragma omp parallel for
|
#ifdef _OPENMP
|
||||||
|
#pragma omp parallel for schedule(dynamic)
|
||||||
|
#endif
|
||||||
for (int i = 0; i < numTilesH; ++i) {
|
for (int i = 0; i < numTilesH; ++i) {
|
||||||
int tileY = i * tilesize;
|
const int tileY = i * skip;
|
||||||
for (int j = 0; j < numTilesW; ++j) {
|
for (int j = 0; j < numTilesW; ++j) {
|
||||||
int tileX = j * tilesize;
|
const int tileX = j * skip;
|
||||||
#ifdef __SSE2__
|
const float avg = tileAverage(luminance, tileY, tileX, tilesize);
|
||||||
vfloat avgv = ZEROV;
|
if (avg < minLuminance || avg > maxLuminance) {
|
||||||
for (int y = tileY; y < tileY + tilesize; ++y) {
|
// too dark or too bright => skip the tile
|
||||||
for (int x = tileX; x < tileX + tilesize; x += 4) {
|
variances[i][j] = RT_INFINITY_F;
|
||||||
avgv += LVFU(luminance[y][x]);
|
continue;
|
||||||
|
} else {
|
||||||
|
variances[i][j] = tileVariance(luminance, tileY, tileX, tilesize, avg);
|
||||||
|
// exclude tiles with a variance less than minTileVariance
|
||||||
|
variances[i][j] = variances[i][j] < minTileVariance ? RT_INFINITY_F : variances[i][j];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
float avg = vhadd(avgv);
|
|
||||||
#else
|
|
||||||
float avg = 0.;
|
|
||||||
for (int y = tileY; y < tileY + tilesize; ++y) {
|
|
||||||
for (int x = tileX; x < tileX + tilesize; ++x) {
|
|
||||||
avg += luminance[y][x];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
avg /= SQR(tilesize);
|
|
||||||
#ifdef __SSE2__
|
|
||||||
vfloat varv = ZEROV;
|
|
||||||
avgv = F2V(avg);
|
|
||||||
for (int y = tileY; y < tileY + tilesize; ++y) {
|
|
||||||
for (int x = tileX; x < tileX + tilesize; x +=4) {
|
|
||||||
varv += SQRV(LVFU(luminance[y][x]) - avgv);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
float var = vhadd(varv);
|
|
||||||
#else
|
|
||||||
float var = 0.0;
|
|
||||||
for (int y = tileY; y < tileY + tilesize; ++y) {
|
|
||||||
for (int x = tileX; x < tileX + tilesize; ++x) {
|
|
||||||
var += SQR(luminance[y][x] - avg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
var /= (SQR(tilesize) * avg);
|
|
||||||
variances[i][j].first = var;
|
|
||||||
variances[i][j].second = avg;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
float minvar = RT_INFINITY_F;
|
float minvar = RT_INFINITY_F;
|
||||||
int minI = 0, minJ = 0;
|
int minI = 0, minJ = 0;
|
||||||
for (int i = 0; i < numTilesH; ++i) {
|
for (int i = 0; i < numTilesH; ++i) {
|
||||||
for (int j = 0; j < numTilesW; ++j) {
|
for (int j = 0; j < numTilesW; ++j) {
|
||||||
if (variances[i][j].first < minvar && variances[i][j].second > 2000.f && variances[i][j].second < 20000.f) {
|
if (variances[i][j] < minvar) {
|
||||||
minvar = variances[i][j].first;
|
minvar = variances[i][j];
|
||||||
minI = i;
|
minI = i;
|
||||||
minJ = j;
|
minJ = j;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const int minY = tilesize * minI;
|
|
||||||
const int minX = tilesize * minJ;
|
|
||||||
|
|
||||||
// std::cout << pass << ": minvar : " << minvar << std::endl;
|
|
||||||
if (minvar <= 1.f || pass == 1) {
|
if (minvar <= 1.f || pass == 1) {
|
||||||
|
const int minY = skip * minI;
|
||||||
|
const int minX = skip * minJ;
|
||||||
|
if (pass == 0) {
|
||||||
// a variance <= 1 means we already found a flat region and can skip second pass
|
// a variance <= 1 means we already found a flat region and can skip second pass
|
||||||
// in second pass we allow a variance of 2
|
contrastThreshold = calcContrastThreshold(luminance, minY, minX, tilesize);
|
||||||
JaggedArray<float> Lum(tilesize, tilesize);
|
|
||||||
JaggedArray<float> Blend(tilesize, tilesize);
|
|
||||||
for (int i = 0; i < tilesize; ++i) {
|
|
||||||
for (int j = 0; j < tilesize; ++j) {
|
|
||||||
Lum[i][j] = luminance[i + minY][j + minX];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
contrastThreshold = (pass == 0 || minvar <= 2.f) ? calcContrastThreshold(Lum, Blend, tilesize, tilesize) / 100.f : 0.f;
|
|
||||||
break;
|
break;
|
||||||
|
} else {
|
||||||
|
// in second pass we allow a variance of 4
|
||||||
|
// we additionally scan the tiles +-skip pixels around the best tile from pass 2
|
||||||
|
// Means we scan (2 * skip + 1)^2 tiles in this step to get a better hit rate
|
||||||
|
// fortunately the scan is quite fast, so we use only one core and don't parallelize
|
||||||
|
const int topLeftYStart = std::max(minY - skip, 0);
|
||||||
|
const int topLeftXStart = std::max(minX - skip, 0);
|
||||||
|
const int topLeftYEnd = std::min(minY + skip, H - tilesize);
|
||||||
|
const int topLeftXEnd = std::min(minX + skip, W - tilesize);
|
||||||
|
const int numTilesH = topLeftYEnd - topLeftYStart + 1;
|
||||||
|
const int numTilesW = topLeftXEnd - topLeftXStart + 1;
|
||||||
|
|
||||||
|
std::vector<std::vector<float>> variances(numTilesH, std::vector<float>(numTilesW));
|
||||||
|
for (int i = 0; i < numTilesH; ++i) {
|
||||||
|
const int tileY = topLeftYStart + i;
|
||||||
|
for (int j = 0; j < numTilesW; ++j) {
|
||||||
|
const int tileX = topLeftXStart + j;
|
||||||
|
const float avg = tileAverage(luminance, tileY, tileX, tilesize);
|
||||||
|
|
||||||
|
if (avg < minLuminance || avg > maxLuminance) {
|
||||||
|
// too dark or too bright => skip the tile
|
||||||
|
variances[i][j] = RT_INFINITY_F;
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
variances[i][j] = tileVariance(luminance, tileY, tileX, tilesize, avg);
|
||||||
|
// exclude tiles with a variance less than minTileVariance
|
||||||
|
variances[i][j] = variances[i][j] < minTileVariance ? RT_INFINITY_F : variances[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float minvar = RT_INFINITY_F;
|
||||||
|
int minI = 0, minJ = 0;
|
||||||
|
for (int i = 0; i < numTilesH; ++i) {
|
||||||
|
for (int j = 0; j < numTilesW; ++j) {
|
||||||
|
if (variances[i][j] < minvar) {
|
||||||
|
minvar = variances[i][j];
|
||||||
|
minI = i;
|
||||||
|
minJ = j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
contrastThreshold = minvar <= 4.f ? calcContrastThreshold(luminance, topLeftYStart + minI, topLeftXStart + minJ, tilesize) : 0.f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -293,6 +407,7 @@ void buildBlendMask(float** luminance, float **blend, int W, int H, float &contr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
constexpr float scale = 0.0625f / 327.68f;
|
||||||
#ifdef _OPENMP
|
#ifdef _OPENMP
|
||||||
#pragma omp parallel
|
#pragma omp parallel
|
||||||
#endif
|
#endif
|
||||||
@ -354,64 +469,5 @@ void buildBlendMask(float** luminance, float **blend, int W, int H, float &contr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
int calcContrastThreshold(float** luminance, float **blend, int W, int H) {
|
|
||||||
|
|
||||||
constexpr float scale = 0.0625f / 327.68f;
|
|
||||||
|
|
||||||
#ifdef __SSE2__
|
|
||||||
const vfloat scalev = F2V(scale);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for(int j = 2; j < H - 2; ++j) {
|
|
||||||
int i = 2;
|
|
||||||
#ifdef __SSE2__
|
|
||||||
for(; i < W - 5; i += 4) {
|
|
||||||
vfloat contrastv = vsqrtf(SQRV(LVFU(luminance[j][i+1]) - LVFU(luminance[j][i-1])) + SQRV(LVFU(luminance[j+1][i]) - LVFU(luminance[j-1][i])) +
|
|
||||||
SQRV(LVFU(luminance[j][i+2]) - LVFU(luminance[j][i-2])) + SQRV(LVFU(luminance[j+2][i]) - LVFU(luminance[j-2][i]))) * scalev;
|
|
||||||
STVFU(blend[j -2 ][i - 2], contrastv);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
for(; i < W - 2; ++i) {
|
|
||||||
|
|
||||||
float contrast = sqrtf(rtengine::SQR(luminance[j][i+1] - luminance[j][i-1]) + rtengine::SQR(luminance[j+1][i] - luminance[j-1][i]) +
|
|
||||||
rtengine::SQR(luminance[j][i+2] - luminance[j][i-2]) + rtengine::SQR(luminance[j+2][i] - luminance[j-2][i])) * scale;
|
|
||||||
|
|
||||||
blend[j -2][i- 2] = contrast;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const float limit = (W - 4) * (H - 4) / 100.f;
|
|
||||||
|
|
||||||
int c;
|
|
||||||
for (c = 1; c < 100; ++c) {
|
|
||||||
const float contrastThreshold = c / 100.f;
|
|
||||||
float sum = 0.f;
|
|
||||||
#ifdef __SSE2__
|
|
||||||
const vfloat contrastThresholdv = F2V(contrastThreshold);
|
|
||||||
vfloat sumv = ZEROV;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for(int j = 0; j < H - 4; ++j) {
|
|
||||||
int i = 0;
|
|
||||||
#ifdef __SSE2__
|
|
||||||
for(; i < W - 7; i += 4) {
|
|
||||||
sumv += calcBlendFactor(LVFU(blend[j][i]), contrastThresholdv);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
for(; i < W - 4; ++i) {
|
|
||||||
sum += calcBlendFactor(blend[j][i], contrastThreshold);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#ifdef __SSE2__
|
|
||||||
sum += vhadd(sumv);
|
|
||||||
#endif
|
|
||||||
if (sum <= limit) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -25,5 +25,4 @@ namespace rtengine
|
|||||||
{
|
{
|
||||||
void findMinMaxPercentile(const float* data, size_t size, float minPrct, float& minOut, float maxPrct, float& maxOut, bool multiThread = true);
|
void findMinMaxPercentile(const float* data, size_t size, float minPrct, float& minOut, float maxPrct, float& maxOut, bool multiThread = true);
|
||||||
void buildBlendMask(float** luminance, float **blend, int W, int H, float &contrastThreshold, float amount = 1.f, bool autoContrast = false);
|
void buildBlendMask(float** luminance, float **blend, int W, int H, float &contrastThreshold, float amount = 1.f, bool autoContrast = false);
|
||||||
int calcContrastThreshold(float** luminance, float **blend, int W, int H);
|
|
||||||
}
|
}
|
||||||
|
@ -907,10 +907,11 @@ private:
|
|||||||
if (profile == "sRGB" || profile == "Adobe RGB" || profile == "ProPhoto" || profile == "WideGamut" || profile == "BruceRGB" || profile == "Beta RGB" || profile == "BestRGB" || profile == "Rec2020" || profile == "ACESp0" || profile == "ACESp1") {
|
if (profile == "sRGB" || profile == "Adobe RGB" || profile == "ProPhoto" || profile == "WideGamut" || profile == "BruceRGB" || profile == "Beta RGB" || profile == "BestRGB" || profile == "Rec2020" || profile == "ACESp0" || profile == "ACESp1") {
|
||||||
const int cw = baseImg->getWidth();
|
const int cw = baseImg->getWidth();
|
||||||
const int ch = baseImg->getHeight();
|
const int ch = baseImg->getHeight();
|
||||||
|
cmsHTRANSFORM dummy = nullptr;
|
||||||
// put gamma TRC to 1
|
// put gamma TRC to 1
|
||||||
ipf.workingtrc(baseImg, baseImg, cw, ch, -5, params.icm.workingProfile, 2.4, 12.92310, true, false);
|
ipf.workingtrc(baseImg, baseImg, cw, ch, -5, params.icm.workingProfile, 2.4, 12.92310, dummy, true, false, false);
|
||||||
//adjust TRC
|
//adjust TRC
|
||||||
ipf.workingtrc(baseImg, baseImg, cw, ch, 5, params.icm.workingProfile, params.icm.workingTRCGamma, params.icm.workingTRCSlope, false, true);
|
ipf.workingtrc(baseImg, baseImg, cw, ch, 5, params.icm.workingProfile, params.icm.workingTRCGamma, params.icm.workingTRCSlope, dummy, false, true, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1074,6 +1074,7 @@ const std::map<std::string, std::string> NALensDataInterpreter::lenses = {
|
|||||||
{"C3 34 68 98 38 40 4B 4E", "Sigma 100-400mm f/5-6.3 DG OS HSM | C"},
|
{"C3 34 68 98 38 40 4B 4E", "Sigma 100-400mm f/5-6.3 DG OS HSM | C"},
|
||||||
{"C8 54 62 62 0C 0C 4B 46", "Sigma 85mm f/1.4 DG HSM | A"},
|
{"C8 54 62 62 0C 0C 4B 46", "Sigma 85mm f/1.4 DG HSM | A"},
|
||||||
{"C9 48 37 5C 24 24 4B 4E", "Sigma 24-70mm f/2.8 DG OS HSM | A"},
|
{"C9 48 37 5C 24 24 4B 4E", "Sigma 24-70mm f/2.8 DG OS HSM | A"},
|
||||||
|
{"CA 48 27 3E 24 24 DF 4E", "Tamron SP 15-30mm f/2.8 Di VC USD G2 (A041)"},
|
||||||
{"CC 4C 50 68 14 14 4B 06", "Sigma 50-100mm f/1.8 DC HSM | A"},
|
{"CC 4C 50 68 14 14 4B 06", "Sigma 50-100mm f/1.8 DC HSM | A"},
|
||||||
{"CD 3D 2D 70 2E 3C 4B 0E", "Sigma 18-125mm f/3.8-5.6 DC OS HSM"},
|
{"CD 3D 2D 70 2E 3C 4B 0E", "Sigma 18-125mm f/3.8-5.6 DC OS HSM"},
|
||||||
{"CE 34 76 A0 38 40 4B 0E", "Sigma 150-500mm f/5-6.3 DG OS APO HSM"},
|
{"CE 34 76 A0 38 40 4B 0E", "Sigma 150-500mm f/5-6.3 DG OS APO HSM"},
|
||||||
|
@ -172,7 +172,7 @@ endif()
|
|||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
set(EXTRA_SRC_CLI myicon.rc)
|
set(EXTRA_SRC_CLI myicon.rc)
|
||||||
set(EXTRA_SRC_NONCLI myicon.rc windirmonitor.cc)
|
set(EXTRA_SRC_NONCLI myicon.rc)
|
||||||
set(EXTRA_LIB_RTGUI winmm)
|
set(EXTRA_LIB_RTGUI winmm)
|
||||||
include_directories(${EXTRA_INCDIR}
|
include_directories(${EXTRA_INCDIR}
|
||||||
${GIOMM_INCLUDE_DIRS}
|
${GIOMM_INCLUDE_DIRS}
|
||||||
|
@ -640,7 +640,7 @@ void ColorToning::read (const ProcParams* pp, const ParamsEdited* pedited)
|
|||||||
labgrid->setParams(pp->colorToning.labgridALow / ColorToningParams::LABGRID_CORR_MAX, pp->colorToning.labgridBLow / ColorToningParams::LABGRID_CORR_MAX, pp->colorToning.labgridAHigh / ColorToningParams::LABGRID_CORR_MAX, pp->colorToning.labgridBHigh / ColorToningParams::LABGRID_CORR_MAX, false);
|
labgrid->setParams(pp->colorToning.labgridALow / ColorToningParams::LABGRID_CORR_MAX, pp->colorToning.labgridBLow / ColorToningParams::LABGRID_CORR_MAX, pp->colorToning.labgridAHigh / ColorToningParams::LABGRID_CORR_MAX, pp->colorToning.labgridBHigh / ColorToningParams::LABGRID_CORR_MAX, false);
|
||||||
|
|
||||||
if (pedited && !pedited->colorToning.method) {
|
if (pedited && !pedited->colorToning.method) {
|
||||||
method->set_active (5);
|
method->set_active (7);
|
||||||
} else if (pp->colorToning.method == "Lab") {
|
} else if (pp->colorToning.method == "Lab") {
|
||||||
method->set_active (0);
|
method->set_active (0);
|
||||||
} else if (pp->colorToning.method == "RGBSliders") {
|
} else if (pp->colorToning.method == "RGBSliders") {
|
||||||
|
126
rtgui/crop.cc
@ -52,12 +52,29 @@ int notifyListenerUI (void* data)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline void get_custom_ratio(int w, int h, double &rw, double &rh)
|
||||||
|
{
|
||||||
|
if (w < h) {
|
||||||
|
double r = double(h) / double(w);
|
||||||
|
int rr = r * 100 + 0.5;
|
||||||
|
rw = 1.0;
|
||||||
|
rh = rr / 100.0;
|
||||||
|
} else {
|
||||||
|
double r = double(w) / double(h);
|
||||||
|
int rr = r * 100 + 0.5;
|
||||||
|
rw = rr / 100.0;
|
||||||
|
rh = 1.0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
Crop::Crop():
|
Crop::Crop():
|
||||||
FoldableToolPanel(this, "crop", M("TP_CROP_LABEL"), false, true),
|
FoldableToolPanel(this, "crop", M("TP_CROP_LABEL"), false, true),
|
||||||
crop_ratios{
|
crop_ratios{
|
||||||
{M("GENERAL_ASIMAGE"), 0.0},
|
{M("GENERAL_ASIMAGE"), 0.0},
|
||||||
|
{M("GENERAL_CURRENT"), -1.0},
|
||||||
{"3:2", 3.0 / 2.0}, // L1.5, P0.666...
|
{"3:2", 3.0 / 2.0}, // L1.5, P0.666...
|
||||||
{"4:3", 4.0 / 3.0}, // L1.333..., P0.75
|
{"4:3", 4.0 / 3.0}, // L1.333..., P0.75
|
||||||
{"16:9", 16.0 / 9.0}, // L1.777..., P0.5625
|
{"16:9", 16.0 / 9.0}, // L1.777..., P0.5625
|
||||||
@ -177,9 +194,16 @@ Crop::Crop():
|
|||||||
guide = Gtk::manage (new MyComboBoxText ());
|
guide = Gtk::manage (new MyComboBoxText ());
|
||||||
setExpandAlignProperties(guide, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER);
|
setExpandAlignProperties(guide, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER);
|
||||||
|
|
||||||
|
customRatioLabel = Gtk::manage(new Gtk::Label(""));
|
||||||
|
customRatioLabel->hide();
|
||||||
|
Gtk::HBox *hb = Gtk::manage(new Gtk::HBox());
|
||||||
|
hb->pack_start(*orientation);
|
||||||
|
hb->pack_start(*customRatioLabel);
|
||||||
|
|
||||||
|
settingsgrid->set_column_homogeneous(true);
|
||||||
settingsgrid->attach (*fixr, 0, 0, 1, 1);
|
settingsgrid->attach (*fixr, 0, 0, 1, 1);
|
||||||
settingsgrid->attach (*ratio, 1, 0, 1, 1);
|
settingsgrid->attach (*ratio, 1, 0, 1, 1);
|
||||||
settingsgrid->attach (*orientation, 2, 0, 1, 1);
|
settingsgrid->attach (*hb, 2, 0, 1, 1);
|
||||||
settingsgrid->attach (*guidelab, 0, 1, 1, 1);
|
settingsgrid->attach (*guidelab, 0, 1, 1, 1);
|
||||||
settingsgrid->attach (*guide, 1, 1, 2, 1);
|
settingsgrid->attach (*guide, 1, 1, 2, 1);
|
||||||
pack_start (*settingsgrid, Gtk::PACK_SHRINK, 0 );
|
pack_start (*settingsgrid, Gtk::PACK_SHRINK, 0 );
|
||||||
@ -349,13 +373,6 @@ void Crop::read (const ProcParams* pp, const ParamsEdited* pedited)
|
|||||||
setDimensions (pp->crop.x + pp->crop.w, pp->crop.y + pp->crop.h);
|
setDimensions (pp->crop.x + pp->crop.w, pp->crop.y + pp->crop.h);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pp->crop.ratio == "As Image") {
|
|
||||||
ratio->set_active(0);
|
|
||||||
} else {
|
|
||||||
ratio->set_active_text (pp->crop.ratio);
|
|
||||||
}
|
|
||||||
fixr->set_active (pp->crop.fixratio);
|
|
||||||
|
|
||||||
const bool flip_orientation = pp->crop.fixratio && crop_ratios[ratio->get_active_row_number()].value > 0 && crop_ratios[ratio->get_active_row_number()].value < 1.0;
|
const bool flip_orientation = pp->crop.fixratio && crop_ratios[ratio->get_active_row_number()].value > 0 && crop_ratios[ratio->get_active_row_number()].value < 1.0;
|
||||||
|
|
||||||
if (pp->crop.orientation == "Landscape") {
|
if (pp->crop.orientation == "Landscape") {
|
||||||
@ -396,6 +413,20 @@ void Crop::read (const ProcParams* pp, const ParamsEdited* pedited)
|
|||||||
nw = pp->crop.w;
|
nw = pp->crop.w;
|
||||||
nh = pp->crop.h;
|
nh = pp->crop.h;
|
||||||
|
|
||||||
|
customRatioLabel->hide();
|
||||||
|
orientation->show();
|
||||||
|
if (pp->crop.ratio == "As Image") {
|
||||||
|
ratio->set_active(0);
|
||||||
|
} else if (pp->crop.ratio == "Current") {
|
||||||
|
ratio->set_active(1);
|
||||||
|
updateCurrentRatio();
|
||||||
|
customRatioLabel->show();
|
||||||
|
orientation->hide();
|
||||||
|
} else {
|
||||||
|
ratio->set_active_text (pp->crop.ratio);
|
||||||
|
}
|
||||||
|
fixr->set_active (pp->crop.fixratio);
|
||||||
|
|
||||||
lastRotationDeg = pp->coarse.rotate;
|
lastRotationDeg = pp->coarse.rotate;
|
||||||
|
|
||||||
wDirty = false;
|
wDirty = false;
|
||||||
@ -448,7 +479,13 @@ void Crop::write (ProcParams* pp, ParamsEdited* pedited)
|
|||||||
pp->crop.w = nw;
|
pp->crop.w = nw;
|
||||||
pp->crop.h = nh;
|
pp->crop.h = nh;
|
||||||
pp->crop.fixratio = fixr->get_active ();
|
pp->crop.fixratio = fixr->get_active ();
|
||||||
|
if (ratio->get_active_row_number() == 0) {
|
||||||
|
pp->crop.ratio = "As Image";
|
||||||
|
} else if (ratio->get_active_row_number() == 1) {
|
||||||
|
pp->crop.ratio = "Current";
|
||||||
|
} else {
|
||||||
pp->crop.ratio = ratio->get_active_text ();
|
pp->crop.ratio = ratio->get_active_text ();
|
||||||
|
}
|
||||||
|
|
||||||
// for historical reasons we store orientation different if ratio is written as 2:3 instead of 3:2, but in GUI 'landscape' is always long side horizontal regardless of the ratio is written short or long side first.
|
// for historical reasons we store orientation different if ratio is written as 2:3 instead of 3:2, but in GUI 'landscape' is always long side horizontal regardless of the ratio is written short or long side first.
|
||||||
const bool flip_orientation = fixr->get_active() && crop_ratios[ratio->get_active_row_number()].value > 0 && crop_ratios[ratio->get_active_row_number()].value < 1.0;
|
const bool flip_orientation = fixr->get_active() && crop_ratios[ratio->get_active_row_number()].value > 0 && crop_ratios[ratio->get_active_row_number()].value < 1.0;
|
||||||
@ -701,6 +738,15 @@ void Crop::ratioFixedChanged ()
|
|||||||
// change to orientation or ration
|
// change to orientation or ration
|
||||||
void Crop::ratioChanged ()
|
void Crop::ratioChanged ()
|
||||||
{
|
{
|
||||||
|
if (ratio->get_active_row_number() == 1) {
|
||||||
|
orientation->hide();
|
||||||
|
updateCurrentRatio();
|
||||||
|
customRatioLabel->show();
|
||||||
|
} else {
|
||||||
|
orientation->show();
|
||||||
|
customRatioLabel->hide();
|
||||||
|
}
|
||||||
|
|
||||||
if (!fixr->get_active ()) {
|
if (!fixr->get_active ()) {
|
||||||
fixr->set_active(true); // will adjust ratio anyway
|
fixr->set_active(true); // will adjust ratio anyway
|
||||||
} else {
|
} else {
|
||||||
@ -712,18 +758,51 @@ void Crop::ratioChanged ()
|
|||||||
void Crop::adjustCropToRatio()
|
void Crop::adjustCropToRatio()
|
||||||
{
|
{
|
||||||
if (fixr->get_active() && !fixr->get_inconsistent()) {
|
if (fixr->get_active() && !fixr->get_inconsistent()) {
|
||||||
|
int W1 = nw, W2 = nw;
|
||||||
|
int H1 = nh, H2 = nh;
|
||||||
|
int X1 = nx, X2 = nx;
|
||||||
|
int Y1 = ny, Y2 = ny;
|
||||||
|
|
||||||
// int W = w->get_value ();
|
float r = getRatio();
|
||||||
// int H = h->get_value ();
|
|
||||||
int W = nw;
|
|
||||||
int H = nh;
|
|
||||||
int X = nx;
|
|
||||||
int Y = ny;
|
|
||||||
|
|
||||||
if (W >= H) {
|
H1 = round(W1 / r);
|
||||||
cropWidth2Resized (X, Y, W, H);
|
Y1 = ny + (nh - H1)/2.0;
|
||||||
|
if (Y1 < 0) {
|
||||||
|
Y1 = 0;
|
||||||
|
}
|
||||||
|
if (H1 > maxh) {
|
||||||
|
H1 = maxh;
|
||||||
|
W1 = round(H1 * r);
|
||||||
|
X1 = nx + (nw - W1)/2.0;
|
||||||
|
}
|
||||||
|
if (Y1+H1 > maxh) {
|
||||||
|
Y1 = maxh - H1;
|
||||||
|
}
|
||||||
|
|
||||||
|
W2 = round(H2 * r);
|
||||||
|
X2 = nx + (nw - W2)/2.0;
|
||||||
|
if (X2 < 0) {
|
||||||
|
X2 = 0;
|
||||||
|
}
|
||||||
|
if (W2 > maxw) {
|
||||||
|
W2 = maxw;
|
||||||
|
H2 = round(W2 / r);
|
||||||
|
Y2 = ny + (nh - H2)/2.0;
|
||||||
|
}
|
||||||
|
if (X2+W2 > maxw) {
|
||||||
|
X2 = maxw - W2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (W1 * H1 >= W2 * H2) {
|
||||||
|
nx = X1;
|
||||||
|
ny = Y1;
|
||||||
|
nw = W1;
|
||||||
|
nh = H1;
|
||||||
} else {
|
} else {
|
||||||
cropHeight2Resized (X, Y, W, H);
|
nx = X2;
|
||||||
|
ny = Y2;
|
||||||
|
nw = W2;
|
||||||
|
nh = H2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -847,6 +926,10 @@ bool Crop::refreshSpins (bool notify)
|
|||||||
wconn.block (false);
|
wconn.block (false);
|
||||||
hconn.block (false);
|
hconn.block (false);
|
||||||
|
|
||||||
|
if (ratio->get_active_row_number() == 1 && !fixr->get_active()) {
|
||||||
|
updateCurrentRatio();
|
||||||
|
}
|
||||||
|
|
||||||
refreshSize ();
|
refreshSize ();
|
||||||
|
|
||||||
if (notify) {
|
if (notify) {
|
||||||
@ -1372,3 +1455,12 @@ void Crop::setBatchMode (bool batchMode)
|
|||||||
removeIfThere (methodgrid, selectCrop);
|
removeIfThere (methodgrid, selectCrop);
|
||||||
removeIfThere (methodgrid, resetCrop);
|
removeIfThere (methodgrid, resetCrop);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Crop::updateCurrentRatio()
|
||||||
|
{
|
||||||
|
double rw, rh;
|
||||||
|
get_custom_ratio(w->get_value(), h->get_value(), rw, rh);
|
||||||
|
customRatioLabel->set_text(Glib::ustring::compose("%1:%2", rw, rh));
|
||||||
|
crop_ratios[1].value = double(w->get_value())/double(h->get_value());
|
||||||
|
}
|
||||||
|
@ -95,9 +95,10 @@ private:
|
|||||||
double value;
|
double value;
|
||||||
};
|
};
|
||||||
|
|
||||||
const std::vector<CropRatio> crop_ratios;
|
std::vector<CropRatio> crop_ratios;
|
||||||
|
|
||||||
void adjustCropToRatio();
|
void adjustCropToRatio();
|
||||||
|
void updateCurrentRatio();
|
||||||
|
|
||||||
Gtk::CheckButton* fixr;
|
Gtk::CheckButton* fixr;
|
||||||
MyComboBoxText* ratio;
|
MyComboBoxText* ratio;
|
||||||
@ -117,6 +118,7 @@ private:
|
|||||||
Gtk::Label* sizein;
|
Gtk::Label* sizein;
|
||||||
Gtk::Grid* ppigrid;
|
Gtk::Grid* ppigrid;
|
||||||
Gtk::Grid* methodgrid;
|
Gtk::Grid* methodgrid;
|
||||||
|
Gtk::Label *customRatioLabel;
|
||||||
|
|
||||||
int maxw, maxh;
|
int maxw, maxh;
|
||||||
double nx, ny;
|
double nx, ny;
|
||||||
|
@ -275,6 +275,10 @@ void CropWindow::scroll (int state, GdkScrollDirection direction, int x, int y,
|
|||||||
} else {
|
} else {
|
||||||
delta = deltaY;
|
delta = deltaY;
|
||||||
}
|
}
|
||||||
|
if (delta == 0.0 && direction == GDK_SCROLL_SMOOTH) {
|
||||||
|
// sometimes this case happens. To avoid zooming into the wrong direction in this case, we just do nothing
|
||||||
|
return;
|
||||||
|
}
|
||||||
bool isUp = direction == GDK_SCROLL_UP || (direction == GDK_SCROLL_SMOOTH && delta < 0.0);
|
bool isUp = direction == GDK_SCROLL_UP || (direction == GDK_SCROLL_SMOOTH && delta < 0.0);
|
||||||
if ((state & GDK_CONTROL_MASK) && onArea(ColorPicker, x, y)) {
|
if ((state & GDK_CONTROL_MASK) && onArea(ColorPicker, x, y)) {
|
||||||
// resizing a color picker
|
// resizing a color picker
|
||||||
@ -1960,7 +1964,7 @@ void CropWindow::zoomIn (bool toCursor, int cursorX, int cursorY)
|
|||||||
int x1 = cropHandler.cropParams.x + cropHandler.cropParams.w / 2;
|
int x1 = cropHandler.cropParams.x + cropHandler.cropParams.w / 2;
|
||||||
int y1 = cropHandler.cropParams.y + cropHandler.cropParams.h / 2;
|
int y1 = cropHandler.cropParams.y + cropHandler.cropParams.h / 2;
|
||||||
double cropd = sqrt(cropHandler.cropParams.h * cropHandler.cropParams.h + cropHandler.cropParams.w * cropHandler.cropParams.w) * zoomSteps[cropZoom].zoom;
|
double cropd = sqrt(cropHandler.cropParams.h * cropHandler.cropParams.h + cropHandler.cropParams.w * cropHandler.cropParams.w) * zoomSteps[cropZoom].zoom;
|
||||||
double imd = sqrt(imgW * imgW + imgH + imgH);
|
double imd = sqrt(imgW * imgW + imgH * imgH);
|
||||||
double d;
|
double d;
|
||||||
|
|
||||||
// the more we can see of the crop, the more gravity towards crop center
|
// the more we can see of the crop, the more gravity towards crop center
|
||||||
|
@ -25,6 +25,47 @@
|
|||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
class CurveTypePopUpButton: public PopUpToggleButton {
|
||||||
|
public:
|
||||||
|
CurveTypePopUpButton(const Glib::ustring &label=""):
|
||||||
|
PopUpToggleButton(label) {}
|
||||||
|
|
||||||
|
void setPosIndexMap(const std::vector<int> &pmap)
|
||||||
|
{
|
||||||
|
posidxmap_ = pmap;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
int posToIndex(int pos) const override
|
||||||
|
{
|
||||||
|
if (pos < 0 || size_t(pos) >= posidxmap_.size()) {
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
return posidxmap_[pos];
|
||||||
|
}
|
||||||
|
|
||||||
|
int indexToPos(int index) const override
|
||||||
|
{
|
||||||
|
if (index < 0 || size_t(index) >= posidxmap_.size()) {
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
for (int i = 0, n = int(posidxmap_.size()); i < n; ++i) {
|
||||||
|
if (posidxmap_[i] == index) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<int> posidxmap_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
|
||||||
bool CurveEditor::reset()
|
bool CurveEditor::reset()
|
||||||
{
|
{
|
||||||
return subGroup->curveReset(this);
|
return subGroup->curveReset(this);
|
||||||
@ -33,12 +74,14 @@ bool CurveEditor::reset()
|
|||||||
DiagonalCurveEditor::DiagonalCurveEditor (Glib::ustring text, CurveEditorGroup* ceGroup, CurveEditorSubGroup* ceSubGroup) : CurveEditor::CurveEditor(text, static_cast<CurveEditorGroup*>(ceGroup), ceSubGroup)
|
DiagonalCurveEditor::DiagonalCurveEditor (Glib::ustring text, CurveEditorGroup* ceGroup, CurveEditorSubGroup* ceSubGroup) : CurveEditor::CurveEditor(text, static_cast<CurveEditorGroup*>(ceGroup), ceSubGroup)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Order set in the same order than "enum DiagonalCurveType". Shouldn't change, for compatibility reason
|
|
||||||
curveType->addEntry("curve-linear-small.png", M("CURVEEDITOR_LINEAR")); // 0 Linear
|
curveType->addEntry("curve-linear-small.png", M("CURVEEDITOR_LINEAR")); // 0 Linear
|
||||||
curveType->addEntry("curve-spline-small.png", M("CURVEEDITOR_CUSTOM")); // 1 Spline
|
curveType->addEntry("curve-spline-small.png", M("CURVEEDITOR_CUSTOM")); // 1 Spline
|
||||||
|
curveType->addEntry("curve-catmullrom-small.png", M("CURVEEDITOR_CATMULLROM")); // 4 CatmullRom
|
||||||
curveType->addEntry("curve-parametric-small.png", M("CURVEEDITOR_PARAMETRIC")); // 2 Parametric
|
curveType->addEntry("curve-parametric-small.png", M("CURVEEDITOR_PARAMETRIC")); // 2 Parametric
|
||||||
curveType->addEntry("curve-nurbs-small.png", M("CURVEEDITOR_NURBS")); // 3 NURBS
|
curveType->addEntry("curve-nurbs-small.png", M("CURVEEDITOR_NURBS")); // 3 NURBS
|
||||||
|
static_cast<CurveTypePopUpButton *>(curveType)->setPosIndexMap({ 0, 1, 4, 2, 3 });
|
||||||
curveType->setSelected(DCT_Linear);
|
curveType->setSelected(DCT_Linear);
|
||||||
|
|
||||||
curveType->show();
|
curveType->show();
|
||||||
|
|
||||||
rangeLabels[0] = M("CURVEEDITOR_SHADOWS");
|
rangeLabels[0] = M("CURVEEDITOR_SHADOWS");
|
||||||
@ -65,6 +108,9 @@ std::vector<double> DiagonalCurveEditor::getCurve ()
|
|||||||
case (DCT_NURBS):
|
case (DCT_NURBS):
|
||||||
return curve = NURBSCurveEd;
|
return curve = NURBSCurveEd;
|
||||||
|
|
||||||
|
case (DCT_CatumullRom):
|
||||||
|
return curve = catmullRomCurveEd;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// returning Linear or Unchanged
|
// returning Linear or Unchanged
|
||||||
curve.push_back((double)(selected));
|
curve.push_back((double)(selected));
|
||||||
@ -96,6 +142,13 @@ void DiagonalCurveEditor::setResetCurve(DiagonalCurveType cType, const std::vect
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case (DCT_CatumullRom):
|
||||||
|
if (resetCurve.size() && DiagonalCurveType(resetCurve.at(0)) == cType) {
|
||||||
|
catmullRomResetCurve = resetCurve;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -209,9 +262,9 @@ CurveEditor::CurveEditor (Glib::ustring text, CurveEditorGroup* ceGroup, CurveEd
|
|||||||
subGroup = ceSubGroup;
|
subGroup = ceSubGroup;
|
||||||
|
|
||||||
if (group && text.size()) {
|
if (group && text.size()) {
|
||||||
curveType = new PopUpToggleButton(text + ":");
|
curveType = new CurveTypePopUpButton(text + ":");
|
||||||
} else {
|
} else {
|
||||||
curveType = new PopUpToggleButton();
|
curveType = new CurveTypePopUpButton();
|
||||||
}
|
}
|
||||||
|
|
||||||
curveType->set_tooltip_text(M("CURVEEDITOR_TYPE"));
|
curveType->set_tooltip_text(M("CURVEEDITOR_TYPE"));
|
||||||
|
@ -156,6 +156,8 @@ protected:
|
|||||||
std::vector<double> paramResetCurve;
|
std::vector<double> paramResetCurve;
|
||||||
std::vector<double> NURBSCurveEd;
|
std::vector<double> NURBSCurveEd;
|
||||||
std::vector<double> NURBSResetCurve;
|
std::vector<double> NURBSResetCurve;
|
||||||
|
std::vector<double> catmullRomCurveEd;
|
||||||
|
std::vector<double> catmullRomResetCurve;
|
||||||
Glib::ustring rangeLabels[4];
|
Glib::ustring rangeLabels[4];
|
||||||
double rangeMilestones[3];
|
double rangeMilestones[3];
|
||||||
|
|
||||||
|
@ -393,6 +393,7 @@ DiagonalCurveEditor* DiagonalCurveEditorSubGroup::addCurve(Glib::ustring curveLa
|
|||||||
storeCurveValues(newCE, getCurveFromGUI(DCT_Spline));
|
storeCurveValues(newCE, getCurveFromGUI(DCT_Spline));
|
||||||
storeCurveValues(newCE, getCurveFromGUI(DCT_Parametric));
|
storeCurveValues(newCE, getCurveFromGUI(DCT_Parametric));
|
||||||
storeCurveValues(newCE, getCurveFromGUI(DCT_NURBS));
|
storeCurveValues(newCE, getCurveFromGUI(DCT_NURBS));
|
||||||
|
storeCurveValues(newCE, getCurveFromGUI(DCT_CatumullRom));
|
||||||
return newCE;
|
return newCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -437,6 +438,7 @@ void DiagonalCurveEditorSubGroup::pipetteMouseOver(EditDataProvider *provider, i
|
|||||||
|
|
||||||
switch((DiagonalCurveType)(curveEditor->curveType->getSelected())) {
|
switch((DiagonalCurveType)(curveEditor->curveType->getSelected())) {
|
||||||
case (DCT_Spline):
|
case (DCT_Spline):
|
||||||
|
case (DCT_CatumullRom):
|
||||||
customCurve->pipetteMouseOver(curveEditor, provider, modifierKey);
|
customCurve->pipetteMouseOver(curveEditor, provider, modifierKey);
|
||||||
customCurve->setDirty(true);
|
customCurve->setDirty(true);
|
||||||
break;
|
break;
|
||||||
@ -511,6 +513,7 @@ bool DiagonalCurveEditorSubGroup::pipetteButton1Pressed(EditDataProvider *provid
|
|||||||
|
|
||||||
switch((DiagonalCurveType)(curveEditor->curveType->getSelected())) {
|
switch((DiagonalCurveType)(curveEditor->curveType->getSelected())) {
|
||||||
case (DCT_Spline):
|
case (DCT_Spline):
|
||||||
|
case (DCT_CatumullRom):
|
||||||
isDragging = customCurve->pipetteButton1Pressed(provider, modifierKey);
|
isDragging = customCurve->pipetteButton1Pressed(provider, modifierKey);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -539,6 +542,7 @@ void DiagonalCurveEditorSubGroup::pipetteButton1Released(EditDataProvider *provi
|
|||||||
|
|
||||||
switch((DiagonalCurveType)(curveEditor->curveType->getSelected())) {
|
switch((DiagonalCurveType)(curveEditor->curveType->getSelected())) {
|
||||||
case (DCT_Spline):
|
case (DCT_Spline):
|
||||||
|
case (DCT_CatumullRom):
|
||||||
customCurve->pipetteButton1Released(provider);
|
customCurve->pipetteButton1Released(provider);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -562,6 +566,7 @@ void DiagonalCurveEditorSubGroup::pipetteDrag(EditDataProvider *provider, int mo
|
|||||||
|
|
||||||
switch((DiagonalCurveType)(curveEditor->curveType->getSelected())) {
|
switch((DiagonalCurveType)(curveEditor->curveType->getSelected())) {
|
||||||
case (DCT_Spline):
|
case (DCT_Spline):
|
||||||
|
case (DCT_CatumullRom):
|
||||||
customCurve->pipetteDrag(provider, modifierKey);
|
customCurve->pipetteDrag(provider, modifierKey);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -615,6 +620,7 @@ void DiagonalCurveEditorSubGroup::refresh(CurveEditor *curveToRefresh)
|
|||||||
if (curveToRefresh != nullptr && curveToRefresh == static_cast<DiagonalCurveEditor*>(parent->displayedCurve)) {
|
if (curveToRefresh != nullptr && curveToRefresh == static_cast<DiagonalCurveEditor*>(parent->displayedCurve)) {
|
||||||
switch((DiagonalCurveType)(curveToRefresh->curveType->getSelected())) {
|
switch((DiagonalCurveType)(curveToRefresh->curveType->getSelected())) {
|
||||||
case (DCT_Spline):
|
case (DCT_Spline):
|
||||||
|
case (DCT_CatumullRom):
|
||||||
customCurve->refresh();
|
customCurve->refresh();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -703,9 +709,10 @@ void DiagonalCurveEditorSubGroup::switchGUI()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch((DiagonalCurveType)(dCurve->curveType->getSelected())) {
|
switch(auto tp = (DiagonalCurveType)(dCurve->curveType->getSelected())) {
|
||||||
case (DCT_Spline):
|
case (DCT_Spline):
|
||||||
customCurve->setPoints (dCurve->customCurveEd);
|
case (DCT_CatumullRom):
|
||||||
|
customCurve->setPoints(tp == DCT_Spline ? dCurve->customCurveEd : dCurve->catmullRomCurveEd);
|
||||||
customCurve->setColorProvider(dCurve->getCurveColorProvider(), dCurve->getCurveCallerId());
|
customCurve->setColorProvider(dCurve->getCurveColorProvider(), dCurve->getCurveCallerId());
|
||||||
customCurve->setColoredBar(leftBar, bottomBar);
|
customCurve->setColoredBar(leftBar, bottomBar);
|
||||||
customCurve->queue_resize_no_redraw();
|
customCurve->queue_resize_no_redraw();
|
||||||
@ -776,6 +783,7 @@ void DiagonalCurveEditorSubGroup::savePressed ()
|
|||||||
|
|
||||||
switch (parent->displayedCurve->selected) {
|
switch (parent->displayedCurve->selected) {
|
||||||
case DCT_Spline: // custom
|
case DCT_Spline: // custom
|
||||||
|
case DCT_CatumullRom:
|
||||||
p = customCurve->getPoints ();
|
p = customCurve->getPoints ();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -797,6 +805,8 @@ void DiagonalCurveEditorSubGroup::savePressed ()
|
|||||||
f << "Linear" << std::endl;
|
f << "Linear" << std::endl;
|
||||||
} else if (p[ix] == (double)(DCT_Spline)) {
|
} else if (p[ix] == (double)(DCT_Spline)) {
|
||||||
f << "Spline" << std::endl;
|
f << "Spline" << std::endl;
|
||||||
|
} else if (p[ix] == (double)(DCT_CatumullRom)) {
|
||||||
|
f << "CatmullRom" << std::endl;
|
||||||
} else if (p[ix] == (double)(DCT_NURBS)) {
|
} else if (p[ix] == (double)(DCT_NURBS)) {
|
||||||
f << "NURBS" << std::endl;
|
f << "NURBS" << std::endl;
|
||||||
} else if (p[ix] == (double)(DCT_Parametric)) {
|
} else if (p[ix] == (double)(DCT_Parametric)) {
|
||||||
@ -838,6 +848,8 @@ void DiagonalCurveEditorSubGroup::loadPressed ()
|
|||||||
p.push_back ((double)(DCT_Linear));
|
p.push_back ((double)(DCT_Linear));
|
||||||
} else if (s == "Spline") {
|
} else if (s == "Spline") {
|
||||||
p.push_back ((double)(DCT_Spline));
|
p.push_back ((double)(DCT_Spline));
|
||||||
|
} else if (s == "CatmullRom") {
|
||||||
|
p.push_back ((double)(DCT_CatumullRom));
|
||||||
} else if (s == "NURBS") {
|
} else if (s == "NURBS") {
|
||||||
p.push_back ((double)(DCT_NURBS));
|
p.push_back ((double)(DCT_NURBS));
|
||||||
} else if (s == "Parametric") {
|
} else if (s == "Parametric") {
|
||||||
@ -858,7 +870,7 @@ void DiagonalCurveEditorSubGroup::loadPressed ()
|
|||||||
|
|
||||||
rtengine::sanitizeCurve(p);
|
rtengine::sanitizeCurve(p);
|
||||||
|
|
||||||
if (p[0] == (double)(DCT_Spline)) {
|
if (p[0] == (double)(DCT_Spline) || p[0] == (double)(DCT_CatumullRom)) {
|
||||||
customCurve->setPoints (p);
|
customCurve->setPoints (p);
|
||||||
customCurve->queue_draw ();
|
customCurve->queue_draw ();
|
||||||
customCurve->notifyListener ();
|
customCurve->notifyListener ();
|
||||||
@ -903,6 +915,12 @@ void DiagonalCurveEditorSubGroup::copyPressed ()
|
|||||||
clipboard.setDiagonalCurveData (curve, DCT_NURBS);
|
clipboard.setDiagonalCurveData (curve, DCT_NURBS);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case DCT_CatumullRom:
|
||||||
|
curve = customCurve->getPoints ();
|
||||||
|
curve[0] = DCT_CatumullRom;
|
||||||
|
clipboard.setDiagonalCurveData (curve, DCT_CatumullRom);
|
||||||
|
break;
|
||||||
|
|
||||||
default: // (DCT_Linear, DCT_Unchanged)
|
default: // (DCT_Linear, DCT_Unchanged)
|
||||||
// ... do nothing
|
// ... do nothing
|
||||||
break;
|
break;
|
||||||
@ -923,6 +941,7 @@ void DiagonalCurveEditorSubGroup::pastePressed ()
|
|||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case DCT_Spline: // custom
|
case DCT_Spline: // custom
|
||||||
|
case DCT_CatumullRom:
|
||||||
customCurve->setPoints (curve);
|
customCurve->setPoints (curve);
|
||||||
customCurve->queue_draw ();
|
customCurve->queue_draw ();
|
||||||
customCurve->notifyListener ();
|
customCurve->notifyListener ();
|
||||||
@ -1060,6 +1079,10 @@ void DiagonalCurveEditorSubGroup::storeDisplayedCurve()
|
|||||||
storeCurveValues(parent->displayedCurve, getCurveFromGUI(DCT_NURBS));
|
storeCurveValues(parent->displayedCurve, getCurveFromGUI(DCT_NURBS));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case (DCT_CatumullRom):
|
||||||
|
storeCurveValues(parent->displayedCurve, getCurveFromGUI(DCT_CatumullRom));
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1097,6 +1120,10 @@ void DiagonalCurveEditorSubGroup::storeCurveValues (CurveEditor* ce, const std::
|
|||||||
(static_cast<DiagonalCurveEditor*>(ce))->NURBSCurveEd = p;
|
(static_cast<DiagonalCurveEditor*>(ce))->NURBSCurveEd = p;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case (DCT_CatumullRom):
|
||||||
|
(static_cast<DiagonalCurveEditor*>(ce))->catmullRomCurveEd = p;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1126,6 +1153,14 @@ const std::vector<double> DiagonalCurveEditorSubGroup::getCurveFromGUI (int type
|
|||||||
case (DCT_NURBS):
|
case (DCT_NURBS):
|
||||||
return NURBSCurve->getPoints ();
|
return NURBSCurve->getPoints ();
|
||||||
|
|
||||||
|
case (DCT_CatumullRom): {
|
||||||
|
auto ret = customCurve->getPoints();
|
||||||
|
if (!ret.empty()) {
|
||||||
|
ret[0] = DCT_CatumullRom;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
// linear and other solutions
|
// linear and other solutions
|
||||||
std::vector<double> lcurve (1);
|
std::vector<double> lcurve (1);
|
||||||
@ -1162,6 +1197,10 @@ bool DiagonalCurveEditorSubGroup::curveReset(CurveEditor *ce)
|
|||||||
customCurve->reset (dce->customResetCurve, dce->getIdentityValue());
|
customCurve->reset (dce->customResetCurve, dce->getIdentityValue());
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
case (DCT_CatumullRom) :
|
||||||
|
customCurve->reset (dce->catmullRomResetCurve, dce->getIdentityValue());
|
||||||
|
return true;
|
||||||
|
|
||||||
case (DCT_Parametric) : {
|
case (DCT_Parametric) : {
|
||||||
DiagonalCurveEditor* dCurve = static_cast<DiagonalCurveEditor*>(parent->displayedCurve);
|
DiagonalCurveEditor* dCurve = static_cast<DiagonalCurveEditor*>(parent->displayedCurve);
|
||||||
double mileStone[3];
|
double mileStone[3];
|
||||||
|
@ -246,16 +246,6 @@ int updateVolumesUI (void* br)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DirBrowser::winDirChanged ()
|
|
||||||
{
|
|
||||||
const auto func = [](gpointer data) -> gboolean {
|
|
||||||
static_cast<DirBrowser*>(data)->updateDirTreeRoot();
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
};
|
|
||||||
|
|
||||||
idle_register.add(func, this);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void DirBrowser::fillRoot ()
|
void DirBrowser::fillRoot ()
|
||||||
@ -333,14 +323,9 @@ void DirBrowser::row_expanded (const Gtk::TreeModel::iterator& iter, const Gtk::
|
|||||||
expandSuccess = true;
|
expandSuccess = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
Glib::RefPtr<WinDirMonitor> monitor = Glib::RefPtr<WinDirMonitor>(new WinDirMonitor (iter->get_value (dtColumns.dirname), this));
|
|
||||||
iter->set_value (dtColumns.monitor, monitor);
|
|
||||||
#else
|
|
||||||
Glib::RefPtr<Gio::FileMonitor> monitor = dir->monitor_directory ();
|
Glib::RefPtr<Gio::FileMonitor> monitor = dir->monitor_directory ();
|
||||||
iter->set_value (dtColumns.monitor, monitor);
|
iter->set_value (dtColumns.monitor, monitor);
|
||||||
monitor->signal_changed().connect (sigc::bind(sigc::mem_fun(*this, &DirBrowser::file_changed), iter, dir->get_parse_name()));
|
monitor->signal_changed().connect (sigc::bind(sigc::mem_fun(*this, &DirBrowser::file_changed), iter, dir->get_parse_name()));
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DirBrowser::updateDir (const Gtk::TreeModel::iterator& iter)
|
void DirBrowser::updateDir (const Gtk::TreeModel::iterator& iter)
|
||||||
|
@ -21,16 +21,13 @@
|
|||||||
|
|
||||||
#include <gtkmm.h>
|
#include <gtkmm.h>
|
||||||
#include <giomm.h>
|
#include <giomm.h>
|
||||||
#ifdef WIN32
|
|
||||||
#include "windirmonitor.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "guiutils.h"
|
#include "guiutils.h"
|
||||||
|
#ifdef WIN32
|
||||||
|
#include "windows.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
class DirBrowser : public Gtk::VBox
|
class DirBrowser : public Gtk::VBox
|
||||||
#ifdef WIN32
|
|
||||||
, public WinDirChangeListener
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef sigc::signal<void, const Glib::ustring&, const Glib::ustring&> DirSelectionSignal;
|
typedef sigc::signal<void, const Glib::ustring&, const Glib::ustring&> DirSelectionSignal;
|
||||||
@ -45,11 +42,7 @@ private:
|
|||||||
Gtk::TreeModelColumn<Glib::RefPtr<Gdk::Pixbuf> > icon1;
|
Gtk::TreeModelColumn<Glib::RefPtr<Gdk::Pixbuf> > icon1;
|
||||||
Gtk::TreeModelColumn<Glib::RefPtr<Gdk::Pixbuf> > icon2;
|
Gtk::TreeModelColumn<Glib::RefPtr<Gdk::Pixbuf> > icon2;
|
||||||
Gtk::TreeModelColumn<Glib::ustring> dirname;
|
Gtk::TreeModelColumn<Glib::ustring> dirname;
|
||||||
#ifdef WIN32
|
|
||||||
Gtk::TreeModelColumn<Glib::RefPtr<WinDirMonitor> > monitor;
|
|
||||||
#else
|
|
||||||
Gtk::TreeModelColumn<Glib::RefPtr<Gio::FileMonitor> > monitor;
|
Gtk::TreeModelColumn<Glib::RefPtr<Gio::FileMonitor> > monitor;
|
||||||
#endif
|
|
||||||
|
|
||||||
DirTreeColumns()
|
DirTreeColumns()
|
||||||
{
|
{
|
||||||
@ -89,7 +82,6 @@ public:
|
|||||||
void updateVolumes ();
|
void updateVolumes ();
|
||||||
void updateDirTree (const Gtk::TreeModel::iterator& iter);
|
void updateDirTree (const Gtk::TreeModel::iterator& iter);
|
||||||
void updateDirTreeRoot ();
|
void updateDirTreeRoot ();
|
||||||
void winDirChanged () override;
|
|
||||||
private:
|
private:
|
||||||
void addRoot (char letter);
|
void addRoot (char letter);
|
||||||
#endif
|
#endif
|
||||||
|
@ -459,9 +459,6 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
selectedDirectory = "";
|
selectedDirectory = "";
|
||||||
#ifdef WIN32
|
|
||||||
wdMonitor = NULL;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
FileCatalog::~FileCatalog()
|
FileCatalog::~FileCatalog()
|
||||||
@ -540,21 +537,10 @@ void FileCatalog::closeDir ()
|
|||||||
exportPanel->set_sensitive (false);
|
exportPanel->set_sensitive (false);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef WIN32
|
|
||||||
|
|
||||||
if (dirMonitor) {
|
if (dirMonitor) {
|
||||||
dirMonitor->cancel ();
|
dirMonitor->cancel ();
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
if (wdMonitor) {
|
|
||||||
delete wdMonitor;
|
|
||||||
wdMonitor = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// ignore old requests
|
// ignore old requests
|
||||||
++selectedDirectoryId;
|
++selectedDirectoryId;
|
||||||
|
|
||||||
@ -671,12 +657,8 @@ void FileCatalog::dirSelected (const Glib::ustring& dirname, const Glib::ustring
|
|||||||
filepanel->loadingThumbs(M("PROGRESSBAR_LOADINGTHUMBS"), 0);
|
filepanel->loadingThumbs(M("PROGRESSBAR_LOADINGTHUMBS"), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
wdMonitor = new WinDirMonitor (selectedDirectory, this);
|
|
||||||
#else
|
|
||||||
dirMonitor = dir->monitor_directory ();
|
dirMonitor = dir->monitor_directory ();
|
||||||
dirMonitor->signal_changed().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::on_dir_changed), false));
|
dirMonitor->signal_changed().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::on_dir_changed), false));
|
||||||
#endif
|
|
||||||
} catch (Glib::Exception& ex) {
|
} catch (Glib::Exception& ex) {
|
||||||
std::cout << ex.what();
|
std::cout << ex.what();
|
||||||
}
|
}
|
||||||
@ -1748,21 +1730,6 @@ void FileCatalog::reparseDirectory ()
|
|||||||
fileNameList = nfileNameList;
|
fileNameList = nfileNameList;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
|
|
||||||
void FileCatalog::winDirChanged ()
|
|
||||||
{
|
|
||||||
const auto func = [](gpointer data) -> gboolean {
|
|
||||||
static_cast<FileCatalog*>(data)->reparseDirectory();
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
};
|
|
||||||
|
|
||||||
idle_register.add(func, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
void FileCatalog::on_dir_changed (const Glib::RefPtr<Gio::File>& file, const Glib::RefPtr<Gio::File>& other_file, Gio::FileMonitorEvent event_type, bool internal)
|
void FileCatalog::on_dir_changed (const Glib::RefPtr<Gio::File>& file, const Glib::RefPtr<Gio::File>& other_file, Gio::FileMonitorEvent event_type, bool internal)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -1777,8 +1744,6 @@ void FileCatalog::on_dir_changed (const Glib::RefPtr<Gio::File>& file, const Gli
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void FileCatalog::checkAndAddFile (Glib::RefPtr<Gio::File> file)
|
void FileCatalog::checkAndAddFile (Glib::RefPtr<Gio::File> file)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -19,9 +19,6 @@
|
|||||||
#ifndef _FILECATALOG_
|
#ifndef _FILECATALOG_
|
||||||
#define _FILECATALOG_
|
#define _FILECATALOG_
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
#include "windirmonitor.h"
|
|
||||||
#endif
|
|
||||||
#include "filebrowser.h"
|
#include "filebrowser.h"
|
||||||
#include "exiffiltersettings.h"
|
#include "exiffiltersettings.h"
|
||||||
#include <giomm.h>
|
#include <giomm.h>
|
||||||
@ -48,9 +45,6 @@ class FileCatalog : public Gtk::VBox,
|
|||||||
public FilterPanelListener,
|
public FilterPanelListener,
|
||||||
public FileBrowserListener,
|
public FileBrowserListener,
|
||||||
public ExportPanelListener
|
public ExportPanelListener
|
||||||
#ifdef WIN32
|
|
||||||
, public WinDirChangeListener
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef sigc::slot<void, const Glib::ustring&> DirSelectionSlot;
|
typedef sigc::slot<void, const Glib::ustring&> DirSelectionSlot;
|
||||||
@ -142,11 +136,7 @@ private:
|
|||||||
std::set<Glib::ustring> editedFiles;
|
std::set<Glib::ustring> editedFiles;
|
||||||
guint modifierKey; // any modifiers held when rank button was pressed
|
guint modifierKey; // any modifiers held when rank button was pressed
|
||||||
|
|
||||||
#ifndef _WIN32
|
|
||||||
Glib::RefPtr<Gio::FileMonitor> dirMonitor;
|
Glib::RefPtr<Gio::FileMonitor> dirMonitor;
|
||||||
#else
|
|
||||||
WinDirMonitor* wdMonitor;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
IdleRegister idle_register;
|
IdleRegister idle_register;
|
||||||
|
|
||||||
@ -288,11 +278,7 @@ public:
|
|||||||
void showToolBar();
|
void showToolBar();
|
||||||
void hideToolBar();
|
void hideToolBar();
|
||||||
|
|
||||||
#ifndef _WIN32
|
|
||||||
void on_dir_changed (const Glib::RefPtr<Gio::File>& file, const Glib::RefPtr<Gio::File>& other_file, Gio::FileMonitorEvent event_type, bool internal);
|
void on_dir_changed (const Glib::RefPtr<Gio::File>& file, const Glib::RefPtr<Gio::File>& other_file, Gio::FileMonitorEvent event_type, bool internal);
|
||||||
#else
|
|
||||||
void winDirChanged ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ LensProfilePanel::LensProfilePanel() :
|
|||||||
lensfunCameras(Gtk::manage((new MyComboBox()))),
|
lensfunCameras(Gtk::manage((new MyComboBox()))),
|
||||||
lensfunLensesLbl(Gtk::manage((new Gtk::Label(M("EXIFFILTER_LENS"))))),
|
lensfunLensesLbl(Gtk::manage((new Gtk::Label(M("EXIFFILTER_LENS"))))),
|
||||||
lensfunLenses(Gtk::manage((new MyComboBox()))),
|
lensfunLenses(Gtk::manage((new MyComboBox()))),
|
||||||
warning(Gtk::manage((new Gtk::Image()))),
|
warning(Gtk::manage(new RTImage("warning.png"))),
|
||||||
ckbUseDist(Gtk::manage((new Gtk::CheckButton(M("TP_LENSPROFILE_USE_GEOMETRIC"))))),
|
ckbUseDist(Gtk::manage((new Gtk::CheckButton(M("TP_LENSPROFILE_USE_GEOMETRIC"))))),
|
||||||
ckbUseVign(Gtk::manage((new Gtk::CheckButton(M("TP_LENSPROFILE_USE_VIGNETTING"))))),
|
ckbUseVign(Gtk::manage((new Gtk::CheckButton(M("TP_LENSPROFILE_USE_VIGNETTING"))))),
|
||||||
ckbUseCA(Gtk::manage((new Gtk::CheckButton(M("TP_LENSPROFILE_USE_CA")))))
|
ckbUseCA(Gtk::manage((new Gtk::CheckButton(M("TP_LENSPROFILE_USE_CA")))))
|
||||||
@ -66,20 +66,18 @@ LensProfilePanel::LensProfilePanel() :
|
|||||||
|
|
||||||
// Main containers:
|
// Main containers:
|
||||||
|
|
||||||
|
Gtk::Frame *nodesFrame = Gtk::manage(new Gtk::Frame(M("TP_LENSPROFILE_MODE_HEADER")));
|
||||||
|
|
||||||
modesGrid->get_style_context()->add_class("grid-spacing");
|
modesGrid->get_style_context()->add_class("grid-spacing");
|
||||||
setExpandAlignProperties(modesGrid, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER);
|
setExpandAlignProperties(modesGrid, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER);
|
||||||
|
|
||||||
|
Gtk::Frame *distFrame = Gtk::manage(new Gtk::Frame(M("TP_LENSPROFILE_USE_HEADER")));
|
||||||
|
|
||||||
distGrid->get_style_context()->add_class("grid-spacing");
|
distGrid->get_style_context()->add_class("grid-spacing");
|
||||||
setExpandAlignProperties(distGrid, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER);
|
setExpandAlignProperties(distGrid, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER);
|
||||||
|
|
||||||
// Mode choice widgets:
|
// Mode choice widgets:
|
||||||
|
|
||||||
Gtk::Label* const corrHeaderLbl = Gtk::manage(new Gtk::Label(M("TP_LENSPROFILE_MODE_HEADER")));
|
|
||||||
setExpandAlignProperties(corrHeaderLbl, true, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER);
|
|
||||||
|
|
||||||
corrUnchangedRB->hide();
|
|
||||||
corrGroup = corrUnchangedRB->get_group();
|
|
||||||
|
|
||||||
setExpandAlignProperties(corrLcpFileChooser, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER);
|
setExpandAlignProperties(corrLcpFileChooser, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER);
|
||||||
|
|
||||||
// Manually-selected profile widgets:
|
// Manually-selected profile widgets:
|
||||||
@ -106,7 +104,6 @@ LensProfilePanel::LensProfilePanel() :
|
|||||||
lensesCellRenderer->property_ellipsize() = Pango::ELLIPSIZE_MIDDLE;
|
lensesCellRenderer->property_ellipsize() = Pango::ELLIPSIZE_MIDDLE;
|
||||||
lensesCellRenderer->property_ellipsize_set() = true;
|
lensesCellRenderer->property_ellipsize_set() = true;
|
||||||
|
|
||||||
warning->set_from_icon_name("dialog-warning", Gtk::ICON_SIZE_LARGE_TOOLBAR);
|
|
||||||
warning->set_tooltip_text(M("TP_LENSPROFILE_LENS_WARNING"));
|
warning->set_tooltip_text(M("TP_LENSPROFILE_LENS_WARNING"));
|
||||||
warning->hide();
|
warning->hide();
|
||||||
|
|
||||||
@ -133,37 +130,33 @@ LensProfilePanel::LensProfilePanel() :
|
|||||||
|
|
||||||
// Choice of properties to correct, applicable to all modes:
|
// Choice of properties to correct, applicable to all modes:
|
||||||
|
|
||||||
Gtk::Label* const useHeaderLbl = Gtk::manage(new Gtk::Label(M("TP_LENSPROFILE_USE_HEADER")));
|
|
||||||
setExpandAlignProperties(useHeaderLbl, true, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER);
|
|
||||||
|
|
||||||
// Populate modes grid:
|
// Populate modes grid:
|
||||||
|
|
||||||
modesGrid->attach(*corrHeaderLbl, 0, 0, 2, 1);
|
modesGrid->attach(*corrOffRB, 0, 0, 3, 1);
|
||||||
modesGrid->attach(*corrUnchangedRB, 0, 1, 2, 1);
|
modesGrid->attach(*corrLensfunAutoRB, 0, 1, 3, 1);
|
||||||
modesGrid->attach(*corrOffRB, 0, 2, 2, 1);
|
modesGrid->attach(*corrLensfunManualRB, 0, 2, 3, 1);
|
||||||
modesGrid->attach(*corrLensfunAutoRB, 0, 3, 2, 1);
|
|
||||||
modesGrid->attach(*corrLensfunManualRB, 0, 4, 2, 1);
|
|
||||||
|
|
||||||
modesGrid->attach(*lensfunCamerasLbl, 0, 5, 1, 1);
|
modesGrid->attach(*lensfunCamerasLbl, 0, 3, 1, 1);
|
||||||
modesGrid->attach(*lensfunCameras, 1, 5, 1, 1);
|
modesGrid->attach(*lensfunCameras, 1, 3, 1, 1);
|
||||||
modesGrid->attach(*lensfunLensesLbl, 0, 6, 1, 1);
|
modesGrid->attach(*lensfunLensesLbl, 0, 4, 1, 1);
|
||||||
modesGrid->attach(*lensfunLenses, 1, 6, 1, 1);
|
modesGrid->attach(*lensfunLenses, 1, 4, 1, 1);
|
||||||
modesGrid->attach(*warning, 2, 6, 1, 1);
|
modesGrid->attach(*warning, 2, 3, 1, 2);
|
||||||
|
|
||||||
modesGrid->attach(*corrLcpFileRB, 0, 7, 1, 1);
|
modesGrid->attach(*corrLcpFileRB, 0, 5, 1, 1);
|
||||||
modesGrid->attach(*corrLcpFileChooser, 1, 7, 1, 1);
|
modesGrid->attach(*corrLcpFileChooser, 1, 5, 1, 1);
|
||||||
|
|
||||||
// Populate distortions grid:
|
// Populate distortions grid:
|
||||||
|
|
||||||
distGrid->attach(*useHeaderLbl, 0, 0, 1, 1);
|
distGrid->attach(*ckbUseDist, 0, 0, 1, 1);
|
||||||
distGrid->attach(*ckbUseDist, 0, 1, 1, 1);
|
distGrid->attach(*ckbUseVign, 0, 1, 1, 1);
|
||||||
distGrid->attach(*ckbUseVign, 0, 2, 1, 1);
|
distGrid->attach(*ckbUseCA, 0, 2, 1, 1);
|
||||||
distGrid->attach(*ckbUseCA, 0, 3, 1, 1);
|
|
||||||
|
|
||||||
// Attach grids:
|
// Attach grids:
|
||||||
|
nodesFrame->add(*modesGrid);
|
||||||
|
distFrame->add(*distGrid);
|
||||||
|
|
||||||
pack_start(*modesGrid);
|
pack_start(*nodesFrame, Gtk::PACK_EXPAND_WIDGET);
|
||||||
pack_start(*distGrid);
|
pack_start(*distFrame, Gtk::PACK_EXPAND_WIDGET);
|
||||||
|
|
||||||
// Signals:
|
// Signals:
|
||||||
|
|
||||||
@ -185,11 +178,7 @@ void LensProfilePanel::read(const rtengine::procparams::ProcParams* pp, const Pa
|
|||||||
disableListener();
|
disableListener();
|
||||||
conUseDist.block(true);
|
conUseDist.block(true);
|
||||||
|
|
||||||
if (!batchMode) {
|
// corrLensfunAutoRB->set_sensitive(true);
|
||||||
corrUnchangedRB->hide();
|
|
||||||
}
|
|
||||||
|
|
||||||
corrLensfunAutoRB->set_sensitive(true);
|
|
||||||
|
|
||||||
switch (pp->lensProf.lcMode) {
|
switch (pp->lensProf.lcMode) {
|
||||||
case procparams::LensProfParams::LcMode::LCP: {
|
case procparams::LensProfParams::LcMode::LCP: {
|
||||||
@ -200,6 +189,9 @@ void LensProfilePanel::read(const rtengine::procparams::ProcParams* pp, const Pa
|
|||||||
|
|
||||||
case procparams::LensProfParams::LcMode::LENSFUNAUTOMATCH: {
|
case procparams::LensProfParams::LcMode::LENSFUNAUTOMATCH: {
|
||||||
corrLensfunAutoRB->set_active(true);
|
corrLensfunAutoRB->set_active(true);
|
||||||
|
if (batchMode) {
|
||||||
|
setManualParamsVisibility(false);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -237,23 +229,26 @@ void LensProfilePanel::read(const rtengine::procparams::ProcParams* pp, const Pa
|
|||||||
const LFDatabase* const db = LFDatabase::getInstance();
|
const LFDatabase* const db = LFDatabase::getInstance();
|
||||||
LFCamera c;
|
LFCamera c;
|
||||||
|
|
||||||
if (!setLensfunCamera(pp->lensProf.lfCameraMake, pp->lensProf.lfCameraModel) && !pp->lensProf.lfManual()) {
|
if (pp->lensProf.lfAutoMatch()) {
|
||||||
if (metadata) {
|
if (metadata) {
|
||||||
c = db->findCamera(metadata->getMake(), metadata->getModel());
|
c = db->findCamera(metadata->getMake(), metadata->getModel());
|
||||||
setLensfunCamera(c.getMake(), c.getModel());
|
setLensfunCamera(c.getMake(), c.getModel());
|
||||||
}
|
}
|
||||||
|
} else if (pp->lensProf.lfManual()) {
|
||||||
|
setLensfunCamera(pp->lensProf.lfCameraMake, pp->lensProf.lfCameraModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!setLensfunLens(pp->lensProf.lfLens) && !pp->lensProf.lfManual()) {
|
if (pp->lensProf.lfAutoMatch()) {
|
||||||
if (metadata) {
|
if (metadata) {
|
||||||
const LFLens l = db->findLens(c, metadata->getLens());
|
const LFLens l = db->findLens(c, metadata->getLens());
|
||||||
setLensfunLens(l.getLens());
|
setLensfunLens(l.getLens());
|
||||||
}
|
}
|
||||||
|
} else if (pp->lensProf.lfManual()) {
|
||||||
|
setLensfunLens(pp->lensProf.lfLens);
|
||||||
}
|
}
|
||||||
|
|
||||||
lcModeChanged = lcpFileChanged = useDistChanged = useVignChanged = useCAChanged = false;
|
|
||||||
useLensfunChanged = lensfunAutoChanged = lensfunCameraChanged = lensfunLensChanged = false;
|
|
||||||
|
|
||||||
|
/*
|
||||||
if (!batchMode && !checkLensfunCanCorrect(true)) {
|
if (!batchMode && !checkLensfunCanCorrect(true)) {
|
||||||
if (corrLensfunAutoRB->get_active()) {
|
if (corrLensfunAutoRB->get_active()) {
|
||||||
corrOffRB->set_active(true);
|
corrOffRB->set_active(true);
|
||||||
@ -262,16 +257,37 @@ void LensProfilePanel::read(const rtengine::procparams::ProcParams* pp, const Pa
|
|||||||
corrLensfunAutoRB->set_sensitive(false);
|
corrLensfunAutoRB->set_sensitive(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (corrLensfunManualRB->get_active() && !checkLensfunCanCorrect(false)) {
|
if (!batchMode && corrLensfunManualRB->get_active() && !checkLensfunCanCorrect(false)) {
|
||||||
corrOffRB->set_active(true);
|
corrOffRB->set_active(true);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
updateLensfunWarning();
|
|
||||||
|
|
||||||
ckbUseDist->set_active(pp->lensProf.useDist);
|
ckbUseDist->set_active(pp->lensProf.useDist);
|
||||||
ckbUseVign->set_active(pp->lensProf.useVign && isRaw);
|
ckbUseVign->set_active(pp->lensProf.useVign);
|
||||||
ckbUseCA->set_active(pp->lensProf.useCA && isRaw && ckbUseCA->get_sensitive());
|
ckbUseCA->set_active(pp->lensProf.useCA);
|
||||||
|
|
||||||
|
if (pedited) {
|
||||||
|
corrUnchangedRB->set_active(!pedited->lensProf.lcMode);
|
||||||
|
ckbUseDist->set_inconsistent(!pedited->lensProf.useDist);
|
||||||
|
ckbUseVign->set_inconsistent(!pedited->lensProf.useVign);
|
||||||
|
ckbUseCA->set_inconsistent(!pedited->lensProf.useCA);
|
||||||
|
|
||||||
|
if (!pedited->lensProf.lfCameraMake || !pedited->lensProf.lfCameraModel) {
|
||||||
|
setLensfunCamera("", "");
|
||||||
|
}
|
||||||
|
if (!pedited->lensProf.lfLens) {
|
||||||
|
setLensfunLens("");
|
||||||
|
}
|
||||||
|
|
||||||
|
ckbUseDist->set_sensitive(true);
|
||||||
|
ckbUseVign->set_sensitive(true);
|
||||||
|
ckbUseCA->set_sensitive(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
lcModeChanged = lcpFileChanged = useDistChanged = useVignChanged = useCAChanged = false;
|
||||||
|
useLensfunChanged = lensfunAutoChanged = lensfunCameraChanged = lensfunLensChanged = false;
|
||||||
|
|
||||||
|
updateLensfunWarning();
|
||||||
enableListener();
|
enableListener();
|
||||||
conUseDist.block(false);
|
conUseDist.block(false);
|
||||||
}
|
}
|
||||||
@ -303,7 +319,7 @@ void LensProfilePanel::write(rtengine::procparams::ProcParams* pp, ParamsEdited*
|
|||||||
|
|
||||||
const auto itc = lensfunCameras->get_active();
|
const auto itc = lensfunCameras->get_active();
|
||||||
|
|
||||||
if (itc) {
|
if (itc && !corrLensfunAutoRB->get_active()) {
|
||||||
pp->lensProf.lfCameraMake = (*itc)[lf->lensfunModelCam.make];
|
pp->lensProf.lfCameraMake = (*itc)[lf->lensfunModelCam.make];
|
||||||
pp->lensProf.lfCameraModel = (*itc)[lf->lensfunModelCam.model];
|
pp->lensProf.lfCameraModel = (*itc)[lf->lensfunModelCam.model];
|
||||||
} else {
|
} else {
|
||||||
@ -313,7 +329,7 @@ void LensProfilePanel::write(rtengine::procparams::ProcParams* pp, ParamsEdited*
|
|||||||
|
|
||||||
const auto itl = lensfunLenses->get_active();
|
const auto itl = lensfunLenses->get_active();
|
||||||
|
|
||||||
if (itl) {
|
if (itl && !corrLensfunAutoRB->get_active()) {
|
||||||
pp->lensProf.lfLens = (*itl)[lf->lensfunModelLens.lens];
|
pp->lensProf.lfLens = (*itl)[lf->lensfunModelLens.lens];
|
||||||
} else {
|
} else {
|
||||||
pp->lensProf.lfLens = "";
|
pp->lensProf.lfLens = "";
|
||||||
@ -335,7 +351,7 @@ void LensProfilePanel::write(rtengine::procparams::ProcParams* pp, ParamsEdited*
|
|||||||
|
|
||||||
void LensProfilePanel::setRawMeta(bool raw, const rtengine::FramesMetaData* pMeta)
|
void LensProfilePanel::setRawMeta(bool raw, const rtengine::FramesMetaData* pMeta)
|
||||||
{
|
{
|
||||||
if (!raw || pMeta->getFocusDist() <= 0) {
|
if ((!raw || pMeta->getFocusDist() <= 0) && !batchMode) {
|
||||||
disableListener();
|
disableListener();
|
||||||
|
|
||||||
// CA is very focus layer dependent, otherwise it might even worsen things
|
// CA is very focus layer dependent, otherwise it might even worsen things
|
||||||
@ -370,6 +386,10 @@ void LensProfilePanel::onLCPFileChanged()
|
|||||||
void LensProfilePanel::onUseDistChanged()
|
void LensProfilePanel::onUseDistChanged()
|
||||||
{
|
{
|
||||||
useDistChanged = true;
|
useDistChanged = true;
|
||||||
|
if (ckbUseDist->get_inconsistent()) {
|
||||||
|
ckbUseDist->set_inconsistent(false);
|
||||||
|
ckbUseDist->set_active(false);
|
||||||
|
}
|
||||||
|
|
||||||
if (listener) {
|
if (listener) {
|
||||||
listener->panelChanged(EvLCPUseDist, ckbUseDist->get_active() ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED"));
|
listener->panelChanged(EvLCPUseDist, ckbUseDist->get_active() ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED"));
|
||||||
@ -379,6 +399,10 @@ void LensProfilePanel::onUseDistChanged()
|
|||||||
void LensProfilePanel::onUseVignChanged()
|
void LensProfilePanel::onUseVignChanged()
|
||||||
{
|
{
|
||||||
useVignChanged = true;
|
useVignChanged = true;
|
||||||
|
if (ckbUseVign->get_inconsistent()) {
|
||||||
|
ckbUseVign->set_inconsistent(false);
|
||||||
|
ckbUseVign->set_active(false);
|
||||||
|
}
|
||||||
|
|
||||||
if (listener) {
|
if (listener) {
|
||||||
listener->panelChanged(EvLCPUseVign, ckbUseVign->get_active() ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED"));
|
listener->panelChanged(EvLCPUseVign, ckbUseVign->get_active() ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED"));
|
||||||
@ -388,6 +412,10 @@ void LensProfilePanel::onUseVignChanged()
|
|||||||
void LensProfilePanel::onUseCAChanged()
|
void LensProfilePanel::onUseCAChanged()
|
||||||
{
|
{
|
||||||
useCAChanged = true;
|
useCAChanged = true;
|
||||||
|
if (ckbUseCA->get_inconsistent()) {
|
||||||
|
ckbUseCA->set_inconsistent(false);
|
||||||
|
ckbUseCA->set_active(false);
|
||||||
|
}
|
||||||
|
|
||||||
if (listener) {
|
if (listener) {
|
||||||
listener->panelChanged(EvLCPUseCA, ckbUseCA->get_active() ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED"));
|
listener->panelChanged(EvLCPUseCA, ckbUseCA->get_active() ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED"));
|
||||||
@ -398,12 +426,10 @@ void LensProfilePanel::setBatchMode(bool yes)
|
|||||||
{
|
{
|
||||||
FoldableToolPanel::setBatchMode(yes);
|
FoldableToolPanel::setBatchMode(yes);
|
||||||
|
|
||||||
if (yes) {
|
corrUnchangedRB->set_group(corrGroup);
|
||||||
corrUnchangedRB->show();
|
modesGrid->attach_next_to(*corrUnchangedRB, Gtk::POS_TOP, 3, 1);
|
||||||
|
corrUnchangedRB->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &LensProfilePanel::onCorrModeChanged), corrUnchangedRB));
|
||||||
corrUnchangedRB->set_active(true);
|
corrUnchangedRB->set_active(true);
|
||||||
} else {
|
|
||||||
corrUnchangedRB->hide();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LensProfilePanel::onLensfunCameraChanged()
|
void LensProfilePanel::onLensfunCameraChanged()
|
||||||
@ -453,63 +479,73 @@ void LensProfilePanel::onCorrModeChanged(const Gtk::RadioButton* rbChanged)
|
|||||||
Glib::ustring mode;
|
Glib::ustring mode;
|
||||||
|
|
||||||
if (rbChanged == corrOffRB) {
|
if (rbChanged == corrOffRB) {
|
||||||
|
lcModeChanged = true;
|
||||||
useLensfunChanged = true;
|
useLensfunChanged = true;
|
||||||
lensfunAutoChanged = true;
|
lensfunAutoChanged = true;
|
||||||
lcpFileChanged = true;
|
lcpFileChanged = false;
|
||||||
|
|
||||||
ckbUseDist->set_sensitive(false);
|
ckbUseDist->set_sensitive(false);
|
||||||
ckbUseVign->set_sensitive(false);
|
ckbUseVign->set_sensitive(false);
|
||||||
ckbUseCA->set_sensitive(false);
|
ckbUseCA->set_sensitive(false);
|
||||||
|
|
||||||
mode = M("GENERAL_NONE");
|
mode = M("GENERAL_NONE");
|
||||||
|
|
||||||
} else if (rbChanged == corrLensfunAutoRB) {
|
} else if (rbChanged == corrLensfunAutoRB) {
|
||||||
|
lcModeChanged = true;
|
||||||
useLensfunChanged = true;
|
useLensfunChanged = true;
|
||||||
lensfunAutoChanged = true;
|
lensfunAutoChanged = true;
|
||||||
lcpFileChanged = true;
|
lensfunCameraChanged = true;
|
||||||
useDistChanged = true;
|
lensfunLensChanged = true;
|
||||||
useVignChanged = true;
|
lcpFileChanged = false;
|
||||||
|
|
||||||
ckbUseDist->set_sensitive(true);
|
ckbUseDist->set_sensitive(true);
|
||||||
ckbUseVign->set_sensitive(true);
|
ckbUseVign->set_sensitive(true);
|
||||||
ckbUseCA->set_sensitive(false);
|
ckbUseCA->set_sensitive(true);
|
||||||
|
|
||||||
|
|
||||||
if (metadata) {
|
|
||||||
const bool disabled = disableListener();
|
const bool disabled = disableListener();
|
||||||
|
if (batchMode) {
|
||||||
|
setLensfunCamera("", "");
|
||||||
|
setLensfunLens("");
|
||||||
|
} else if (metadata) {
|
||||||
const LFDatabase* const db = LFDatabase::getInstance();
|
const LFDatabase* const db = LFDatabase::getInstance();
|
||||||
const LFCamera c = db->findCamera(metadata->getMake(), metadata->getModel());
|
const LFCamera c = db->findCamera(metadata->getMake(), metadata->getModel());
|
||||||
const LFLens l = db->findLens(c, metadata->getLens());
|
const LFLens l = db->findLens(c, metadata->getLens());
|
||||||
setLensfunCamera(c.getMake(), c.getModel());
|
setLensfunCamera(c.getMake(), c.getModel());
|
||||||
setLensfunLens(l.getLens());
|
setLensfunLens(l.getLens());
|
||||||
|
}
|
||||||
if (disabled) {
|
if (disabled) {
|
||||||
enableListener();
|
enableListener();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
mode = M("TP_LENSPROFILE_CORRECTION_AUTOMATCH");
|
mode = M("TP_LENSPROFILE_CORRECTION_AUTOMATCH");
|
||||||
|
|
||||||
} else if (rbChanged == corrLensfunManualRB) {
|
} else if (rbChanged == corrLensfunManualRB) {
|
||||||
|
lcModeChanged = true;
|
||||||
useLensfunChanged = true;
|
useLensfunChanged = true;
|
||||||
lensfunAutoChanged = true;
|
lensfunAutoChanged = true;
|
||||||
lcpFileChanged = true;
|
lensfunCameraChanged = true;
|
||||||
useDistChanged = true;
|
lensfunLensChanged = true;
|
||||||
useVignChanged = true;
|
lcpFileChanged = false;
|
||||||
|
|
||||||
ckbUseDist->set_sensitive(true);
|
ckbUseDist->set_sensitive(true);
|
||||||
ckbUseVign->set_sensitive(true);
|
ckbUseVign->set_sensitive(true);
|
||||||
ckbUseCA->set_sensitive(false);
|
ckbUseCA->set_sensitive(false);
|
||||||
|
|
||||||
mode = M("TP_LENSPROFILE_CORRECTION_MANUAL");
|
mode = M("TP_LENSPROFILE_CORRECTION_MANUAL");
|
||||||
|
|
||||||
} else if (rbChanged == corrLcpFileRB) {
|
} else if (rbChanged == corrLcpFileRB) {
|
||||||
|
lcModeChanged = true;
|
||||||
useLensfunChanged = true;
|
useLensfunChanged = true;
|
||||||
lensfunAutoChanged = true;
|
lensfunAutoChanged = true;
|
||||||
lcpFileChanged = true;
|
lcpFileChanged = true;
|
||||||
useDistChanged = true;
|
|
||||||
useVignChanged = true;
|
|
||||||
|
|
||||||
updateDisabled(true);
|
updateDisabled(true);
|
||||||
|
|
||||||
mode = M("TP_LENSPROFILE_CORRECTION_LCPFILE");
|
mode = M("TP_LENSPROFILE_CORRECTION_LCPFILE");
|
||||||
|
|
||||||
} else if (rbChanged == corrUnchangedRB) {
|
} else if (rbChanged == corrUnchangedRB) {
|
||||||
|
lcModeChanged = false;
|
||||||
useLensfunChanged = false;
|
useLensfunChanged = false;
|
||||||
lensfunAutoChanged = false;
|
lensfunAutoChanged = false;
|
||||||
lcpFileChanged = false;
|
lcpFileChanged = false;
|
||||||
@ -523,10 +559,9 @@ void LensProfilePanel::onCorrModeChanged(const Gtk::RadioButton* rbChanged)
|
|||||||
mode = M("GENERAL_UNCHANGED");
|
mode = M("GENERAL_UNCHANGED");
|
||||||
}
|
}
|
||||||
|
|
||||||
lcModeChanged = true;
|
|
||||||
updateLensfunWarning();
|
updateLensfunWarning();
|
||||||
|
|
||||||
if (rbChanged == corrLensfunManualRB || rbChanged == corrLensfunAutoRB) {
|
if (rbChanged == corrLensfunManualRB || (!batchMode && rbChanged == corrLensfunAutoRB)) {
|
||||||
setManualParamsVisibility(true);
|
setManualParamsVisibility(true);
|
||||||
} else {
|
} else {
|
||||||
setManualParamsVisibility(false);
|
setManualParamsVisibility(false);
|
||||||
@ -634,10 +669,12 @@ void LensProfilePanel::LFDbHelper::fillLensfunLenses()
|
|||||||
|
|
||||||
void LensProfilePanel::updateDisabled(bool enable)
|
void LensProfilePanel::updateDisabled(bool enable)
|
||||||
{
|
{
|
||||||
|
if (!batchMode) {
|
||||||
ckbUseDist->set_sensitive(enable);
|
ckbUseDist->set_sensitive(enable);
|
||||||
ckbUseVign->set_sensitive(enable && isRaw);
|
ckbUseVign->set_sensitive(enable && isRaw);
|
||||||
ckbUseCA->set_sensitive(enable && allowFocusDep);
|
ckbUseCA->set_sensitive(enable && allowFocusDep);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool LensProfilePanel::setLensfunCamera(const Glib::ustring& make, const Glib::ustring& model)
|
bool LensProfilePanel::setLensfunCamera(const Glib::ustring& make, const Glib::ustring& model)
|
||||||
{
|
{
|
||||||
|
@ -209,27 +209,6 @@ Glib::ustring MultiLangMgr::getOSUserLanguage ()
|
|||||||
{
|
{
|
||||||
Glib::ustring langName ("default");
|
Glib::ustring langName ("default");
|
||||||
|
|
||||||
#if defined (WIN32)
|
|
||||||
|
|
||||||
const LCID localeID = GetUserDefaultLCID ();
|
|
||||||
TCHAR localeName[18];
|
|
||||||
|
|
||||||
const int langLen = GetLocaleInfo (localeID, LOCALE_SISO639LANGNAME, localeName, 9);
|
|
||||||
if (langLen <= 0) {
|
|
||||||
return langName;
|
|
||||||
}
|
|
||||||
|
|
||||||
localeName[langLen - 1] = '-';
|
|
||||||
|
|
||||||
const int countryLen = GetLocaleInfo (localeID, LOCALE_SISO3166CTRYNAME, &localeName[langLen], 9);
|
|
||||||
if (countryLen <= 0) {
|
|
||||||
return langName;
|
|
||||||
}
|
|
||||||
|
|
||||||
langName = localeToLang (localeName);
|
|
||||||
|
|
||||||
#elif defined (__linux__) || defined (__APPLE__)
|
|
||||||
|
|
||||||
// Query the current locale and force decimal point to dot.
|
// Query the current locale and force decimal point to dot.
|
||||||
const char *locale = getenv("LANG");
|
const char *locale = getenv("LANG");
|
||||||
if (locale || (locale = setlocale (LC_CTYPE, ""))) {
|
if (locale || (locale = setlocale (LC_CTYPE, ""))) {
|
||||||
@ -238,7 +217,5 @@ Glib::ustring MultiLangMgr::getOSUserLanguage ()
|
|||||||
|
|
||||||
setlocale (LC_NUMERIC, "C");
|
setlocale (LC_NUMERIC, "C");
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return langName;
|
return langName;
|
||||||
}
|
}
|
||||||
|
@ -775,7 +775,7 @@ bool MyDiagonalCurve::handleEvents (GdkEvent* event)
|
|||||||
case GDK_MOTION_NOTIFY:
|
case GDK_MOTION_NOTIFY:
|
||||||
snapToElmt = -100;
|
snapToElmt = -100;
|
||||||
|
|
||||||
if (curve.type == DCT_Linear || curve.type == DCT_Spline || curve.type == DCT_NURBS) {
|
if (curve.type == DCT_Linear || curve.type == DCT_Spline || curve.type == DCT_NURBS || curve.type == DCT_CatumullRom) {
|
||||||
|
|
||||||
snapToMinDistY = snapToMinDistX = 10.;
|
snapToMinDistY = snapToMinDistX = 10.;
|
||||||
snapToValY = snapToValX = 0.;
|
snapToValY = snapToValX = 0.;
|
||||||
@ -1026,7 +1026,7 @@ void MyDiagonalCurve::pipetteMouseOver (CurveEditor *ce, EditDataProvider *provi
|
|||||||
|
|
||||||
double minDistanceX = double(MIN_DISTANCE) / double(graphW - 1);
|
double minDistanceX = double(MIN_DISTANCE) / double(graphW - 1);
|
||||||
|
|
||||||
if (curve.type == DCT_Linear || curve.type == DCT_Spline || curve.type == DCT_NURBS) {
|
if (curve.type == DCT_Linear || curve.type == DCT_Spline || curve.type == DCT_NURBS || curve.type == DCT_CatumullRom) {
|
||||||
// get the pointer position
|
// get the pointer position
|
||||||
getCursorPositionFromCurve(pipetteVal);
|
getCursorPositionFromCurve(pipetteVal);
|
||||||
|
|
||||||
@ -1415,6 +1415,8 @@ std::vector<double> MyDiagonalCurve::getPoints ()
|
|||||||
result.push_back (double(DCT_Spline));
|
result.push_back (double(DCT_Spline));
|
||||||
} else if (curve.type == DCT_NURBS) {
|
} else if (curve.type == DCT_NURBS) {
|
||||||
result.push_back (double(DCT_NURBS));
|
result.push_back (double(DCT_NURBS));
|
||||||
|
} else if (curve.type == DCT_CatumullRom) {
|
||||||
|
result.push_back (double(DCT_CatumullRom));
|
||||||
}
|
}
|
||||||
|
|
||||||
// then we push all the points coordinate
|
// then we push all the points coordinate
|
||||||
@ -1552,6 +1554,7 @@ void MyDiagonalCurve::reset(const std::vector<double> &resetCurve, double identi
|
|||||||
switch (curve.type) {
|
switch (curve.type) {
|
||||||
case DCT_Spline :
|
case DCT_Spline :
|
||||||
case DCT_NURBS :
|
case DCT_NURBS :
|
||||||
|
case DCT_CatumullRom:
|
||||||
curve.x.resize(2);
|
curve.x.resize(2);
|
||||||
curve.y.resize(2);
|
curve.y.resize(2);
|
||||||
curve.x.at(0) = 0.;
|
curve.x.at(0) = 0.;
|
||||||
|
@ -34,6 +34,7 @@ enum DiagonalCurveType {
|
|||||||
DCT_Spline, // 1
|
DCT_Spline, // 1
|
||||||
DCT_Parametric, // 2
|
DCT_Parametric, // 2
|
||||||
DCT_NURBS, // 3
|
DCT_NURBS, // 3
|
||||||
|
DCT_CatumullRom, // 4
|
||||||
// Insert new curve type above this line
|
// Insert new curve type above this line
|
||||||
DCT_Unchanged // Must remain the last of the enum
|
DCT_Unchanged // Must remain the last of the enum
|
||||||
};
|
};
|
||||||
|
@ -971,11 +971,17 @@ void Options::readFromFile(Glib::ustring fname)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (keyFile.has_key("File Browser", "ParseExtensions")) {
|
if (keyFile.has_key("File Browser", "ParseExtensions")) {
|
||||||
parseExtensions = keyFile.get_string_list("File Browser", "ParseExtensions");
|
auto l = keyFile.get_string_list("File Browser", "ParseExtensions");
|
||||||
|
if (!l.empty()) {
|
||||||
|
parseExtensions = l;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (keyFile.has_key("File Browser", "ParseExtensionsEnabled")) {
|
if (keyFile.has_key("File Browser", "ParseExtensionsEnabled")) {
|
||||||
parseExtensionsEnabled = keyFile.get_integer_list("File Browser", "ParseExtensionsEnabled");
|
auto l = keyFile.get_integer_list("File Browser", "ParseExtensionsEnabled");
|
||||||
|
if (!l.empty()) {
|
||||||
|
parseExtensionsEnabled = l;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (keyFile.has_key("File Browser", "ThumbnailArrangement")) {
|
if (keyFile.has_key("File Browser", "ThumbnailArrangement")) {
|
||||||
|
@ -103,17 +103,18 @@ bool PopUpCommon::addEntry (const Glib::ustring& fileName, const Glib::ustring&
|
|||||||
void PopUpCommon::entrySelected (int i)
|
void PopUpCommon::entrySelected (int i)
|
||||||
{
|
{
|
||||||
// Emit a signal if the selected item has changed
|
// Emit a signal if the selected item has changed
|
||||||
if (setSelected (i))
|
if (setSelected (posToIndex(i)))
|
||||||
messageChanged (selected);
|
messageChanged (posToIndex(selected));
|
||||||
|
|
||||||
// Emit a signal in all case (i.e. propagate the signal_activate event)
|
// Emit a signal in all case (i.e. propagate the signal_activate event)
|
||||||
messageItemSelected (selected);
|
messageItemSelected (posToIndex(selected));
|
||||||
}
|
}
|
||||||
|
|
||||||
void PopUpCommon::setItemSensitivity (int index, bool isSensitive) {
|
void PopUpCommon::setItemSensitivity (int index, bool isSensitive) {
|
||||||
const auto items = menu->get_children ();
|
const auto items = menu->get_children ();
|
||||||
if (size_t(index) < items.size ()) {
|
size_t pos = indexToPos(index);
|
||||||
items[size_t(index)]->set_sensitive (isSensitive);
|
if (pos < items.size ()) {
|
||||||
|
items[pos]->set_sensitive (isSensitive);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,6 +124,8 @@ void PopUpCommon::setItemSensitivity (int index, bool isSensitive) {
|
|||||||
*/
|
*/
|
||||||
bool PopUpCommon::setSelected (int entryNum)
|
bool PopUpCommon::setSelected (int entryNum)
|
||||||
{
|
{
|
||||||
|
entryNum = indexToPos(entryNum);
|
||||||
|
|
||||||
if (entryNum < 0 || entryNum > ((int)images.size() - 1) || (int)entryNum == selected) {
|
if (entryNum < 0 || entryNum > ((int)images.size() - 1) || (int)entryNum == selected) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
|
@ -75,6 +75,9 @@ private:
|
|||||||
void showMenu(GdkEventButton* event);
|
void showMenu(GdkEventButton* event);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
virtual int posToIndex(int p) const { return p; }
|
||||||
|
virtual int indexToPos(int i) const { return i; }
|
||||||
|
|
||||||
void entrySelected (int i);
|
void entrySelected (int i);
|
||||||
|
|
||||||
};
|
};
|
||||||
@ -96,7 +99,7 @@ inline int PopUpCommon::getEntryCount () const
|
|||||||
|
|
||||||
inline int PopUpCommon::getSelected () const
|
inline int PopUpCommon::getSelected () const
|
||||||
{
|
{
|
||||||
return selected;
|
return posToIndex(selected);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -268,17 +268,17 @@ Gtk::Widget* Preferences::getBatchProcPanel()
|
|||||||
|
|
||||||
mi = behModel->append();
|
mi = behModel->append();
|
||||||
mi->set_value(behavColumns.label, M("TP_COLORAPP_LABEL"));
|
mi->set_value(behavColumns.label, M("TP_COLORAPP_LABEL"));
|
||||||
appendBehavList(mi, M("TP_COLORAPP_ADAPTSCENE"), ADDSET_CAT_ADAPTSCENE, true);
|
appendBehavList (mi, M("TP_COLORAPP_LABEL_SCENE") + " - " + M("TP_COLORAPP_ABSOLUTELUMINANCE"), ADDSET_CAT_ADAPTSCENE, true);
|
||||||
|
appendBehavList (mi, M("TP_COLORAPP_LABEL_VIEWING") + " - " + M("TP_COLORAPP_ABSOLUTELUMINANCE"), ADDSET_CAT_ADAPTVIEWING, true);
|
||||||
appendBehavList(mi, M("TP_COLORAPP_LIGHT"), ADDSET_CAT_LIGHT, true);
|
appendBehavList(mi, M("TP_COLORAPP_LIGHT"), ADDSET_CAT_LIGHT, true);
|
||||||
appendBehavList(mi, M("TP_COLORAPP_BRIGHT"), ADDSET_CAT_BRIGHT, true);
|
appendBehavList(mi, M("TP_COLORAPP_BRIGHT"), ADDSET_CAT_BRIGHT, true);
|
||||||
appendBehavList(mi, M("TP_COLORAPP_CHROMA"), ADDSET_CAT_CHROMA, true);
|
appendBehavList(mi, M("TP_COLORAPP_CHROMA"), ADDSET_CAT_CHROMA, true);
|
||||||
|
appendBehavList (mi, M ("TP_COLORAPP_CHROMA_S"), ADDSET_CAT_CHROMA_S, true);
|
||||||
|
appendBehavList (mi, M ("TP_COLORAPP_CHROMA_M"), ADDSET_CAT_CHROMA_M, true);
|
||||||
appendBehavList(mi, M("TP_COLORAPP_RSTPRO"), ADDSET_CAT_RSTPRO, true);
|
appendBehavList(mi, M("TP_COLORAPP_RSTPRO"), ADDSET_CAT_RSTPRO, true);
|
||||||
appendBehavList(mi, M("TP_COLORAPP_CONTRAST"), ADDSET_CAT_CONTRAST, true);
|
appendBehavList(mi, M("TP_COLORAPP_CONTRAST"), ADDSET_CAT_CONTRAST, true);
|
||||||
appendBehavList(mi, M("TP_COLORAPP_CONTRAST_Q"), ADDSET_CAT_CONTRAST_Q, true);
|
appendBehavList(mi, M("TP_COLORAPP_CONTRAST_Q"), ADDSET_CAT_CONTRAST_Q, true);
|
||||||
appendBehavList(mi, M("TP_COLORAPP_CHROMA_S"), ADDSET_CAT_CHROMA_S, true);
|
|
||||||
appendBehavList(mi, M("TP_COLORAPP_CHROMA_M"), ADDSET_CAT_CHROMA_M, true);
|
|
||||||
appendBehavList(mi, M("TP_COLORAPP_HUE"), ADDSET_CAT_HUE, true);
|
appendBehavList(mi, M("TP_COLORAPP_HUE"), ADDSET_CAT_HUE, true);
|
||||||
appendBehavList(mi, M("TP_COLORAPP_ADAPTVIEWING"), ADDSET_CAT_ADAPTVIEWING, true);
|
|
||||||
appendBehavList(mi, M("TP_COLORAPP_BADPIXSL"), ADDSET_CAT_BADPIX, true);
|
appendBehavList(mi, M("TP_COLORAPP_BADPIXSL"), ADDSET_CAT_BADPIX, true);
|
||||||
|
|
||||||
mi = behModel->append();
|
mi = behModel->append();
|
||||||
@ -1005,6 +1005,8 @@ Gtk::Widget* Preferences::getGeneralPanel()
|
|||||||
|
|
||||||
Gtk::Label* themeLbl = Gtk::manage(new Gtk::Label(M("PREFERENCES_APPEARANCE_THEME") + ":"));
|
Gtk::Label* themeLbl = Gtk::manage(new Gtk::Label(M("PREFERENCES_APPEARANCE_THEME") + ":"));
|
||||||
setExpandAlignProperties(themeLbl, false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER);
|
setExpandAlignProperties(themeLbl, false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER);
|
||||||
|
Gtk::Label* themeRestartLbl = Gtk::manage ( new Gtk::Label (Glib::ustring (" (") + M ("PREFERENCES_APPLNEXTSTARTUP") + ")") );
|
||||||
|
setExpandAlignProperties(themeRestartLbl, false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER);
|
||||||
|
|
||||||
themeCBT = Gtk::manage(new Gtk::ComboBoxText());
|
themeCBT = Gtk::manage(new Gtk::ComboBoxText());
|
||||||
themeCBT->set_active(0);
|
themeCBT->set_active(0);
|
||||||
@ -1051,7 +1053,8 @@ Gtk::Widget* Preferences::getGeneralPanel()
|
|||||||
|
|
||||||
appearanceGrid->attach(*themeLbl, 0, 0, 1, 1);
|
appearanceGrid->attach(*themeLbl, 0, 0, 1, 1);
|
||||||
appearanceGrid->attach(*themeCBT, 1, 0, 1, 1);
|
appearanceGrid->attach(*themeCBT, 1, 0, 1, 1);
|
||||||
appearanceGrid->attach(*vSep, 2, 0, 1, 3);
|
appearanceGrid->attach(*themeRestartLbl, 2, 0, 2, 1);
|
||||||
|
appearanceGrid->attach(*vSep, 2, 1, 1, 3);
|
||||||
appearanceGrid->attach(*mainFontLbl, 0, 1, 1, 1);
|
appearanceGrid->attach(*mainFontLbl, 0, 1, 1, 1);
|
||||||
appearanceGrid->attach(*mainFontFB, 1, 1, 1, 1);
|
appearanceGrid->attach(*mainFontFB, 1, 1, 1, 1);
|
||||||
appearanceGrid->attach(*cropMaskColorLbl, 3, 1, 1, 1);
|
appearanceGrid->attach(*cropMaskColorLbl, 3, 1, 1, 1);
|
||||||
|
@ -168,6 +168,10 @@ PreviewLoader::PreviewLoader():
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PreviewLoader::~PreviewLoader() {
|
||||||
|
delete impl_;
|
||||||
|
}
|
||||||
|
|
||||||
PreviewLoader* PreviewLoader::getInstance()
|
PreviewLoader* PreviewLoader::getInstance()
|
||||||
{
|
{
|
||||||
static PreviewLoader instance_;
|
static PreviewLoader instance_;
|
||||||
|
@ -82,6 +82,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
|
|
||||||
PreviewLoader();
|
PreviewLoader();
|
||||||
|
~PreviewLoader();
|
||||||
|
|
||||||
class Impl;
|
class Impl;
|
||||||
Impl* impl_;
|
Impl* impl_;
|
||||||
|
@ -307,8 +307,6 @@ void ProfilePanel::save_clicked (GdkEventButton* event)
|
|||||||
do {
|
do {
|
||||||
if (dialog.run() == Gtk::RESPONSE_OK) {
|
if (dialog.run() == Gtk::RESPONSE_OK) {
|
||||||
|
|
||||||
dialog.hide();
|
|
||||||
|
|
||||||
std::string fname = dialog.get_filename();
|
std::string fname = dialog.get_filename();
|
||||||
Glib::ustring ext = getExtension (fname);
|
Glib::ustring ext = getExtension (fname);
|
||||||
|
|
||||||
|
@ -76,6 +76,10 @@ void ThumbBrowserBase::scroll (int direction, double deltaX, double deltaY)
|
|||||||
} else {
|
} else {
|
||||||
delta = deltaY;
|
delta = deltaY;
|
||||||
}
|
}
|
||||||
|
if (direction == GDK_SCROLL_SMOOTH && delta == 0.0) {
|
||||||
|
// sometimes this case happens. To avoid scrolling the wrong direction in this case, we just do nothing
|
||||||
|
return;
|
||||||
|
}
|
||||||
double coef = direction == GDK_SCROLL_DOWN || (direction == GDK_SCROLL_SMOOTH && delta > 0.0) ? +1.0 : -1.0;
|
double coef = direction == GDK_SCROLL_DOWN || (direction == GDK_SCROLL_SMOOTH && delta > 0.0) ? +1.0 : -1.0;
|
||||||
|
|
||||||
// GUI already acquired when here
|
// GUI already acquired when here
|
||||||
@ -1005,9 +1009,6 @@ void ThumbBrowserBase::zoomChanged (bool zoomIn)
|
|||||||
}
|
}
|
||||||
|
|
||||||
redraw ();
|
redraw ();
|
||||||
#ifdef WIN32
|
|
||||||
gdk_window_process_updates (get_window()->gobj(), true);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ThumbBrowserBase::refreshThumbImages ()
|
void ThumbBrowserBase::refreshThumbImages ()
|
||||||
|
@ -183,6 +183,10 @@ ThumbImageUpdater::ThumbImageUpdater():
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ThumbImageUpdater::~ThumbImageUpdater() {
|
||||||
|
delete impl_;
|
||||||
|
}
|
||||||
|
|
||||||
void ThumbImageUpdater::add(ThumbBrowserEntryBase* tbe, bool* priority, bool upgrade, ThumbImageUpdateListener* l)
|
void ThumbImageUpdater::add(ThumbBrowserEntryBase* tbe, bool* priority, bool upgrade, ThumbImageUpdateListener* l)
|
||||||
{
|
{
|
||||||
// nobody listening?
|
// nobody listening?
|
||||||
|
@ -89,6 +89,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
|
|
||||||
ThumbImageUpdater();
|
ThumbImageUpdater();
|
||||||
|
~ThumbImageUpdater();
|
||||||
|
|
||||||
class Impl;
|
class Impl;
|
||||||
Impl* impl_;
|
Impl* impl_;
|
||||||
|
@ -322,7 +322,6 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, "whitebalance", M("TP_WB
|
|||||||
|
|
||||||
temp = Gtk::manage (new Adjuster (M("TP_WBALANCE_TEMPERATURE"), MINTEMP, MAXTEMP, 5, CENTERTEMP, itempL, itempR, &wbSlider2Temp, &wbTemp2Slider));
|
temp = Gtk::manage (new Adjuster (M("TP_WBALANCE_TEMPERATURE"), MINTEMP, MAXTEMP, 5, CENTERTEMP, itempL, itempR, &wbSlider2Temp, &wbTemp2Slider));
|
||||||
green = Gtk::manage (new Adjuster (M("TP_WBALANCE_GREEN"), MINGREEN, MAXGREEN, 0.001, 1.0, igreenL, igreenR));
|
green = Gtk::manage (new Adjuster (M("TP_WBALANCE_GREEN"), MINGREEN, MAXGREEN, 0.001, 1.0, igreenL, igreenR));
|
||||||
green->setLogScale(10, 1, true);
|
|
||||||
equal = Gtk::manage (new Adjuster (M("TP_WBALANCE_EQBLUERED"), MINEQUAL, MAXEQUAL, 0.001, 1.0, iblueredL, iblueredR));
|
equal = Gtk::manage (new Adjuster (M("TP_WBALANCE_EQBLUERED"), MINEQUAL, MAXEQUAL, 0.001, 1.0, iblueredL, iblueredR));
|
||||||
tempBias = Gtk::manage (new Adjuster(M("TP_WBALANCE_TEMPBIAS"), -0.5, 0.5, 0.01, 0.0, itempbiasL, itempbiasR));
|
tempBias = Gtk::manage (new Adjuster(M("TP_WBALANCE_TEMPBIAS"), -0.5, 0.5, 0.01, 0.0, itempbiasL, itempbiasR));
|
||||||
cache_customTemp (0);
|
cache_customTemp (0);
|
||||||
@ -701,7 +700,6 @@ void WhiteBalance::read (const ProcParams* pp, const ParamsEdited* pedited)
|
|||||||
set_inconsistent(multiImage && !pedited->wb.enabled);
|
set_inconsistent(multiImage && !pedited->wb.enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
green->setLogScale(10, green->getValue(), true);
|
|
||||||
|
|
||||||
methconn.block (false);
|
methconn.block (false);
|
||||||
enableListener ();
|
enableListener ();
|
||||||
@ -809,7 +807,6 @@ void WhiteBalance::setWB (int vtemp, double vgreen)
|
|||||||
listener->panelChanged (EvWBTemp, Glib::ustring::compose("%1, %2", (int)temp->getValue(), Glib::ustring::format (std::setw(4), std::fixed, std::setprecision(3), green->getValue())));
|
listener->panelChanged (EvWBTemp, Glib::ustring::compose("%1, %2", (int)temp->getValue(), Glib::ustring::format (std::setw(4), std::fixed, std::setprecision(3), green->getValue())));
|
||||||
}
|
}
|
||||||
|
|
||||||
green->setLogScale(10, vgreen, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WhiteBalance::setAdjusterBehavior (bool tempadd, bool greenadd, bool equaladd, bool tempbiasadd)
|
void WhiteBalance::setAdjusterBehavior (bool tempadd, bool greenadd, bool equaladd, bool tempbiasadd)
|
||||||
|
@ -1,109 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of RawTherapee.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
|
|
||||||
*
|
|
||||||
* RawTherapee is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* RawTherapee is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#include "windirmonitor.h"
|
|
||||||
#include "options.h"
|
|
||||||
|
|
||||||
static void CALLBACK current_directory_monitor_callback (DWORD error, DWORD nBytes, LPOVERLAPPED lpOverlapped)
|
|
||||||
{
|
|
||||||
DWORD dwOffset = 0;
|
|
||||||
FILE_NOTIFY_INFORMATION* pInfo = NULL;
|
|
||||||
|
|
||||||
WinDirMonitor::MonitorData* monData = (WinDirMonitor::MonitorData*)lpOverlapped;
|
|
||||||
|
|
||||||
if (!nBytes) {
|
|
||||||
delete monData;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool notify = false;
|
|
||||||
|
|
||||||
// Analysis of the modifications. Let only parsed file extensions emit a notify, not PP3 changes
|
|
||||||
do {
|
|
||||||
// Get a pointer to the first change record...
|
|
||||||
pInfo = (FILE_NOTIFY_INFORMATION*) &monData->file_notify_buffer[dwOffset];
|
|
||||||
|
|
||||||
char fnameC[(MAX_PATH + 1) * 2] = {0};
|
|
||||||
int strLen = WideCharToMultiByte(CP_UTF8, 0, pInfo->FileName, pInfo->FileNameLength / sizeof(WCHAR), fnameC, sizeof(fnameC), 0, 0);
|
|
||||||
fnameC[strLen] = 0;
|
|
||||||
Glib::ustring fname = fnameC;
|
|
||||||
|
|
||||||
if (options.has_retained_extention(fname)) {
|
|
||||||
notify = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// More than one change may happen at the same time. Load the next change and continue...
|
|
||||||
dwOffset += pInfo->NextEntryOffset;
|
|
||||||
} while (!notify && pInfo->NextEntryOffset != 0);
|
|
||||||
|
|
||||||
// ReadDirectoryChangesW sometimes emits multiple events per change (one for each change type)
|
|
||||||
// To make sure it's not flooding update, this gets filtered.
|
|
||||||
DWORD curTick = GetTickCount();
|
|
||||||
|
|
||||||
if (notify && monData->listener && (curTick - monData->lastTimeUpdateTick) > 500) {
|
|
||||||
monData->lastTimeUpdateTick = curTick;
|
|
||||||
monData->listener->winDirChanged ();
|
|
||||||
}
|
|
||||||
|
|
||||||
ReadDirectoryChangesW (monData->hDirectory,
|
|
||||||
monData->file_notify_buffer,
|
|
||||||
monData->buffer_allocated_bytes,
|
|
||||||
FALSE,
|
|
||||||
FILE_NOTIFY_CHANGE_FILE_NAME |
|
|
||||||
FILE_NOTIFY_CHANGE_DIR_NAME |
|
|
||||||
FILE_NOTIFY_CHANGE_LAST_WRITE,
|
|
||||||
&monData->buffer_filled_bytes,
|
|
||||||
&monData->overlapped,
|
|
||||||
current_directory_monitor_callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
WinDirMonitor::WinDirMonitor (Glib::ustring dirName, WinDirChangeListener* listener) : monData(NULL)
|
|
||||||
{
|
|
||||||
wchar_t* wdirname = (wchar_t*)g_utf8_to_utf16 (dirName.c_str(), -1, NULL, NULL, NULL);
|
|
||||||
HANDLE hDirectory = CreateFileW (wdirname, FILE_LIST_DIRECTORY, FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, NULL);
|
|
||||||
g_free (wdirname);
|
|
||||||
|
|
||||||
if (hDirectory != INVALID_HANDLE_VALUE) {
|
|
||||||
|
|
||||||
monData = new MonitorData ();
|
|
||||||
monData->listener = listener;
|
|
||||||
monData->buffer_allocated_bytes = 32768;
|
|
||||||
monData->file_notify_buffer = new char [monData->buffer_allocated_bytes];
|
|
||||||
monData->hDirectory = hDirectory;
|
|
||||||
monData->lastTimeUpdateTick = GetTickCount();
|
|
||||||
|
|
||||||
ReadDirectoryChangesW (monData->hDirectory,
|
|
||||||
monData->file_notify_buffer,
|
|
||||||
monData->buffer_allocated_bytes,
|
|
||||||
FALSE,
|
|
||||||
FILE_NOTIFY_CHANGE_FILE_NAME |
|
|
||||||
FILE_NOTIFY_CHANGE_DIR_NAME |
|
|
||||||
FILE_NOTIFY_CHANGE_LAST_WRITE,
|
|
||||||
&monData->buffer_filled_bytes,
|
|
||||||
&monData->overlapped,
|
|
||||||
current_directory_monitor_callback);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
WinDirMonitor::~WinDirMonitor ()
|
|
||||||
{
|
|
||||||
|
|
||||||
if (monData && monData->hDirectory != INVALID_HANDLE_VALUE) {
|
|
||||||
CloseHandle (monData->hDirectory);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,57 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of RawTherapee.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
|
|
||||||
*
|
|
||||||
* RawTherapee is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* RawTherapee is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#ifndef _WINDIRMONITOR_
|
|
||||||
#define _WINDIRMONITOR_
|
|
||||||
|
|
||||||
#include <glibmm.h>
|
|
||||||
#include <windows.h>
|
|
||||||
|
|
||||||
class WinDirChangeListener
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
virtual ~WinDirChangeListener() = default;
|
|
||||||
|
|
||||||
virtual void winDirChanged() = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
class WinDirMonitor : public Glib::Object
|
|
||||||
{
|
|
||||||
|
|
||||||
public:
|
|
||||||
struct MonitorData {
|
|
||||||
OVERLAPPED overlapped;
|
|
||||||
DWORD buffer_allocated_bytes;
|
|
||||||
char *file_notify_buffer;
|
|
||||||
DWORD buffer_filled_bytes;
|
|
||||||
HANDLE hDirectory;
|
|
||||||
WinDirChangeListener* listener;
|
|
||||||
int bigyo;
|
|
||||||
DWORD lastTimeUpdateTick; // for filtering multiple updates events
|
|
||||||
};
|
|
||||||
|
|
||||||
private:
|
|
||||||
MonitorData* monData;
|
|
||||||
|
|
||||||
public:
|
|
||||||
WinDirMonitor (Glib::ustring dirName, WinDirChangeListener* listener);
|
|
||||||
~WinDirMonitor ();
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
@ -152,12 +152,18 @@ done
|
|||||||
ditto {"${GTK_PREFIX}","${RESOURCES}"}/share/icons/Adwaita/index.theme
|
ditto {"${GTK_PREFIX}","${RESOURCES}"}/share/icons/Adwaita/index.theme
|
||||||
"${GTK_PREFIX}/bin/gtk-update-icon-cache-3.0" "${RESOURCES}/share/icons/Adwaita"
|
"${GTK_PREFIX}/bin/gtk-update-icon-cache-3.0" "${RESOURCES}/share/icons/Adwaita"
|
||||||
|
|
||||||
|
# Copy libjpeg-turbo into the app bundle
|
||||||
|
cp /opt/local/lib/libjpeg.62.dylib "${RESOURCES}/../Frameworks"
|
||||||
|
|
||||||
|
# Copy libtiff into the app bundle
|
||||||
|
cp /opt/local/lib/libtiff.5.dylib "${RESOURCES}/../Frameworks"
|
||||||
|
|
||||||
# Copy the Lensfun database into the app bundle
|
# Copy the Lensfun database into the app bundle
|
||||||
mkdir -p "${RESOURCES}/share/lensfun"
|
mkdir -p "${RESOURCES}/share/lensfun"
|
||||||
cp /opt/local/share/lensfun/version_2/* "${RESOURCES}/share/lensfun"
|
cp /opt/local/share/lensfun/version_2/* "${RESOURCES}/share/lensfun"
|
||||||
|
|
||||||
# Copy liblensfun to Frameworks
|
# Copy liblensfun to Frameworks
|
||||||
cp /opt/local/lib/liblensfun.1.dylib "${RESOURCES}/../Frameworks"
|
cp /opt/local/lib/liblensfun.2.dylib "${RESOURCES}/../Frameworks"
|
||||||
|
|
||||||
# Copy libiomp5 to Frameworks
|
# Copy libiomp5 to Frameworks
|
||||||
cp /opt/local/lib/libomp/libiomp5.dylib "${RESOURCES}/../Frameworks"
|
cp /opt/local/lib/libomp/libiomp5.dylib "${RESOURCES}/../Frameworks"
|
||||||
@ -228,7 +234,7 @@ function CreateDmg {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
msg "Creating disk image:"
|
msg "Creating disk image:"
|
||||||
hdiutil create -format UDBZ -srcdir "${srcDir}" -volname "${PROJECT_NAME}_${PROJECT_FULL_VERSION}" "${dmg_name}.dmg"
|
hdiutil create -format UDBZ -fs HFS+ -srcdir "${srcDir}" -volname "${PROJECT_NAME}_${PROJECT_FULL_VERSION}" "${dmg_name}.dmg"
|
||||||
|
|
||||||
# Sign disk image
|
# Sign disk image
|
||||||
codesign --deep --force -v -s "${CODESIGNID}" "${dmg_name}.dmg"
|
codesign --deep --force -v -s "${CODESIGNID}" "${dmg_name}.dmg"
|
||||||
|