Merge branch 'dev' into rt-cli
@ -1,53 +0,0 @@
|
||||
# cmakefile executed within a makefile target
|
||||
|
||||
# If we find ReleaseInfo.cmake we use the info from there and don't need Git to be installed
|
||||
find_file(REL_INFO_FILE ReleaseInfo.cmake PATHS "${PROJECT_SOURCE_DIR}" NO_DEFAULT_PATH)
|
||||
if (REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND)
|
||||
# we look for the git command in this paths by order of preference
|
||||
if (WIN32)
|
||||
find_program(GIT_CMD git.exe HINTS ENV Path PATH_SUFFIXES ../)
|
||||
elseif (APPLE)
|
||||
find_program(GIT_CMD git PATHS "/opt/local/bin" "/usr/local/bin" "/usr/bin")
|
||||
find_program(GIT_CMD git)
|
||||
set (SHELL "/bin/bash")
|
||||
else (WIN32) # Linux
|
||||
find_program(GIT_CMD git)
|
||||
set (SHELL "/bin/bash")
|
||||
endif (WIN32)
|
||||
|
||||
# Fail if Git is not installed
|
||||
if (GIT_CMD STREQUAL GIT_CMD-NOTFOUND)
|
||||
message(FATAL_ERROR "git command not found!")
|
||||
else ()
|
||||
message(STATUS "git command found: ${GIT_CMD}")
|
||||
endif ()
|
||||
|
||||
execute_process(COMMAND ${GIT_CMD} symbolic-ref --short -q HEAD OUTPUT_VARIABLE GIT_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
|
||||
execute_process(COMMAND ${GIT_CMD} describe --tags --always OUTPUT_VARIABLE GIT_VERSION_WHOLE OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
|
||||
string(REGEX REPLACE "-g.*" "" GIT_VERSION ${GIT_VERSION_WHOLE})
|
||||
string(REPLACE "-" "." GIT_VERSION ${GIT_VERSION})
|
||||
execute_process(COMMAND ${GIT_CMD} rev-parse --verify HEAD OUTPUT_VARIABLE GIT_CHANGESET OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
|
||||
string(REGEX REPLACE ".*-(.*)-g.*" "\\1" GIT_TAGDISTANCE ${GIT_VERSION_WHOLE})
|
||||
if (NOT DEFINED CACHE_NAME_SUFFIX)
|
||||
string(REGEX REPLACE "-.*" "" CACHE_NAME_SUFFIX ${GIT_VERSION_WHOLE})
|
||||
message(STATUS "CACHE_NAME_SUFFIX was not defined, it is now \"${CACHE_NAME_SUFFIX}\"")
|
||||
elseif (CACHE_NAME_SUFFIX STREQUAL "latesttag")
|
||||
string(REGEX REPLACE "-.*" "" CACHE_NAME_SUFFIX ${GIT_VERSION_WHOLE})
|
||||
message(STATUS "CACHE_NAME_SUFFIX was \"latesttag\", it is now \"${CACHE_NAME_SUFFIX}\"")
|
||||
else ()
|
||||
message(STATUS "CACHE_NAME_SUFFIX is \"${CACHE_NAME_SUFFIX}\"")
|
||||
endif ()
|
||||
else (REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND)
|
||||
include("${PROJECT_SOURCE_DIR}/ReleaseInfo.cmake")
|
||||
endif (REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND)
|
||||
|
||||
if (VERSION_SUFFIX STREQUAL "")
|
||||
set (GIT_VERSION_SUFFIX "${GIT_VERSION}")
|
||||
else ()
|
||||
set (GIT_VERSION_SUFFIX "${GIT_VERSION} ${VERSION_SUFFIX}")
|
||||
endif ()
|
||||
|
||||
# build version.h from template
|
||||
configure_file ("${PROJECT_SOURCE_DIR}/rtgui/version.h.in" "${CMAKE_BINARY_DIR}/rtgui/version.h")
|
||||
# build AboutThisBuild.txt from template
|
||||
configure_file ("${PROJECT_SOURCE_DIR}/AboutThisBuild.txt.in" "${CMAKE_BINARY_DIR}/AboutThisBuild.txt")
|
@ -1,6 +1,7 @@
|
||||
Version: ${GIT_DESCRIBE}
|
||||
Branch: ${GIT_BRANCH}
|
||||
Version: ${GIT_VERSION_SUFFIX}
|
||||
Changeset: ${GIT_CHANGESET}
|
||||
Commit: ${GIT_COMMIT}
|
||||
Commit date: ${GIT_COMMIT_DATE}
|
||||
Compiler: ${COMPILER_INFO}
|
||||
Processor: ${PROC_LABEL}
|
||||
System: ${SYSTEM}
|
||||
@ -11,4 +12,3 @@ Build flags: ${CXX_FLAGS}
|
||||
Link flags: ${LFLAGS}
|
||||
OpenMP support: ${OPTION_OMP}
|
||||
MMAP support: ${WITH_MYFILE_MMAP}
|
||||
|
||||
|
129
CMakeLists.txt
@ -1,21 +1,21 @@
|
||||
if (WIN32)
|
||||
cmake_minimum_required(VERSION 2.8.4)
|
||||
cmake_minimum_required(VERSION 2.8.4)
|
||||
else (WIN32)
|
||||
cmake_minimum_required(VERSION 2.6)
|
||||
cmake_minimum_required(VERSION 2.6)
|
||||
endif (WIN32)
|
||||
|
||||
# must stay before the 'project' command
|
||||
if(${CMAKE_EXTRA_GENERATOR} MATCHES "Eclipse CDT4")
|
||||
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 command line to their current version of Eclipse
|
||||
#set(CMAKE_ECLIPSE_VERSION "4.6.0" CACHE STRING "Eclipse version" 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 command line to their current version of Eclipse
|
||||
#set(CMAKE_ECLIPSE_VERSION "4.6.0" CACHE STRING "Eclipse version" FORCE)
|
||||
endif()
|
||||
|
||||
PROJECT(RawTherapee)
|
||||
|
||||
# the default target is 'Debug'
|
||||
if (CMAKE_BUILD_TYPE STREQUAL "")
|
||||
set (CMAKE_BUILD_TYPE Debug CACHE STRING "One of: None Debug Release RelWithDebInfo MinSizeRel." FORCE)
|
||||
set (CMAKE_BUILD_TYPE Debug CACHE STRING "One of: None Debug Release RelWithDebInfo MinSizeRel." FORCE)
|
||||
endif ()
|
||||
|
||||
string (TOUPPER ${CMAKE_BUILD_TYPE} UPPER_CMAKE_BUILD_TYPE)
|
||||
@ -25,19 +25,19 @@ SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu11")
|
||||
SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
|
||||
|
||||
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!")
|
||||
endif()
|
||||
|
||||
# We might want to build using the old C++ ABI, even when using a new GCC version
|
||||
if (USE_OLD_CXX_ABI)
|
||||
add_definitions (-D_GLIBCXX_USE_CXX11_ABI=0)
|
||||
add_definitions (-D_GLIBCXX_USE_CXX11_ABI=0)
|
||||
endif()
|
||||
|
||||
if (UPPER_CMAKE_BUILD_TYPE STREQUAL "DEBUG")
|
||||
add_definitions (-D_DEBUG)
|
||||
add_definitions (-D_DEBUG)
|
||||
else ()
|
||||
add_definitions (-DNDEBUG)
|
||||
add_definitions (-D_DNDEBUG)
|
||||
add_definitions (-DNDEBUG)
|
||||
add_definitions (-D_DNDEBUG)
|
||||
endif ()
|
||||
|
||||
message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
|
||||
@ -59,10 +59,10 @@ include (ProcessorTargets.cmake)
|
||||
set (PROC_LABEL "undefined" CACHE STRING "Target processor label, unused if PROC_TARGET_NUMBER = 0 or 2")
|
||||
set (PROC_FLAGS "" CACHE STRING "Target processor related build/link flags")
|
||||
if ((NOT(PROC_TARGET_NUMBER EQUAL 0)) AND (NOT(PROC_TARGET_NUMBER EQUAL 2)))
|
||||
set (PROC_LABEL ${PROC_TARGET_${PROC_TARGET_NUMBER}_LABEL})
|
||||
set (PROC_LABEL ${PROC_TARGET_${PROC_TARGET_NUMBER}_LABEL})
|
||||
endif ()
|
||||
if (NOT(PROC_TARGET_NUMBER EQUAL 0))
|
||||
set (PROC_FLAGS ${PROC_TARGET_${PROC_TARGET_NUMBER}_FLAGS})
|
||||
set (PROC_FLAGS ${PROC_TARGET_${PROC_TARGET_NUMBER}_FLAGS})
|
||||
endif ()
|
||||
if (UNIX AND PROC_LABEL STREQUAL "undefined")
|
||||
execute_process(COMMAND uname -p OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE cpu)
|
||||
@ -75,7 +75,7 @@ endif ()
|
||||
|
||||
# if it exists, the PROC_FORCED_LABEL value is loaded in PROC_LABEL to override the one of ProcessorTargets
|
||||
if (DEFINED PROC_FORCED_LABEL)
|
||||
set (PROC_LABEL ${PROC_FORCED_LABEL})
|
||||
set (PROC_LABEL ${PROC_FORCED_LABEL})
|
||||
endif (DEFINED PROC_FORCED_LABEL)
|
||||
|
||||
# adding the proc flags to the build flags
|
||||
@ -94,7 +94,7 @@ endif (WIN32)
|
||||
|
||||
if (APPLE)
|
||||
if (CMAKE_CXX_COMPILER MATCHES "g\\+\\+-mp-4.[5-8]" OR
|
||||
CMAKE_CXX_COMPILER_ARG1 MATCHES "g\\+\\+-mp-4.[5-8]")
|
||||
CMAKE_CXX_COMPILER_ARG1 MATCHES "g\\+\\+-mp-4.[5-8]")
|
||||
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /usr/lib/libstdc++.6.dylib")
|
||||
message (STATUS "CMAKE_CXX_COMPILER is MacPorts GCC.\n CMAKE_EXE_LINKER_FLAGS: ${CMAKE_EXE_LINKER_FLAGS}")
|
||||
endif ()
|
||||
@ -144,11 +144,11 @@ if (NOT DEFINED LIBDIR)
|
||||
else (BUILD_BUNDLE)
|
||||
# Respect CMAKE_INSTALL_LIBDIR if set
|
||||
if (DEFINED CMAKE_INSTALL_LIBDIR)
|
||||
if (IS_ABSOLUTE "${LIBDIR}")
|
||||
set (LIBDIR "${CMAKE_INSTALL_LIBDIR}")
|
||||
else (IS_ABSOLUTE "${LIBDIR}")
|
||||
set (LIBDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
|
||||
endif (IS_ABSOLUTE "${LIBDIR}")
|
||||
if (IS_ABSOLUTE "${LIBDIR}")
|
||||
set (LIBDIR "${CMAKE_INSTALL_LIBDIR}")
|
||||
else (IS_ABSOLUTE "${LIBDIR}")
|
||||
set (LIBDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
|
||||
endif (IS_ABSOLUTE "${LIBDIR}")
|
||||
else (DEFINED CMAKE_INSTALL_LIBDIR)
|
||||
set (LIBDIR "${CMAKE_INSTALL_PREFIX}/lib")
|
||||
endif (DEFINED CMAKE_INSTALL_LIBDIR)
|
||||
@ -198,9 +198,7 @@ if (NOT DEFINED APPDATADIR)
|
||||
endif (NOT DEFINED APPDATADIR)
|
||||
|
||||
# non-bundle builds has to use absolute paths
|
||||
if (NOT BUILD_BUNDLE AND
|
||||
NOT (IS_ABSOLUTE "${BINDIR}" AND IS_ABSOLUTE "${DATADIR}" AND IS_ABSOLUTE "${LIBDIR}" AND
|
||||
IS_ABSOLUTE "${DOCDIR}" AND IS_ABSOLUTE "${CREDITSDIR}" AND IS_ABSOLUTE "${LICENCEDIR}"))
|
||||
if (NOT BUILD_BUNDLE AND NOT (IS_ABSOLUTE "${BINDIR}" AND IS_ABSOLUTE "${DATADIR}" AND IS_ABSOLUTE "${LIBDIR}" AND IS_ABSOLUTE "${DOCDIR}" AND IS_ABSOLUTE "${CREDITSDIR}" AND IS_ABSOLUTE "${LICENCEDIR}"))
|
||||
message (FATAL_ERROR "The paths has to be absolute or use -DBUILD_BUNDLE=ON")
|
||||
endif ()
|
||||
|
||||
@ -243,7 +241,7 @@ if (WIN32)
|
||||
if (MINGW)
|
||||
add_definitions (-D__MINGW32__)
|
||||
endif (MINGW)
|
||||
if (CMAKE_SIZEOF_VOID_P EQUAL 4)
|
||||
if (CMAKE_SIZEOF_VOID_P EQUAL 4)
|
||||
add_definitions (-DWINVER=0x0501)
|
||||
endif (CMAKE_SIZEOF_VOID_P EQUAL 4)
|
||||
set (EXTRA_LIB "-lws2_32 -lshlwapi")
|
||||
@ -260,12 +258,12 @@ find_package (ZLIB REQUIRED)
|
||||
|
||||
# link witz bzip
|
||||
if (WITH_BZIP)
|
||||
find_package(BZip2)
|
||||
if (BZIP2_FOUND)
|
||||
add_definitions (-DBZIP_SUPPORT)
|
||||
set (EXTRA_INCDIR ${BZIP2_INCLUDE_DIR})
|
||||
set (EXTRA_LIB ${EXTRA_LIB} ${BZIP2_LIBRARIES})
|
||||
endif (BZIP2_FOUND)
|
||||
find_package(BZip2)
|
||||
if (BZIP2_FOUND)
|
||||
add_definitions (-DBZIP_SUPPORT)
|
||||
set (EXTRA_INCDIR ${BZIP2_INCLUDE_DIR})
|
||||
set (EXTRA_LIB ${EXTRA_LIB} ${BZIP2_LIBRARIES})
|
||||
endif (BZIP2_FOUND)
|
||||
endif (WITH_BZIP)
|
||||
|
||||
#Check for libcanberra-gtk3 (sound events on Linux)
|
||||
@ -274,7 +272,7 @@ if (UNIX AND (NOT APPLE))
|
||||
endif (UNIX AND (NOT APPLE))
|
||||
|
||||
if (WITH_MYFILE_MMAP)
|
||||
add_definitions (-DMYFILE_MMAP)
|
||||
add_definitions (-DMYFILE_MMAP)
|
||||
endif (WITH_MYFILE_MMAP)
|
||||
|
||||
if (WITH_LTO)
|
||||
@ -328,26 +326,26 @@ if (OUT_OF_SOURCE_BUILD)
|
||||
foreach(f ${OOSB_FILES})
|
||||
if (EXISTS "${f}")
|
||||
message (SEND_ERROR "Generated \"${f}\" found inside the source tree. Please remove it as it is a relic of the old build system and prevents valid compilation now.")
|
||||
endif ()
|
||||
endif ()
|
||||
endforeach(f)
|
||||
endif ()
|
||||
|
||||
## BEGIN: Generating AboutThisBuild.txt
|
||||
## BEGIN: Create AboutThisBuild.txt and other version-dependent files.
|
||||
# set the bit number information of the platform
|
||||
if (CMAKE_SIZEOF_VOID_P EQUAL 4)
|
||||
set(PROC_BIT_DEPTH 32 bits)
|
||||
set(PROC_BIT_DEPTH 32 bits)
|
||||
elseif (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
set(PROC_BIT_DEPTH 64 bits)
|
||||
set(PROC_BIT_DEPTH 64 bits)
|
||||
endif (CMAKE_SIZEOF_VOID_P EQUAL 4)
|
||||
|
||||
# Get comiler name and version
|
||||
# only cmake > 2.8.7 knows CMAKE_*_COMPILER_VERSION
|
||||
if (CMAKE_VERSION VERSION_GREATER 2.8.7)
|
||||
get_filename_component(COMPILER_INFO ${CMAKE_C_COMPILER} NAME_WE)
|
||||
set(COMPILER_INFO "${COMPILER_INFO} ${CMAKE_C_COMPILER_VERSION}")
|
||||
get_filename_component(COMPILER_INFO ${CMAKE_C_COMPILER} NAME_WE)
|
||||
set(COMPILER_INFO "${COMPILER_INFO} ${CMAKE_C_COMPILER_VERSION}")
|
||||
else ()
|
||||
execute_process(COMMAND gcc -dumpversion OUTPUT_VARIABLE GCC_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
set(COMPILER_INFO "gcc ${GCC_VERSION}")
|
||||
execute_process(COMMAND gcc -dumpversion OUTPUT_VARIABLE GCC_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
set(COMPILER_INFO "gcc ${GCC_VERSION}")
|
||||
endif ()
|
||||
|
||||
# Get c++ and linker flags for rtengine (the gui's c++ flags may have less flags)
|
||||
@ -355,38 +353,39 @@ set(CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${UPPER_CMAKE_BUILD_TYPE}} $
|
||||
set(LFLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${UPPER_CMAKE_BUILD_TYPE}}")
|
||||
|
||||
set(ABOUT_COMMAND_WITH_ARGS ${CMAKE_COMMAND}
|
||||
-DPROJECT_SOURCE_DIR:STRING=${PROJECT_SOURCE_DIR}
|
||||
-DCACHE_NAME_SUFFIX:STRING=${CACHE_NAME_SUFFIX}
|
||||
-DPROC_LABEL:STRING="${PROC_LABEL}"
|
||||
-DPROC_BIT_DEPTH:STRING="${PROC_BIT_DEPTH}"
|
||||
-DBUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
|
||||
-DVERSION_SUFFIX:STRING=${VERSION_SUFFIX}
|
||||
-DGTKMM_VERSION:STRING=${GTKMM_VERSION}
|
||||
-DOPTION_OMP:STRING=${OPTION_OMP}
|
||||
-DWITH_MYFILE_MMAP:STRING=${WITH_MYFILE_MMAP})
|
||||
-DPROJECT_SOURCE_DIR:STRING=${PROJECT_SOURCE_DIR}
|
||||
-DCACHE_NAME_SUFFIX:STRING=${CACHE_NAME_SUFFIX}
|
||||
-DPROC_LABEL:STRING="${PROC_LABEL}"
|
||||
-DPROC_BIT_DEPTH:STRING="${PROC_BIT_DEPTH}"
|
||||
-DBUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
|
||||
-DGTKMM_VERSION:STRING=${GTKMM_VERSION}
|
||||
-DOPTION_OMP:STRING=${OPTION_OMP}
|
||||
-DWITH_MYFILE_MMAP:STRING=${WITH_MYFILE_MMAP})
|
||||
|
||||
if (WIN32)
|
||||
list(APPEND ABOUT_COMMAND_WITH_ARGS -DSYSTEM:STRING=Windows
|
||||
-DCXX_FLAGS:STRING="${CXX_FLAGS}"
|
||||
-DLFLAGS:STRING="${LFLAGS}"
|
||||
-DCOMPILER_INFO:STRING="${COMPILER_INFO}")
|
||||
list(APPEND ABOUT_COMMAND_WITH_ARGS -DSYSTEM:STRING=Windows
|
||||
-DCXX_FLAGS:STRING="${CXX_FLAGS}"
|
||||
-DLFLAGS:STRING="${LFLAGS}"
|
||||
-DCOMPILER_INFO:STRING="${COMPILER_INFO}"
|
||||
-DCMAKE_INSTALL_PREFIX:STRING="${CMAKE_INSTALL_PREFIX}"
|
||||
-DBIT_DEPTH:STRING="${CMAKE_SIZEOF_VOID_P}")
|
||||
elseif (APPLE)
|
||||
list(APPEND ABOUT_COMMAND_WITH_ARGS -DSYSTEM:STRING=Apple
|
||||
-DCXX_FLAGS:STRING=${CXX_FLAGS}
|
||||
-DLFLAGS:STRING=${LFLAGS}
|
||||
-DCOMPILER_INFO:STRING=${COMPILER_INFO})
|
||||
list(APPEND ABOUT_COMMAND_WITH_ARGS -DSYSTEM:STRING=Apple
|
||||
-DCXX_FLAGS:STRING=${CXX_FLAGS}
|
||||
-DLFLAGS:STRING=${LFLAGS}
|
||||
-DCOMPILER_INFO:STRING=${COMPILER_INFO})
|
||||
else (WIN32)
|
||||
list(APPEND ABOUT_COMMAND_WITH_ARGS -DSYSTEM:STRING=Linux
|
||||
-DCXX_FLAGS:STRING=${CXX_FLAGS}
|
||||
-DLFLAGS:STRING=${LFLAGS}
|
||||
-DCOMPILER_INFO:STRING=${COMPILER_INFO})
|
||||
list(APPEND ABOUT_COMMAND_WITH_ARGS -DSYSTEM:STRING=Linux
|
||||
-DCXX_FLAGS:STRING=${CXX_FLAGS}
|
||||
-DLFLAGS:STRING=${LFLAGS}
|
||||
-DCOMPILER_INFO:STRING=${COMPILER_INFO})
|
||||
endif (WIN32)
|
||||
|
||||
list(APPEND ABOUT_COMMAND_WITH_ARGS -P "${PROJECT_SOURCE_DIR}/AboutThisBuild.cmake")
|
||||
list(APPEND ABOUT_COMMAND_WITH_ARGS -P "${PROJECT_SOURCE_DIR}/UpdateInfo.cmake")
|
||||
|
||||
add_custom_target(AboutFile ALL
|
||||
add_custom_target(UpdateInfo ALL
|
||||
COMMAND ${ABOUT_COMMAND_WITH_ARGS}
|
||||
COMMENT "Creating the about file")
|
||||
COMMENT "Creating AboutThisBuild.txt and other version-dependent files")
|
||||
|
||||
## END: Generating AboutThisBuild.txt
|
||||
|
||||
@ -398,8 +397,8 @@ if (WIN32)
|
||||
install (DIRECTORY "licenses" DESTINATION "${LICENCEDIR}")
|
||||
endif (WIN32)
|
||||
if (UNIX)
|
||||
install (FILES "${PROJECT_SOURCE_DIR}/doc/manpage/rawtherapee.1" DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man1")
|
||||
install (FILES rawtherapee.appdata.xml DESTINATION "${APPDATADIR}")
|
||||
install (FILES "${PROJECT_SOURCE_DIR}/doc/manpage/rawtherapee.1" DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man1")
|
||||
install (FILES rawtherapee.appdata.xml DESTINATION "${APPDATADIR}")
|
||||
endif (UNIX)
|
||||
|
||||
add_subdirectory (rtexif)
|
||||
|
@ -40,5 +40,5 @@ http://rawpedia.rawtherapee.com/Linux
|
||||
Windows:
|
||||
http://rawpedia.rawtherapee.com/Windows
|
||||
|
||||
OS X:
|
||||
macOS:
|
||||
http://rawpedia.rawtherapee.com/macOS
|
||||
|
@ -1,9 +1,18 @@
|
||||
RAWTHERAPEE 5 RELEASE NOTES
|
||||
---------------------------
|
||||
RAWTHERAPEE 5 DEVELOPMENT RELEASE NOTES
|
||||
---------------------------------------
|
||||
RawTherapee provides you with a selection of powerful tools with which you can practice the art of developing raw photos. Be sure to read RawPedia to understand how each tool works so that you may make the most of it.
|
||||
http://rawpedia.rawtherapee.com/
|
||||
A great place to start is the "Getting Started" article. Click on "Main page" in the top-left corner when you have finished reading that article to see all other articles.
|
||||
|
||||
This is a development version of RawTherapee. We update the code almost daily. Every few months, once enough changes have accumulated and the code is stabilized, we make a new official release. Every code change between these releases is known as a "development" version, and this is one of them.
|
||||
|
||||
While we only commit tested and relatively stable code and so the development versions should be fairly stable, you should be aware that:
|
||||
- Development versions only had limited testing, so there may be bugs unknown to us.
|
||||
- You should report these bugs so that they get fixed for the next stable release. See
|
||||
www.rawpedia.rawtherapee.com/How_to_write_useful_bug_reports
|
||||
- The way new tools work in the development versions is likely to change as we tweak and tune them, so your processing profiles may produce different results when used in a future stable version.
|
||||
- Bugs present in the stable versions get fixed in the development versions, and make it into the next stable version when we make a new official release. That means that in some ways the development versions can be "more stable" than the latest stable release. At the same time, new features may introduce new bugs. This is a trade-off you should be aware of.
|
||||
|
||||
News Relevant to Photographers
|
||||
------------------------------
|
||||
- RawTherapee 5 supports most raw formats, including some unusual ones like those from cameras using Foveon and X-Trans sensors. If you're wondering whether it supports your camera's raw format, first download RawTherapee 5 and try for yourself. If a raw format is not supported it will either not open, or the preview in the Editor tab will appear black, white, or have a strong color cast - usually magenta. In that case, read the "Adding Support for New Raw Formats" RawPedia article.
|
||||
@ -15,32 +24,18 @@ In order to use RawTherapee efficiently you should know that:
|
||||
- All curves support the Shift and Ctrl keys while dragging a point. Shift+drag makes the point snap to meaningful axes (top, bottom, diagonal, other), while Ctrl+drag makes your mouse movement super-fine for precise point positioning.
|
||||
- There are many keyboard shortcuts which make working with RawTherapee much faster and give you greater control. Make sure you familiarize yourself with them on RawPedia's "Keyboard Shortcuts" page!
|
||||
|
||||
New Features:
|
||||
- Wavelets tool.
|
||||
- Retinex tool.
|
||||
- Monitor profile and rendering intent support.
|
||||
- Print soft-proofing support.
|
||||
- Automatic chroma noise reduction, manual luminance noise reduction using sliders and curves.
|
||||
- The "Inspect" tab in the File Browser lets you see a 100% preview of the image whose thumbnail your mouse cursor hovers over, which is either the largest JPEG image embedded in the raw file or the image itself when hovering over non-raw images.
|
||||
- The curve pipette allows you to pick the right point of a curve by clicking in the preview, and input/output values so that you can set the desired output value for a given input value.
|
||||
- Post-resize sharpening, to give your photos that subtle crispness after resizing them.
|
||||
- Dual-illuminant DCP support with curves, base tables, look tables and baseline exposure.
|
||||
- New exposure tone curve modes "Luminance" and "Perceptual".
|
||||
- Queue processing will stop if an error is encountered while saving, e.g. if you run out of disk space.
|
||||
- The Contrast by Detail Levels tool received the "Process Locate Before/After Black-and-White" option.
|
||||
- Rec. 2020 ICC profile added.
|
||||
- The Navigator can show RGB, HSV and L*a*b* values in a range of 0-255, 0-1 or %.
|
||||
- The Lockable Color Picker allows you to place multiple sample points over the preview to measure colors and see them change in real time as you manipulate the image. They support the same ranges as the Navigator.
|
||||
- Grayscale JPEG and TIFF images are now supported.
|
||||
- 32-bit TIFF files are supported.
|
||||
- In addition to these new features, RawTherapee received over two years worth of amazing speedups, code cleanups and bug fixes, making it faster and more stable than ever before!
|
||||
New features since 5.0-r1:
|
||||
-
|
||||
|
||||
News Relevant to Package Maintainers
|
||||
------------------------------------
|
||||
- Branch "master" uses GTK2, branch "gtk3" requires GTK+ >=3.16.
|
||||
- There are known bugs using GTK+ versions 3.20-3.22 where scrollbars may appear stuck (issue #3545) and where the Retinex tool's "Gain and Offset" panel may appear under the "Transmission" panel (issue #3525) until the user hovers the mouse cursor over a curve button. For this reason we recommend using GTK+ 3.16-3.18 if possible.
|
||||
- To get the latest development version, use the "dev" branch.
|
||||
- All development now uses GTK3, requiring version >=3.16. There are known bugs using GTK+ versions 3.20-3.22 where scrollbars may appear stuck (issue #3545) and where the Retinex tool's "Gain and Offset" panel may appear under the "Transmission" panel (issue #3525) until the user hovers the mouse cursor over a curve button. For this reason we recommend using GTK+ 3.16-3.18 if possible.
|
||||
- GTK2 is no longer supported. Use branch "gtk2" if you want to compile a GTK2 version, but remember that there will be no improvements to it after 5.0-r1.
|
||||
- Branches "master" and "gtk3" are dead, do not use them.
|
||||
- RawTherapee 5 requires GCC-4.9 or higher, or Clang.
|
||||
- Use -DCMAKE_CXX_FLAGS="-std=c++11"
|
||||
- Do not use -ffast-math, it will not make RawTherapee faster but will introduce artifacts.
|
||||
- Use -o3, it will make RawTherapee faster with no known side-effects.
|
||||
- For stable builds (RT5) use -DCACHE_NAME_SUFFIX=""
|
||||
- For development builds use -DCACHE_NAME_SUFFIX="5-dev"
|
||||
- Windows builders should compile on a drive letter which users are most unlikely to have, such as Y:, due to the "There is no disk in the drive" error (issue #3544).
|
||||
@ -51,9 +46,6 @@ News Relevant to Developers
|
||||
- Code must be run through astyle.
|
||||
- Commits automatically trigger a compilation using Travis CI.
|
||||
|
||||
Complete revision history available on GitHub:
|
||||
https://github.com/Beep6581/RawTherapee/commits/
|
||||
|
||||
DOCUMENTATION
|
||||
-------------
|
||||
http://rawtherapee.com/blog/documentation
|
||||
|
112
UpdateInfo.cmake
Normal file
@ -0,0 +1,112 @@
|
||||
# cmakefile executed within a makefile target
|
||||
|
||||
# If we find ReleaseInfo.cmake we use the info from there and don't need Git to be installed
|
||||
find_file(REL_INFO_FILE ReleaseInfo.cmake PATHS "${PROJECT_SOURCE_DIR}" NO_DEFAULT_PATH)
|
||||
if (REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND)
|
||||
# we look for the git command in this paths by order of preference
|
||||
if (WIN32)
|
||||
find_program(GIT_CMD git.exe HINTS ENV Path PATH_SUFFIXES ../)
|
||||
elseif (APPLE)
|
||||
find_program(GIT_CMD git PATHS "/opt/local/bin" "/usr/local/bin" "/usr/bin")
|
||||
find_program(GIT_CMD git)
|
||||
set (SHELL "/bin/bash")
|
||||
else (WIN32) # Linux
|
||||
find_program(GIT_CMD git)
|
||||
set (SHELL "/bin/bash")
|
||||
endif (WIN32)
|
||||
|
||||
# Fail if Git is not installed
|
||||
if (GIT_CMD STREQUAL GIT_CMD-NOTFOUND)
|
||||
message(FATAL_ERROR "git command not found!")
|
||||
else ()
|
||||
message(STATUS "git command found: ${GIT_CMD}")
|
||||
endif ()
|
||||
|
||||
# Get version description.
|
||||
# Depending on whether you checked out a branch (dev) or a tag (release),
|
||||
# "git describe" will return "5.0-gtk2-2-g12345678" or "5.0-gtk2", respectively.
|
||||
execute_process(COMMAND ${GIT_CMD} describe --tags --always OUTPUT_VARIABLE GIT_DESCRIBE OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
|
||||
|
||||
# Get branch name.
|
||||
# Will return empty if you checked out a commit or tag. Empty string handled later.
|
||||
execute_process(COMMAND ${GIT_CMD} symbolic-ref --short -q HEAD OUTPUT_VARIABLE GIT_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
|
||||
|
||||
# Get commit hash.
|
||||
execute_process(COMMAND ${GIT_CMD} rev-parse --short --verify HEAD OUTPUT_VARIABLE GIT_COMMIT OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
|
||||
|
||||
# Get commit date, YYYY-MM-DD.
|
||||
execute_process(COMMAND ${GIT_CMD} show -s --format=%cd --date=format:%Y-%m-%d OUTPUT_VARIABLE GIT_COMMIT_DATE OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
|
||||
|
||||
# Get number of commits since tagging. This is what "GIT_DESCRIBE" uses.
|
||||
# Works when checking out branch, tag or commit.
|
||||
# Get a list of all tags in repo:
|
||||
execute_process(COMMAND ${GIT_CMD} tag --merged HEAD OUTPUT_VARIABLE GIT_TAG WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
|
||||
# Replace newlines with semicolons so that it can be split:
|
||||
string(REPLACE "\n" ";" GIT_TAG_LIST "${GIT_TAG}")
|
||||
execute_process(COMMAND ${GIT_CMD} rev-list --count HEAD --not ${GIT_TAG_LIST} OUTPUT_VARIABLE GIT_COMMITS_SINCE_TAG OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
|
||||
|
||||
# Get number of commits since branching.
|
||||
# Works when checking out branch, tag or commit.
|
||||
execute_process(COMMAND ${GIT_CMD} rev-list --count HEAD --not --tags OUTPUT_VARIABLE GIT_COMMITS_SINCE_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
|
||||
|
||||
# If user checked-out something which is not a branch, use the description as branch name.
|
||||
if (GIT_BRANCH STREQUAL "")
|
||||
set (GIT_BRANCH "${GIT_DESCRIBE}")
|
||||
endif()
|
||||
|
||||
# Create numeric version.
|
||||
# This version is nonsense, either don't use it at all or use it only where you have no other choice, e.g. Inno Setup's VersionInfoVersion.
|
||||
# Strip everything after hyphen, e.g. "5.0-gtk2" -> "5.0", "5.1-rc1" -> "5.1" (ergo BS).
|
||||
if (GIT_COMMITS_SINCE_TAG STREQUAL "")
|
||||
set (GIT_NUMERIC_VERSION_BS "0.0.0")
|
||||
else ()
|
||||
string(REGEX REPLACE "-.*" "" GIT_NUMERIC_VERSION_BS ${GIT_DESCRIBE})
|
||||
set(GIT_NUMERIC_VERSION_BS "${GIT_NUMERIC_VERSION_BS}.${GIT_COMMITS_SINCE_TAG}")
|
||||
endif ()
|
||||
|
||||
message(STATUS "Git checkout information:")
|
||||
message(STATUS " Commit description: ${GIT_DESCRIBE}")
|
||||
message(STATUS " Branch: ${GIT_BRANCH}")
|
||||
message(STATUS " Commit: ${GIT_COMMIT}")
|
||||
message(STATUS " Commit date: ${GIT_COMMIT_DATE}")
|
||||
message(STATUS " Commits since tag: ${GIT_COMMITS_SINCE_TAG}")
|
||||
message(STATUS " Commits since branch: ${GIT_COMMITS_SINCE_BRANCH}")
|
||||
message(STATUS " Version (unreliable): ${GIT_NUMERIC_VERSION_BS}")
|
||||
|
||||
if (NOT DEFINED CACHE_NAME_SUFFIX)
|
||||
set(CACHE_NAME_SUFFIX "${GIT_DESCRIBE}")
|
||||
message(STATUS "CACHE_NAME_SUFFIX was not defined, it is now \"${CACHE_NAME_SUFFIX}\"")
|
||||
else ()
|
||||
message(STATUS "CACHE_NAME_SUFFIX is \"${CACHE_NAME_SUFFIX}\"")
|
||||
endif ()
|
||||
|
||||
else (REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND)
|
||||
include("${PROJECT_SOURCE_DIR}/ReleaseInfo.cmake")
|
||||
endif (REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND)
|
||||
|
||||
if (WIN32)
|
||||
if (BIT_DEPTH EQUAL 4)
|
||||
set(BUILD_BIT_DEPTH 32)
|
||||
# 32 bits builds has to be installable on 64 bits system, to support WinXP/64.
|
||||
set(ARCHITECTURE_ALLOWED "x86 x64 ia64")
|
||||
# installing in 32 bits mode even on 64 bits OS and architecture
|
||||
set(INSTALL_MODE "")
|
||||
# set part of the output archive name
|
||||
set(SYSTEM_NAME "WinXP")
|
||||
elseif (BIT_DEPTH EQUAL 8)
|
||||
set(BUILD_BIT_DEPTH 64)
|
||||
# Restricting the 64 bits builds to 64 bits systems only
|
||||
set(ARCHITECTURE_ALLOWED "x64 ia64")
|
||||
# installing in 64 bits mode for all 64 bits processors, even for itanium architecture
|
||||
set(INSTALL_MODE "x64 ia64")
|
||||
# set part of the output archive name
|
||||
set(SYSTEM_NAME "WinVista")
|
||||
endif (BIT_DEPTH EQUAL 4)
|
||||
|
||||
configure_file ("${PROJECT_SOURCE_DIR}/tools/win/InnoSetup/WindowsInnoSetup.iss.in" "${CMAKE_BINARY_DIR}/rtdata/WindowsInnoSetup.iss")
|
||||
endif (WIN32)
|
||||
|
||||
# build version.h from template
|
||||
configure_file ("${PROJECT_SOURCE_DIR}/rtgui/version.h.in" "${CMAKE_BINARY_DIR}/rtgui/version.h")
|
||||
# build AboutThisBuild.txt from template
|
||||
configure_file ("${PROJECT_SOURCE_DIR}/AboutThisBuild.txt.in" "${CMAKE_BINARY_DIR}/AboutThisBuild.txt")
|
@ -27,6 +27,6 @@ include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(MACINTEGRATION DEFAULT_MSG MACINTEGRATION_LIBRARY MACINTEGRATION_INCLUDE_DIR)
|
||||
|
||||
IF(MACINTEGRATION_FOUND)
|
||||
SET(MacIntegration_LIBRARIES ${MACINTEGRATION_LIBRARY})
|
||||
SET(MacIntegration_INCLUDE_DIRS ${MACINTEGRATION_INCLUDE_DIR})
|
||||
SET(MacIntegration_LIBRARIES ${MACINTEGRATION_LIBRARY})
|
||||
SET(MacIntegration_INCLUDE_DIRS ${MACINTEGRATION_INCLUDE_DIR})
|
||||
ENDIF(MACINTEGRATION_FOUND)
|
||||
|
@ -19,45 +19,6 @@ else (WIN32)
|
||||
endif (WIN32)
|
||||
|
||||
if (WIN32)
|
||||
if (CMAKE_SIZEOF_VOID_P EQUAL 4)
|
||||
set(BUILD_BIT_DEPTH 32)
|
||||
# 32 bits builds has to be installable on 64 bits system, to support WinXP/64.
|
||||
set(ARCHITECTURE_ALLOWED "x86 x64 ia64")
|
||||
# installing in 32 bits mode even on 64 bits OS and architecture
|
||||
set(INSTALL_MODE "")
|
||||
# set part of the output archive name
|
||||
set(SYSTEM_NAME "WinXP")
|
||||
elseif (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
set(BUILD_BIT_DEPTH 64)
|
||||
# Restricting the 64 bits builds to 64 bits systems only
|
||||
set(ARCHITECTURE_ALLOWED "x64 ia64")
|
||||
# installing in 64 bits mode for all 64 bits processors, even for itanium architecture
|
||||
set(INSTALL_MODE "x64 ia64")
|
||||
# set part of the output archive name
|
||||
set(SYSTEM_NAME "WinVista")
|
||||
endif (CMAKE_SIZEOF_VOID_P EQUAL 4)
|
||||
|
||||
# If we find ReleaseInfo.cmake we use the info from there and don't need Git to be installed
|
||||
find_file(REL_INFO_FILE ReleaseInfo.cmake PATHS "${PROJECT_SOURCE_DIR}" NO_DEFAULT_PATH)
|
||||
if (REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND)
|
||||
# we look for the git command in this paths by order of preference
|
||||
find_file(GIT_CMD git.exe HINTS ENV Path PATH_SUFFIXES ../)
|
||||
|
||||
# Fail if Git is not installed
|
||||
if (GIT_CMD STREQUAL GIT_CMD-NOTFOUND)
|
||||
message(FATAL_ERROR "git command not found!")
|
||||
else ()
|
||||
message(STATUS "git command found: ${GIT_CMD}")
|
||||
endif ()
|
||||
|
||||
execute_process(COMMAND ${GIT_CMD} describe --tags --always OUTPUT_VARIABLE GIT_VERSION_WHOLE OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
|
||||
string(REGEX REPLACE "-.*" "" GIT_VERSION ${GIT_VERSION_WHOLE})
|
||||
string(REGEX REPLACE ".*-(.*)-g.*" "\\1" GIT_TAGDISTANCE ${GIT_VERSION_WHOLE})
|
||||
else (REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND)
|
||||
include("${PROJECT_SOURCE_DIR}/ReleaseInfo.cmake")
|
||||
endif (REL_INFO_FILE STREQUAL REL_INFO_FILE-NOTFOUND)
|
||||
|
||||
configure_file ("${CMAKE_CURRENT_SOURCE_DIR}/../tools/win/InnoSetup/WindowsInnoSetup.iss.in" "${CMAKE_CURRENT_BINARY_DIR}/WindowsInnoSetup.iss")
|
||||
install (FILES "${CMAKE_CURRENT_BINARY_DIR}/WindowsInnoSetup.iss" DESTINATION ${BINDIR})
|
||||
endif (WIN32)
|
||||
|
||||
@ -88,16 +49,16 @@ install (DIRECTORY ${IMAGESDIR} DESTINATION "${DATADIR}" FILES_MATCHING PATTERN
|
||||
install (FILES ${OPTIONSFILE} DESTINATION "${DATADIR}" PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ RENAME options)
|
||||
|
||||
if (WIN32)
|
||||
install (FILES "${PROJECT_SOURCE_DIR}/doc/manpage/rawtherapee.1" DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man1")
|
||||
install (FILES "${PROJECT_SOURCE_DIR}/doc/manpage/rawtherapee.1" DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man1")
|
||||
endif (WIN32)
|
||||
|
||||
if (APPLE)
|
||||
# CMake escapes first item quote character. Do not remove 'DUMMY_VARIABLE='.
|
||||
set (MACOSX_BUNDLE_COMMAND DUMMY_VARIABLE=
|
||||
PROJECT_NAME="${PROJECT_NAME}"
|
||||
PROJECT_SOURCE_DIR="${PROJECT_SOURCE_DIR}"
|
||||
CMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}"
|
||||
GTK_PREFIX="${GTK_PREFIX}")
|
||||
PROJECT_NAME="${PROJECT_NAME}"
|
||||
PROJECT_SOURCE_DIR="${PROJECT_SOURCE_DIR}"
|
||||
CMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}"
|
||||
GTK_PREFIX="${GTK_PREFIX}")
|
||||
if (PROC_BIT_DEPTH MATCHES 32)
|
||||
list (APPEND MACOSX_BUNDLE_COMMAND PROC_BIT_DEPTH=32)
|
||||
elseif (PROC_BIT_DEPTH MATCHES 64)
|
||||
|
BIN
rtdata/dcpprofiles/NIKON D300.dcp
Normal file
BIN
rtdata/dcpprofiles/NIKON D80.dcp
Normal file
BIN
rtdata/dcpprofiles/OLYMPUS E-M1MarkII.dcp
Normal file
BIN
rtdata/dcpprofiles/Panasonic DMC-GX85.dcp
Normal file
@ -21,7 +21,7 @@
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<title
|
||||
id="title5575">RawTherapee logo white font white glow</title>
|
||||
id="title5575">RawTherapee Splash Screen</title>
|
||||
<defs
|
||||
id="defs4">
|
||||
<linearGradient
|
||||
@ -1384,16 +1384,16 @@
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.7607809"
|
||||
inkscape:cx="184.96363"
|
||||
inkscape:zoom="1.7154742"
|
||||
inkscape:cx="290.94671"
|
||||
inkscape:cy="103.21"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1025"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-3"
|
||||
inkscape:window-height="1023"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
@ -1403,12 +1403,63 @@
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:snap-page="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-edge-midpoints="false"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
showborder="true"
|
||||
borderlayer="false"
|
||||
inkscape:showpageshadow="true"
|
||||
inkscape:snap-global="false" />
|
||||
inkscape:snap-global="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true">
|
||||
<sodipodi:guide
|
||||
position="30,0"
|
||||
orientation="1,0"
|
||||
id="guide3665"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="0,321"
|
||||
orientation="0,1"
|
||||
id="guide3667"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="522,0"
|
||||
orientation="1,0"
|
||||
id="guide3669"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="0,25"
|
||||
orientation="0,1"
|
||||
id="guide3671"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="244.625,239.9831"
|
||||
orientation="0,1"
|
||||
id="guide3673" />
|
||||
<sodipodi:guide
|
||||
position="29.875,33.6125"
|
||||
orientation="0,1"
|
||||
id="guide3675" />
|
||||
<sodipodi:guide
|
||||
position="173.0169,189.5"
|
||||
orientation="1,0"
|
||||
id="guide3677" />
|
||||
<sodipodi:guide
|
||||
position="378.98311,131.125"
|
||||
orientation="1,0"
|
||||
id="guide3679" />
|
||||
<sodipodi:guide
|
||||
position="273,270.5"
|
||||
orientation="0,1"
|
||||
id="guide3687" />
|
||||
<sodipodi:guide
|
||||
position="54.738059,35.335001"
|
||||
orientation="0,1"
|
||||
id="guide4367" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
@ -1417,17 +1468,17 @@
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>RawTherapee logo white font white glow</dc:title>
|
||||
<dc:title>RawTherapee Splash Screen</dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>RawTherapee</dc:title>
|
||||
<dc:title>Morgan Hardwood</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>rawtherapee</rdf:li>
|
||||
<rdf:li>logo</rdf:li>
|
||||
<rdf:li>white</rdf:li>
|
||||
<rdf:li>splash</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<dc:source>www.rawtherapee.com</dc:source>
|
||||
@ -1647,40 +1698,11 @@
|
||||
y="152.4408"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:OxygenSans;-inkscape-font-specification:OxygenSans;text-align:justify;text-anchor:start;fill:#ffffff;fill-opacity:1" /></flowRegion><flowPara
|
||||
id="flowPara3763"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:OxygenSans;-inkscape-font-specification:OxygenSans;text-align:justify;text-anchor:start;fill:#ffffff;fill-opacity:1">Select the desired element and apply one of the effects in the Filter Editor. You might need to ungroup the element before applying. For example to set the RT ring to have a colorful glow, select it and enable the "ring glow". You can change the flood color of the "ring shadow" effect to make it white if you want to make the logo usable on a dark background.</flowPara><flowPara
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:OxygenSans;-inkscape-font-specification:OxygenSans;text-align:justify;text-anchor:start;fill:#ffffff;fill-opacity:1">Apply glow effects using filters. You might need to ungroup the circle elements before applying. You can change the flood color of the "ring shadow" effect to make it white if you want to make the logo usable on a dark background.</flowPara><flowPara
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:OxygenSans;-inkscape-font-specification:OxygenSans;text-align:justify;text-anchor:start;fill:#ffffff;fill-opacity:1"
|
||||
id="flowPara3676" /><flowPara
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:OxygenSans;-inkscape-font-specification:OxygenSans;text-align:justify;text-anchor:start;fill:#ffffff;fill-opacity:1"
|
||||
id="flowPara3678">For logo specifics, refer to rt_logo.svg</flowPara></flowRoot> <text
|
||||
sodipodi:linespacing="125%"
|
||||
id="text3929-7"
|
||||
y="16.646875"
|
||||
x="154.37589"
|
||||
style="font-size:64px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter4749);enable-background:new;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
|
||||
xml:space="preserve"
|
||||
transform="matrix(1.1792004,0,-0.04117843,1.1792004,-114.37084,-179.98059)"><tspan
|
||||
style="font-size:69px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;letter-spacing:-3px;fill:#ffffff;fill-opacity:1;font-family:Eras-UltraBlk;-inkscape-font-specification:Eras-UltraBlk"
|
||||
y="16.646875"
|
||||
x="154.37589"
|
||||
id="tspan3931"
|
||||
sodipodi:role="line"
|
||||
rotate="0 0 0 0"
|
||||
dx="0">Raw</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:64px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter4749);enable-background:new;font-family:Eras-Medium;-inkscape-font-specification:Eras-Medium"
|
||||
x="303.17801"
|
||||
y="16.646875"
|
||||
id="text3935-5"
|
||||
sodipodi:linespacing="125%"
|
||||
transform="matrix(1.1792004,0,-0.04117843,1.1792004,-114.37084,-179.98059)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3937"
|
||||
x="303.17801"
|
||||
y="16.646875"
|
||||
style="font-size:68px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:4px;fill:#ffffff;fill-opacity:1;font-family:Eras-Medium;-inkscape-font-specification:Eras-Medium"
|
||||
rotate="0 0 0 0 0 0 0 0 0">Therapee</tspan></text>
|
||||
<flowRoot
|
||||
id="flowPara4320">For logo specifics, refer to rt_logo.svg</flowPara></flowRoot> <flowRoot
|
||||
transform="translate(362.47572,-12.572881)"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:125%;font-family:OxygenSans;-inkscape-font-specification:OxygenSans;text-align:justify;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none"
|
||||
id="flowRoot11563"
|
||||
@ -1693,19 +1715,25 @@
|
||||
width="255.35268"
|
||||
id="rect11567" /></flowRegion><flowPara
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:OxygenSans;-inkscape-font-specification:OxygenSans;text-align:justify;text-anchor:start;fill:#ffffff;fill-opacity:1"
|
||||
id="flowPara11575">"Raw" font Eras-UltraBlk, 69px, -3px spacing between characters, skewed 2° to the right.</flowPara><flowPara
|
||||
id="flowPara4343">"Raw": font ITC Eras Std Ultra, appears in Inkscape as</flowPara><flowPara
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:OxygenSans;-inkscape-font-specification:OxygenSans;text-align:justify;text-anchor:start;fill:#ffffff;fill-opacity:1"
|
||||
id="flowPara11579">"Therapee" font Eras-Medium, 68px, 4px spacing between characters, skewed 2° to the right.</flowPara><flowPara
|
||||
id="flowPara4357"> ITC Eras Standard - Ultra-Bold,</flowPara><flowPara
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:OxygenSans;-inkscape-font-specification:OxygenSans;text-align:justify;text-anchor:start;fill:#ffffff;fill-opacity:1"
|
||||
id="flowPara11581">Both have a dropshadow with an opacity of 0.40 and Gaussian blur standard deviation of 3.5.</flowPara><flowPara
|
||||
id="flowPara4345"> 60pt, -3px spacing between characters.</flowPara><flowPara
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:OxygenSans;-inkscape-font-specification:OxygenSans;text-align:justify;text-anchor:start;fill:#ffffff;fill-opacity:1"
|
||||
id="flowPara11591">Version number Eras bold 64 or less.</flowPara><flowPara
|
||||
id="flowPara4347">"Therapee": font ITC Eras Std Medium, appears in Inkscape as</flowPara><flowPara
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:OxygenSans;-inkscape-font-specification:OxygenSans;text-align:justify;text-anchor:start;fill:#ffffff;fill-opacity:1"
|
||||
id="flowPara11585">Eras font from "freefonts-0.10":</flowPara><flowPara
|
||||
id="flowPara4361"> ITC Eras Standard - Medium,</flowPara><flowPara
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:OxygenSans;-inkscape-font-specification:OxygenSans;text-align:justify;text-anchor:start;fill:#ffffff;fill-opacity:1"
|
||||
id="flowPara10541">ftp://ftp.gimp.org/pub/gimp/fonts/</flowPara></flowRoot> <text
|
||||
id="flowPara4349"> 60pt, +1px spacing between characters.</flowPara><flowPara
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:OxygenSans;-inkscape-font-specification:OxygenSans;text-align:justify;text-anchor:start;fill:#ffffff;fill-opacity:1"
|
||||
id="flowPara4351">Version: font ITC Eras Std Bold, appears in Inkscape as</flowPara><flowPara
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:OxygenSans;-inkscape-font-specification:OxygenSans;text-align:justify;text-anchor:start;fill:#ffffff;fill-opacity:1"
|
||||
id="flowPara4365"> ITC Eras Standard - Bold,</flowPara><flowPara
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:OxygenSans;-inkscape-font-specification:OxygenSans;text-align:justify;text-anchor:start;fill:#ffffff;fill-opacity:1"
|
||||
id="flowPara4353"> 64pt, skewed -3°.</flowPara></flowRoot> <text
|
||||
xml:space="preserve"
|
||||
style="font-size:6px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Salter;-inkscape-font-specification:Salter Medium"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:6px;line-height:125%;font-family:Salter;-inkscape-font-specification:'Salter Medium';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="157.31409"
|
||||
y="246.19589"
|
||||
id="text11593"
|
||||
@ -1714,19 +1742,7 @@
|
||||
id="tspan11595"
|
||||
x="157.31409"
|
||||
y="246.19589"
|
||||
style="font-size:6px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:1px;fill:#ffcc00;fill-opacity:1;font-family:OxygenSans;-inkscape-font-specification:OxygenSans">RawTherapee splash screen design version 1.0 from 2014-05-03 | www.rawtherapee.com</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:100px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Eras-Medium;-inkscape-font-specification:Eras-Medium Bold"
|
||||
x="67.395546"
|
||||
y="89.97583"
|
||||
id="text4743"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4745"
|
||||
x="67.395546"
|
||||
y="89.97583"
|
||||
style="font-size:16px;letter-spacing:1px;word-spacing:5px;fill:#ffffff;fill-opacity:1">GNU GPLv3</tspan></text>
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6px;font-family:OxygenSans;-inkscape-font-specification:OxygenSans;letter-spacing:1px;fill:#ffcc00;fill-opacity:1">RawTherapee splash screen design version 1.1 from 2017-01-28 | www.rawtherapee.com</tspan></text>
|
||||
<flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot4759"
|
||||
@ -1737,19 +1753,7 @@
|
||||
height="102.29827"
|
||||
x="-53.53928"
|
||||
y="224.58057" /></flowRegion><flowPara
|
||||
id="flowPara4765" /></flowRoot> <flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot10508"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:80px;line-height:125%;font-family:Eras;-inkscape-font-specification:'Eras Bold';text-align:end;letter-spacing:-0.05px;word-spacing:0px;text-anchor:end;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter10964);"
|
||||
transform="translate(-32.241264,-248.35625)"><flowRegion
|
||||
id="flowRegion10510"><rect
|
||||
id="rect10512"
|
||||
width="51.421597"
|
||||
height="91.457291"
|
||||
x="315.61359"
|
||||
y="180.29274"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:80px;font-family:Eras;-inkscape-font-specification:'Eras Bold';fill:#ffffff;" /></flowRegion><flowPara
|
||||
id="flowPara10514">5</flowPara></flowRoot> <text
|
||||
id="flowPara4765" /></flowRoot> <text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:Daniel;-inkscape-font-specification:Daniel;text-align:end;letter-spacing:-0.05px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="892.45013"
|
||||
@ -1760,6 +1764,56 @@
|
||||
id="tspan10518"
|
||||
x="892.45013"
|
||||
y="-4.99089" /></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;font-size:80px;line-height:125%;font-family:'ITC Eras Std';-inkscape-font-specification:'ITC Eras Std Ultra-Bold';letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter4749)"
|
||||
x="61.72514"
|
||||
y="-157.9659"
|
||||
id="text3655"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3657"
|
||||
x="61.72514"
|
||||
y="-157.9659"
|
||||
style="font-size:75px;letter-spacing:-3px;word-spacing:0px"
|
||||
dx="0">Raw</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:70px;line-height:125%;font-family:'ITC Eras Std';-inkscape-font-specification:'ITC Eras Std Medium';letter-spacing:1px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter4749)"
|
||||
x="239.99272"
|
||||
y="-157.9659"
|
||||
id="text3659"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3661"
|
||||
x="239.99272"
|
||||
y="-157.9659"
|
||||
style="font-size:75px;letter-spacing:1px">Therapee</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:10px;line-height:125%;font-family:'ITC Eras Std';-inkscape-font-specification:'ITC Eras Std Medium';letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="65.505142"
|
||||
y="87.844109"
|
||||
id="text3683"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3685"
|
||||
x="65.505142"
|
||||
y="87.844109"
|
||||
style="font-size:15px">GNU GPLv3</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter4749)"
|
||||
x="283.85016"
|
||||
y="2.2370076"
|
||||
id="text3689"
|
||||
sodipodi:linespacing="125%"
|
||||
transform="matrix(1,0,0.05240778,1,1.2558473,0)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3691"
|
||||
x="283.85016"
|
||||
y="2.2370076"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:80px;font-family:'ITC Eras Std';-inkscape-font-specification:'ITC Eras Std Bold'">5</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 74 KiB |
@ -1082,7 +1082,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
|
||||
!PREFERENCES_OUTDIRFOLDER;Save to folder
|
||||
!PREFERENCES_OUTDIRFOLDERHINT;Save images to the selected folder.
|
||||
!PREFERENCES_OUTDIRTEMPLATE;Use template
|
||||
!PREFERENCES_OUTDIRTEMPLATEHINT;You can use the following formatting strings:\n<b>%f</b>, <b>%d1</b>, <b>%d2</b>, ..., <b>%p1</b>, <b>%p2</b>, ..., <b>%r</b>, <b>%s1</b>, <b>%s2</b>, ...\n\nThese formatting strings refer to the different parts of the photo's pathname, some attributes of the photo or an arbitrary sequence index in the batch job.\n\nFor example, if the photo being processed has the following pathname:\n<b><i>/home/tom/photos/2010-10-31/dsc0042.nef</i></b>\nthe meaning of the formatting strings are:\n<b>%d4</b> = <i>home</i>\n<b>%d3</b> = <i>tom</i>\n<b>%d2</b> = <i>photos</i>\n<b>%d1</b> = <i>2010-10-31</i>\n<b>%f</b> = <i>dsc0042</i>\n<b>%p1</b> = <i>/home/tom/photos/2010-10-31/</i>\n<b>%p2</b> = <i>/home/tom/photos/</i>\n<b>%p3</b> = <i>/home/tom/</i>\n<b>%p4</b> = <i>/home/</i>\n\n<b>%r</b> will be replaced by the rank of the photo. If the photo is unranked, %r will be replaced by '0'. If the photo is in the trash bin, %r will be replaced by 'x'.\n\n<b>%s1</b>, <b>%s2</b>, etc. will be replaced by a sequence index which is padded to between 1 and 9 digits. The sequence index will start at one each time the queue processing is started and is incremented by one for each image processed.\n\nIf you want to save the output image where the original is, write:\n<b>%p1/%f</b>\n\nIf you want to save the output image in a directory named "<i>converted</i>" located in the directory of the opened image, write:\n<b>%p1/converted/%f</b>\n\nIf you want to save the output image in a directory named "<i>/home/tom/photos/converted/2010-10-31</i>", write:\n<b>%p2/converted/%d1/%f</b>
|
||||
!PREFERENCES_OUTDIRTEMPLATEHINT;You can use the following formatting strings:\n<b>%f</b>, <b>%d1</b>, <b>%d2</b>, ..., <b>%p1</b>, <b>%p2</b>, ..., <b>%r</b>, <b>%s1</b>, <b>%s2</b>, ...\n\nThese formatting strings refer to the different parts of the photo's pathname, some attributes of the photo or an arbitrary sequence index in the batch job.\n\nFor example, if the photo being processed has the following pathname:\n<b><i>/home/tom/photos/2010-10-31/dsc0042.nef</i></b>\nthe meaning of the formatting strings are:\n<b>%d4</b> = <i>home</i>\n<b>%d3</b> = <i>tom</i>\n<b>%d2</b> = <i>photos</i>\n<b>%d1</b> = <i>2010-10-31</i>\n<b>%f</b> = <i>dsc0042</i>\n<b>%p1</b> = <i>/home/tom/photos/2010-10-31/</i>\n<b>%p2</b> = <i>/home/tom/photos/</i>\n<b>%p3</b> = <i>/home/tom/</i>\n<b>%p4</b> = <i>/home/</i>\n\n<b>%r</b> will be replaced by the rank of the photo. If the photo is unranked, %r will be replaced by '0'. If the photo is in the trash bin, %r will be replaced by 'x'.\n\n<b>%s1</b>, <b>%s2</b>, etc. will be replaced by a sequence index which is padded to between 1 and 9 digits. The sequence index will start at one each time the queue processing is started and is incremented by one for each image processed.\n\nIf you want to save the output image where the original is, write:\n<b>%p1/%f</b>\n\nIf you want to save the output image in a directory named "<i>converted</i>" located in the directory of the opened image, write:\n<b>%p1/converted/%f</b>\n\nIf you want to save the output image in a directory named\n"<i>/home/tom/photos/converted/2010-10-31</i>", write:\n<b>%p2/converted/%d1/%f</b>
|
||||
!PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails in the file browser
|
||||
!PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel
|
||||
!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files
|
||||
|
@ -1017,7 +1017,7 @@
|
||||
!PREFERENCES_OUTDIRFOLDER;Save to folder
|
||||
!PREFERENCES_OUTDIRFOLDERHINT;Save images to the selected folder.
|
||||
!PREFERENCES_OUTDIRTEMPLATE;Use template
|
||||
!PREFERENCES_OUTDIRTEMPLATEHINT;You can use the following formatting strings:\n<b>%f</b>, <b>%d1</b>, <b>%d2</b>, ..., <b>%p1</b>, <b>%p2</b>, ..., <b>%r</b>, <b>%s1</b>, <b>%s2</b>, ...\n\nThese formatting strings refer to the different parts of the photo's pathname, some attributes of the photo or an arbitrary sequence index in the batch job.\n\nFor example, if the photo being processed has the following pathname:\n<b><i>/home/tom/photos/2010-10-31/dsc0042.nef</i></b>\nthe meaning of the formatting strings are:\n<b>%d4</b> = <i>home</i>\n<b>%d3</b> = <i>tom</i>\n<b>%d2</b> = <i>photos</i>\n<b>%d1</b> = <i>2010-10-31</i>\n<b>%f</b> = <i>dsc0042</i>\n<b>%p1</b> = <i>/home/tom/photos/2010-10-31/</i>\n<b>%p2</b> = <i>/home/tom/photos/</i>\n<b>%p3</b> = <i>/home/tom/</i>\n<b>%p4</b> = <i>/home/</i>\n\n<b>%r</b> will be replaced by the rank of the photo. If the photo is unranked, %r will be replaced by '0'. If the photo is in the trash bin, %r will be replaced by 'x'.\n\n<b>%s1</b>, <b>%s2</b>, etc. will be replaced by a sequence index which is padded to between 1 and 9 digits. The sequence index will start at one each time the queue processing is started and is incremented by one for each image processed.\n\nIf you want to save the output image where the original is, write:\n<b>%p1/%f</b>\n\nIf you want to save the output image in a directory named "<i>converted</i>" located in the directory of the opened image, write:\n<b>%p1/converted/%f</b>\n\nIf you want to save the output image in a directory named "<i>/home/tom/photos/converted/2010-10-31</i>", write:\n<b>%p2/converted/%d1/%f</b>
|
||||
!PREFERENCES_OUTDIRTEMPLATEHINT;You can use the following formatting strings:\n<b>%f</b>, <b>%d1</b>, <b>%d2</b>, ..., <b>%p1</b>, <b>%p2</b>, ..., <b>%r</b>, <b>%s1</b>, <b>%s2</b>, ...\n\nThese formatting strings refer to the different parts of the photo's pathname, some attributes of the photo or an arbitrary sequence index in the batch job.\n\nFor example, if the photo being processed has the following pathname:\n<b><i>/home/tom/photos/2010-10-31/dsc0042.nef</i></b>\nthe meaning of the formatting strings are:\n<b>%d4</b> = <i>home</i>\n<b>%d3</b> = <i>tom</i>\n<b>%d2</b> = <i>photos</i>\n<b>%d1</b> = <i>2010-10-31</i>\n<b>%f</b> = <i>dsc0042</i>\n<b>%p1</b> = <i>/home/tom/photos/2010-10-31/</i>\n<b>%p2</b> = <i>/home/tom/photos/</i>\n<b>%p3</b> = <i>/home/tom/</i>\n<b>%p4</b> = <i>/home/</i>\n\n<b>%r</b> will be replaced by the rank of the photo. If the photo is unranked, %r will be replaced by '0'. If the photo is in the trash bin, %r will be replaced by 'x'.\n\n<b>%s1</b>, <b>%s2</b>, etc. will be replaced by a sequence index which is padded to between 1 and 9 digits. The sequence index will start at one each time the queue processing is started and is incremented by one for each image processed.\n\nIf you want to save the output image where the original is, write:\n<b>%p1/%f</b>\n\nIf you want to save the output image in a directory named "<i>converted</i>" located in the directory of the opened image, write:\n<b>%p1/converted/%f</b>\n\nIf you want to save the output image in a directory named\n"<i>/home/tom/photos/converted/2010-10-31</i>", write:\n<b>%p2/converted/%d1/%f</b>
|
||||
!PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails in the file browser
|
||||
!PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel
|
||||
!PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files
|
||||
|
@ -36,7 +36,7 @@ CURVEEDITOR_TYPE;Type:
|
||||
DIRBROWSER_FOLDERS;Répertoires
|
||||
EDITWINDOW_TITLE;Édition d'image
|
||||
EDIT_OBJECT_TOOLTIP;Affiche des éléments dans la fenêtre de prévisualisation qui vous permettront d'ajuster cet outil.
|
||||
EDIT_PIPETTE_TOOLTIP;Pour ajouter un point d'ajustement de la courbe, maintenez la touche Ctrl préssée et cliquez dans l'image avec le bouton gauche.\nPour ajuster le point, pressez la touche Ctrl lors du clic-gauche sur la zone correspondande dans l'apperçu, puis relachez Ctrl (sauf si vous désirez un control plus fin) et tout en gardant le bouton gauche appuyé, déplacez le curseur vers le haut ou le bas pour ajuster la position du point.
|
||||
EDIT_PIPETTE_TOOLTIP;Pour ajouter un point d'ajustement de la courbe, maintenez la touche Ctrl pressée et cliquez dans l'image avec le bouton gauche.\nPour ajuster le point, pressez la touche Ctrl lors du clic-gauche sur la zone correspondante dans l'aperçu, puis relachez Ctrl (sauf si vous désirez un contrôle plus fin) et tout en gardant le bouton gauche appuyé, déplacez le curseur vers le haut ou le bas pour ajuster la position du point.
|
||||
EXIFFILTER_APERTURE;Ouverture
|
||||
EXIFFILTER_CAMERA;Appareil photo
|
||||
EXIFFILTER_EXPOSURECOMPENSATION;Compensation d'exposition (EV)
|
||||
@ -79,7 +79,7 @@ EXPORT_BYPASS_SHARPENING;Ignorer la netteté
|
||||
EXPORT_BYPASS_SHARPENMICRO;Ignorer netteté des microcontrastes
|
||||
EXPORT_BYPASS_SH_HQ;Ignorer Ombres/Hautes lumières (HQ)
|
||||
EXPORT_FASTEXPORTOPTIONS;<b>Options d'Export Rapide</b>
|
||||
EXPORT_INSTRUCTIONS;Les options d'Export Rapide permettent de forcer des paramètres afin d'éviter d'utiliser des outils très consommateur de temps et de ressources, et d'utiliser ces options dans la file de traitement. Cette méthode est recommandée pour la génération rapide d'images de basse résolution quand la vitesse est une priorité ou lorsqu'on désir une version redimensionnée d'une ou plusieurs images de sortie sans avoir à modifier leurs paramètres de développement.
|
||||
EXPORT_INSTRUCTIONS;Les options d'Export Rapide permettent de forcer des paramètres afin d'éviter d'utiliser des outils très consommateurs de temps et de ressources, et d'utiliser ces options dans la file de traitement. Cette méthode est recommandée pour la génération rapide d'images de basse résolution quand la vitesse est une priorité ou lorsqu'on désire une version redimensionnée d'une ou plusieurs images de sortie sans avoir à modifier leurs paramètres de développement.
|
||||
EXPORT_MAXHEIGHT;Hauteur maximum:
|
||||
EXPORT_MAXWIDTH;Largeur maximum:
|
||||
EXPORT_PUTTOQUEUEFAST;Mettre dans la file de traitement\npour Export Rapide
|
||||
|
@ -1016,7 +1016,7 @@ PREFERENCES_OUTDIR;Output Directory
|
||||
PREFERENCES_OUTDIRFOLDER;Save to folder
|
||||
PREFERENCES_OUTDIRFOLDERHINT;Save images to the selected folder.
|
||||
PREFERENCES_OUTDIRTEMPLATE;Use template
|
||||
PREFERENCES_OUTDIRTEMPLATEHINT;You can use the following formatting strings:\n<b>%f</b>, <b>%d1</b>, <b>%d2</b>, ..., <b>%p1</b>, <b>%p2</b>, ..., <b>%r</b>, <b>%s1</b>, <b>%s2</b>, ...\n\nThese formatting strings refer to the different parts of the photo's pathname, some attributes of the photo or an arbitrary sequence index in the batch job.\n\nFor example, if the photo being processed has the following pathname:\n<b><i>/home/tom/photos/2010-10-31/dsc0042.nef</i></b>\nthe meaning of the formatting strings are:\n<b>%d4</b> = <i>home</i>\n<b>%d3</b> = <i>tom</i>\n<b>%d2</b> = <i>photos</i>\n<b>%d1</b> = <i>2010-10-31</i>\n<b>%f</b> = <i>dsc0042</i>\n<b>%p1</b> = <i>/home/tom/photos/2010-10-31/</i>\n<b>%p2</b> = <i>/home/tom/photos/</i>\n<b>%p3</b> = <i>/home/tom/</i>\n<b>%p4</b> = <i>/home/</i>\n\n<b>%r</b> will be replaced by the rank of the photo. If the photo is unranked, %r will be replaced by '0'. If the photo is in the trash bin, %r will be replaced by 'x'.\n\n<b>%s1</b>, <b>%s2</b>, etc. will be replaced by a sequence index which is padded to between 1 and 9 digits. The sequence index will start at one each time the queue processing is started and is incremented by one for each image processed.\n\nIf you want to save the output image where the original is, write:\n<b>%p1/%f</b>\n\nIf you want to save the output image in a directory named "<i>converted</i>" located in the directory of the opened image, write:\n<b>%p1/converted/%f</b>\n\nIf you want to save the output image in a directory named "<i>/home/tom/photos/converted/2010-10-31</i>", write:\n<b>%p2/converted/%d1/%f</b>
|
||||
PREFERENCES_OUTDIRTEMPLATEHINT;You can use the following formatting strings:\n<b>%f</b>, <b>%d1</b>, <b>%d2</b>, ..., <b>%p1</b>, <b>%p2</b>, ..., <b>%r</b>, <b>%s1</b>, <b>%s2</b>, ...\n\nThese formatting strings refer to the different parts of the photo's pathname, some attributes of the photo or an arbitrary sequence index in the batch job.\n\nFor example, if the photo being processed has the following pathname:\n<b><i>/home/tom/photos/2010-10-31/dsc0042.nef</i></b>\nthe meaning of the formatting strings are:\n<b>%d4</b> = <i>home</i>\n<b>%d3</b> = <i>tom</i>\n<b>%d2</b> = <i>photos</i>\n<b>%d1</b> = <i>2010-10-31</i>\n<b>%f</b> = <i>dsc0042</i>\n<b>%p1</b> = <i>/home/tom/photos/2010-10-31/</i>\n<b>%p2</b> = <i>/home/tom/photos/</i>\n<b>%p3</b> = <i>/home/tom/</i>\n<b>%p4</b> = <i>/home/</i>\n\n<b>%r</b> will be replaced by the rank of the photo. If the photo is unranked, %r will be replaced by '0'. If the photo is in the trash bin, %r will be replaced by 'x'.\n\n<b>%s1</b>, <b>%s2</b>, etc. will be replaced by a sequence index which is padded to between 1 and 9 digits. The sequence index will start at one each time the queue processing is started and is incremented by one for each image processed.\n\nIf you want to save the output image where the original is, write:\n<b>%p1/%f</b>\n\nIf you want to save the output image in a directory named "<i>converted</i>" located in the directory of the opened image, write:\n<b>%p1/converted/%f</b>\n\nIf you want to save the output image in a directory named\n"<i>/home/tom/photos/converted/2010-10-31</i>", write:\n<b>%p2/converted/%d1/%f</b>
|
||||
PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails in the file browser
|
||||
PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel
|
||||
PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files
|
||||
|
@ -2,7 +2,7 @@
|
||||
This file is part of RawTherapee.
|
||||
|
||||
Copyright (c) 2016-2017 TooWaBoo
|
||||
Version 2.40 - requires RT 5.0
|
||||
Version 2.42 - requires RT 5.0
|
||||
|
||||
RawTherapee is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -69,7 +69,6 @@
|
||||
outline-style: none; /* removes the ugly dashed focus line */
|
||||
border-image: none;
|
||||
transition: none;
|
||||
/* -gtk-dpi: 120; */
|
||||
}
|
||||
|
||||
*:disabled {
|
||||
@ -77,10 +76,10 @@
|
||||
}
|
||||
|
||||
#ToolPanelNotebook {
|
||||
min-width: 23em
|
||||
min-width: 23em;
|
||||
}
|
||||
#HistoryPanel {
|
||||
min-width: 17.83333em
|
||||
min-width: 17.83334em;
|
||||
}
|
||||
|
||||
window.background {
|
||||
@ -107,7 +106,7 @@ messagedialog {
|
||||
tooltip {
|
||||
background-color: @bg-tooltip;
|
||||
border: 1px solid @border-tooltip;
|
||||
border-radius: 0.33333em;
|
||||
border-radius: 0.33334em;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
box-shadow: none;
|
||||
@ -205,7 +204,7 @@ dialog frame > label {
|
||||
padding: 0.16667em 0.5em;
|
||||
}
|
||||
#BatchQueueButtonsMainContainer frame > border {
|
||||
margin-bottom: 0.8334em;
|
||||
margin-bottom: 0.83334em;
|
||||
}
|
||||
#BatchQueueButtonsMainContainer frame:nth-child(3) > border {
|
||||
padding-left: 0.91667em;
|
||||
@ -232,10 +231,6 @@ textview.view, treeview.view {
|
||||
padding: 0.16667em;
|
||||
margin: 0;
|
||||
}
|
||||
#RightNotebook > stack > :nth-child(3) treeview {
|
||||
border: 1px solid @bg-dark-grey;
|
||||
border-bottom: none;
|
||||
}
|
||||
textview:hover, treeview:hover {
|
||||
background-color: @bg-list-hover;
|
||||
}
|
||||
@ -245,8 +240,13 @@ textview:selected, treeview:selected {
|
||||
border-top-color: transparent;
|
||||
}
|
||||
|
||||
#RightNotebook > stack > :nth-child(3) treeview {
|
||||
border: 1px solid @bg-dark-grey;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
#PlacesPaned > :nth-child(1) treeview {
|
||||
padding: 0.0834em 0 0.0834em 0.5em;
|
||||
padding: 0.08334em 0 0.08334em 0.5em;
|
||||
-gtk-icon-style: symbolic;
|
||||
}
|
||||
|
||||
@ -257,7 +257,7 @@ textview:selected, treeview:selected {
|
||||
margin-top: 1.75em;
|
||||
}
|
||||
#HistoryPanel > label {
|
||||
margin: 0 0 -1.3334em 0;
|
||||
margin: 0 0 -1.33334em 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
@ -285,7 +285,7 @@ textview:selected, treeview:selected {
|
||||
|
||||
/*Corrects the space for the snapshot view of the paned separator*/
|
||||
#Snapshots {
|
||||
margin-top: -0.3334em;
|
||||
margin-top: -0.33334em;
|
||||
}
|
||||
/**/
|
||||
|
||||
@ -381,7 +381,7 @@ filechooser list row:selected {
|
||||
border-radius: 0;
|
||||
}
|
||||
#fullButton {
|
||||
padding: 0.47em 0.41667em 0.58333em;
|
||||
padding: 0.47em 0.41667em 0.58334em;
|
||||
}
|
||||
#EditorLeftPaned #fullButton,
|
||||
#EditorLeftPaned #histButton {
|
||||
@ -433,7 +433,7 @@ paned.vertical > separator {
|
||||
dialog paned.horizontal > separator {
|
||||
background-color: @bg-grey;
|
||||
border-color: @bg-grey;
|
||||
min-width: 0.33333em;
|
||||
min-width: 0.33334em;
|
||||
}
|
||||
|
||||
menu separator {
|
||||
@ -451,13 +451,13 @@ menu separator {
|
||||
#IopsPanel separator,
|
||||
#FileBrowser separator {
|
||||
background-color: shade(@bg-light-grey,.75);
|
||||
margin-top: 0.33333em;
|
||||
margin-bottom: 0.33333em;
|
||||
margin-top: 0.33334em;
|
||||
margin-bottom: 0.33334em;
|
||||
}
|
||||
|
||||
#MyExpander separator {
|
||||
background-color: shade(@bg-grey,.7);
|
||||
margin: 0.33333em 0.66667em;
|
||||
margin: 0.33334em 0.66667em;
|
||||
}
|
||||
|
||||
#PlacesPaned .view.separator {
|
||||
@ -474,7 +474,7 @@ menu separator {
|
||||
}
|
||||
|
||||
#PartialPaste separator.vertical {
|
||||
margin: 0 0.33333em;
|
||||
margin: 0 0.33334em;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
@ -498,7 +498,7 @@ menu separator {
|
||||
|
||||
/*** Scrollbar *********************************************************************************/
|
||||
scrollbar {
|
||||
background-color: rgba(0,0,0,.45);
|
||||
background-color: rgba(0,0,0,.40);
|
||||
border: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
@ -542,7 +542,7 @@ scrollbar.horizontal.hovering.fine-tune slider {
|
||||
scrollbar.horizontal.overlay-indicator:not(.hovering) slider {
|
||||
min-width: 2em;
|
||||
min-height: 0.25em;
|
||||
border-width: 0.0834em;
|
||||
border-width: 0.08334em;
|
||||
border-radius: 0.25em;
|
||||
margin: 0 0.16667em;
|
||||
}
|
||||
@ -562,7 +562,7 @@ scrollbar.vertical.hovering.fine-tune slider {
|
||||
scrollbar.vertical.overlay-indicator:not(.hovering) slider {
|
||||
min-width: 0.25em;
|
||||
min-height: 2em;
|
||||
border-width: 0.0834em;
|
||||
border-width: 0.08334em;
|
||||
border-radius: 0.5em;
|
||||
margin: 0.16667em 0;
|
||||
}
|
||||
@ -573,11 +573,8 @@ scrollbar slider:hover {
|
||||
}
|
||||
|
||||
/* Scrollbar stuck workaround */
|
||||
scrollbar:not(.overlay-indicator).horizontal:hover slider {
|
||||
min-width: calc(2em - 0.0001px);
|
||||
}
|
||||
scrollbar:not(.overlay-indicator).vertical:hover slider {
|
||||
min-height: calc(2em - 0.0001px);
|
||||
scrollbar:not(.overlay-indicator):hover {
|
||||
min-width: 1px;
|
||||
}
|
||||
|
||||
/*** end ***************************************************************************************/
|
||||
@ -585,7 +582,7 @@ scrollbar:not(.overlay-indicator).vertical:hover slider {
|
||||
/*** Scale**************************************************************************************/
|
||||
scale {
|
||||
padding: 0;
|
||||
min-height: 1.83333em;
|
||||
min-height: 1.83334em;
|
||||
margin: 0 0.25em;
|
||||
}
|
||||
|
||||
@ -593,8 +590,8 @@ scale slider {
|
||||
/* Slider size is min-width x min-height; margin have to be half of those values, but negative */
|
||||
min-width: 1em;
|
||||
min-height: 1em;
|
||||
margin: calc(-0.3334em - 1px);
|
||||
border-radius: 0.83333em;
|
||||
margin: calc(-0.33334em - 1px);
|
||||
border-radius: 0.83334em;
|
||||
background-image: linear-gradient(to bottom, shade (@accent-color4,1.15), shade (@accent-color4,.85));
|
||||
border: 1px solid @bg-dark-grey;
|
||||
box-shadow: none;
|
||||
@ -637,12 +634,10 @@ scale:disabled trough {
|
||||
/*** Progressbar *******************************************************************************/
|
||||
progressbar.vertical {
|
||||
min-width: 0;
|
||||
margin-right: 0.58333em;
|
||||
min-height: 9em;
|
||||
}
|
||||
progressbar.vertical text {
|
||||
color: transparent;
|
||||
margin-right: -0.83333em;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
progressbar.vertical trough {
|
||||
@ -663,7 +658,7 @@ progressbar.horizontal trough {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
border-radius: 0.5em;
|
||||
margin-top: 0.58333em;
|
||||
margin-top: 0.58334em;
|
||||
}
|
||||
progressbar.horizontal trough progress {
|
||||
min-height: 0.41667em;
|
||||
@ -716,25 +711,25 @@ notebook tabs {
|
||||
notebook header tab {
|
||||
background-color: transparent;
|
||||
margin: 0.41667em 0.25em;
|
||||
padding: 0 0.3334em;
|
||||
padding: 0 0.33334em;
|
||||
}
|
||||
notebook header.left tab {
|
||||
margin: 0.25em 0.41667em;
|
||||
padding: 0.3334em 0;
|
||||
padding: 0.33334em 0;
|
||||
}
|
||||
notebook header tab > grid > image {
|
||||
min-height: 2.33333em;
|
||||
min-height: 2.33334em;
|
||||
min-width: 0;
|
||||
padding: 0 0.16667em 0 0;
|
||||
margin: 0;
|
||||
}
|
||||
notebook header.left tab > grid > image {
|
||||
min-height: 0;
|
||||
min-width: 2.33333em;
|
||||
min-width: 2.33334em;
|
||||
padding: 0.16667em 0 0;
|
||||
}
|
||||
notebook header tab label {
|
||||
margin: 0.33333em;
|
||||
margin: 0.33334em;
|
||||
}
|
||||
notebook header tab:hover label {
|
||||
color: @headline-hl;
|
||||
@ -747,7 +742,7 @@ notebook header.left tab:checked {
|
||||
}
|
||||
notebook > header > tabs > arrow {
|
||||
background-color: transparent;
|
||||
border-radius: 0.16667em;
|
||||
border-radius: 0.2em;
|
||||
min-width: 0;
|
||||
min-height: 0;
|
||||
padding: 0 0.16667em;
|
||||
@ -776,7 +771,7 @@ dialog notebook stack {
|
||||
padding: 0.41667em;
|
||||
}
|
||||
#MainNotebook > stack > :nth-child(2) > :nth-child(2) {
|
||||
margin-bottom: 0.3334em;
|
||||
margin-bottom: 0.33334em;
|
||||
}
|
||||
|
||||
|
||||
@ -784,17 +779,17 @@ dialog notebook stack {
|
||||
dialog.csd #PrefNotebook > header,
|
||||
dialog.csd #AboutNotebook > header,
|
||||
window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
border-top: 0.083333em solid rgba(200,200,200,.18);
|
||||
border-top: 0.083334em solid rgba(200,200,200,.18);
|
||||
}
|
||||
/**/
|
||||
|
||||
#ToolPanelNotebook > header tabs {
|
||||
margin-bottom: 0.33333em;
|
||||
margin-bottom: 0.33334em;
|
||||
}
|
||||
|
||||
#ToolPanelNotebook > header tab image{
|
||||
min-height: 2.5em;
|
||||
min-width: 2em;
|
||||
min-width: calc(1.66667em + 6px);
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
@ -813,7 +808,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
}
|
||||
|
||||
#PrefNotebook header {
|
||||
margin: -0.66667em -0.66667em 0.3334em;
|
||||
margin: -0.66667em -0.66667em 0.33334em;
|
||||
}
|
||||
#AboutNotebook header {
|
||||
margin: -0.66667em -0.66667em 0.66667em;
|
||||
@ -827,14 +822,15 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
|
||||
#MetaPanelNotebook header {
|
||||
background-color: @bg-grey;
|
||||
padding: 0.33333em;
|
||||
padding: 0.33334em;
|
||||
margin: 0 0.5em 0;
|
||||
}
|
||||
#MetaPanelNotebook > header > tabs {
|
||||
background-color: @bg-dark-grey;
|
||||
padding-left: 0.33334em;
|
||||
}
|
||||
#MetaPanelNotebook > header > tab {
|
||||
background-color: @bg-dark-grey;
|
||||
#MetaPanelNotebook > header tab label{
|
||||
margin: 0.08334em;
|
||||
}
|
||||
|
||||
#MetaPanelNotebook > stack > box {
|
||||
@ -842,11 +838,11 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
background-color: @bg-grey;
|
||||
border-radius: 0;
|
||||
border-top-style: none;
|
||||
padding: 0 0.33333em 0.25em;
|
||||
padding: 0 0.33334em 0.25em;
|
||||
margin: 0 0.5em -0.5em;
|
||||
}
|
||||
#MetaPanelNotebook > stack > box:nth-child(1) > scrolledwindow {
|
||||
margin: 0 0 0.33333em;
|
||||
margin: 0 0 0.33334em;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
@ -862,10 +858,10 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
min-height: 1.66667em;
|
||||
min-width: 0.83333em;
|
||||
min-width: 0.83334em;
|
||||
}
|
||||
#MetaPanelNotebook entry {
|
||||
padding: 0 0.33333em;
|
||||
padding: 0 0.33334em;
|
||||
background-color: @bg-dark-grey;
|
||||
margin: 0;
|
||||
border-radius: 0;
|
||||
@ -883,7 +879,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
}
|
||||
#MetaPanelNotebook textview.view {
|
||||
background-color: @bg-dark-grey;
|
||||
padding: 0.08333em 0.33333em;
|
||||
padding: 0.08334em 0.33334em;
|
||||
margin: 0;
|
||||
}
|
||||
#MetaPanelNotebook text {
|
||||
@ -904,7 +900,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
}
|
||||
|
||||
#MetaPanelNotebook label {
|
||||
padding: 0.0834em 0;
|
||||
padding: 0.08334em 0;
|
||||
}
|
||||
|
||||
/*** end ***************************************************************************************/
|
||||
@ -934,7 +930,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
|
||||
#ToolBarPanelFileBrowser > box > button,
|
||||
#ToolBarPanelFileBrowser > button {
|
||||
margin: 0 0.0834em;
|
||||
margin: 0 0.08334em;
|
||||
}
|
||||
#ToolBarPanelFileBrowser > box > box > button {
|
||||
min-height: 0.91667em;
|
||||
@ -952,7 +948,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
min-height: 1.66667em;
|
||||
min-width: 1.66667em;
|
||||
margin: 0 0 0 -1.66667em;
|
||||
border-radius: 0 0.16667em 0.16667em 0;
|
||||
border-radius: 0 0.2em 0.2em 0;
|
||||
border: 1px solid transparent;
|
||||
padding: 0;
|
||||
}
|
||||
@ -961,11 +957,11 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
min-height: 1.66667em;
|
||||
min-width: 12em;
|
||||
margin: 0 -2px 0 0;
|
||||
padding: 0 2em 0 0.33333em;
|
||||
padding: 0 2em 0 0.33334em;
|
||||
}
|
||||
#ToolBarPanelFileBrowser label,
|
||||
#FileBrowser label {
|
||||
margin: 0 0.33333em 0 0.5em;
|
||||
margin: 0 0.33334em 0 0.5em;
|
||||
}
|
||||
/*** end ***************************************************************************************/
|
||||
|
||||
@ -1005,8 +1001,8 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
#BeforeAfterContainer button {
|
||||
min-height: 1.66667em;
|
||||
min-width: 1.66667em;
|
||||
margin: 0.25em 0 0.3334em;
|
||||
padding: 0 0 0 0.0834em;
|
||||
margin: 0.25em 0 0.33334em;
|
||||
padding: 0 0 0 0.08334em;
|
||||
}
|
||||
/**/
|
||||
|
||||
@ -1016,7 +1012,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
min-height: 0;
|
||||
}
|
||||
#EditorTopPanel button {
|
||||
margin: 0 0.0834em;
|
||||
margin: 0 0.08334em;
|
||||
min-height: 2.16667em;
|
||||
min-width: 2.16667em;
|
||||
}
|
||||
@ -1027,14 +1023,14 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
|
||||
#EditorTopPanel > box > button.image-button:not(:nth-child(6)) {
|
||||
min-width: 0;
|
||||
padding-left: 0.33333em;
|
||||
padding-right: 0.33333em;
|
||||
padding-left: 0.33334em;
|
||||
padding-right: 0.33334em;
|
||||
}
|
||||
#EditorTopPanel > box > button.image-button:nth-child(6) {
|
||||
-gtk-icon-shadow: none;
|
||||
}
|
||||
#EditorTopPanel > box > box > button {
|
||||
min-height: 0.64em;
|
||||
min-height: 0.625em;
|
||||
min-width: 0;
|
||||
margin: 0 0.16667em;
|
||||
padding: 0 0.16667em;
|
||||
@ -1052,7 +1048,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
#EditorTopPanel > box > box > button:checked {
|
||||
background-color: transparent;
|
||||
background-image: none;
|
||||
border: 1px solid @bg-dark-grey;
|
||||
border: 1px solid @bg-button-border;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
@ -1065,8 +1061,8 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
padding: 0 2px 0 3px;
|
||||
}
|
||||
#EditorZoomPanel button {
|
||||
margin-left: 0.0834em;
|
||||
margin-right: 0.0834em;
|
||||
margin-left: 0.08334em;
|
||||
margin-right: 0.08334em;
|
||||
}
|
||||
/*** end ***************************************************************************************/
|
||||
|
||||
@ -1126,7 +1122,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
|
||||
#MyExpanderTitle > box {
|
||||
margin: 0;
|
||||
padding: 0.33333em 0;
|
||||
padding: 0.33334em 0;
|
||||
}
|
||||
|
||||
#MyExpanderTitle label {
|
||||
@ -1167,7 +1163,7 @@ menu > .bottom:hover {
|
||||
}
|
||||
|
||||
menuitem {
|
||||
padding: 0 0.33333em;
|
||||
padding: 0 0.33334em;
|
||||
margin: 1px;
|
||||
min-height: 2em;
|
||||
}
|
||||
@ -1182,7 +1178,7 @@ menuitem:hover > * {
|
||||
menu image {
|
||||
min-height: 2em;
|
||||
padding: 0;
|
||||
margin: 0 0.33333em 0 0;
|
||||
margin: 0 0.33334em 0 0;
|
||||
}
|
||||
|
||||
/*** Selection popup list (used in filechooser) ***/
|
||||
@ -1239,7 +1235,7 @@ button {
|
||||
min-width: 2.16667em;
|
||||
margin: 0;
|
||||
padding: 0; /* x */
|
||||
border-radius: 0.16667em;
|
||||
border-radius: 0.2em;
|
||||
border: 1px solid @bg-button-border;
|
||||
background-color: transparent;
|
||||
box-shadow: inset 0 1px rgba(242, 242, 242, 0.1);
|
||||
@ -1262,19 +1258,19 @@ button.flat {
|
||||
/* Resetbutton Queue & Save as*/
|
||||
dialog scale + button.flat,
|
||||
scale + button.flat {
|
||||
min-height: 1.33333em;
|
||||
min-height: 1.33334em;
|
||||
min-width: 1.25em;
|
||||
margin: 0.25em 0 0.16667em 0.16667em;
|
||||
padding: 0 0 0 0.0834em;
|
||||
padding: 0 0 0 0.08334em;
|
||||
-gtk-icon-shadow: none;
|
||||
}
|
||||
|
||||
/* Resetbutton */
|
||||
#MyExpander button.flat {
|
||||
min-height: 1.33333em;
|
||||
min-height: 1.33334em;
|
||||
min-width: 1.25em;
|
||||
margin: 0.08333em 0 0.08333em 0.16667em;
|
||||
padding: 0 0 0 0.0834em;
|
||||
margin: 0.08334em 0 0.08334em 0.16667em;
|
||||
padding: 0 0 0 0.08334em;
|
||||
-gtk-icon-shadow: none;
|
||||
}
|
||||
|
||||
@ -1286,7 +1282,7 @@ scale + button.flat {
|
||||
}
|
||||
#MyExpander spinbutton + button.flat {
|
||||
margin: 0 0 0 0.16667em;
|
||||
padding-top: 0.08333em;
|
||||
padding-top: 0.08334em;
|
||||
}
|
||||
/**/
|
||||
|
||||
@ -1295,7 +1291,7 @@ scale + button.flat {
|
||||
#MyExpander button.flat:first-child {
|
||||
min-height: 2.16667em;
|
||||
min-width: 2.16667em;
|
||||
margin: 0.08333em;
|
||||
margin: 0.08334em;
|
||||
padding: 0;
|
||||
}
|
||||
/**/
|
||||
@ -1304,7 +1300,7 @@ scale + button.flat {
|
||||
#FileBrowser entry + button:hover,
|
||||
button.flat:hover,
|
||||
button:hover {
|
||||
border: 1px solid @bg-button-border;
|
||||
border-color: @bg-button-border;
|
||||
box-shadow: inset 0 1px rgba(242, 242, 242, 0.1);
|
||||
background-image: linear-gradient(to bottom, rgba(100,100,100,.3), rgba(30,30,30,.3));
|
||||
background-color: @bg-button-hover;
|
||||
@ -1316,8 +1312,8 @@ button.flat:active,
|
||||
button.flat:checked,
|
||||
button:active,
|
||||
button:checked {
|
||||
border-color: black;
|
||||
box-shadow: inset 0 1px rgba(242, 242, 242, 0.1);
|
||||
border-color: @bg-button-border;
|
||||
box-shadow: inset 0 1px rgba(242, 242, 242, 0.08);
|
||||
background-image: linear-gradient(to bottom, rgba(100,100,100,.3), rgba(30,30,30,.3));
|
||||
background-color: @bg-button-active;
|
||||
}
|
||||
@ -1333,7 +1329,7 @@ button.MiddleH {
|
||||
/* Applies special styles in main notebook */
|
||||
#ProfilePanel {
|
||||
margin-bottom: -2px;
|
||||
padding-bottom: 0.41667em
|
||||
padding-bottom: 0.41667em;
|
||||
}
|
||||
#ProfilePanel combobox {
|
||||
margin-left: 0.16667em;
|
||||
@ -1359,7 +1355,7 @@ combobox .combo,
|
||||
dialog combobox .combo,
|
||||
#ToolPanelNotebook combobox .combo,
|
||||
#BatchQueueButtonsMainContainer combobox .combo {
|
||||
padding: 0 0.20833em;
|
||||
padding: 0 0.208334em;
|
||||
}
|
||||
/**/
|
||||
|
||||
@ -1377,7 +1373,7 @@ dialog combobox .combo,
|
||||
#MyExpander label + * > button:not(.flat).Left,
|
||||
#MyExpander label + combobox:not(:first-child):not(:only-child),
|
||||
#MyExpander label + button:not(.flat):not(spinbutton) {
|
||||
margin-left: 0.33333em;
|
||||
margin-left: 0.33334em;
|
||||
}
|
||||
|
||||
/* Arrow toggle combo button */
|
||||
@ -1385,8 +1381,8 @@ dialog combobox .combo,
|
||||
#MyExpander button:not(.flat).Left + button:not(.flat).Right {
|
||||
border-left: none;
|
||||
margin-left: 0;
|
||||
padding-left: 0.33333em;
|
||||
padding-right: 0.33333em;
|
||||
padding-left: 0.33334em;
|
||||
padding-right: 0.33334em;
|
||||
border-top-left-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
}
|
||||
@ -1394,7 +1390,7 @@ dialog combobox .combo,
|
||||
#MyExpander button:not(.flat).Left {
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
min-width: 2.33333em;
|
||||
min-width: 2.16667em;
|
||||
}
|
||||
/**/
|
||||
|
||||
@ -1402,8 +1398,8 @@ dialog combobox .combo,
|
||||
#PrefNotebook stack > box:nth-child(4) combobox,
|
||||
#MyExpander button.flat,
|
||||
#MyExpander button {
|
||||
margin-top: 0.115em;
|
||||
margin-bottom: 0.115em;
|
||||
margin-top: 0.08334em;
|
||||
margin-bottom: 0.08334em;
|
||||
}
|
||||
/**/
|
||||
#MyExpander button.text-button label {
|
||||
@ -1429,11 +1425,11 @@ button.color {
|
||||
/* Save, Cancel, OK ... buttons */
|
||||
.dialog-action-area button {
|
||||
min-height: 2.16667em;
|
||||
margin-top: 0.33333em;
|
||||
margin-top: 0.33334em;
|
||||
}
|
||||
messagedialog .dialog-action-area button {
|
||||
margin: 0 0.66667em 0.66667em 0.66667em;
|
||||
min-height: 1.83333em;
|
||||
min-height: 1.83334em;
|
||||
}
|
||||
messagedialog .dialog-action-area button:not(:only-child):nth-child(1) {
|
||||
margin-right: 0.25em;
|
||||
@ -1457,7 +1453,8 @@ window .view button {
|
||||
background-image: none;
|
||||
box-shadow: none;
|
||||
min-height: 2em;
|
||||
padding: 0 0.33333em;
|
||||
min-width: 1.33334em;
|
||||
padding: 0 0.33334em;
|
||||
}
|
||||
dialog .view button.text-button label,
|
||||
window .view button.text-button label {
|
||||
@ -1497,22 +1494,22 @@ window .view header button,
|
||||
padding: 0;
|
||||
}
|
||||
.path-bar button:first-child {
|
||||
border-top-left-radius: 0.16667em;
|
||||
border-bottom-left-radius: 0.16667em;
|
||||
border-top-left-radius: 0.2em;
|
||||
border-bottom-left-radius: 0.2em;
|
||||
min-width: 2em;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.path-bar button:last-child {
|
||||
border-top-right-radius: 0.16667em;
|
||||
border-bottom-right-radius: 0.16667em;
|
||||
border-top-right-radius: 0.2em;
|
||||
border-bottom-right-radius: 0.2em;
|
||||
min-width: 2em;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.path-bar button label {
|
||||
margin: 0;
|
||||
padding: 0 0.33333em;
|
||||
padding: 0 0.33334em;
|
||||
}
|
||||
/**/
|
||||
|
||||
@ -1560,13 +1557,13 @@ headerbar button.titlebutton image {
|
||||
margin: 0;
|
||||
}
|
||||
headerbar button.titlebutton {
|
||||
margin: 0 0 0 0.33333em;
|
||||
margin: 0 0 0 0.33334em;
|
||||
background-image: none;
|
||||
border: 1px solid transparent;
|
||||
background-color: transparent;
|
||||
box-shadow: none;
|
||||
min-width: 1.5em;
|
||||
min-height: 1.5em;
|
||||
min-width: 1.55em;
|
||||
min-height: 1.55em;
|
||||
padding: 0;
|
||||
}
|
||||
messagedialog headerbar button.titlebutton {
|
||||
@ -1577,7 +1574,7 @@ messagedialog headerbar button.titlebutton {
|
||||
|
||||
#MainNotebook tab #CloseButton {
|
||||
padding: 0;
|
||||
margin: 0.3334em -3px 0.3334em 0.0834em;
|
||||
margin: 0.33334em -3px 0.33334em 0.08334em;
|
||||
min-width: 1.5em;
|
||||
min-height: 1.5em;
|
||||
}
|
||||
@ -1585,26 +1582,26 @@ messagedialog headerbar button.titlebutton {
|
||||
#MainNotebook tab #CloseButton:hover,
|
||||
headerbar button.titlebutton:hover{
|
||||
border-color: rgba(0,0,0,.8);
|
||||
box-shadow: inset 0 1px rgba(242, 242, 242, 0.1);
|
||||
box-shadow: inset 0 1px rgba(242, 242, 242, 0.11);
|
||||
background-image: linear-gradient(to bottom, rgba(100,100,100,.3), rgba(30,30,30,.3));
|
||||
background-color: rgba(128, 128, 128,.15);
|
||||
background-color: rgba(128, 128, 128,.20);
|
||||
}
|
||||
#MainNotebook > header > grid > button:active,
|
||||
headerbar button.titlebutton:active{
|
||||
border-color: rgba(0,0,0,.8);
|
||||
box-shadow: inset 0 1px rgba(242, 242, 242, 0.1);
|
||||
box-shadow: inset 0 1px rgba(242, 242, 242, 0.15);
|
||||
background-image: linear-gradient(to bottom, rgba(100,100,100,.3), rgba(30,30,30,.3));
|
||||
background-color: rgba(128, 128, 128,.30);
|
||||
background-color: rgba(128, 128, 128,.40);
|
||||
}
|
||||
#MainNotebook tab #CloseButton:hover,
|
||||
headerbar button.titlebutton.close:hover{
|
||||
border-color: rgba(0,0,0,.9);
|
||||
border-color: rgba(0,0,0,.8);
|
||||
background-image: linear-gradient(to bottom, rgb(180,0,0), rgb(160,0,0) 40%, rgb(130,0,0));
|
||||
box-shadow: inset 0 1px rgba(242, 242, 242, 0.3);
|
||||
box-shadow: inset 0 1px rgba(242, 242, 242, 0.32);
|
||||
}
|
||||
#MainNotebook tab #CloseButton:active,
|
||||
headerbar button.titlebutton.close:active{
|
||||
border-color: rgba(0,0,0,.9);
|
||||
border-color: rgba(0,0,0,.8);
|
||||
background-image: linear-gradient(to bottom, rgb(215,0,0), rgb(185,0,0) 40%, rgb(150,0,0));
|
||||
box-shadow: inset 0 1px rgba(242, 242, 242, 0.4);
|
||||
}
|
||||
@ -1616,17 +1613,17 @@ headerbar button.titlebutton.close:active{
|
||||
checkbox {
|
||||
padding:0;
|
||||
margin:0;
|
||||
min-height: 1.16667em;
|
||||
min-height: 2em;
|
||||
}
|
||||
checkbutton,
|
||||
radiobutton {
|
||||
padding: 0.41667em 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
min-height: 1.16667em;
|
||||
min-height: 2em;
|
||||
}
|
||||
check,
|
||||
radio {
|
||||
border: calc(0.08334em + 0.18px) solid shade(@text-color, .9);
|
||||
border: calc(0.083334em + 0.18px) solid shade(@text-color, .9);
|
||||
background-image: none;
|
||||
background-color: transparent;
|
||||
margin: 0;
|
||||
@ -1667,24 +1664,26 @@ frame > checkbutton check{
|
||||
}
|
||||
|
||||
#PartialPaste checkbutton:not(#PartialPasteHeader) {
|
||||
padding: 0.0834em 0;
|
||||
min-height: 1.4em;
|
||||
margin-left: 1.16667em;
|
||||
}
|
||||
#PartialPasteHeader {
|
||||
padding: 0.0834em 0;
|
||||
min-height: 1.4em;
|
||||
margin-left: 0.5em;
|
||||
}
|
||||
#PrefNotebook checkbutton {
|
||||
padding: 0;
|
||||
min-height: 1.16667em;
|
||||
}
|
||||
#PrefNotebook radiobutton,
|
||||
#PrefNotebook stack > box:nth-child(3) checkbutton,
|
||||
#PrefNotebook stack > box:nth-child(4) checkbutton {
|
||||
padding: 0.25em 0;
|
||||
min-height: 2em;
|
||||
}
|
||||
#PrefNotebook radiobutton {
|
||||
min-height: 2em;
|
||||
}
|
||||
|
||||
#MyExpander button + checkbutton:last-child {
|
||||
margin-left: 0.33333em;
|
||||
margin-left: 0.33334em;
|
||||
}
|
||||
|
||||
/*** end ***************************************************************************************/
|
||||
@ -1693,11 +1692,11 @@ frame > checkbutton check{
|
||||
#MyExpander entry,
|
||||
entry {
|
||||
margin: 0;
|
||||
padding: 0 0.33333em;
|
||||
padding: 0 0.33334em;
|
||||
min-height: 1.66667em;
|
||||
min-width: 0;
|
||||
border-radius: 0.16667em;
|
||||
box-shadow: inset 1px 1px rgba(0, 0, 0, 0.08), 0 1px rgba(242 , 242, 242, 0.1);
|
||||
border-radius: 0.2em;
|
||||
box-shadow: inset 1px 1px rgba(0, 0, 0, 0.08), 0 1px rgba(242, 242, 242, 0.1);
|
||||
border: 1px solid @bg-entry-border;
|
||||
background-color: @bg-scale-entry;
|
||||
}
|
||||
@ -1707,29 +1706,29 @@ spinbutton {
|
||||
padding: 0;
|
||||
min-height: 1.66667em;
|
||||
min-width: 0;
|
||||
border-radius: 0.16667em;
|
||||
border-radius: 0.2em;
|
||||
background-color: @bg-scale-entry;
|
||||
border: 1px solid @bg-entry-border;
|
||||
box-shadow: inset 1px 1px rgba(0, 0, 0, 0.08), 0 1px rgba(242 , 242, 242, 0.1);
|
||||
box-shadow: inset 1px 1px rgba(0, 0, 0, 0.08), 0 1px rgba(242, 242, 242, 0.1);
|
||||
}
|
||||
|
||||
#MyExpander spinbutton {
|
||||
margin: 0.16667em 0;
|
||||
padding: 0;
|
||||
min-height: 1.35em;
|
||||
min-height: 1.33334em;
|
||||
min-width: 0;
|
||||
border-top-left-radius: 1.83333em;
|
||||
border-bottom-left-radius: 1.83333em;
|
||||
border-top-left-radius: 1.83334em;
|
||||
border-bottom-left-radius: 1.83334em;
|
||||
background-color: shade(@bg-grey, 1.33);
|
||||
border: 1px solid @bg-button-border;
|
||||
color: @text-tbEntry;
|
||||
box-shadow: inset 1px 1px rgba(0, 0, 0, .12), 0 1px rgba(255 , 255, 255, 0.12);
|
||||
box-shadow: inset 1px 1px rgba(0, 0, 0, .12), 0 1px rgba(255, 255, 255, 0.12);
|
||||
}
|
||||
#MyExpander button + label + spinbutton {
|
||||
margin: 0.29em 0; /* Needed for Reset & and Auto button height*/
|
||||
margin: 0.25em 0; /* Needed for Reset & and Auto button height*/
|
||||
}
|
||||
#MyExpander checkbutton + label + spinbutton {
|
||||
margin: 0.41667em 0; /* Needed for Reset & and Auto checkbox button height*/
|
||||
margin: 0.33334em 0; /* Needed for Reset & and Auto checkbox button height*/
|
||||
}
|
||||
|
||||
#MyExpander image + spinbutton {
|
||||
@ -1742,7 +1741,7 @@ spinbutton button {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
min-height: 0;
|
||||
min-width: 1.33333em;
|
||||
min-width: 1.33334em;
|
||||
background-image: none;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
@ -1752,7 +1751,7 @@ spinbutton button {
|
||||
}
|
||||
#MyExpander spinbutton entry,
|
||||
spinbutton entry {
|
||||
padding: 0 0.33333em;
|
||||
padding: 0 0.33334em;
|
||||
margin: 0;
|
||||
min-height: 0;
|
||||
min-width: 0;
|
||||
@ -1761,7 +1760,7 @@ spinbutton entry {
|
||||
background-color: transparent;
|
||||
}
|
||||
#MyExpander spinbutton entry {
|
||||
padding: 0 0.33333em 0 0.83333em;
|
||||
padding: 0 0.33334em 0 0.83334em;
|
||||
}
|
||||
|
||||
#BatchQueueButtonsMainContainer spinbutton button:hover,
|
||||
@ -1824,7 +1823,7 @@ entry:focus > selection {
|
||||
border: none;
|
||||
padding: 0;
|
||||
box-shadow: 0 0.25em 0.75em 1px rgba(0, 0, 0, 0.5), 0 0 0 1px @bg-dark-grey;
|
||||
margin: 0.83333em;
|
||||
margin: 0.83334em;
|
||||
}
|
||||
headerbar {
|
||||
background-color: shade(@winHeaderbar,1.12);
|
||||
@ -1833,7 +1832,7 @@ headerbar {
|
||||
border-bottom: 1px solid @bg-dark-grey;
|
||||
border-radius: 0.41667em 0.41667em 0 0;
|
||||
min-height: 2.16667em;
|
||||
padding: 0.08333em 0.41667em 0;
|
||||
padding: 0.08334em 0.41667em 0;
|
||||
margin: 0;
|
||||
}
|
||||
messagedialog headerbar {
|
||||
|
@ -2,7 +2,7 @@
|
||||
This file is part of RawTherapee.
|
||||
|
||||
Copyright (c) 2016-2017 TooWaBoo
|
||||
Version 2.40 - requires RT 5.0
|
||||
Version 2.42 - requires RT 5.0
|
||||
|
||||
RawTherapee is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -69,7 +69,6 @@
|
||||
outline-style: none; /* removes the ugly dashed focus line */
|
||||
border-image: none;
|
||||
transition: none;
|
||||
/* -gtk-dpi: 120; */
|
||||
}
|
||||
|
||||
*:disabled {
|
||||
@ -77,10 +76,10 @@
|
||||
}
|
||||
|
||||
#ToolPanelNotebook {
|
||||
min-width: 23em
|
||||
min-width: 23em;
|
||||
}
|
||||
#HistoryPanel {
|
||||
min-width: 17.83333em
|
||||
min-width: 17.83334em;
|
||||
}
|
||||
|
||||
window.background {
|
||||
@ -107,7 +106,7 @@ messagedialog {
|
||||
tooltip {
|
||||
background-color: @bg-tooltip;
|
||||
border: 1px solid @border-tooltip;
|
||||
border-radius: 0.33333em;
|
||||
border-radius: 0.33334em;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
box-shadow: none;
|
||||
@ -205,7 +204,7 @@ dialog frame > label {
|
||||
padding: 0.16667em 0.5em;
|
||||
}
|
||||
#BatchQueueButtonsMainContainer frame > border {
|
||||
margin-bottom: 0.8334em;
|
||||
margin-bottom: 0.83334em;
|
||||
}
|
||||
#BatchQueueButtonsMainContainer frame:nth-child(3) > border {
|
||||
padding-left: 0.91667em;
|
||||
@ -232,10 +231,6 @@ textview.view, treeview.view {
|
||||
padding: 0.16667em;
|
||||
margin: 0;
|
||||
}
|
||||
#RightNotebook > stack > :nth-child(3) treeview {
|
||||
border: 1px solid @bg-dark-grey;
|
||||
border-bottom: none;
|
||||
}
|
||||
textview:hover, treeview:hover {
|
||||
background-color: @bg-list-hover;
|
||||
}
|
||||
@ -245,8 +240,13 @@ textview:selected, treeview:selected {
|
||||
border-top-color: transparent;
|
||||
}
|
||||
|
||||
#RightNotebook > stack > :nth-child(3) treeview {
|
||||
border: 1px solid @bg-dark-grey;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
#PlacesPaned > :nth-child(1) treeview {
|
||||
padding: 0.0834em 0 0.0834em 0.5em;
|
||||
padding: 0.08334em 0 0.08334em 0.5em;
|
||||
-gtk-icon-style: symbolic;
|
||||
}
|
||||
|
||||
@ -257,7 +257,7 @@ textview:selected, treeview:selected {
|
||||
margin-top: 1.75em;
|
||||
}
|
||||
#HistoryPanel > label {
|
||||
margin: 0 0 -1.3334em 0;
|
||||
margin: 0 0 -1.33334em 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
@ -285,7 +285,7 @@ textview:selected, treeview:selected {
|
||||
|
||||
/*Corrects the space for the snapshot view of the paned separator*/
|
||||
#Snapshots {
|
||||
margin-top: -0.3334em;
|
||||
margin-top: -0.33334em;
|
||||
}
|
||||
/**/
|
||||
|
||||
@ -381,7 +381,7 @@ filechooser list row:selected {
|
||||
border-radius: 0;
|
||||
}
|
||||
#fullButton {
|
||||
padding: 0.47em 0.41667em 0.58333em;
|
||||
padding: 0.47em 0.41667em 0.58334em;
|
||||
}
|
||||
#EditorLeftPaned #fullButton,
|
||||
#EditorLeftPaned #histButton {
|
||||
@ -433,7 +433,7 @@ paned.vertical > separator {
|
||||
dialog paned.horizontal > separator {
|
||||
background-color: @bg-grey;
|
||||
border-color: @bg-grey;
|
||||
min-width: 0.33333em;
|
||||
min-width: 0.33334em;
|
||||
}
|
||||
|
||||
menu separator {
|
||||
@ -451,13 +451,13 @@ menu separator {
|
||||
#IopsPanel separator,
|
||||
#FileBrowser separator {
|
||||
background-color: shade(@bg-light-grey,.75);
|
||||
margin-top: 0.33333em;
|
||||
margin-bottom: 0.33333em;
|
||||
margin-top: 0.33334em;
|
||||
margin-bottom: 0.33334em;
|
||||
}
|
||||
|
||||
#MyExpander separator {
|
||||
background-color: shade(@bg-grey,.7);
|
||||
margin: 0.33333em 0.66667em;
|
||||
margin: 0.33334em 0.66667em;
|
||||
}
|
||||
|
||||
#PlacesPaned .view.separator {
|
||||
@ -474,7 +474,7 @@ menu separator {
|
||||
}
|
||||
|
||||
#PartialPaste separator.vertical {
|
||||
margin: 0 0.33333em;
|
||||
margin: 0 0.33334em;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
@ -498,7 +498,7 @@ menu separator {
|
||||
|
||||
/*** Scrollbar *********************************************************************************/
|
||||
scrollbar {
|
||||
background-color: rgba(0,0,0,.45);
|
||||
background-color: rgba(0,0,0,.40);
|
||||
border: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
@ -542,7 +542,7 @@ scrollbar.horizontal.hovering.fine-tune slider {
|
||||
scrollbar.horizontal.overlay-indicator:not(.hovering) slider {
|
||||
min-width: 2em;
|
||||
min-height: 0.25em;
|
||||
border-width: 0.0834em;
|
||||
border-width: 0.08334em;
|
||||
border-radius: 0.25em;
|
||||
margin: 0 0.16667em;
|
||||
}
|
||||
@ -562,7 +562,7 @@ scrollbar.vertical.hovering.fine-tune slider {
|
||||
scrollbar.vertical.overlay-indicator:not(.hovering) slider {
|
||||
min-width: 0.25em;
|
||||
min-height: 2em;
|
||||
border-width: 0.0834em;
|
||||
border-width: 0.08334em;
|
||||
border-radius: 0.5em;
|
||||
margin: 0.16667em 0;
|
||||
}
|
||||
@ -573,11 +573,8 @@ scrollbar slider:hover {
|
||||
}
|
||||
|
||||
/* Scrollbar stuck workaround */
|
||||
scrollbar:not(.overlay-indicator).horizontal:hover slider {
|
||||
min-width: calc(2em - 0.0001px);
|
||||
}
|
||||
scrollbar:not(.overlay-indicator).vertical:hover slider {
|
||||
min-height: calc(2em - 0.0001px);
|
||||
scrollbar:not(.overlay-indicator):hover {
|
||||
min-width: 1px;
|
||||
}
|
||||
|
||||
/*** end ***************************************************************************************/
|
||||
@ -585,7 +582,7 @@ scrollbar:not(.overlay-indicator).vertical:hover slider {
|
||||
/*** Scale**************************************************************************************/
|
||||
scale {
|
||||
padding: 0;
|
||||
min-height: 1.83333em;
|
||||
min-height: 1.83334em;
|
||||
margin: 0 0.25em;
|
||||
}
|
||||
|
||||
@ -593,8 +590,8 @@ scale slider {
|
||||
/* Slider size is min-width x min-height; margin have to be half of those values, but negative */
|
||||
min-width: 1em;
|
||||
min-height: 1em;
|
||||
margin: calc(-0.3334em - 1px);
|
||||
border-radius: 0.83333em;
|
||||
margin: calc(-0.33334em - 1px);
|
||||
border-radius: 0.83334em;
|
||||
background-image: linear-gradient(to bottom, shade (@accent-color4,1.15), shade (@accent-color4,.85));
|
||||
border: 1px solid @bg-dark-grey;
|
||||
box-shadow: none;
|
||||
@ -637,12 +634,10 @@ scale:disabled trough {
|
||||
/*** Progressbar *******************************************************************************/
|
||||
progressbar.vertical {
|
||||
min-width: 0;
|
||||
margin-right: 0.58333em;
|
||||
min-height: 9em;
|
||||
}
|
||||
progressbar.vertical text {
|
||||
color: transparent;
|
||||
margin-right: -0.83333em;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
progressbar.vertical trough {
|
||||
@ -663,7 +658,7 @@ progressbar.horizontal trough {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
border-radius: 0.5em;
|
||||
margin-top: 0.58333em;
|
||||
margin-top: 0.58334em;
|
||||
}
|
||||
progressbar.horizontal trough progress {
|
||||
min-height: 0.41667em;
|
||||
@ -716,25 +711,25 @@ notebook tabs {
|
||||
notebook header tab {
|
||||
background-color: transparent;
|
||||
margin: 0.41667em 0.25em;
|
||||
padding: 0 0.3334em;
|
||||
padding: 0 0.33334em;
|
||||
}
|
||||
notebook header.left tab {
|
||||
margin: 0.25em 0.41667em;
|
||||
padding: 0.3334em 0;
|
||||
padding: 0.33334em 0;
|
||||
}
|
||||
notebook header tab > grid > image {
|
||||
min-height: 2.33333em;
|
||||
min-height: 2.33334em;
|
||||
min-width: 0;
|
||||
padding: 0 0.16667em 0 0;
|
||||
margin: 0;
|
||||
}
|
||||
notebook header.left tab > grid > image {
|
||||
min-height: 0;
|
||||
min-width: 2.33333em;
|
||||
min-width: 2.33334em;
|
||||
padding: 0.16667em 0 0;
|
||||
}
|
||||
notebook header tab label {
|
||||
margin: 0.33333em;
|
||||
margin: 0.33334em;
|
||||
}
|
||||
notebook header tab:hover label {
|
||||
color: @headline-hl;
|
||||
@ -747,7 +742,7 @@ notebook header.left tab:checked {
|
||||
}
|
||||
notebook > header > tabs > arrow {
|
||||
background-color: transparent;
|
||||
border-radius: 0.16667em;
|
||||
border-radius: 0.2em;
|
||||
min-width: 0;
|
||||
min-height: 0;
|
||||
padding: 0 0.16667em;
|
||||
@ -776,7 +771,7 @@ dialog notebook stack {
|
||||
padding: 0.41667em;
|
||||
}
|
||||
#MainNotebook > stack > :nth-child(2) > :nth-child(2) {
|
||||
margin-bottom: 0.3334em;
|
||||
margin-bottom: 0.33334em;
|
||||
}
|
||||
|
||||
|
||||
@ -784,17 +779,17 @@ dialog notebook stack {
|
||||
dialog.csd #PrefNotebook > header,
|
||||
dialog.csd #AboutNotebook > header,
|
||||
window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
border-top: 0.083333em solid rgba(200,200,200,.18);
|
||||
border-top: 0.083334em solid rgba(200,200,200,.18);
|
||||
}
|
||||
/**/
|
||||
|
||||
#ToolPanelNotebook > header tabs {
|
||||
margin-bottom: 0.33333em;
|
||||
margin-bottom: 0.33334em;
|
||||
}
|
||||
|
||||
#ToolPanelNotebook > header tab image{
|
||||
min-height: 2.5em;
|
||||
min-width: 2em;
|
||||
min-width: calc(1.66667em + 6px);
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
@ -813,7 +808,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
}
|
||||
|
||||
#PrefNotebook header {
|
||||
margin: -0.66667em -0.66667em 0.3334em;
|
||||
margin: -0.66667em -0.66667em 0.33334em;
|
||||
}
|
||||
#AboutNotebook header {
|
||||
margin: -0.66667em -0.66667em 0.66667em;
|
||||
@ -827,14 +822,15 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
|
||||
#MetaPanelNotebook header {
|
||||
background-color: @bg-grey;
|
||||
padding: 0.33333em;
|
||||
padding: 0.33334em;
|
||||
margin: 0 0.5em 0;
|
||||
}
|
||||
#MetaPanelNotebook > header > tabs {
|
||||
background-color: @bg-dark-grey;
|
||||
padding-left: 0.33334em;
|
||||
}
|
||||
#MetaPanelNotebook > header > tab {
|
||||
background-color: @bg-dark-grey;
|
||||
#MetaPanelNotebook > header tab label{
|
||||
margin: 0.08334em;
|
||||
}
|
||||
|
||||
#MetaPanelNotebook > stack > box {
|
||||
@ -842,11 +838,11 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
background-color: @bg-grey;
|
||||
border-radius: 0;
|
||||
border-top-style: none;
|
||||
padding: 0 0.33333em 0.25em;
|
||||
padding: 0 0.33334em 0.25em;
|
||||
margin: 0 0.5em -0.5em;
|
||||
}
|
||||
#MetaPanelNotebook > stack > box:nth-child(1) > scrolledwindow {
|
||||
margin: 0 0 0.33333em;
|
||||
margin: 0 0 0.33334em;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
@ -862,10 +858,10 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
min-height: 1.66667em;
|
||||
min-width: 0.83333em;
|
||||
min-width: 0.83334em;
|
||||
}
|
||||
#MetaPanelNotebook entry {
|
||||
padding: 0 0.33333em;
|
||||
padding: 0 0.33334em;
|
||||
background-color: @bg-dark-grey;
|
||||
margin: 0;
|
||||
border-radius: 0;
|
||||
@ -883,7 +879,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
}
|
||||
#MetaPanelNotebook textview.view {
|
||||
background-color: @bg-dark-grey;
|
||||
padding: 0.08333em 0.33333em;
|
||||
padding: 0.08334em 0.33334em;
|
||||
margin: 0;
|
||||
}
|
||||
#MetaPanelNotebook text {
|
||||
@ -904,7 +900,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
}
|
||||
|
||||
#MetaPanelNotebook label {
|
||||
padding: 0.0834em 0;
|
||||
padding: 0.08334em 0;
|
||||
}
|
||||
|
||||
/*** end ***************************************************************************************/
|
||||
@ -934,7 +930,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
|
||||
#ToolBarPanelFileBrowser > box > button,
|
||||
#ToolBarPanelFileBrowser > button {
|
||||
margin: 0 0.0834em;
|
||||
margin: 0 0.08334em;
|
||||
}
|
||||
#ToolBarPanelFileBrowser > box > box > button {
|
||||
min-height: 0.91667em;
|
||||
@ -952,7 +948,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
min-height: 1.66667em;
|
||||
min-width: 1.66667em;
|
||||
margin: 0 0 0 -1.66667em;
|
||||
border-radius: 0 0.16667em 0.16667em 0;
|
||||
border-radius: 0 0.2em 0.2em 0;
|
||||
border: 1px solid transparent;
|
||||
padding: 0;
|
||||
}
|
||||
@ -961,11 +957,11 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
min-height: 1.66667em;
|
||||
min-width: 12em;
|
||||
margin: 0 -2px 0 0;
|
||||
padding: 0 2em 0 0.33333em;
|
||||
padding: 0 2em 0 0.33334em;
|
||||
}
|
||||
#ToolBarPanelFileBrowser label,
|
||||
#FileBrowser label {
|
||||
margin: 0 0.33333em 0 0.5em;
|
||||
margin: 0 0.33334em 0 0.5em;
|
||||
}
|
||||
/*** end ***************************************************************************************/
|
||||
|
||||
@ -1005,8 +1001,8 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
#BeforeAfterContainer button {
|
||||
min-height: 1.66667em;
|
||||
min-width: 1.66667em;
|
||||
margin: 0.25em 0 0.3334em;
|
||||
padding: 0 0 0 0.0834em;
|
||||
margin: 0.25em 0 0.33334em;
|
||||
padding: 0 0 0 0.08334em;
|
||||
}
|
||||
/**/
|
||||
|
||||
@ -1016,7 +1012,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
min-height: 0;
|
||||
}
|
||||
#EditorTopPanel button {
|
||||
margin: 0 0.0834em;
|
||||
margin: 0 0.08334em;
|
||||
min-height: 2.16667em;
|
||||
min-width: 2.16667em;
|
||||
}
|
||||
@ -1027,14 +1023,14 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
|
||||
#EditorTopPanel > box > button.image-button:not(:nth-child(6)) {
|
||||
min-width: 0;
|
||||
padding-left: 0.33333em;
|
||||
padding-right: 0.33333em;
|
||||
padding-left: 0.33334em;
|
||||
padding-right: 0.33334em;
|
||||
}
|
||||
#EditorTopPanel > box > button.image-button:nth-child(6) {
|
||||
-gtk-icon-shadow: none;
|
||||
}
|
||||
#EditorTopPanel > box > box > button {
|
||||
min-height: 0.64em;
|
||||
min-height: 0.625em;
|
||||
min-width: 0;
|
||||
margin: 0 0.16667em;
|
||||
padding: 0 0.16667em;
|
||||
@ -1052,7 +1048,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
#EditorTopPanel > box > box > button:checked {
|
||||
background-color: transparent;
|
||||
background-image: none;
|
||||
border: 1px solid @bg-dark-grey;
|
||||
border: 1px solid @bg-button-border;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
@ -1065,8 +1061,8 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
padding: 0 2px 0 3px;
|
||||
}
|
||||
#EditorZoomPanel button {
|
||||
margin-left: 0.0834em;
|
||||
margin-right: 0.0834em;
|
||||
margin-left: 0.08334em;
|
||||
margin-right: 0.08334em;
|
||||
}
|
||||
/*** end ***************************************************************************************/
|
||||
|
||||
@ -1126,7 +1122,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
|
||||
|
||||
#MyExpanderTitle > box {
|
||||
margin: 0;
|
||||
padding: 0.33333em 0;
|
||||
padding: 0.33334em 0;
|
||||
}
|
||||
|
||||
#MyExpanderTitle label {
|
||||
@ -1167,7 +1163,7 @@ menu > .bottom:hover {
|
||||
}
|
||||
|
||||
menuitem {
|
||||
padding: 0 0.33333em;
|
||||
padding: 0 0.33334em;
|
||||
margin: 1px;
|
||||
min-height: 2em;
|
||||
}
|
||||
@ -1182,7 +1178,7 @@ menuitem:hover > * {
|
||||
menu image {
|
||||
min-height: 2em;
|
||||
padding: 0;
|
||||
margin: 0 0.33333em 0 0;
|
||||
margin: 0 0.33334em 0 0;
|
||||
}
|
||||
|
||||
/*** Selection popup list (used in filechooser) ***/
|
||||
@ -1239,7 +1235,7 @@ button {
|
||||
min-width: 2.16667em;
|
||||
margin: 0;
|
||||
padding: 0; /* x */
|
||||
border-radius: 0.16667em;
|
||||
border-radius: 0.2em;
|
||||
border: 1px solid @bg-button-border;
|
||||
background-color: transparent;
|
||||
box-shadow: inset 0 1px rgba(242, 242, 242, 0.1);
|
||||
@ -1262,19 +1258,19 @@ button.flat {
|
||||
/* Resetbutton Queue & Save as*/
|
||||
dialog scale + button.flat,
|
||||
scale + button.flat {
|
||||
min-height: 1.33333em;
|
||||
min-height: 1.33334em;
|
||||
min-width: 1.25em;
|
||||
margin: 0.25em 0 0.16667em 0.16667em;
|
||||
padding: 0 0 0 0.0834em;
|
||||
padding: 0 0 0 0.08334em;
|
||||
-gtk-icon-shadow: none;
|
||||
}
|
||||
|
||||
/* Resetbutton */
|
||||
#MyExpander button.flat {
|
||||
min-height: 1.33333em;
|
||||
min-height: 1.33334em;
|
||||
min-width: 1.25em;
|
||||
margin: 0.08333em 0 0.08333em 0.16667em;
|
||||
padding: 0 0 0 0.0834em;
|
||||
margin: 0.08334em 0 0.08334em 0.16667em;
|
||||
padding: 0 0 0 0.08334em;
|
||||
-gtk-icon-shadow: none;
|
||||
}
|
||||
|
||||
@ -1286,7 +1282,7 @@ scale + button.flat {
|
||||
}
|
||||
#MyExpander spinbutton + button.flat {
|
||||
margin: 0 0 0 0.16667em;
|
||||
padding-top: 0.08333em;
|
||||
padding-top: 0.08334em;
|
||||
}
|
||||
/**/
|
||||
|
||||
@ -1295,7 +1291,7 @@ scale + button.flat {
|
||||
#MyExpander button.flat:first-child {
|
||||
min-height: 2.16667em;
|
||||
min-width: 2.16667em;
|
||||
margin: 0.08333em;
|
||||
margin: 0.08334em;
|
||||
padding: 0;
|
||||
}
|
||||
/**/
|
||||
@ -1304,7 +1300,7 @@ scale + button.flat {
|
||||
#FileBrowser entry + button:hover,
|
||||
button.flat:hover,
|
||||
button:hover {
|
||||
border: 1px solid @bg-button-border;
|
||||
border-color: @bg-button-border;
|
||||
box-shadow: inset 0 1px rgba(242, 242, 242, 0.1);
|
||||
background-image: linear-gradient(to bottom, rgba(100,100,100,.3), rgba(30,30,30,.3));
|
||||
background-color: @bg-button-hover;
|
||||
@ -1316,8 +1312,8 @@ button.flat:active,
|
||||
button.flat:checked,
|
||||
button:active,
|
||||
button:checked {
|
||||
border-color: black;
|
||||
box-shadow: inset 0 1px rgba(242, 242, 242, 0.1);
|
||||
border-color: @bg-button-border;
|
||||
box-shadow: inset 0 1px rgba(242, 242, 242, 0.08);
|
||||
background-image: linear-gradient(to bottom, rgba(100,100,100,.3), rgba(30,30,30,.3));
|
||||
background-color: @bg-button-active;
|
||||
}
|
||||
@ -1333,7 +1329,7 @@ button.MiddleH {
|
||||
/* Applies special styles in main notebook */
|
||||
#ProfilePanel {
|
||||
margin-bottom: -2px;
|
||||
padding-bottom: 0.41667em
|
||||
padding-bottom: 0.41667em;
|
||||
}
|
||||
#ProfilePanel combobox {
|
||||
margin-left: 0.16667em;
|
||||
@ -1359,7 +1355,7 @@ combobox .combo,
|
||||
dialog combobox .combo,
|
||||
#ToolPanelNotebook combobox .combo,
|
||||
#BatchQueueButtonsMainContainer combobox .combo {
|
||||
padding: 0 0.20833em;
|
||||
padding: 0 0.208334em;
|
||||
}
|
||||
/**/
|
||||
|
||||
@ -1377,7 +1373,7 @@ dialog combobox .combo,
|
||||
#MyExpander label + * > button:not(.flat).Left,
|
||||
#MyExpander label + combobox:not(:first-child):not(:only-child),
|
||||
#MyExpander label + button:not(.flat):not(spinbutton) {
|
||||
margin-left: 0.33333em;
|
||||
margin-left: 0.33334em;
|
||||
}
|
||||
|
||||
/* Arrow toggle combo button */
|
||||
@ -1385,8 +1381,8 @@ dialog combobox .combo,
|
||||
#MyExpander button:not(.flat).Left + button:not(.flat).Right {
|
||||
border-left: none;
|
||||
margin-left: 0;
|
||||
padding-left: 0.33333em;
|
||||
padding-right: 0.33333em;
|
||||
padding-left: 0.33334em;
|
||||
padding-right: 0.33334em;
|
||||
border-top-left-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
}
|
||||
@ -1394,7 +1390,7 @@ dialog combobox .combo,
|
||||
#MyExpander button:not(.flat).Left {
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
min-width: 2.33333em;
|
||||
min-width: 2.16667em;
|
||||
}
|
||||
/**/
|
||||
|
||||
@ -1402,8 +1398,8 @@ dialog combobox .combo,
|
||||
#PrefNotebook stack > box:nth-child(4) combobox,
|
||||
#MyExpander button.flat,
|
||||
#MyExpander button {
|
||||
margin-top: 0.115em;
|
||||
margin-bottom: 0.115em;
|
||||
margin-top: 0.08334em;
|
||||
margin-bottom: 0.08334em;
|
||||
}
|
||||
/**/
|
||||
#MyExpander button.text-button label {
|
||||
@ -1429,11 +1425,11 @@ button.color {
|
||||
/* Save, Cancel, OK ... buttons */
|
||||
.dialog-action-area button {
|
||||
min-height: 2.16667em;
|
||||
margin-top: 0.33333em;
|
||||
margin-top: 0.33334em;
|
||||
}
|
||||
messagedialog .dialog-action-area button {
|
||||
margin: 0 0.66667em 0.66667em 0.66667em;
|
||||
min-height: 1.83333em;
|
||||
min-height: 1.83334em;
|
||||
}
|
||||
messagedialog .dialog-action-area button:not(:only-child):nth-child(1) {
|
||||
margin-right: 0.25em;
|
||||
@ -1457,7 +1453,8 @@ window .view button {
|
||||
background-image: none;
|
||||
box-shadow: none;
|
||||
min-height: 2em;
|
||||
padding: 0 0.33333em;
|
||||
min-width: 1.33334em;
|
||||
padding: 0 0.33334em;
|
||||
}
|
||||
dialog .view button.text-button label,
|
||||
window .view button.text-button label {
|
||||
@ -1497,22 +1494,22 @@ window .view header button,
|
||||
padding: 0;
|
||||
}
|
||||
.path-bar button:first-child {
|
||||
border-top-left-radius: 0.16667em;
|
||||
border-bottom-left-radius: 0.16667em;
|
||||
border-top-left-radius: 0.2em;
|
||||
border-bottom-left-radius: 0.2em;
|
||||
min-width: 2em;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.path-bar button:last-child {
|
||||
border-top-right-radius: 0.16667em;
|
||||
border-bottom-right-radius: 0.16667em;
|
||||
border-top-right-radius: 0.2em;
|
||||
border-bottom-right-radius: 0.2em;
|
||||
min-width: 2em;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.path-bar button label {
|
||||
margin: 0;
|
||||
padding: 0 0.33333em;
|
||||
padding: 0 0.33334em;
|
||||
}
|
||||
/**/
|
||||
|
||||
@ -1560,13 +1557,13 @@ headerbar button.titlebutton image {
|
||||
margin: 0;
|
||||
}
|
||||
headerbar button.titlebutton {
|
||||
margin: 0 0 0 0.33333em;
|
||||
margin: 0 0 0 0.33334em;
|
||||
background-image: none;
|
||||
border: 1px solid transparent;
|
||||
background-color: transparent;
|
||||
box-shadow: none;
|
||||
min-width: 1.5em;
|
||||
min-height: 1.5em;
|
||||
min-width: 1.55em;
|
||||
min-height: 1.55em;
|
||||
padding: 0;
|
||||
}
|
||||
messagedialog headerbar button.titlebutton {
|
||||
@ -1577,7 +1574,7 @@ messagedialog headerbar button.titlebutton {
|
||||
|
||||
#MainNotebook tab #CloseButton {
|
||||
padding: 0;
|
||||
margin: 0.3334em -3px 0.3334em 0.0834em;
|
||||
margin: 0.33334em -3px 0.33334em 0.08334em;
|
||||
min-width: 1.5em;
|
||||
min-height: 1.5em;
|
||||
}
|
||||
@ -1585,26 +1582,26 @@ messagedialog headerbar button.titlebutton {
|
||||
#MainNotebook tab #CloseButton:hover,
|
||||
headerbar button.titlebutton:hover{
|
||||
border-color: rgba(0,0,0,.8);
|
||||
box-shadow: inset 0 1px rgba(242, 242, 242, 0.1);
|
||||
box-shadow: inset 0 1px rgba(242, 242, 242, 0.11);
|
||||
background-image: linear-gradient(to bottom, rgba(100,100,100,.3), rgba(30,30,30,.3));
|
||||
background-color: rgba(128, 128, 128,.15);
|
||||
background-color: rgba(128, 128, 128,.20);
|
||||
}
|
||||
#MainNotebook > header > grid > button:active,
|
||||
headerbar button.titlebutton:active{
|
||||
border-color: rgba(0,0,0,.8);
|
||||
box-shadow: inset 0 1px rgba(242, 242, 242, 0.1);
|
||||
box-shadow: inset 0 1px rgba(242, 242, 242, 0.15);
|
||||
background-image: linear-gradient(to bottom, rgba(100,100,100,.3), rgba(30,30,30,.3));
|
||||
background-color: rgba(128, 128, 128,.30);
|
||||
background-color: rgba(128, 128, 128,.40);
|
||||
}
|
||||
#MainNotebook tab #CloseButton:hover,
|
||||
headerbar button.titlebutton.close:hover{
|
||||
border-color: rgba(0,0,0,.9);
|
||||
border-color: rgba(0,0,0,.8);
|
||||
background-image: linear-gradient(to bottom, rgb(180,0,0), rgb(160,0,0) 40%, rgb(130,0,0));
|
||||
box-shadow: inset 0 1px rgba(242, 242, 242, 0.3);
|
||||
box-shadow: inset 0 1px rgba(242, 242, 242, 0.32);
|
||||
}
|
||||
#MainNotebook tab #CloseButton:active,
|
||||
headerbar button.titlebutton.close:active{
|
||||
border-color: rgba(0,0,0,.9);
|
||||
border-color: rgba(0,0,0,.8);
|
||||
background-image: linear-gradient(to bottom, rgb(215,0,0), rgb(185,0,0) 40%, rgb(150,0,0));
|
||||
box-shadow: inset 0 1px rgba(242, 242, 242, 0.4);
|
||||
}
|
||||
@ -1616,17 +1613,17 @@ headerbar button.titlebutton.close:active{
|
||||
checkbox {
|
||||
padding:0;
|
||||
margin:0;
|
||||
min-height: 1.16667em;
|
||||
min-height: 2em;
|
||||
}
|
||||
checkbutton,
|
||||
radiobutton {
|
||||
padding: 0.41667em 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
min-height: 1.16667em;
|
||||
min-height: 2em;
|
||||
}
|
||||
check,
|
||||
radio {
|
||||
border: calc(0.08334em + 0.18px) solid shade(@text-color, .9);
|
||||
border: calc(0.083334em + 0.18px) solid shade(@text-color, .9);
|
||||
background-image: none;
|
||||
background-color: transparent;
|
||||
margin: 0;
|
||||
@ -1667,24 +1664,26 @@ frame > checkbutton check{
|
||||
}
|
||||
|
||||
#PartialPaste checkbutton:not(#PartialPasteHeader) {
|
||||
padding: 0.0834em 0;
|
||||
min-height: 1.4em;
|
||||
margin-left: 1.16667em;
|
||||
}
|
||||
#PartialPasteHeader {
|
||||
padding: 0.0834em 0;
|
||||
min-height: 1.4em;
|
||||
margin-left: 0.5em;
|
||||
}
|
||||
#PrefNotebook checkbutton {
|
||||
padding: 0;
|
||||
min-height: 1.16667em;
|
||||
}
|
||||
#PrefNotebook radiobutton,
|
||||
#PrefNotebook stack > box:nth-child(3) checkbutton,
|
||||
#PrefNotebook stack > box:nth-child(4) checkbutton {
|
||||
padding: 0.25em 0;
|
||||
min-height: 2em;
|
||||
}
|
||||
#PrefNotebook radiobutton {
|
||||
min-height: 2em;
|
||||
}
|
||||
|
||||
#MyExpander button + checkbutton:last-child {
|
||||
margin-left: 0.33333em;
|
||||
margin-left: 0.33334em;
|
||||
}
|
||||
|
||||
/*** end ***************************************************************************************/
|
||||
@ -1693,11 +1692,11 @@ frame > checkbutton check{
|
||||
#MyExpander entry,
|
||||
entry {
|
||||
margin: 0;
|
||||
padding: 0 0.33333em;
|
||||
padding: 0 0.33334em;
|
||||
min-height: 1.66667em;
|
||||
min-width: 0;
|
||||
border-radius: 0.16667em;
|
||||
box-shadow: inset 1px 1px rgba(0, 0, 0, 0.08), 0 1px rgba(242 , 242, 242, 0.1);
|
||||
border-radius: 0.2em;
|
||||
box-shadow: inset 1px 1px rgba(0, 0, 0, 0.08), 0 1px rgba(242, 242, 242, 0.1);
|
||||
border: 1px solid @bg-entry-border;
|
||||
background-color: @bg-scale-entry;
|
||||
}
|
||||
@ -1707,29 +1706,29 @@ spinbutton {
|
||||
padding: 0;
|
||||
min-height: 1.66667em;
|
||||
min-width: 0;
|
||||
border-radius: 0.16667em;
|
||||
border-radius: 0.2em;
|
||||
background-color: @bg-scale-entry;
|
||||
border: 1px solid @bg-entry-border;
|
||||
box-shadow: inset 1px 1px rgba(0, 0, 0, 0.08), 0 1px rgba(242 , 242, 242, 0.1);
|
||||
box-shadow: inset 1px 1px rgba(0, 0, 0, 0.08), 0 1px rgba(242, 242, 242, 0.1);
|
||||
}
|
||||
|
||||
#MyExpander spinbutton {
|
||||
margin: 0.16667em 0;
|
||||
padding: 0;
|
||||
min-height: 1.35em;
|
||||
min-height: 1.33334em;
|
||||
min-width: 0;
|
||||
border-top-left-radius: 1.83333em;
|
||||
border-bottom-left-radius: 1.83333em;
|
||||
border-top-left-radius: 1.83334em;
|
||||
border-bottom-left-radius: 1.83334em;
|
||||
background-color: shade(@bg-grey, 1.33);
|
||||
border: 1px solid @bg-button-border;
|
||||
color: @text-tbEntry;
|
||||
box-shadow: inset 1px 1px rgba(0, 0, 0, .12), 0 1px rgba(255 , 255, 255, 0.12);
|
||||
box-shadow: inset 1px 1px rgba(0, 0, 0, .12), 0 1px rgba(255, 255, 255, 0.12);
|
||||
}
|
||||
#MyExpander button + label + spinbutton {
|
||||
margin: 0.29em 0; /* Needed for Reset & and Auto button height*/
|
||||
margin: 0.25em 0; /* Needed for Reset & and Auto button height*/
|
||||
}
|
||||
#MyExpander checkbutton + label + spinbutton {
|
||||
margin: 0.41667em 0; /* Needed for Reset & and Auto checkbox button height*/
|
||||
margin: 0.33334em 0; /* Needed for Reset & and Auto checkbox button height*/
|
||||
}
|
||||
|
||||
#MyExpander image + spinbutton {
|
||||
@ -1742,7 +1741,7 @@ spinbutton button {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
min-height: 0;
|
||||
min-width: 1.33333em;
|
||||
min-width: 1.33334em;
|
||||
background-image: none;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
@ -1752,7 +1751,7 @@ spinbutton button {
|
||||
}
|
||||
#MyExpander spinbutton entry,
|
||||
spinbutton entry {
|
||||
padding: 0 0.33333em;
|
||||
padding: 0 0.33334em;
|
||||
margin: 0;
|
||||
min-height: 0;
|
||||
min-width: 0;
|
||||
@ -1761,7 +1760,7 @@ spinbutton entry {
|
||||
background-color: transparent;
|
||||
}
|
||||
#MyExpander spinbutton entry {
|
||||
padding: 0 0.33333em 0 0.83333em;
|
||||
padding: 0 0.33334em 0 0.83334em;
|
||||
}
|
||||
|
||||
#BatchQueueButtonsMainContainer spinbutton button:hover,
|
||||
@ -1824,7 +1823,7 @@ entry:focus > selection {
|
||||
border: none;
|
||||
padding: 0;
|
||||
box-shadow: 0 0.25em 0.75em 1px rgba(0, 0, 0, 0.5), 0 0 0 1px @bg-dark-grey;
|
||||
margin: 0.83333em;
|
||||
margin: 0.83334em;
|
||||
}
|
||||
headerbar {
|
||||
background-color: shade(@winHeaderbar,1.12);
|
||||
@ -1833,7 +1832,7 @@ headerbar {
|
||||
border-bottom: 1px solid @bg-dark-grey;
|
||||
border-radius: 0.41667em 0.41667em 0 0;
|
||||
min-height: 2.16667em;
|
||||
padding: 0.08333em 0.41667em 0;
|
||||
padding: 0.08334em 0.41667em 0;
|
||||
margin: 0;
|
||||
}
|
||||
messagedialog headerbar {
|
||||
|
881
rtdata/themes/TooWaBlue-GTK3-_19.css
Normal file
@ -0,0 +1,881 @@
|
||||
/*
|
||||
This file is part of RawTherapee.
|
||||
|
||||
Copyright (c) 2016 TooWaBoo (v1.19.4)
|
||||
Many thanks to the RawTherapee Developer Team for this great piece of software
|
||||
|
||||
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/>.
|
||||
*/
|
||||
|
||||
/*** Change me *** rgb(red,green,blue) *** allowed values from 0 to 255 for each color ***/
|
||||
|
||||
@define-color accent-color rgb(35,99,166); /*** Highlight/selected color for Tab indicator, List, Dropdown menu, Borders ... ***/
|
||||
@define-color text-hl-color rgb(210,210,210); /*** Highlight/selected text color ***/
|
||||
|
||||
@define-color accent-color2 rgb(35,99,166); /*** Slider, Progressbar, Scrollbar ***/
|
||||
@define-color accent-color4 rgb(35,99,166); /*** Slider knob ***/
|
||||
|
||||
@define-color accent-color3 rgb(35,99,166); /*** Selected thumbnail background color ***/
|
||||
@define-color text-hl-color3 rgb(210,210,210); /*** Selected thumbnail text color ***/
|
||||
|
||||
/*** Change me end ************************************************************************/
|
||||
|
||||
@define-color text-color rgb(180,180,180);
|
||||
@define-color text-hl-color2 rgb(192,192,192);
|
||||
@define-color text-tbEntry rgb(192,192,192);
|
||||
@define-color bg-dark-grey rgb(36,36,36);
|
||||
@define-color bg-grey rgb(70,70,70);
|
||||
@define-color bg-light-grey rgb(88,88,88);
|
||||
@define-color border-color rgba(255,255,255,.25);
|
||||
@define-color bg-list-hover rgba(255,255,255,.065);
|
||||
@define-color bg-scale-entry rgba(0,0,0,.14);
|
||||
@define-color bg-button-border rgba(0,0,0,.48);
|
||||
@define-color bg-button-border-hover rgba(0,0,0,.58);
|
||||
@define-color bg-entry-border rgba(0,0,0,.40);
|
||||
@define-color bg-button-hover rgba(0,0,0,.22);
|
||||
@define-color bg-spin-button-hover rgba(0,0,0,.25);
|
||||
@define-color bg-entry-IPTC @bg-dark-grey;
|
||||
@define-color view-grid-border rgb(64,64,64);
|
||||
|
||||
* {
|
||||
color: @text-color;
|
||||
transition: none;
|
||||
text-shadow: none;
|
||||
icon-shadow: none;
|
||||
box-shadow: none;
|
||||
outline-style: none; /* removes the ugly dotted focus line */
|
||||
border-image: none;
|
||||
-GtkCheckButton-indicator-size: 16;
|
||||
-GtkCheckMenuItem-indicator-size: 16;
|
||||
-GtkCheckButton-indicator-spacing: 2;
|
||||
}
|
||||
|
||||
.undershoot {
|
||||
background-image: none; /* removes the dotted scrollbar line */
|
||||
}
|
||||
GtkWindow {
|
||||
background-color: @bg-light-grey;
|
||||
}
|
||||
GtkDialog {
|
||||
background-color: @bg-grey;
|
||||
-GtkDialog-content-area-spacing: 7;
|
||||
-GtkDialog-action-area-border: 0;
|
||||
-GtkDialog-content-area-border: 8;
|
||||
}
|
||||
|
||||
GtkFontChooser,
|
||||
GtkColorChooser {
|
||||
-GtkDialog-action-area-border: 4;
|
||||
-GtkDialog-content-area-border: 0;
|
||||
}
|
||||
|
||||
.frame {
|
||||
border: none;
|
||||
}
|
||||
#PrefNotebook > .frame {
|
||||
border: 1px solid rgba(0,0,0,.50);
|
||||
border-top: none;
|
||||
}
|
||||
#BatchQueueButtonsMainContainer GtkFrame {
|
||||
padding: 4px 4px 4px 10px;
|
||||
}
|
||||
|
||||
/*** Add space between buttons and image area***/
|
||||
#BeforeAfterContainer GtkFrame {
|
||||
padding: 2px 0 4px;
|
||||
}
|
||||
/*** Add space between before/after image ***/
|
||||
#BeforeAfterContainer GtkContainer:nth-child(1) > GtkContainer:nth-child(2) GtkFrame {
|
||||
padding-right: 14px;
|
||||
}
|
||||
|
||||
/*** Menu bubble box ***/
|
||||
GtkPopover {
|
||||
background-color: @bg-grey;
|
||||
border: 1px solid @accent-color;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.menu {
|
||||
background-color: @bg-dark-grey;
|
||||
border: 1px solid @accent-color;
|
||||
}
|
||||
.menu > .menuitem {
|
||||
padding: 2px 4px;
|
||||
}
|
||||
.menu > .menuitem:hover {
|
||||
background-color: @accent-color;
|
||||
}
|
||||
.menu > .menuitem:hover > * > *,
|
||||
.menu > .menuitem:hover > * {
|
||||
color: @text-hl-color;
|
||||
}
|
||||
|
||||
GtkNotebook {
|
||||
padding: 4px;
|
||||
background-color: @bg-light-grey;
|
||||
}
|
||||
GtkDialog GtkNotebook {
|
||||
padding: 2px 0 0;
|
||||
}
|
||||
#PrefNotebook {
|
||||
padding: 4px 8px;
|
||||
}
|
||||
#RightNotebook {
|
||||
padding: 0 0 0 4px;
|
||||
}
|
||||
|
||||
GtkPaned {
|
||||
-GtkPaned-handle-size: 4px;
|
||||
background-color: transparent;
|
||||
}
|
||||
.pane-separator {
|
||||
background-color: @bg-light-grey;
|
||||
}
|
||||
GtkDialog .pane-separator {
|
||||
background-color: @bg-grey;
|
||||
}
|
||||
|
||||
/*** Separator ***/
|
||||
.separator {
|
||||
color: @bg-light-grey;
|
||||
}
|
||||
GtkDialog .separator {
|
||||
color: @border-color;
|
||||
}
|
||||
#RightNotebook .separator {
|
||||
color: @bg-dark-grey;
|
||||
}
|
||||
/*** Navigator ***/
|
||||
#Navigator .separator {
|
||||
color: @view-grid-border;
|
||||
}
|
||||
/*** end ***/
|
||||
|
||||
/*** Background color image area***/
|
||||
GtkDrawingArea {
|
||||
background-color: @bg-grey;
|
||||
border: 1px solid rgba(0,0,0,.32);
|
||||
}
|
||||
/*** Histogram ***/
|
||||
#HistogramPanel,
|
||||
#HistogramArea {
|
||||
background-color: @bg-dark-grey;
|
||||
border: none;
|
||||
}
|
||||
/*** Histogram RGB-Bar***/
|
||||
#HistogramRGBArea {
|
||||
background-color: rgb(128,128,128);
|
||||
border: none;
|
||||
}
|
||||
/*** Navigator ***/
|
||||
#Navigator GtkDrawingArea {
|
||||
background-color: @bg-dark-grey;
|
||||
border: 1px solid @bg-dark-grey;
|
||||
}
|
||||
#Navigator {
|
||||
background-color: @bg-dark-grey;
|
||||
border-top: 156px solid @bg-light-grey;
|
||||
}
|
||||
|
||||
#RightNotebook GtkDrawingArea {
|
||||
background-color: @bg-dark-grey;
|
||||
}
|
||||
|
||||
/*** Label ***/
|
||||
.label {
|
||||
padding: 0 4px;
|
||||
}
|
||||
/*** Increase space between labels in navigater ***/
|
||||
#Navigator .label {
|
||||
padding: 6px 0 3px;
|
||||
}
|
||||
#Navigator GtkTable .label {
|
||||
padding: 0 0 4px;
|
||||
}
|
||||
/***/
|
||||
GtkDialog .label,
|
||||
#ToolPanelNotebook .label,
|
||||
.notebook tab .label {
|
||||
padding: 0 1px;
|
||||
}
|
||||
.button .label {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/*** Add left and right space between frame and labels ***/
|
||||
.frame > .label,
|
||||
#ToolPanelNotebook .frame > .label {
|
||||
padding: 4px;
|
||||
}
|
||||
#BatchQueueButtonsMainContainer GtkFrame:nth-child(3) > .label{
|
||||
padding: 2px 0px 4px;
|
||||
}
|
||||
|
||||
#MyExpanderTitle .label {
|
||||
padding: 2px 3px;
|
||||
}
|
||||
/*** end ***/
|
||||
|
||||
.tooltip {
|
||||
border-radius: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.tooltip.background {
|
||||
background-color: @bg-dark-grey;
|
||||
border: 1px solid @accent-color;
|
||||
}
|
||||
|
||||
/*** PartialPaste ***/
|
||||
#PartialPaste:nth-child(2) {
|
||||
background-color: @bg-light-grey;
|
||||
border: 1px solid rgba(0,0,0,.50);
|
||||
}
|
||||
#PartialPaste > .frame {
|
||||
padding: 8px 10px;
|
||||
}
|
||||
#PartialPasteHeaderSep {
|
||||
color: rgb(192,192,192);
|
||||
}
|
||||
#PartialPasteHeader .label {
|
||||
color: rgb(213,213,213);
|
||||
}
|
||||
/*** end ***/
|
||||
|
||||
/*** Scrollbar ***/
|
||||
.scrollbar.trough {
|
||||
background-color: rgba(0,0,0,.38);
|
||||
background-image: none;
|
||||
border: none;
|
||||
}
|
||||
.scrollbar.slider:active {
|
||||
background-color: shade(@accent-color2,1.12);
|
||||
}
|
||||
|
||||
/*** end ***/
|
||||
|
||||
/*** Scale & Progressbar ***/
|
||||
.scale {
|
||||
box-shadow: inset 0 1px rgba(255, 255, 255, 0.1), 0 1px rgba(242, 242, 242, 0.1);
|
||||
-GtkRange-trough-border: 6;
|
||||
-GtkScale-slider-length: 15;
|
||||
-GtkRange-slider-width: 15;
|
||||
}
|
||||
.scale.trough,
|
||||
#ToolPanelNotebook .scale.trough {
|
||||
background-color: @bg-scale-entry;
|
||||
border-color: @bg-dark-grey;
|
||||
box-shadow: inset 0 1px rgba(255, 255, 255, 0.1), 0 1px rgba(242, 242, 242, 0.1);
|
||||
}
|
||||
.scale.trough.highlight,
|
||||
#ToolPanelNotebook .scale.trough.highlight {
|
||||
box-shadow: inset 0 1px rgba(255, 255, 255, 0.1), 0 1px rgba(242, 242, 242, 0.1);
|
||||
background-image: none;
|
||||
background-color: @accent-color2;
|
||||
border: 1px solid @bg-dark-grey;
|
||||
color: @text-hl-color2;
|
||||
}
|
||||
.scale.slider,
|
||||
#ToolPanelNotebook .scale.slider {
|
||||
background-image: linear-gradient(to bottom, shade (@accent-color4,1.15), shade (@accent-color4,.85));
|
||||
border: 1px solid shade(@bg-dark-grey, 1.25);
|
||||
box-shadow: none;
|
||||
}
|
||||
.scale.fine-tune {
|
||||
-GtkRange-trough-border: 5;
|
||||
}
|
||||
.scale.scale-has-marks-below {
|
||||
-GtkRange-trough-border: 6;
|
||||
-GtkScale-slider-length: 6;
|
||||
-GtkRange-slider-width: 19;
|
||||
}
|
||||
.scale.slider.scale-has-marks-below {
|
||||
border-radius: 0 0 20px 20px;
|
||||
border: 1px solid @bg-dark-grey;
|
||||
}
|
||||
.scale.fine-tune.scale-has-marks-below {
|
||||
-GtkRange-trough-border: 5;
|
||||
}
|
||||
.scale.slider:hover,
|
||||
#ToolPanelNotebook .scale.slider:hover {
|
||||
background-image: linear-gradient(to bottom, shade (@accent-color4,1.25), shade (@accent-color4,.95));
|
||||
}
|
||||
|
||||
.scale.slider:active,
|
||||
#ToolPanelNotebook .scale.slider:active {
|
||||
background-image: linear-gradient(to bottom, shade (@accent-color4,1.25), shade (@accent-color4,.95));
|
||||
}
|
||||
|
||||
GtkProgressBar {
|
||||
-GtkProgressBar-min-vertical-bar-width: 8;
|
||||
-GtkProgressBar-min-horizontal-bar-height: 8;
|
||||
-GtkProgressBar-yspacing: 4px;
|
||||
border-radius: 10px;
|
||||
box-shadow: inset 0 1px rgba(255, 255, 255, 0.1), 0 1px rgba(242, 242, 242, 0.1);
|
||||
}
|
||||
.progressbar {
|
||||
background-image: none;
|
||||
background-color: @accent-color2;
|
||||
border-color: @bg-dark-grey;
|
||||
}
|
||||
GtkProgressBar.trough {
|
||||
background-image: none;
|
||||
background-color: @bg-scale-entry;
|
||||
}
|
||||
#MainNotebook > GtkGrid GtkProgressBar {
|
||||
box-shadow: none;
|
||||
}
|
||||
#MainNotebook > GtkGrid GtkProgressBar.trough {
|
||||
background-image: none;
|
||||
background-color: @bg-dark-grey;
|
||||
border-color: @bg-dark-grey;
|
||||
}
|
||||
/*** end ***/
|
||||
|
||||
/*** Load/Save ***/
|
||||
GtkFileChooserWidget {
|
||||
background-color: @bg-grey;
|
||||
}
|
||||
GtkFileChooserWidget > GtkBox {
|
||||
border-bottom-color: @bg-dark-grey;
|
||||
}
|
||||
GtkFileChooserWidget GtkBox {
|
||||
background-color: transparent;
|
||||
}
|
||||
GtkFileChooserWidget GtkListBox * {
|
||||
padding-top: 1px;
|
||||
padding-bottom: 1px;
|
||||
}
|
||||
GtkFileChooserWidget GtkListBox {
|
||||
background-color: @bg-dark-grey;
|
||||
}
|
||||
GtkFileChooserWidget .list-row * {
|
||||
padding: 1px 4px;
|
||||
}
|
||||
GtkFileChooserWidget .list-row:hover {
|
||||
background-color: @bg-list-hover;
|
||||
}
|
||||
GtkFileChooserWidget .list-row:hover * {
|
||||
color: @text-hl-color2;
|
||||
}
|
||||
GtkFileChooserWidget .list-row:selected {
|
||||
background-color: @accent-color;
|
||||
}
|
||||
GtkFileChooserWidget .list-row:selected * {
|
||||
color: @text-hl-color;
|
||||
}
|
||||
/*** end ***/
|
||||
|
||||
/*** Tab Bars ***/
|
||||
.notebook tab, .notebook.header {
|
||||
background-color: @bg-dark-grey;
|
||||
border-color: @bg-dark-grey;
|
||||
}
|
||||
#MainNotebook tab {
|
||||
padding: 5px;
|
||||
}
|
||||
.notebook tab.top {
|
||||
border-width: 0 0 5px 0;
|
||||
}
|
||||
.notebook tab.left {
|
||||
border-width: 0 5px 0 0;
|
||||
}
|
||||
#RightNotebook tab.left,
|
||||
#PrefNotebook tab,
|
||||
GtkDialog tab {
|
||||
padding: 9px;
|
||||
}
|
||||
#ToolPanelNotebook tab {
|
||||
padding: 10px 4px 7px;
|
||||
}
|
||||
#MetaPanelNotebook tab {
|
||||
padding: 8px 4px;
|
||||
}
|
||||
|
||||
.notebook tab:active {
|
||||
border-color: @accent-color;
|
||||
}
|
||||
|
||||
/*** end ***/
|
||||
|
||||
/*** File Browser ***/
|
||||
#FileBrowser GtkDrawingArea {
|
||||
background-color: @bg-grey;
|
||||
}
|
||||
#FileBrowser GtkDrawingArea:selected {
|
||||
background-color: @accent-color3;
|
||||
color: @text-hl-color3;
|
||||
}
|
||||
/*** end ***/
|
||||
|
||||
/*** Image ***/
|
||||
GtkImage {
|
||||
padding: 0;
|
||||
}
|
||||
#MainNotebook > GtkGrid GtkImage {
|
||||
padding: 1px;
|
||||
}
|
||||
|
||||
#ToolPanelNotebook GtkImage{
|
||||
padding: 0 4px;
|
||||
}
|
||||
#MyExpanderTitle GtkImage{
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#ToolPanelNotebook tab GtkImage,
|
||||
#ToolPanelNotebook .button GtkImage {
|
||||
padding: 1px 0;
|
||||
}
|
||||
|
||||
GtkDialog .button GtkImage{
|
||||
padding: 0;
|
||||
}
|
||||
GtkFileChooserWidget .button GtkImage{
|
||||
padding: 0 4px;
|
||||
}
|
||||
/*** end ***/
|
||||
|
||||
/*** Toolpanel ***/
|
||||
#ToolPanelNotebook {
|
||||
background-color: @bg-dark-grey;
|
||||
padding: 0;
|
||||
border-top: 4px solid @bg-dark-grey;
|
||||
}
|
||||
|
||||
#ToolPanelNotebook GtkScrolledWindow GtkViewport.frame {
|
||||
padding: 0 4px;
|
||||
}
|
||||
#ToolPanelNotebook .separator {
|
||||
color: transparent;
|
||||
}
|
||||
#ToolPanelNotebook GtkFrame,
|
||||
#PrefNotebook GtkFrame {
|
||||
border: 1px solid @border-color;
|
||||
border-radius: 0;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
#ToolPanelNotebook GtkDrawingArea {
|
||||
background-color: @bg-dark-grey;
|
||||
border-color: @bg-light-grey;
|
||||
color: @text-color;
|
||||
}
|
||||
#ToolPanelNotebook GtkDrawingArea {
|
||||
border-radius: 1px; /* BUG: if 0, scale mini sliders look funny */
|
||||
}
|
||||
|
||||
#ExpanderBox #ExpanderBox,
|
||||
#ExpanderBox2,
|
||||
#ExpanderBox3 {
|
||||
border: 1px solid @border-color;
|
||||
}
|
||||
|
||||
#ExpanderBox,
|
||||
#ExpanderBox2,
|
||||
#ExpanderBox3 {
|
||||
background-color: @bg-grey;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
#MyExpanderTitle .label {
|
||||
color: @text-color;
|
||||
}
|
||||
#MyExpanderTitle:hover .label {
|
||||
color: @text-hl-color2;
|
||||
}
|
||||
/*** end ***/
|
||||
|
||||
/*** View ***/
|
||||
.view {
|
||||
background-color: @bg-dark-grey;
|
||||
border-color: @view-grid-border;
|
||||
}
|
||||
#PrefNotebook .view {
|
||||
background-color: @bg-grey;
|
||||
}
|
||||
#MainNotebook .view.cell:nth-child(2) {
|
||||
padding: 1px 0px 1px 4px;
|
||||
}
|
||||
.view row:hover {
|
||||
background-color: @bg-list-hover;
|
||||
color: @text-hl-color2;
|
||||
}
|
||||
#PrefNotebook .view row:hover {
|
||||
background-color: @bg-light-grey;
|
||||
color: @text-hl-color2;
|
||||
}
|
||||
.view row:selected {
|
||||
color: @text-hl-color;
|
||||
background-color: @accent-color;
|
||||
}
|
||||
#PrefNotebook .view row:selected {
|
||||
color: @text-hl-color;
|
||||
background-color: @accent-color;
|
||||
}
|
||||
/*** end ***/
|
||||
|
||||
/*** Metadata ***/
|
||||
#MetaPanelNotebook {
|
||||
padding: 8px 11px 0;
|
||||
}
|
||||
#MetaPanelNotebook GtkScrolledWindow GtkViewport.frame {
|
||||
padding: 8px 10px;
|
||||
}
|
||||
#MetaPanelNotebook.frame {
|
||||
background-color: @bg-grey;
|
||||
border-bottom: none;
|
||||
border-top: 4px solid @bg-dark-grey;
|
||||
border-left: 9px solid @bg-dark-grey;
|
||||
border-right: 9px solid @bg-dark-grey;
|
||||
}
|
||||
#MetaPanelNotebook .separator {
|
||||
color: @border-color;
|
||||
}
|
||||
#MetaPanelNotebook.header {
|
||||
background-color: @bg-dark-grey;
|
||||
|
||||
}
|
||||
#MetaPanelNotebook GtkTreeView {
|
||||
padding: 1px;
|
||||
background-color: @bg-grey;
|
||||
}
|
||||
#MetaPanelNotebook .frame GtkTreeView {
|
||||
padding: 0px;
|
||||
background-color: @bg-entry-IPTC;
|
||||
}
|
||||
#MetaPanelNotebook GtkTreeView:hover,
|
||||
#MetaPanelNotebook .frame GtkTreeView:hover {
|
||||
background-color: @bg-list-hover;
|
||||
color: @text-hl-color;
|
||||
}
|
||||
#MetaPanelNotebook GtkTreeView:selected,
|
||||
#MetaPanelNotebook .frame GtkTreeView:selected {
|
||||
color: @text-hl-color;
|
||||
background-color: @accent-color;
|
||||
}
|
||||
#MetaPanelNotebook GtkTextView {
|
||||
color: @text-color;
|
||||
background-color: @bg-entry-IPTC;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
/*** end ***/
|
||||
|
||||
/*** Entry ***/
|
||||
.entry {
|
||||
background-image: none;
|
||||
background-color: @bg-scale-entry;
|
||||
border: 1px solid @bg-entry-border;
|
||||
border-radius: 0;
|
||||
padding: 2px 4px;
|
||||
color: @text-color;
|
||||
box-shadow: inset 1px 1px rgba(0, 0, 0, 0.08), 0 1px rgba(242 , 242, 242, 0.1);
|
||||
}
|
||||
#FileBrowser .entry {
|
||||
padding: 3px 4px;
|
||||
}
|
||||
.entry:focused:selected {
|
||||
color: @text-hl-color;
|
||||
background-color: @accent-color;
|
||||
}
|
||||
.entry:not(:focused):not(:insensitive) {/*Workaround*/
|
||||
color: @text-color;
|
||||
background-color: transparent;
|
||||
}
|
||||
.entry:not(:selected):not(:insensitive) {
|
||||
color: @text-color;
|
||||
background-color: @bg-scale-entry;
|
||||
}
|
||||
#ToolPanelNotebook .entry {
|
||||
padding: 0 4px 0 8px;
|
||||
border-radius: 20px 0 0 20px;
|
||||
background-color: rgba(255,255,255,.12);
|
||||
border: 1px solid rgba(0,0,0,.46);
|
||||
color: @text-tbEntry;
|
||||
box-shadow: inset 1px 1px rgba(0, 0, 0, .12), 0 1px rgba(255 , 255, 255, 0.12);
|
||||
}
|
||||
#ToolPanelNotebook .entry:focused:selected {
|
||||
color: @text-hl-color;
|
||||
background-color: @accent-color;
|
||||
}
|
||||
#ToolPanelNotebook .entry:not(:focused):not(:insensitive) {/*Workaround*/
|
||||
color: @text-tbEntry;
|
||||
background-color: transparent;
|
||||
}
|
||||
#ToolPanelNotebook .entry:not(:selected):not(:insensitive) {
|
||||
color: @text-tbEntry;
|
||||
background-color: rgba(255,255,255,.12);
|
||||
}
|
||||
|
||||
#MetaPanelNotebook .entry {
|
||||
color: @text-color;
|
||||
background-color: @bg-entry-IPTC;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
padding: 2px 4px;
|
||||
box-shadow: none;
|
||||
}
|
||||
#MetaPanelNotebook .entry:focused:selected {
|
||||
color: @text-hl-color;
|
||||
background-color: @accent-color;
|
||||
box-shadow: none;
|
||||
}
|
||||
#MetaPanelNotebook .entry:not(:focused):not(:insensitive) {/*Workaround*/
|
||||
color: @text-color;
|
||||
background-color: transparent;
|
||||
box-shadow: none;
|
||||
}
|
||||
#MetaPanelNotebook .entry:not(:selected):not(:insensitive) {
|
||||
color: @text-color;
|
||||
background-color: @bg-entry-IPTC;
|
||||
box-shadow: none;
|
||||
}
|
||||
/*** end ***/
|
||||
|
||||
/*** Buttons ***/
|
||||
.button {
|
||||
background-color: transparent;
|
||||
border: 1px solid @bg-button-border;
|
||||
border-radius: 0;
|
||||
padding: 3px 4px;
|
||||
box-shadow: inset 0 1px rgba(242, 242, 242, 0.1), 0 1px rgba(242, 242, 242, 0.1);
|
||||
background-image: linear-gradient(to bottom, rgba(0,0,0,.05), rgba(0,0,0,.14) 40%, rgba(0,0,0,.26));
|
||||
}
|
||||
.message-dialog .dialog-action-area .button {
|
||||
padding: 6px;
|
||||
}
|
||||
|
||||
.button.Left + .button:not(.image-button).Right {
|
||||
border-left: none;
|
||||
}
|
||||
GtkComboBox .button {
|
||||
padding: 4px 3px;
|
||||
}
|
||||
#ToolPanelNotebook .button,
|
||||
GtkDialog .button,
|
||||
#BatchQueueButtonsMainContainer .button {
|
||||
padding: 0px 3px;
|
||||
}
|
||||
#BatchQueueButtons .button {
|
||||
padding-top: 6px;
|
||||
padding-bottom: 6px
|
||||
}
|
||||
#BeforeAfterContainer .button {
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
/*** Fix: Space between first Retinex Comboboxes ***/
|
||||
GtkLabel + GtkComboBox + GtkComboBox {
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
.text-button {
|
||||
padding: 0 2px 0 0;
|
||||
}
|
||||
#PartialPaste .text-button {
|
||||
padding: 0 8px 0 2px;
|
||||
-GtkCheckButton-indicator-spacing: 1;
|
||||
}
|
||||
#ToolPanelNotebook GtkFrame > .text-button {
|
||||
padding: 0 3px 0 0;
|
||||
}
|
||||
|
||||
.button.text-button {
|
||||
padding: 5px 12px;
|
||||
}
|
||||
#ToolPanelNotebook .button.text-button,
|
||||
#PrefNotebook .button.text-button,
|
||||
GtkFileChooserWidget .button.text-button,
|
||||
#RightNotebook .button.text-button {
|
||||
padding: 3px 4px;
|
||||
}
|
||||
GtkPopover .button.text-button {
|
||||
padding: 2px 4px;
|
||||
}
|
||||
|
||||
.spinbutton .button {
|
||||
background-image: none;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
padding: 2px;
|
||||
box-shadow: none;
|
||||
}
|
||||
#ToolPanelNotebook .spinbutton .button {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.button:hover {
|
||||
background-color: rgba(0, 0, 0,.18);
|
||||
}
|
||||
#ToolPanelNotebook .spinbutton .button:hover {
|
||||
background-color: @bg-spin-button-hover;
|
||||
}
|
||||
|
||||
.button:active,
|
||||
.button:checked {
|
||||
background-image: linear-gradient(to bottom, rgb(41,41,41), rgb(37,37,37) 40%, rgb(25,25,25));
|
||||
background-color: transparent;
|
||||
border-color: black;
|
||||
}
|
||||
|
||||
#MainNotebook > GtkGrid .button {
|
||||
padding: 2px;
|
||||
border: 4px solid @bg-dark-grey;
|
||||
background-color: transparent;
|
||||
background-image: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
#MainNotebook tab .button {
|
||||
padding: 1px;
|
||||
border-top: 4px solid @bg-dark-grey;
|
||||
border-bottom: 4px solid @bg-dark-grey;
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
background-color: transparent;
|
||||
background-image: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
#MainNotebook > GtkGrid .button:hover,
|
||||
#MainNotebook tab .button:hover {
|
||||
background-color: rgba(255,255,255,.20);
|
||||
box-shadow: inset 0 1px rgba(255, 255, 255, 0.12);
|
||||
background-image: linear-gradient(to bottom, rgba(0,0,0,.05), rgba(0,0,0,.12) 40%, rgba(0,0,0,.24));
|
||||
}
|
||||
#MainNotebook > GtkGrid .button:active,
|
||||
#MainNotebook tab .button:active {
|
||||
background-color: rgba(255,255,255,.27);
|
||||
box-shadow: inset 0 1px rgba(255, 255, 255, 0.12);
|
||||
background-image: linear-gradient(to bottom, rgba(0,0,0,.05), rgba(0,0,0,.12) 40%, rgba(0,0,0,.24));
|
||||
}
|
||||
.view .button {
|
||||
background-color: rgb(20,20,20);
|
||||
padding: 1px 5px 2px;
|
||||
background-image: none;
|
||||
border-color: black;
|
||||
box-shadow: none;
|
||||
}
|
||||
.menu .button.bottom,
|
||||
.menu .button.bottom:insensitive {
|
||||
background-color: rgb(20,20,20);
|
||||
border-color: @accent-color;
|
||||
border-width: 0 1px 1px 1px;
|
||||
background-image: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
.menu .button.top,
|
||||
.menu .button.top:insensitive {
|
||||
background-color: rgb(20,20,20);
|
||||
border-color: @accent-color;
|
||||
border-width: 1px 1px 0 1px;
|
||||
background-image: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
#fullButton,
|
||||
#histButton {
|
||||
padding: 5px;
|
||||
border: none;
|
||||
background-color: @bg-dark-grey;
|
||||
background-image: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
/*** end ***/
|
||||
|
||||
/*** Check & Radio buttons ***/
|
||||
.check,
|
||||
.check row {
|
||||
-gtk-icon-source: url("images/twb/checkbox-unchecked.png");
|
||||
}
|
||||
.check:checked,
|
||||
.check row:checked {
|
||||
-gtk-icon-source: url("images/twb/checkbox-checked.png");
|
||||
}
|
||||
.check:insensitive,
|
||||
.check row:insensitive {
|
||||
-gtk-icon-source: url("images/twb/checkbox-unchecked-disabled.png");
|
||||
}
|
||||
.check:checked:insensitive,
|
||||
.check row:checked:insensitive {
|
||||
-gtk-icon-source: url("images/twb/checkbox-checked-disabled.png");
|
||||
}
|
||||
.check:inconsistent,
|
||||
.check row:inconsistent {
|
||||
-gtk-icon-source: url("images/twb/checkbox-inconsistent.png");
|
||||
}
|
||||
.check:inconsistent:insensitive,
|
||||
.check row:inconsistent:insensitive {
|
||||
-gtk-icon-source: url("images/twb/checkbox-inconsistent-disabled.png");
|
||||
}
|
||||
|
||||
.radio,
|
||||
.radio row {
|
||||
-gtk-icon-source: url("images/twb/radio-unchecked.png");
|
||||
}
|
||||
.radio:checked,
|
||||
.radio row:checked {
|
||||
-gtk-icon-source: url("images/twb/radio-checked.png");
|
||||
}
|
||||
.radio:insensitive,
|
||||
.radio row:insensitive {
|
||||
-gtk-icon-source: url("images/twb/radio-unchecked-disabled.png");
|
||||
}
|
||||
.radio:checked:insensitive,
|
||||
.radio row:checked:insensitive {
|
||||
-gtk-icon-source: url("images/twb/radio-checked-disabled.png");
|
||||
}
|
||||
.radio:inconsistent,
|
||||
.radio row:inconsistent {
|
||||
-gtk-icon-source: url("images/twb/radio-inconsistent.png");
|
||||
}
|
||||
.radio:inconsistent:insensitive,
|
||||
.radio row:inconsistent:insensitive {
|
||||
-gtk-icon-source: url("images/twb/radio-inconsistent-disabled.png");
|
||||
}
|
||||
/*** end ***/
|
||||
|
||||
/*** Disabled Items ***/
|
||||
|
||||
*:insensitive,
|
||||
#ToolPanelNotebook *:insensitive {
|
||||
color: rgb(128,128,128);
|
||||
box-shadow: none;
|
||||
}
|
||||
#ToolPanelNotebook .entry:insensitive {
|
||||
color: rgb(144,144,144);
|
||||
background-color: rgba(255,255,255,.06);
|
||||
box-shadow: none;
|
||||
}
|
||||
.button:insensitive {
|
||||
background-image: none;
|
||||
background-color: rgba(0,0,0,.10);
|
||||
border-color: rgba(0,0,0,.30);
|
||||
box-shadow: none;
|
||||
}
|
||||
.spinbutton .button:insensitive {
|
||||
background-image: none;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
.scale.slider:insensitive,
|
||||
.scale.trough.highlight:insensitive,
|
||||
.scale.trough:insensitive,
|
||||
#ToolPanelNotebook .scale.slider:insensitive,
|
||||
#ToolPanelNotebook .scale.trough.highlight:insensitive,
|
||||
#ToolPanelNotebook .scale.trough:insensitive {
|
||||
background-color: rgb(65,65,65);
|
||||
box-shadow: none;
|
||||
background-image: none;
|
||||
}
|
||||
/*** end ***/
|
124
rtdata/themes/images/svg/twb/checkbox-checked-disabled.svg
Normal file
@ -0,0 +1,124 @@
|
||||
<?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"
|
||||
id="svg6018"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="checkbox-checked-disabled.svg"
|
||||
inkscape:export-filename="/tmp/16.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs6020" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="56.0625"
|
||||
inkscape:cx="8"
|
||||
inkscape:cy="8"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:showpageshadow="false"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
units="px"
|
||||
inkscape:snap-bbox="false"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:bbox-nodes="false"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:bbox-paths="false"
|
||||
inkscape:snap-bbox-edge-midpoints="false"
|
||||
inkscape:snap-bbox-midpoints="false"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-intersection-paths="false"
|
||||
inkscape:object-paths="false"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-others="true"
|
||||
inkscape:snap-nodes="true">
|
||||
<sodipodi:guide
|
||||
position="8,15"
|
||||
orientation="0,1"
|
||||
id="guide6035"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="8,1"
|
||||
orientation="0,1"
|
||||
id="guide6037"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="1,8"
|
||||
orientation="1,0"
|
||||
id="guide6039"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="15,8"
|
||||
orientation="1,0"
|
||||
id="guide6041"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid6611"
|
||||
enabled="true"
|
||||
visible="true"
|
||||
empspacing="8"
|
||||
color="#ff0000"
|
||||
opacity="0.1254902"
|
||||
originx="0"
|
||||
dotted="false"
|
||||
spacingx="0.5"
|
||||
spacingy="0.5" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata6023">
|
||||
<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 />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1036.3622)">
|
||||
<path
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#808080;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
d="m 13.5,1043.3622 0,6.5 -12,0 0,-12 0,0 7.5,0"
|
||||
id="path6609"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
<path
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#808080;stroke-width:2.194;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-mid:none;enable-background:accumulate"
|
||||
d="m 3.960076,1041.2107 3.5956705,3.5958 6.6685155,-6.6686"
|
||||
id="path5910-7"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-filename="/tmp/16.png"
|
||||
inkscape:export-xdpi="1.4400001"
|
||||
inkscape:export-ydpi="1.4400001" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 4.1 KiB |
124
rtdata/themes/images/svg/twb/checkbox-checked.svg
Normal file
@ -0,0 +1,124 @@
|
||||
<?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"
|
||||
id="svg6018"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="checkbox-checked.svg"
|
||||
inkscape:export-filename="/tmp/16.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs6020" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="56.0625"
|
||||
inkscape:cx="7.9821628"
|
||||
inkscape:cy="8"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:showpageshadow="false"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
units="px"
|
||||
inkscape:snap-bbox="false"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:bbox-nodes="false"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:bbox-paths="false"
|
||||
inkscape:snap-bbox-edge-midpoints="false"
|
||||
inkscape:snap-bbox-midpoints="false"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-intersection-paths="false"
|
||||
inkscape:object-paths="false"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-others="true"
|
||||
inkscape:snap-nodes="true">
|
||||
<sodipodi:guide
|
||||
position="8,15"
|
||||
orientation="0,1"
|
||||
id="guide6035"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="8,1"
|
||||
orientation="0,1"
|
||||
id="guide6037"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="1,8"
|
||||
orientation="1,0"
|
||||
id="guide6039"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="15,8"
|
||||
orientation="1,0"
|
||||
id="guide6041"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid6611"
|
||||
enabled="true"
|
||||
visible="true"
|
||||
empspacing="8"
|
||||
color="#ff0000"
|
||||
opacity="0.1254902"
|
||||
originx="0"
|
||||
dotted="false"
|
||||
spacingx="0.5"
|
||||
spacingy="0.5" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata6023">
|
||||
<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 />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1036.3622)">
|
||||
<path
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#b4b4b4;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
d="m 13.5,1043.3622 0,6.5 -12,0 0,-12 0,0 7.5,0"
|
||||
id="path6609"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
<path
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#b4b4b4;stroke-width:2.19409847;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-mid:none;enable-background:accumulate"
|
||||
d="m 3.960076,1041.2107 3.5956705,3.5958 6.6685155,-6.6686"
|
||||
id="path5910-7"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-filename="/tmp/16.png"
|
||||
inkscape:export-xdpi="1.4400001"
|
||||
inkscape:export-ydpi="1.4400001" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 4.1 KiB |
124
rtdata/themes/images/svg/twb/checkbox-inconsistent-disabled.svg
Normal file
@ -0,0 +1,124 @@
|
||||
<?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"
|
||||
id="svg6018"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="checkbox-inconsistent-disabled.svg"
|
||||
inkscape:export-filename="/tmp/16.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs6020" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="56.0625"
|
||||
inkscape:cx="5.039019"
|
||||
inkscape:cy="8"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:showpageshadow="false"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
units="px"
|
||||
inkscape:snap-bbox="false"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:bbox-nodes="false"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:bbox-paths="false"
|
||||
inkscape:snap-bbox-edge-midpoints="false"
|
||||
inkscape:snap-bbox-midpoints="false"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-intersection-paths="false"
|
||||
inkscape:object-paths="false"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-others="true"
|
||||
inkscape:snap-nodes="true">
|
||||
<sodipodi:guide
|
||||
position="8,15"
|
||||
orientation="0,1"
|
||||
id="guide6035"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="8,1"
|
||||
orientation="0,1"
|
||||
id="guide6037"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="1,8"
|
||||
orientation="1,0"
|
||||
id="guide6039"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="15,8"
|
||||
orientation="1,0"
|
||||
id="guide6041"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid6611"
|
||||
enabled="true"
|
||||
visible="true"
|
||||
empspacing="8"
|
||||
color="#ff0000"
|
||||
opacity="0.1254902"
|
||||
originx="0"
|
||||
dotted="false"
|
||||
spacingx="0.5"
|
||||
spacingy="0.5" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata6023">
|
||||
<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 />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1036.3622)">
|
||||
<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;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;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#808080;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;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="m 5,1041.3622 0,5 5,0 0,-5 z"
|
||||
id="path5910-7"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<rect
|
||||
ry="0"
|
||||
y="1037.8622"
|
||||
x="1.5"
|
||||
height="11.999906"
|
||||
width="11.999984"
|
||||
id="rect6602"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#808080;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 4.6 KiB |
124
rtdata/themes/images/svg/twb/checkbox-inconsistent.svg
Normal file
@ -0,0 +1,124 @@
|
||||
<?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"
|
||||
id="svg6018"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="checkbox-inconsistent.svg"
|
||||
inkscape:export-filename="/tmp/16.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs6020" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="56.0625"
|
||||
inkscape:cx="5.039019"
|
||||
inkscape:cy="8"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:showpageshadow="false"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
units="px"
|
||||
inkscape:snap-bbox="false"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:bbox-nodes="false"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:bbox-paths="false"
|
||||
inkscape:snap-bbox-edge-midpoints="false"
|
||||
inkscape:snap-bbox-midpoints="false"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-intersection-paths="false"
|
||||
inkscape:object-paths="false"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-others="true"
|
||||
inkscape:snap-nodes="true">
|
||||
<sodipodi:guide
|
||||
position="8,15"
|
||||
orientation="0,1"
|
||||
id="guide6035"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="8,1"
|
||||
orientation="0,1"
|
||||
id="guide6037"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="1,8"
|
||||
orientation="1,0"
|
||||
id="guide6039"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="15,8"
|
||||
orientation="1,0"
|
||||
id="guide6041"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid6611"
|
||||
enabled="true"
|
||||
visible="true"
|
||||
empspacing="8"
|
||||
color="#ff0000"
|
||||
opacity="0.1254902"
|
||||
originx="0"
|
||||
dotted="false"
|
||||
spacingx="0.5"
|
||||
spacingy="0.5" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata6023">
|
||||
<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 />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1036.3622)">
|
||||
<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;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;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b4b4b4;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;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="m 5,1041.3622 0,5 5,0 0,-5 z"
|
||||
id="path5910-7"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<rect
|
||||
ry="0"
|
||||
y="1037.8622"
|
||||
x="1.5"
|
||||
height="11.999906"
|
||||
width="11.999984"
|
||||
id="rect6602"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#b4b4b4;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 4.6 KiB |
118
rtdata/themes/images/svg/twb/checkbox-unchecked-disabled.svg
Normal file
@ -0,0 +1,118 @@
|
||||
<?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"
|
||||
id="svg6018"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="checkbox-unchecked-disabled.svg"
|
||||
inkscape:export-filename="/tmp/16.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs6020" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="56.0625"
|
||||
inkscape:cx="5.039019"
|
||||
inkscape:cy="8"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:showpageshadow="false"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
units="px"
|
||||
inkscape:snap-bbox="false"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:bbox-nodes="false"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:bbox-paths="false"
|
||||
inkscape:snap-bbox-edge-midpoints="false"
|
||||
inkscape:snap-bbox-midpoints="false"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-intersection-paths="false"
|
||||
inkscape:object-paths="false"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-others="true"
|
||||
inkscape:snap-nodes="true">
|
||||
<sodipodi:guide
|
||||
position="8,15"
|
||||
orientation="0,1"
|
||||
id="guide6035"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="8,1"
|
||||
orientation="0,1"
|
||||
id="guide6037"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="1,8"
|
||||
orientation="1,0"
|
||||
id="guide6039"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="15,8"
|
||||
orientation="1,0"
|
||||
id="guide6041"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid6611"
|
||||
enabled="true"
|
||||
visible="true"
|
||||
empspacing="8"
|
||||
color="#ff0000"
|
||||
opacity="0.1254902"
|
||||
originx="0"
|
||||
dotted="false"
|
||||
spacingx="0.5"
|
||||
spacingy="0.5" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata6023">
|
||||
<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 />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1036.3622)">
|
||||
<rect
|
||||
ry="0"
|
||||
y="1037.8622"
|
||||
x="1.5"
|
||||
height="11.999906"
|
||||
width="11.999984"
|
||||
id="rect6602"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#808080;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
118
rtdata/themes/images/svg/twb/checkbox-unchecked.svg
Normal file
@ -0,0 +1,118 @@
|
||||
<?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"
|
||||
id="svg6018"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="checkbox-unchecked.svg"
|
||||
inkscape:export-filename="/tmp/16.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs6020" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="56.0625"
|
||||
inkscape:cx="5.039019"
|
||||
inkscape:cy="8"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:showpageshadow="false"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
units="px"
|
||||
inkscape:snap-bbox="false"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:bbox-nodes="false"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:bbox-paths="false"
|
||||
inkscape:snap-bbox-edge-midpoints="false"
|
||||
inkscape:snap-bbox-midpoints="false"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-intersection-paths="false"
|
||||
inkscape:object-paths="false"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-others="true"
|
||||
inkscape:snap-nodes="true">
|
||||
<sodipodi:guide
|
||||
position="8,15"
|
||||
orientation="0,1"
|
||||
id="guide6035"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="8,1"
|
||||
orientation="0,1"
|
||||
id="guide6037"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="1,8"
|
||||
orientation="1,0"
|
||||
id="guide6039"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="15,8"
|
||||
orientation="1,0"
|
||||
id="guide6041"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid6611"
|
||||
enabled="true"
|
||||
visible="true"
|
||||
empspacing="8"
|
||||
color="#ff0000"
|
||||
opacity="0.1254902"
|
||||
originx="0"
|
||||
dotted="false"
|
||||
spacingx="0.5"
|
||||
spacingy="0.5" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata6023">
|
||||
<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 />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1036.3622)">
|
||||
<rect
|
||||
ry="0"
|
||||
y="1037.8622"
|
||||
x="1.5"
|
||||
height="11.999906"
|
||||
width="11.999984"
|
||||
id="rect6602"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#b4b4b4;stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
122
rtdata/themes/images/svg/twb/radio-checked-disabled.svg
Normal file
@ -0,0 +1,122 @@
|
||||
<?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"
|
||||
id="svg6018"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="radio-checked-disabled.svg"
|
||||
inkscape:export-filename="/tmp/16.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs6020" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="56.0625"
|
||||
inkscape:cx="8"
|
||||
inkscape:cy="8"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:showpageshadow="false"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
units="px"
|
||||
inkscape:snap-bbox="false"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:bbox-nodes="false"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:bbox-paths="false"
|
||||
inkscape:snap-bbox-edge-midpoints="false"
|
||||
inkscape:snap-bbox-midpoints="false"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-intersection-paths="false"
|
||||
inkscape:object-paths="false"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-others="true"
|
||||
inkscape:snap-nodes="true">
|
||||
<sodipodi:guide
|
||||
position="8,15"
|
||||
orientation="0,1"
|
||||
id="guide6035"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="8,1"
|
||||
orientation="0,1"
|
||||
id="guide6037"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="1,8"
|
||||
orientation="1,0"
|
||||
id="guide6039"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="15,8"
|
||||
orientation="1,0"
|
||||
id="guide6041"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid6611"
|
||||
enabled="true"
|
||||
visible="true"
|
||||
empspacing="8"
|
||||
color="#ff0000"
|
||||
opacity="0.1254902"
|
||||
originx="0"
|
||||
dotted="false"
|
||||
spacingx="0.5"
|
||||
spacingy="0.5" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata6023">
|
||||
<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>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1036.3622)">
|
||||
<circle
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#808080;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
id="path6734"
|
||||
cx="7.5000086"
|
||||
cy="1043.8622"
|
||||
r="5.9999828" />
|
||||
<circle
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:#808080;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
id="path6736"
|
||||
r="2.4999826"
|
||||
cy="1043.8622"
|
||||
cx="7.5" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.8 KiB |
122
rtdata/themes/images/svg/twb/radio-checked.svg
Normal file
@ -0,0 +1,122 @@
|
||||
<?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"
|
||||
id="svg6018"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="radio-checked.svg"
|
||||
inkscape:export-filename="/tmp/16.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs6020" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="56.0625"
|
||||
inkscape:cx="8"
|
||||
inkscape:cy="8"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:showpageshadow="false"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
units="px"
|
||||
inkscape:snap-bbox="false"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:bbox-nodes="false"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:bbox-paths="false"
|
||||
inkscape:snap-bbox-edge-midpoints="false"
|
||||
inkscape:snap-bbox-midpoints="false"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-intersection-paths="false"
|
||||
inkscape:object-paths="false"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-others="true"
|
||||
inkscape:snap-nodes="true">
|
||||
<sodipodi:guide
|
||||
position="8,15"
|
||||
orientation="0,1"
|
||||
id="guide6035"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="8,1"
|
||||
orientation="0,1"
|
||||
id="guide6037"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="1,8"
|
||||
orientation="1,0"
|
||||
id="guide6039"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="15,8"
|
||||
orientation="1,0"
|
||||
id="guide6041"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid6611"
|
||||
enabled="true"
|
||||
visible="true"
|
||||
empspacing="8"
|
||||
color="#ff0000"
|
||||
opacity="0.1254902"
|
||||
originx="0"
|
||||
dotted="false"
|
||||
spacingx="0.5"
|
||||
spacingy="0.5" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata6023">
|
||||
<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 />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1036.3622)">
|
||||
<circle
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#b4b4b4;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
id="path6734"
|
||||
cx="7.5000086"
|
||||
cy="1043.8622"
|
||||
r="5.9999828" />
|
||||
<circle
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:nonzero;stroke:#b4b4b4;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
id="path6736"
|
||||
r="2.4999826"
|
||||
cy="1043.8622"
|
||||
cx="7.5" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.8 KiB |
122
rtdata/themes/images/svg/twb/radio-inconsistent-disabled.svg
Normal file
@ -0,0 +1,122 @@
|
||||
<?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"
|
||||
id="svg6018"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="radio-inconsistent-disabled.svg"
|
||||
inkscape:export-filename="/tmp/16.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs6020" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="56.0625"
|
||||
inkscape:cx="8"
|
||||
inkscape:cy="8"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:showpageshadow="false"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
units="px"
|
||||
inkscape:snap-bbox="false"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:bbox-nodes="false"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:bbox-paths="false"
|
||||
inkscape:snap-bbox-edge-midpoints="false"
|
||||
inkscape:snap-bbox-midpoints="false"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-intersection-paths="false"
|
||||
inkscape:object-paths="false"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-others="true"
|
||||
inkscape:snap-nodes="true">
|
||||
<sodipodi:guide
|
||||
position="8,15"
|
||||
orientation="0,1"
|
||||
id="guide6035"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="8,1"
|
||||
orientation="0,1"
|
||||
id="guide6037"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="1,8"
|
||||
orientation="1,0"
|
||||
id="guide6039"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="15,8"
|
||||
orientation="1,0"
|
||||
id="guide6041"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid6611"
|
||||
enabled="true"
|
||||
visible="true"
|
||||
empspacing="8"
|
||||
color="#ff0000"
|
||||
opacity="0.1254902"
|
||||
originx="0"
|
||||
dotted="false"
|
||||
spacingx="0.5"
|
||||
spacingy="0.5" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata6023">
|
||||
<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>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1036.3622)">
|
||||
<circle
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#808080;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
id="path6734"
|
||||
cx="7.5000086"
|
||||
cy="1043.8622"
|
||||
r="5.9999828" />
|
||||
<circle
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#808080;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
id="path6736"
|
||||
r="2.4999826"
|
||||
cy="1043.8622"
|
||||
cx="7.5" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.8 KiB |
122
rtdata/themes/images/svg/twb/radio-inconsistent.svg
Normal file
@ -0,0 +1,122 @@
|
||||
<?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"
|
||||
id="svg6018"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="radio-inconsistent.svg"
|
||||
inkscape:export-filename="/tmp/16.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs6020" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="56.0625"
|
||||
inkscape:cx="8"
|
||||
inkscape:cy="8"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:showpageshadow="false"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
units="px"
|
||||
inkscape:snap-bbox="false"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:bbox-nodes="false"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:bbox-paths="false"
|
||||
inkscape:snap-bbox-edge-midpoints="false"
|
||||
inkscape:snap-bbox-midpoints="false"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-intersection-paths="false"
|
||||
inkscape:object-paths="false"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-others="true"
|
||||
inkscape:snap-nodes="true">
|
||||
<sodipodi:guide
|
||||
position="8,15"
|
||||
orientation="0,1"
|
||||
id="guide6035"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="8,1"
|
||||
orientation="0,1"
|
||||
id="guide6037"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="1,8"
|
||||
orientation="1,0"
|
||||
id="guide6039"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="15,8"
|
||||
orientation="1,0"
|
||||
id="guide6041"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid6611"
|
||||
enabled="true"
|
||||
visible="true"
|
||||
empspacing="8"
|
||||
color="#ff0000"
|
||||
opacity="0.1254902"
|
||||
originx="0"
|
||||
dotted="false"
|
||||
spacingx="0.5"
|
||||
spacingy="0.5" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata6023">
|
||||
<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 />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1036.3622)">
|
||||
<circle
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#b4b4b4;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
id="path6734"
|
||||
cx="7.5000086"
|
||||
cy="1043.8622"
|
||||
r="5.9999828" />
|
||||
<circle
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#b4b4b4;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
id="path6736"
|
||||
r="2.4999826"
|
||||
cy="1043.8622"
|
||||
cx="7.5" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.8 KiB |
116
rtdata/themes/images/svg/twb/radio-unchecked-disabled.svg
Normal file
@ -0,0 +1,116 @@
|
||||
<?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"
|
||||
id="svg6018"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="radio-unchecked-disabled.svg"
|
||||
inkscape:export-filename="/tmp/16.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs6020" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="56.0625"
|
||||
inkscape:cx="8"
|
||||
inkscape:cy="8"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:showpageshadow="false"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
units="px"
|
||||
inkscape:snap-bbox="false"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:bbox-nodes="false"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:bbox-paths="false"
|
||||
inkscape:snap-bbox-edge-midpoints="false"
|
||||
inkscape:snap-bbox-midpoints="false"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-intersection-paths="false"
|
||||
inkscape:object-paths="false"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-others="true"
|
||||
inkscape:snap-nodes="true">
|
||||
<sodipodi:guide
|
||||
position="8,15"
|
||||
orientation="0,1"
|
||||
id="guide6035"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="8,1"
|
||||
orientation="0,1"
|
||||
id="guide6037"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="1,8"
|
||||
orientation="1,0"
|
||||
id="guide6039"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="15,8"
|
||||
orientation="1,0"
|
||||
id="guide6041"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid6611"
|
||||
enabled="true"
|
||||
visible="true"
|
||||
empspacing="8"
|
||||
color="#ff0000"
|
||||
opacity="0.1254902"
|
||||
originx="0"
|
||||
dotted="false"
|
||||
spacingx="0.5"
|
||||
spacingy="0.5" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata6023">
|
||||
<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>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1036.3622)">
|
||||
<circle
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#808080;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
id="path6734"
|
||||
cx="7.5000086"
|
||||
cy="1043.8622"
|
||||
r="5.9999828" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.4 KiB |
116
rtdata/themes/images/svg/twb/radio-unchecked.svg
Normal file
@ -0,0 +1,116 @@
|
||||
<?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"
|
||||
id="svg6018"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="radio-unchecked.svg"
|
||||
inkscape:export-filename="/tmp/16.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs6020" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="56.0625"
|
||||
inkscape:cx="8"
|
||||
inkscape:cy="8"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:showpageshadow="false"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
units="px"
|
||||
inkscape:snap-bbox="false"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:bbox-nodes="false"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:bbox-paths="false"
|
||||
inkscape:snap-bbox-edge-midpoints="false"
|
||||
inkscape:snap-bbox-midpoints="false"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-intersection-paths="false"
|
||||
inkscape:object-paths="false"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-others="true"
|
||||
inkscape:snap-nodes="true">
|
||||
<sodipodi:guide
|
||||
position="8,15"
|
||||
orientation="0,1"
|
||||
id="guide6035"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="8,1"
|
||||
orientation="0,1"
|
||||
id="guide6037"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="1,8"
|
||||
orientation="1,0"
|
||||
id="guide6039"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="15,8"
|
||||
orientation="1,0"
|
||||
id="guide6041"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid6611"
|
||||
enabled="true"
|
||||
visible="true"
|
||||
empspacing="8"
|
||||
color="#ff0000"
|
||||
opacity="0.1254902"
|
||||
originx="0"
|
||||
dotted="false"
|
||||
spacingx="0.5"
|
||||
spacingy="0.5" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata6023">
|
||||
<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 />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1036.3622)">
|
||||
<circle
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#b4b4b4;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
id="path6734"
|
||||
cx="7.5000086"
|
||||
cy="1043.8622"
|
||||
r="5.9999828" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.4 KiB |
BIN
rtdata/themes/images/twb/checkbox-checked-disabled.png
Normal file
After Width: | Height: | Size: 378 B |
BIN
rtdata/themes/images/twb/checkbox-checked.png
Normal file
After Width: | Height: | Size: 428 B |
BIN
rtdata/themes/images/twb/checkbox-inconsistent-disabled.png
Normal file
After Width: | Height: | Size: 265 B |
BIN
rtdata/themes/images/twb/checkbox-inconsistent.png
Normal file
After Width: | Height: | Size: 295 B |
BIN
rtdata/themes/images/twb/checkbox-unchecked-disabled.png
Normal file
After Width: | Height: | Size: 247 B |
BIN
rtdata/themes/images/twb/checkbox-unchecked.png
Normal file
After Width: | Height: | Size: 272 B |
BIN
rtdata/themes/images/twb/radio-checked-disabled.png
Normal file
After Width: | Height: | Size: 524 B |
BIN
rtdata/themes/images/twb/radio-checked.png
Normal file
After Width: | Height: | Size: 593 B |
BIN
rtdata/themes/images/twb/radio-inconsistent-disabled.png
Normal file
After Width: | Height: | Size: 556 B |
BIN
rtdata/themes/images/twb/radio-inconsistent.png
Normal file
After Width: | Height: | Size: 631 B |
BIN
rtdata/themes/images/twb/radio-unchecked-disabled.png
Normal file
After Width: | Height: | Size: 438 B |
BIN
rtdata/themes/images/twb/radio-unchecked.png
Normal file
After Width: | Height: | Size: 503 B |
@ -29,7 +29,7 @@ set (RTENGINESOURCEFILES colortemp.cc curves.cc flatcurves.cc diagonalcurves.cc
|
||||
include_directories (BEFORE "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
|
||||
add_library (rtengine ${RTENGINESOURCEFILES})
|
||||
add_dependencies (rtengine AboutFile)
|
||||
add_dependencies (rtengine UpdateInfo)
|
||||
|
||||
#It may be nice to store library version too
|
||||
IF (BUILD_SHARED_LIBS)
|
||||
|
@ -11,6 +11,7 @@
|
||||
/*RT*/#define DJGPP
|
||||
|
||||
#include "opthelper.h"
|
||||
|
||||
/*
|
||||
dcraw.c -- Dave Coffin's raw photo decoder
|
||||
Copyright 1997-2016 by Dave Coffin, dcoffin a cybercom o net
|
||||
@ -2011,7 +2012,7 @@ void CLASS hasselblad_correct()
|
||||
{bhu-1,0},{bhu-1,bwu/2},{bhu-1,bwu-1}};
|
||||
for (col = 0; col < bw; col++) {
|
||||
for (i = 0; i < 9; i++) {
|
||||
ushort dist = (ushort)sqrt(abs(corners[i][0] - row) * abs(corners[i][0] - row) + abs(corners[i][1] - col) * abs(corners[i][1] - col));
|
||||
ushort dist = (ushort)sqrt(abs((int)(corners[i][0] - row)) * abs((int)(corners[i][0] - row)) + abs((int)(corners[i][1] - col)) * abs((int)(corners[i][1] - col)));
|
||||
ushort weight = dist > maxdist ? 0 : maxdist - dist;
|
||||
corners_weight[9*(row*bw+col)+i] = weight;
|
||||
}
|
||||
@ -6264,6 +6265,7 @@ void CLASS apply_tiff()
|
||||
tile_width = tiff_ifd[i].tile_width;
|
||||
tile_length = tiff_ifd[i].tile_length;
|
||||
shutter = tiff_ifd[i].shutter;
|
||||
raw_size = tiff_ifd[i].bytes;
|
||||
raw = i;
|
||||
}
|
||||
}
|
||||
@ -9016,6 +9018,9 @@ canon_a5:
|
||||
if (filters == 9)
|
||||
FORC(36) ((char *)xtrans)[c] =
|
||||
xtrans_abs[(c/6+top_margin) % 6][(c+left_margin) % 6];
|
||||
if(filters == 9 && raw_height * raw_width * 2 != raw_size) {
|
||||
xtransCompressed = true;
|
||||
}
|
||||
} else if (!strcmp(model,"KD-400Z")) {
|
||||
height = 1712;
|
||||
width = 2312;
|
||||
@ -9791,20 +9796,22 @@ void CLASS deflate_dng_load_raw() {
|
||||
}
|
||||
uLongf dstLen = tile_width * tile_length * 4;
|
||||
|
||||
#ifdef _OPENMP
|
||||
#if defined(_OPENMP) && ZLIB_VER_REVISION == 8
|
||||
#pragma omp parallel
|
||||
#endif
|
||||
{
|
||||
Bytef * cBuffer = new Bytef[maxCompressed];
|
||||
Bytef * uBuffer = new Bytef[dstLen];
|
||||
|
||||
#ifdef _OPENMP
|
||||
#if defined(_OPENMP) && ZLIB_VER_REVISION == 8
|
||||
#pragma omp for collapse(2) nowait
|
||||
#endif
|
||||
for (size_t y = 0; y < raw_height; y += tile_length) {
|
||||
for (size_t x = 0; x < raw_width; x += tile_width) {
|
||||
size_t t = (y / tile_length) * tilesWide + (x / tile_width);
|
||||
#if defined(_OPENMP) && ZLIB_VER_REVISION == 8
|
||||
#pragma omp critical
|
||||
#endif
|
||||
{
|
||||
fseek(ifp, tileOffsets[t], SEEK_SET);
|
||||
fread(cBuffer, 1, tileBytes[t], ifp);
|
||||
@ -9863,6 +9870,8 @@ struct tiff_hdr {
|
||||
char desc[512], make[64], model[64], soft[32], date[20], artist[64];
|
||||
};
|
||||
|
||||
#include "xtranscompressed.cc"
|
||||
|
||||
/* RT: Delete from here */
|
||||
/*RT*/#undef SQR
|
||||
/*RT*/#undef MAX
|
||||
|
@ -89,8 +89,51 @@ protected:
|
||||
unsigned black, cblack[4102], maximum, mix_green, raw_color, zero_is_bad;
|
||||
unsigned zero_after_ff, is_raw, dng_version, is_foveon, data_error;
|
||||
unsigned tile_width, tile_length, gpsdata[32], load_flags;
|
||||
bool xtransCompressed = false;
|
||||
struct xtrans_params
|
||||
{
|
||||
char *q_table; /* quantization table */
|
||||
int q_point[5]; /* quantization points */
|
||||
int max_bits;
|
||||
int min_value;
|
||||
int raw_bits;
|
||||
int total_values;
|
||||
int maxDiff;
|
||||
ushort line_width;
|
||||
};
|
||||
|
||||
struct int_pair {
|
||||
int value1;
|
||||
int value2;
|
||||
};
|
||||
|
||||
enum _xt_lines
|
||||
{
|
||||
_R0=0,_R1,_R2,_R3,_R4,
|
||||
_G0,_G1,_G2,_G3,_G4,_G5,_G6,_G7,
|
||||
_B0,_B1,_B2,_B3,_B4,
|
||||
_ltotal
|
||||
};
|
||||
|
||||
struct xtrans_block {
|
||||
int cur_bit; // current bit being read (from left to right)
|
||||
int cur_pos; // current position in a buffer
|
||||
INT64 cur_buf_offset; // offset of this buffer in a file
|
||||
unsigned max_read_size; // Amount of data to be read
|
||||
int cur_buf_size; // buffer size
|
||||
uchar *cur_buf; // currently read block
|
||||
IMFILE *input;
|
||||
struct int_pair grad_even[3][41]; // tables of gradients
|
||||
struct int_pair grad_odd[3][41];
|
||||
ushort *linealloc;
|
||||
ushort *linebuf[_ltotal];
|
||||
};
|
||||
|
||||
int fuji_total_lines, fuji_total_blocks, fuji_block_width, fuji_bits;
|
||||
|
||||
ushort raw_height, raw_width, height, width, top_margin, left_margin;
|
||||
ushort shrink, iheight, iwidth, fuji_width, thumb_width, thumb_height;
|
||||
unsigned raw_size;
|
||||
ushort *raw_image;
|
||||
float * float_raw_image;
|
||||
ushort white[8][8], curve[0x10000], cr2_slice[3], sraw_mul[4];
|
||||
@ -226,6 +269,25 @@ void adobe_copy_pixel (unsigned row, unsigned col, ushort **rp);
|
||||
void lossless_dng_load_raw();
|
||||
void packed_dng_load_raw();
|
||||
void deflate_dng_load_raw();
|
||||
void init_xtrans(struct xtrans_params* info);
|
||||
void fuji_fill_buffer(struct xtrans_block *info);
|
||||
void init_xtrans_block(struct xtrans_block* info, const struct xtrans_params *params, INT64 raw_offset, unsigned dsize);
|
||||
void copy_line_to_xtrans(struct xtrans_block* info, int cur_line, int cur_block, int cur_block_width);
|
||||
void fuji_zerobits(struct xtrans_block* info, int *count);
|
||||
void fuji_read_code(struct xtrans_block* info, int *data, int bits_to_read);
|
||||
int bitDiff(int value1, int value2);
|
||||
int fuji_decode_sample_even(struct xtrans_block* info, const struct xtrans_params * params, ushort* line_buf, int pos, struct int_pair* grads);
|
||||
int fuji_decode_sample_odd(struct xtrans_block* info, const struct xtrans_params * params, ushort* line_buf, int pos, struct int_pair* grads);
|
||||
void fuji_decode_interpolation_even(int line_width, ushort* line_buf, int pos);
|
||||
void xtrans_extend_generic(ushort *linebuf[_ltotal], int line_width, int start, int end);
|
||||
void xtrans_extend_red(ushort *linebuf[_ltotal], int line_width);
|
||||
void xtrans_extend_green(ushort *linebuf[_ltotal], int line_width);
|
||||
void xtrans_extend_blue(ushort *linebuf[_ltotal], int line_width);
|
||||
void xtrans_decode_block(struct xtrans_block* info, const struct xtrans_params *params, int cur_line);
|
||||
void xtrans_decode_strip(const struct xtrans_params* info_common, int cur_block, INT64 raw_offset, unsigned dsize);
|
||||
void xtrans_compressed_load_raw();
|
||||
void xtrans_decode_loop(const struct xtrans_params* common_info, int count, INT64* raw_block_offsets, unsigned *block_sizes);
|
||||
void parse_xtrans_header();
|
||||
void pentax_load_raw();
|
||||
void nikon_load_raw();
|
||||
int nikon_is_compressed();
|
||||
|
@ -22,8 +22,18 @@
|
||||
#include "mytime.h"
|
||||
#include "refreshmap.h"
|
||||
#include "rt_math.h"
|
||||
// "ceil" rounding
|
||||
#define SKIPS(a,b) ((a) / (b) + ((a) % (b) > 0))
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
// "ceil" rounding
|
||||
template<typename T>
|
||||
constexpr T skips(T a, T b)
|
||||
{
|
||||
return a / b + static_cast<bool>(a % b);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
namespace rtengine
|
||||
{
|
||||
@ -33,7 +43,7 @@ extern const Settings* settings;
|
||||
Crop::Crop (ImProcCoordinator* parent, EditDataProvider *editDataProvider, bool isDetailWindow)
|
||||
: PipetteBuffer(editDataProvider), origCrop(nullptr), laboCrop(nullptr), labnCrop(nullptr),
|
||||
cropImg(nullptr), cbuf_real(nullptr), cshmap(nullptr), transCrop(nullptr), cieCrop(nullptr), cbuffer(nullptr),
|
||||
updating(false), newUpdatePending(false), skip(10), padding(0),
|
||||
updating(false), newUpdatePending(false), skip(10),
|
||||
cropx(0), cropy(0), cropw(-1), croph(-1),
|
||||
trafx(0), trafy(0), trafw(-1), trafh(-1),
|
||||
rqcropx(0), rqcropy(0), rqcropw(-1), rqcroph(-1),
|
||||
@ -111,6 +121,12 @@ void Crop::setEditSubscriber(EditSubscriber* newSubscriber)
|
||||
// If oldSubscriber == NULL && newSubscriber != NULL && newSubscriber->getEditingType() == ET_PIPETTE-> the image will be allocated when necessary
|
||||
}
|
||||
|
||||
bool Crop::hasListener()
|
||||
{
|
||||
MyMutex::MyLock cropLock(cropMutex);
|
||||
return cropImageListener;
|
||||
}
|
||||
|
||||
void Crop::update (int todo)
|
||||
{
|
||||
MyMutex::MyLock cropLock(cropMutex);
|
||||
@ -684,7 +700,7 @@ void Crop::update (int todo)
|
||||
}
|
||||
|
||||
if (needstransform)
|
||||
parent->ipf.transform (baseCrop, transCrop, cropx / skip, cropy / skip, trafx / skip, trafy / skip, SKIPS(parent->fw, skip), SKIPS(parent->fh, skip), parent->getFullWidth(), parent->getFullHeight(),
|
||||
parent->ipf.transform (baseCrop, transCrop, cropx / skip, cropy / skip, trafx / skip, trafy / skip, skips(parent->fw, skip), skips(parent->fh, skip), parent->getFullWidth(), parent->getFullHeight(),
|
||||
parent->imgsrc->getMetaData()->getFocalLen(), parent->imgsrc->getMetaData()->getFocalLen35mm(),
|
||||
parent->imgsrc->getMetaData()->getFocusDist(), parent->imgsrc->getRotateDegree(), false);
|
||||
else
|
||||
@ -714,7 +730,7 @@ void Crop::update (int todo)
|
||||
|
||||
// blurmap for shadow & highlights
|
||||
if ((todo & M_BLURMAP) && params.sh.enabled) {
|
||||
double radius = sqrt (double(SKIPS(parent->fw, skip) * SKIPS(parent->fw, skip) + SKIPS(parent->fh, skip) * SKIPS(parent->fh, skip))) / 2.0;
|
||||
double radius = sqrt (double(skips(parent->fw, skip) * skips(parent->fw, skip) + skips(parent->fh, skip) * skips(parent->fh, skip))) / 2.0;
|
||||
double shradius = params.sh.radius;
|
||||
|
||||
if (!params.sh.hq) {
|
||||
@ -1114,11 +1130,11 @@ bool Crop::setCropSizes (int rcx, int rcy, int rcw, int rch, int skip, bool inte
|
||||
int orW, orH;
|
||||
parent->imgsrc->getSize (cp, orW, orH);
|
||||
|
||||
int cw = SKIPS(bw, skip);
|
||||
int ch = SKIPS(bh, skip);
|
||||
int cw = skips(bw, skip);
|
||||
int ch = skips(bh, skip);
|
||||
|
||||
leftBorder = SKIPS(rqx1 - bx1, skip);
|
||||
upperBorder = SKIPS(rqy1 - by1, skip);
|
||||
leftBorder = skips(rqx1 - bx1, skip);
|
||||
upperBorder = skips(rqy1 - by1, skip);
|
||||
|
||||
if (settings->verbose) {
|
||||
printf ("setsizes starts (%d, %d, %d, %d, %d, %d)\n", orW, orH, trafw, trafh, cw, ch);
|
||||
@ -1286,5 +1302,22 @@ void Crop::fullUpdate ()
|
||||
parent->updaterThreadStart.unlock ();
|
||||
}
|
||||
|
||||
int Crop::get_skip()
|
||||
{
|
||||
MyMutex::MyLock lock(cropMutex);
|
||||
return skip;
|
||||
}
|
||||
|
||||
int Crop::getLeftBorder()
|
||||
{
|
||||
MyMutex::MyLock lock(cropMutex);
|
||||
return leftBorder;
|
||||
}
|
||||
|
||||
int Crop::getUpperBorder()
|
||||
{
|
||||
MyMutex::MyLock lock(cropMutex);
|
||||
return upperBorder;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -16,8 +16,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef _CROP_H_
|
||||
#define _CROP_H_
|
||||
#pragma once
|
||||
|
||||
#include "improccoordinator.h"
|
||||
#include "rtengine.h"
|
||||
@ -57,19 +56,18 @@ protected:
|
||||
bool updating; /// Flag telling if an updater thread is currently processing
|
||||
bool newUpdatePending; /// Flag telling the updater thread that a new update is pending
|
||||
int skip;
|
||||
int padding; /// Minimum space allowed around image in the display area
|
||||
int cropx, cropy, cropw, croph; /// size of the detail crop image ('skip' taken into account), with border
|
||||
int trafx, trafy, trafw, trafh; /// the size and position to get from the imagesource that is transformed to the requested crop area
|
||||
int rqcropx, rqcropy, rqcropw, rqcroph; /// size of the requested detail crop image (the image might be smaller) (without border)
|
||||
int borderRequested; /// requested extra border size for image processing
|
||||
const int borderRequested; /// requested extra border size for image processing
|
||||
int upperBorder, leftBorder; /// extra border size really allocated for image processing
|
||||
|
||||
bool cropAllocated;
|
||||
DetailedCropListener* cropImageListener;
|
||||
|
||||
MyMutex cropMutex;
|
||||
ImProcCoordinator* parent;
|
||||
bool isDetailWindow;
|
||||
ImProcCoordinator* const parent;
|
||||
const bool isDetailWindow;
|
||||
EditUniqueID getCurrEditID();
|
||||
bool setCropSizes (int cropX, int cropY, int cropW, int cropH, int skip, bool internal);
|
||||
void freeAll ();
|
||||
@ -78,19 +76,8 @@ public:
|
||||
Crop (ImProcCoordinator* parent, EditDataProvider *editDataProvider, bool isDetailWindow);
|
||||
virtual ~Crop ();
|
||||
|
||||
void mLock ()
|
||||
{
|
||||
cropMutex.lock();
|
||||
}
|
||||
void mUnlock ()
|
||||
{
|
||||
cropMutex.lock();
|
||||
}
|
||||
void setEditSubscriber(EditSubscriber* newSubscriber);
|
||||
bool hasListener ()
|
||||
{
|
||||
return cropImageListener;
|
||||
}
|
||||
bool hasListener();
|
||||
void update (int todo);
|
||||
void setWindow (int cropX, int cropY, int cropW, int cropH, int skip)
|
||||
{
|
||||
@ -106,22 +93,8 @@ public:
|
||||
|
||||
void setListener (DetailedCropListener* il);
|
||||
void destroy ();
|
||||
int get_skip ()
|
||||
{
|
||||
return skip;
|
||||
}
|
||||
int getPadding ()
|
||||
{
|
||||
return padding;
|
||||
}
|
||||
int getLeftBorder ()
|
||||
{
|
||||
return leftBorder;
|
||||
}
|
||||
int getUpperBorder ()
|
||||
{
|
||||
return upperBorder;
|
||||
}
|
||||
int get_skip();
|
||||
int getLeftBorder();
|
||||
int getUpperBorder();
|
||||
};
|
||||
}
|
||||
#endif
|
||||
|
@ -1351,7 +1351,7 @@ int ImageIO::saveTIFF (Glib::ustring fname, int bps, bool uncompressed)
|
||||
|
||||
}
|
||||
|
||||
TIFFSetField (out, TIFFTAG_SOFTWARE, "RawTherapee " VERSION);
|
||||
TIFFSetField (out, TIFFTAG_SOFTWARE, "RawTherapee " RTVERSION);
|
||||
TIFFSetField (out, TIFFTAG_IMAGEWIDTH, width);
|
||||
TIFFSetField (out, TIFFTAG_IMAGELENGTH, height);
|
||||
TIFFSetField (out, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
|
||||
|
@ -69,7 +69,7 @@
|
||||
#define ALIGNED64
|
||||
#define ALIGNED16
|
||||
#endif
|
||||
#if !defined(__clang__) && defined _OPENMP
|
||||
#if defined _OPENMP
|
||||
#define _RT_NESTED_OPENMP
|
||||
#endif
|
||||
#endif
|
||||
|
@ -26,7 +26,7 @@
|
||||
#include "../rtgui/paramsedited.h"
|
||||
#include "../rtgui/options.h"
|
||||
#include <locale.h>
|
||||
#define APPVERSION VERSION
|
||||
#define APPVERSION RTVERSION
|
||||
|
||||
using namespace std;
|
||||
extern Options options;
|
||||
|
@ -435,6 +435,10 @@ int RawImage::loadRaw (bool loadData, bool closeFile, ProgressListener *plistene
|
||||
return 2;
|
||||
}
|
||||
|
||||
if(xtransCompressed) {
|
||||
parse_xtrans_header();
|
||||
}
|
||||
|
||||
if (flip == 5) {
|
||||
this->rotate_deg = 270;
|
||||
} else if (flip == 3) {
|
||||
|
800
rtengine/xtranscompressed.cc
Normal file
@ -0,0 +1,800 @@
|
||||
/* -*- C++ -*-
|
||||
* File: xtranscompressed.cpp
|
||||
* Copyright (C) 2016 Alexey Danilchenko
|
||||
*
|
||||
* Adopted to LibRaw by Alex Tutubalin, lexa@lexa.ru
|
||||
* LibRaw Fujifilm/compressed decoder
|
||||
|
||||
LibRaw is free software; you can redistribute it and/or modify
|
||||
it under the terms of the one of three licenses as you choose:
|
||||
|
||||
1. GNU LESSER GENERAL PUBLIC LICENSE version 2.1
|
||||
(See file LICENSE.LGPL provided in LibRaw distribution archive for details).
|
||||
|
||||
2. COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
|
||||
(See file LICENSE.CDDL provided in LibRaw distribution archive for details).
|
||||
|
||||
* Adopted to RawTherapee by Ingo Weyrich
|
||||
|
||||
*/
|
||||
|
||||
void CLASS init_xtrans (struct xtrans_params* info)
|
||||
{
|
||||
int cur_val, i;
|
||||
char *qt;
|
||||
|
||||
if (fuji_block_width % 3) {
|
||||
derror();
|
||||
}
|
||||
|
||||
info->q_table = (char *) malloc (32768);
|
||||
merror (info->q_table, "init_xtrans()");
|
||||
|
||||
info->line_width = (fuji_block_width * 2) / 3;
|
||||
|
||||
info->q_point[0] = 0;
|
||||
info->q_point[1] = 0x12;
|
||||
info->q_point[2] = 0x43;
|
||||
info->q_point[3] = 0x114;
|
||||
info->q_point[4] = (1 << fuji_bits) - 1;
|
||||
info->min_value = 0x40;
|
||||
|
||||
cur_val = -info->q_point[4];
|
||||
|
||||
for (qt = info->q_table; cur_val <= info->q_point[4]; ++qt, ++cur_val) {
|
||||
if (cur_val <= -info->q_point[3]) {
|
||||
*qt = -4;
|
||||
} else if (cur_val <= -info->q_point[2]) {
|
||||
*qt = -3;
|
||||
} else if (cur_val <= -info->q_point[1]) {
|
||||
*qt = -2;
|
||||
} else if (cur_val < 0) {
|
||||
*qt = -1;
|
||||
} else if (cur_val == 0) {
|
||||
*qt = 0;
|
||||
} else if (cur_val < info->q_point[1]) {
|
||||
*qt = 1;
|
||||
} else if (cur_val < info->q_point[2]) {
|
||||
*qt = 2;
|
||||
} else if (cur_val < info->q_point[3]) {
|
||||
*qt = 3;
|
||||
} else {
|
||||
*qt = 4;
|
||||
}
|
||||
}
|
||||
|
||||
// populting gradients
|
||||
if (info->q_point[4] == 0x3FFF) {
|
||||
info->total_values = 0x4000;
|
||||
info->raw_bits = 14;
|
||||
info->max_bits = 56;
|
||||
info->maxDiff = 256;
|
||||
} else if (info->q_point[4] == 0xFFF) {
|
||||
info->total_values = 4096;
|
||||
info->raw_bits = 12;
|
||||
info->max_bits = 48;
|
||||
info->maxDiff = 64;
|
||||
} else {
|
||||
derror();
|
||||
}
|
||||
}
|
||||
|
||||
#define XTRANS_BUF_SIZE 0x10000u
|
||||
|
||||
void CLASS fuji_fill_buffer (struct xtrans_block *info)
|
||||
{
|
||||
if (info->cur_pos >= info->cur_buf_size) {
|
||||
info->cur_pos = 0;
|
||||
info->cur_buf_offset += info->cur_buf_size;
|
||||
#ifdef _OPENMP
|
||||
#pragma omp critical
|
||||
#endif
|
||||
{
|
||||
fseek (info->input, info->cur_buf_offset, SEEK_SET);
|
||||
info->cur_buf_size = fread (info->cur_buf, 1, std::min (info->max_read_size, XTRANS_BUF_SIZE), info->input);
|
||||
}
|
||||
if (info->cur_buf_size < 1) // nothing read
|
||||
;//throw LIBRAW_EXCEPTION_IO_EOF;
|
||||
|
||||
info->max_read_size -= info->cur_buf_size;
|
||||
}
|
||||
}
|
||||
|
||||
void CLASS init_xtrans_block (struct xtrans_block* info, const struct xtrans_params *params, INT64 raw_offset, unsigned dsize)
|
||||
{
|
||||
info->linealloc = (ushort*)calloc (sizeof (ushort), _ltotal * (params->line_width + 2));
|
||||
merror (info->linealloc, "init_xtrans_block()");
|
||||
|
||||
info->input = ifp;
|
||||
INT64 fsize = info->input->size;
|
||||
info->max_read_size = std::min (unsigned (fsize - raw_offset), dsize + 16); // Data size may be incorrect?
|
||||
|
||||
info->linebuf[_R0] = info->linealloc;
|
||||
|
||||
for (int i = _R1; i <= _B4; i++) {
|
||||
info->linebuf[i] = info->linebuf[i - 1] + params->line_width + 2;
|
||||
}
|
||||
|
||||
// init buffer
|
||||
info->cur_buf = (uchar*)malloc (XTRANS_BUF_SIZE);
|
||||
merror (info->cur_buf, "init_xtrans_block()");
|
||||
info->cur_bit = 0;
|
||||
info->cur_pos = 0;
|
||||
info->cur_buf_offset = raw_offset;
|
||||
|
||||
for (int j = 0; j < 3; j++)
|
||||
for (int i = 0; i < 41; i++) {
|
||||
info->grad_even[j][i].value1 = params->maxDiff;
|
||||
info->grad_even[j][i].value2 = 1;
|
||||
info->grad_odd[j][i].value1 = params->maxDiff;
|
||||
info->grad_odd[j][i].value2 = 1;
|
||||
}
|
||||
|
||||
info->cur_buf_size = 0;
|
||||
fuji_fill_buffer (info);
|
||||
}
|
||||
|
||||
void CLASS copy_line_to_xtrans (struct xtrans_block* info, int cur_line, int cur_block, int cur_block_width)
|
||||
{
|
||||
ushort *lineBufB[3];
|
||||
ushort *lineBufG[6];
|
||||
ushort *lineBufR[3];
|
||||
unsigned pixel_count;
|
||||
ushort* line_buf;
|
||||
int index;
|
||||
|
||||
int offset = fuji_block_width * cur_block + 6 * raw_width * cur_line;
|
||||
ushort* raw_block_data = raw_image + offset;
|
||||
int row_count = 0;
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
lineBufR[i] = info->linebuf[_R2 + i] + 1;
|
||||
lineBufB[i] = info->linebuf[_B2 + i] + 1;
|
||||
}
|
||||
|
||||
for (int i = 0; i < 6; i++) {
|
||||
lineBufG[i] = info->linebuf[_G2 + i] + 1;
|
||||
}
|
||||
|
||||
while (row_count < 6) {
|
||||
pixel_count = 0;
|
||||
|
||||
while (pixel_count < cur_block_width) {
|
||||
switch (xtrans_abs[row_count][ (pixel_count % 6)]) {
|
||||
case 0: // red
|
||||
line_buf = lineBufR[row_count >> 1];
|
||||
break;
|
||||
|
||||
case 1: // green
|
||||
line_buf = lineBufG[row_count];
|
||||
break;
|
||||
|
||||
case 2: // blue
|
||||
line_buf = lineBufB[row_count >> 1];
|
||||
break;
|
||||
}
|
||||
|
||||
index = (((pixel_count * 2 / 3) & 0x7FFFFFFE) | (pixel_count % 3) & 1) + ((pixel_count % 3) >> 1);
|
||||
raw_block_data[pixel_count] = line_buf[index];
|
||||
|
||||
++pixel_count;
|
||||
}
|
||||
|
||||
++row_count;
|
||||
raw_block_data += raw_width;
|
||||
}
|
||||
}
|
||||
|
||||
#define fuji_quant_gradient(i,v1,v2) (9*i->q_table[i->q_point[4]+(v1)] + i->q_table[i->q_point[4]+(v2)])
|
||||
|
||||
void CLASS fuji_zerobits (struct xtrans_block* info, int *count)
|
||||
{
|
||||
uchar zero = 0;
|
||||
*count = 0;
|
||||
|
||||
while (zero == 0) {
|
||||
zero = (info->cur_buf[info->cur_pos] >> (7 - info->cur_bit)) & 1;
|
||||
info->cur_bit++;
|
||||
info->cur_bit &= 7;
|
||||
|
||||
if (!info->cur_bit) {
|
||||
++info->cur_pos;
|
||||
fuji_fill_buffer (info);
|
||||
}
|
||||
|
||||
if (zero) {
|
||||
break;
|
||||
}
|
||||
|
||||
++*count;
|
||||
}
|
||||
}
|
||||
|
||||
void CLASS fuji_read_code (struct xtrans_block* info, int *data, int bits_to_read)
|
||||
{
|
||||
uchar bits_left = bits_to_read;
|
||||
uchar bits_left_in_byte = 8 - (info->cur_bit & 7);
|
||||
*data = 0;
|
||||
|
||||
if (!bits_to_read) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (bits_to_read >= bits_left_in_byte) {
|
||||
do {
|
||||
*data <<= bits_left_in_byte;
|
||||
bits_left -= bits_left_in_byte;
|
||||
*data |= info->cur_buf[info->cur_pos] & ((1 << bits_left_in_byte) - 1);
|
||||
++info->cur_pos;
|
||||
fuji_fill_buffer (info);
|
||||
bits_left_in_byte = 8;
|
||||
} while (bits_left >= 8);
|
||||
}
|
||||
|
||||
if (!bits_left) {
|
||||
info->cur_bit = (8 - (bits_left_in_byte & 7)) & 7;
|
||||
return;
|
||||
}
|
||||
|
||||
*data <<= bits_left;
|
||||
bits_left_in_byte -= bits_left;
|
||||
*data |= ((1 << bits_left) - 1) & ((unsigned)info->cur_buf[info->cur_pos] >> bits_left_in_byte);
|
||||
info->cur_bit = (8 - (bits_left_in_byte & 7)) & 7;
|
||||
}
|
||||
|
||||
int CLASS bitDiff (int value1, int value2)
|
||||
{
|
||||
int decBits = 0;
|
||||
|
||||
if ( value2 < value1 )
|
||||
while (decBits <= 12 && (value2 << ++decBits) < value1)
|
||||
;
|
||||
|
||||
return decBits;
|
||||
}
|
||||
|
||||
int CLASS fuji_decode_sample_even (struct xtrans_block* info, const struct xtrans_params * params, ushort* line_buf, int pos, struct int_pair* grads)
|
||||
{
|
||||
int interp_val = 0;
|
||||
int errcnt = 0;
|
||||
|
||||
int sample = 0, code = 0;
|
||||
ushort* line_buf_cur = line_buf + pos;
|
||||
int Rb = line_buf_cur[-2 - params->line_width];
|
||||
int Rc = line_buf_cur[-3 - params->line_width];
|
||||
int Rd = line_buf_cur[-1 - params->line_width];
|
||||
int Rf = line_buf_cur[-4 - 2 * params->line_width];
|
||||
|
||||
int grad, gradient, diffRcRb, diffRfRb, diffRdRb;
|
||||
|
||||
grad = fuji_quant_gradient (params, Rb - Rf, Rc - Rb);
|
||||
gradient = std::abs (grad);
|
||||
diffRcRb = std::abs (Rc - Rb);
|
||||
diffRfRb = std::abs (Rf - Rb);
|
||||
diffRdRb = std::abs (Rd - Rb);
|
||||
|
||||
if ( diffRcRb > diffRfRb && diffRcRb > diffRdRb ) {
|
||||
interp_val = Rf + Rd + 2 * Rb;
|
||||
} else if ( diffRdRb > diffRcRb && diffRdRb > diffRfRb ) {
|
||||
interp_val = Rf + Rc + 2 * Rb;
|
||||
} else {
|
||||
interp_val = Rd + Rc + 2 * Rb;
|
||||
}
|
||||
|
||||
|
||||
fuji_zerobits (info, &sample);
|
||||
|
||||
if (sample < params->max_bits - params->raw_bits - 1) {
|
||||
int decBits = bitDiff (grads[gradient].value1, grads[gradient].value2);
|
||||
fuji_read_code (info, &code, decBits);
|
||||
code += sample << decBits;
|
||||
} else {
|
||||
fuji_read_code (info, &code, params->raw_bits);
|
||||
code++;
|
||||
}
|
||||
|
||||
if (code < 0 || code >= params->total_values) {
|
||||
errcnt++;
|
||||
}
|
||||
|
||||
if (code & 1) {
|
||||
code = -1 - code / 2;
|
||||
} else {
|
||||
code /= 2;
|
||||
}
|
||||
|
||||
grads[gradient].value1 += std::abs (code);
|
||||
|
||||
if (grads[gradient].value2 == params->min_value ) {
|
||||
grads[gradient].value1 >>= 1;
|
||||
grads[gradient].value2 >>= 1;
|
||||
}
|
||||
|
||||
grads[gradient].value2++;
|
||||
|
||||
if (grad < 0) {
|
||||
interp_val = (interp_val >> 2) - code;
|
||||
} else {
|
||||
interp_val = (interp_val >> 2) + code;
|
||||
}
|
||||
|
||||
if ( interp_val < 0 ) {
|
||||
interp_val += params->total_values;
|
||||
} else if (interp_val > params->q_point[4]) {
|
||||
interp_val -= params->total_values;
|
||||
}
|
||||
|
||||
if ( interp_val >= 0 ) {
|
||||
line_buf_cur[0] = std::min (interp_val, params->q_point[4]);
|
||||
} else {
|
||||
line_buf_cur[0] = 0;
|
||||
}
|
||||
|
||||
return errcnt;
|
||||
}
|
||||
|
||||
int CLASS fuji_decode_sample_odd (struct xtrans_block* info, const struct xtrans_params * params, ushort* line_buf, int pos, struct int_pair* grads)
|
||||
{
|
||||
int interp_val = 0;
|
||||
int errcnt = 0;
|
||||
|
||||
int sample = 0, code = 0;
|
||||
ushort* line_buf_cur = line_buf + pos;
|
||||
int Ra = line_buf_cur[-1];
|
||||
int Rb = line_buf_cur[-2 - params->line_width];
|
||||
int Rc = line_buf_cur[-3 - params->line_width];
|
||||
int Rd = line_buf_cur[-1 - params->line_width];
|
||||
int Rg = line_buf_cur[1];
|
||||
|
||||
int grad, gradient;
|
||||
|
||||
grad = fuji_quant_gradient (params, Rb - Rc, Rc - Ra);
|
||||
gradient = std::abs (grad);
|
||||
|
||||
if ((Rb > Rc && Rb > Rd) || (Rb < Rc && Rb < Rd)) {
|
||||
interp_val = (Rg + Ra + 2 * Rb) >> 2;
|
||||
} else {
|
||||
interp_val = (Ra + Rg) >> 1;
|
||||
}
|
||||
|
||||
fuji_zerobits (info, &sample);
|
||||
|
||||
if (sample < params->max_bits - params->raw_bits - 1) {
|
||||
int decBits = bitDiff (grads[gradient].value1, grads[gradient].value2);
|
||||
fuji_read_code (info, &code, decBits);
|
||||
code += sample << decBits;
|
||||
} else {
|
||||
fuji_read_code (info, &code, params->raw_bits);
|
||||
code++;
|
||||
}
|
||||
|
||||
if (code < 0 || code >= params->total_values) {
|
||||
errcnt++;
|
||||
}
|
||||
|
||||
if (code & 1) {
|
||||
code = -1 - code / 2;
|
||||
} else {
|
||||
code /= 2;
|
||||
}
|
||||
|
||||
grads[gradient].value1 += std::abs (code);
|
||||
|
||||
if (grads[gradient].value2 == params->min_value) {
|
||||
grads[gradient].value1 >>= 1;
|
||||
grads[gradient].value2 >>= 1;
|
||||
}
|
||||
|
||||
grads[gradient].value2++;
|
||||
|
||||
if (grad < 0) {
|
||||
interp_val -= code;
|
||||
} else {
|
||||
interp_val += code;
|
||||
}
|
||||
|
||||
if ( interp_val < 0 ) {
|
||||
interp_val += params->total_values;
|
||||
} else if (interp_val > params->q_point[4]) {
|
||||
interp_val -= params->total_values;
|
||||
}
|
||||
|
||||
if ( interp_val >= 0 ) {
|
||||
line_buf_cur[0] = std::min(interp_val, params->q_point[4]);
|
||||
} else {
|
||||
line_buf_cur[0] = 0;
|
||||
}
|
||||
|
||||
return errcnt;
|
||||
}
|
||||
|
||||
void CLASS fuji_decode_interpolation_even (int line_width, ushort* line_buf, int pos)
|
||||
{
|
||||
ushort* line_buf_cur = line_buf + pos;
|
||||
int Rb = line_buf_cur[-2 - line_width];
|
||||
int Rc = line_buf_cur[-3 - line_width];
|
||||
int Rd = line_buf_cur[-1 - line_width];
|
||||
int Rf = line_buf_cur[-4 - 2 * line_width];
|
||||
int diffRcRb = std::abs (Rc - Rb);
|
||||
int diffRfRb = std::abs (Rf - Rb);
|
||||
int diffRdRb = std::abs (Rd - Rb);
|
||||
|
||||
if ( diffRcRb > diffRfRb && diffRcRb > diffRdRb ) {
|
||||
*line_buf_cur = (Rf + Rd + 2 * Rb) >> 2;
|
||||
} else if ( diffRdRb > diffRcRb && diffRdRb > diffRfRb ) {
|
||||
*line_buf_cur = (Rf + Rc + 2 * Rb) >> 2;
|
||||
} else {
|
||||
*line_buf_cur = (Rd + Rc + 2 * Rb) >> 2;
|
||||
}
|
||||
}
|
||||
|
||||
void CLASS xtrans_extend_generic (ushort *linebuf[_ltotal], int line_width, int start, int end)
|
||||
{
|
||||
for (int i = start; i <= end; i++) {
|
||||
linebuf[i][0] = linebuf[i - 1][1];
|
||||
linebuf[i][line_width + 1] = linebuf[i - 1][line_width];
|
||||
}
|
||||
}
|
||||
|
||||
void CLASS xtrans_extend_red (ushort *linebuf[_ltotal], int line_width)
|
||||
{
|
||||
xtrans_extend_generic (linebuf, line_width, _R2, _R4);
|
||||
}
|
||||
|
||||
void CLASS xtrans_extend_green (ushort *linebuf[_ltotal], int line_width)
|
||||
{
|
||||
xtrans_extend_generic (linebuf, line_width, _G2, _G7);
|
||||
}
|
||||
|
||||
void CLASS xtrans_extend_blue (ushort *linebuf[_ltotal], int line_width)
|
||||
{
|
||||
xtrans_extend_generic (linebuf, line_width, _B2, _B4);
|
||||
}
|
||||
|
||||
void CLASS xtrans_decode_block (struct xtrans_block* info, const struct xtrans_params *params, int cur_line)
|
||||
{
|
||||
int r_even_pos = 0, r_odd_pos = 1;
|
||||
int g_even_pos = 0, g_odd_pos = 1;
|
||||
int b_even_pos = 0, b_odd_pos = 1;
|
||||
|
||||
int errcnt = 0;
|
||||
|
||||
const int line_width = params->line_width;
|
||||
|
||||
while (g_even_pos < line_width || g_odd_pos < line_width) {
|
||||
if (g_even_pos < line_width) {
|
||||
fuji_decode_interpolation_even (line_width, info->linebuf[_R2] + 1, r_even_pos);
|
||||
r_even_pos += 2;
|
||||
errcnt += fuji_decode_sample_even (info, params, info->linebuf[_G2] + 1, g_even_pos, info->grad_even[0]);
|
||||
g_even_pos += 2;
|
||||
}
|
||||
|
||||
if (g_even_pos > 8) {
|
||||
errcnt += fuji_decode_sample_odd (info, params, info->linebuf[_R2] + 1, r_odd_pos, info->grad_odd[0]);
|
||||
r_odd_pos += 2;
|
||||
errcnt += fuji_decode_sample_odd (info, params, info->linebuf[_G2] + 1, g_odd_pos, info->grad_odd[0]);
|
||||
g_odd_pos += 2;
|
||||
}
|
||||
}
|
||||
|
||||
xtrans_extend_red (info->linebuf, line_width);
|
||||
xtrans_extend_green (info->linebuf, line_width);
|
||||
|
||||
g_even_pos = 0, g_odd_pos = 1;
|
||||
|
||||
while (g_even_pos < line_width || g_odd_pos < line_width) {
|
||||
if (g_even_pos < line_width) {
|
||||
errcnt += fuji_decode_sample_even (info, params, info->linebuf[_G3] + 1, g_even_pos, info->grad_even[1]);
|
||||
g_even_pos += 2;
|
||||
fuji_decode_interpolation_even (line_width, info->linebuf[_B2] + 1, b_even_pos);
|
||||
b_even_pos += 2;
|
||||
}
|
||||
|
||||
if (g_even_pos > 8) {
|
||||
errcnt += fuji_decode_sample_odd (info, params, info->linebuf[_G3] + 1, g_odd_pos, info->grad_odd[1]);
|
||||
g_odd_pos += 2;
|
||||
errcnt += fuji_decode_sample_odd (info, params, info->linebuf[_B2] + 1, b_odd_pos, info->grad_odd[1]);
|
||||
b_odd_pos += 2;
|
||||
}
|
||||
}
|
||||
|
||||
xtrans_extend_green (info->linebuf, line_width);
|
||||
xtrans_extend_blue (info->linebuf, line_width);
|
||||
|
||||
r_even_pos = 0, r_odd_pos = 1;
|
||||
g_even_pos = 0, g_odd_pos = 1;
|
||||
|
||||
while (g_even_pos < line_width || g_odd_pos < line_width) {
|
||||
if (g_even_pos < line_width) {
|
||||
if (r_even_pos & 3) {
|
||||
errcnt += fuji_decode_sample_even (info, params, info->linebuf[_R3] + 1, r_even_pos, info->grad_even[2]);
|
||||
} else {
|
||||
fuji_decode_interpolation_even (line_width, info->linebuf[_R3] + 1, r_even_pos);
|
||||
}
|
||||
|
||||
r_even_pos += 2;
|
||||
fuji_decode_interpolation_even (line_width, info->linebuf[_G4] + 1, g_even_pos);
|
||||
g_even_pos += 2;
|
||||
}
|
||||
|
||||
if (g_even_pos > 8) {
|
||||
errcnt += fuji_decode_sample_odd (info, params, info->linebuf[_R3] + 1, r_odd_pos, info->grad_odd[2]);
|
||||
r_odd_pos += 2;
|
||||
errcnt += fuji_decode_sample_odd (info, params, info->linebuf[_G4] + 1, g_odd_pos, info->grad_odd[2]);
|
||||
g_odd_pos += 2;
|
||||
}
|
||||
}
|
||||
|
||||
xtrans_extend_red (info->linebuf, line_width);
|
||||
xtrans_extend_green (info->linebuf, line_width);
|
||||
|
||||
g_even_pos = 0, g_odd_pos = 1;
|
||||
b_even_pos = 0, b_odd_pos = 1;
|
||||
|
||||
while (g_even_pos < line_width || g_odd_pos < line_width) {
|
||||
if (g_even_pos < line_width) {
|
||||
errcnt += fuji_decode_sample_even (info, params, info->linebuf[_G5] + 1, g_even_pos, info->grad_even[0]);
|
||||
g_even_pos += 2;
|
||||
|
||||
if ((b_even_pos & 3) == 2) {
|
||||
fuji_decode_interpolation_even (line_width, info->linebuf[_B3] + 1, b_even_pos);
|
||||
} else {
|
||||
errcnt += fuji_decode_sample_even (info, params, info->linebuf[_B3] + 1, b_even_pos, info->grad_even[0]);
|
||||
}
|
||||
|
||||
b_even_pos += 2;
|
||||
}
|
||||
|
||||
if (g_even_pos > 8) {
|
||||
errcnt += fuji_decode_sample_odd (info, params, info->linebuf[_G5] + 1, g_odd_pos, info->grad_odd[0]);
|
||||
g_odd_pos += 2;
|
||||
errcnt += fuji_decode_sample_odd (info, params, info->linebuf[_B3] + 1, b_odd_pos, info->grad_odd[0]);
|
||||
b_odd_pos += 2;
|
||||
}
|
||||
}
|
||||
|
||||
xtrans_extend_green (info->linebuf, line_width);
|
||||
xtrans_extend_blue (info->linebuf, line_width);
|
||||
|
||||
r_even_pos = 0, r_odd_pos = 1;
|
||||
g_even_pos = 0, g_odd_pos = 1;
|
||||
|
||||
while (g_even_pos < line_width || g_odd_pos < line_width) {
|
||||
if (g_even_pos < line_width) {
|
||||
if ((r_even_pos & 3) == 2) {
|
||||
fuji_decode_interpolation_even (line_width, info->linebuf[_R4] + 1, r_even_pos);
|
||||
} else {
|
||||
errcnt += fuji_decode_sample_even (info, params, info->linebuf[_R4] + 1, r_even_pos, info->grad_even[1]);
|
||||
}
|
||||
|
||||
r_even_pos += 2;
|
||||
errcnt += fuji_decode_sample_even (info, params, info->linebuf[_G6] + 1, g_even_pos, info->grad_even[1]);
|
||||
g_even_pos += 2;
|
||||
}
|
||||
|
||||
if (g_even_pos > 8) {
|
||||
errcnt += fuji_decode_sample_odd (info, params, info->linebuf[_R4] + 1, r_odd_pos, info->grad_odd[1]);
|
||||
r_odd_pos += 2;
|
||||
errcnt += fuji_decode_sample_odd (info, params, info->linebuf[_G6] + 1, g_odd_pos, info->grad_odd[1]);
|
||||
g_odd_pos += 2;
|
||||
}
|
||||
}
|
||||
|
||||
xtrans_extend_red (info->linebuf, line_width);
|
||||
xtrans_extend_green (info->linebuf, line_width);
|
||||
|
||||
g_even_pos = 0, g_odd_pos = 1;
|
||||
b_even_pos = 0, b_odd_pos = 1;
|
||||
|
||||
while (g_even_pos < line_width || g_odd_pos < line_width) {
|
||||
if (g_even_pos < line_width) {
|
||||
fuji_decode_interpolation_even (line_width, info->linebuf[_G7] + 1, g_even_pos);
|
||||
g_even_pos += 2;
|
||||
|
||||
if (b_even_pos & 3) {
|
||||
errcnt += fuji_decode_sample_even (info, params, info->linebuf[_B4] + 1, b_even_pos, info->grad_even[2]);
|
||||
} else {
|
||||
fuji_decode_interpolation_even (line_width, info->linebuf[_B4] + 1, b_even_pos);
|
||||
}
|
||||
|
||||
b_even_pos += 2;
|
||||
}
|
||||
|
||||
if (g_even_pos > 8) {
|
||||
errcnt += fuji_decode_sample_odd (info, params, info->linebuf[_G7] + 1, g_odd_pos, info->grad_odd[2]);
|
||||
g_odd_pos += 2;
|
||||
errcnt += fuji_decode_sample_odd (info, params, info->linebuf[_B4] + 1, b_odd_pos, info->grad_odd[2]);
|
||||
b_odd_pos += 2;
|
||||
}
|
||||
}
|
||||
|
||||
xtrans_extend_green (info->linebuf, line_width);
|
||||
xtrans_extend_blue (info->linebuf, line_width);
|
||||
|
||||
if (errcnt) {
|
||||
derror();
|
||||
}
|
||||
}
|
||||
|
||||
void CLASS xtrans_decode_strip (const struct xtrans_params* info_common, int cur_block, INT64 raw_offset, unsigned dsize)
|
||||
{
|
||||
int cur_block_width, cur_line;
|
||||
unsigned line_size;
|
||||
struct xtrans_block info;
|
||||
|
||||
init_xtrans_block (&info, info_common, raw_offset, dsize);
|
||||
line_size = sizeof (ushort) * (info_common->line_width + 2);
|
||||
|
||||
cur_block_width = fuji_block_width;
|
||||
|
||||
if (cur_block + 1 == fuji_total_blocks) {
|
||||
cur_block_width = raw_width % fuji_block_width;
|
||||
}
|
||||
|
||||
struct i_pair {
|
||||
int a, b;
|
||||
};
|
||||
|
||||
const i_pair mtable[6] = { {_R0, _R3}, {_R1, _R4}, {_G0, _G6}, {_G1, _G7}, {_B0, _B3}, {_B1, _B4}},
|
||||
ztable[3] = {{_R2, 3}, {_G2, 6}, {_B2, 3}};
|
||||
|
||||
for (cur_line = 0; cur_line < fuji_total_lines; cur_line++) {
|
||||
xtrans_decode_block (&info, info_common, cur_line);
|
||||
|
||||
// copy data from line buffers and advance
|
||||
for (int i = 0; i < 6; i++) {
|
||||
memcpy (info.linebuf[mtable[i].a], info.linebuf[mtable[i].b], line_size);
|
||||
}
|
||||
|
||||
copy_line_to_xtrans (&info, cur_line, cur_block, cur_block_width);
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
memset (info.linebuf[ztable[i].a], 0, ztable[i].b * line_size);
|
||||
info.linebuf[ztable[i].a][0] = info.linebuf[ztable[i].a - 1][1];
|
||||
info.linebuf[ztable[i].a][info_common->line_width + 1] = info.linebuf[ztable[i].a - 1][info_common->line_width];
|
||||
}
|
||||
}
|
||||
|
||||
// release data
|
||||
free (info.linealloc);
|
||||
free (info.cur_buf);
|
||||
}
|
||||
|
||||
static unsigned sgetn (int n, uchar *s)
|
||||
{
|
||||
unsigned result = 0;
|
||||
|
||||
while (n-- > 0) {
|
||||
result = (result << 8) | (*s++);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void CLASS xtrans_compressed_load_raw()
|
||||
{
|
||||
struct xtrans_params common_info;
|
||||
int cur_block;
|
||||
unsigned line_size, *block_sizes;
|
||||
INT64 raw_offset, *raw_block_offsets;
|
||||
//struct xtrans_block info;
|
||||
|
||||
init_xtrans (&common_info);
|
||||
line_size = sizeof (ushort) * (common_info.line_width + 2);
|
||||
|
||||
// read block sizes
|
||||
block_sizes = (unsigned*) malloc (sizeof (unsigned) * fuji_total_blocks);
|
||||
merror (block_sizes, "xtrans_load_raw()");
|
||||
raw_block_offsets = (INT64*) malloc (sizeof (INT64) * fuji_total_blocks);
|
||||
merror (raw_block_offsets, "xtrans_load_raw()");
|
||||
|
||||
raw_offset = sizeof (unsigned) * fuji_total_blocks;
|
||||
|
||||
if (raw_offset & 0xC) {
|
||||
raw_offset += 0x10 - (raw_offset & 0xC);
|
||||
}
|
||||
|
||||
raw_offset += data_offset;
|
||||
|
||||
fseek (ifp, data_offset, SEEK_SET);
|
||||
fread (block_sizes, 1, sizeof (unsigned)*fuji_total_blocks, ifp);
|
||||
|
||||
raw_block_offsets[0] = raw_offset;
|
||||
|
||||
// calculating raw block offsets
|
||||
for (cur_block = 0; cur_block < fuji_total_blocks; cur_block++) {
|
||||
unsigned bsize = sgetn (4, (uchar *) (block_sizes + cur_block));
|
||||
block_sizes[cur_block] = bsize;
|
||||
}
|
||||
|
||||
for (cur_block = 1; cur_block < fuji_total_blocks; cur_block++) {
|
||||
raw_block_offsets[cur_block] = raw_block_offsets[cur_block - 1] + block_sizes[cur_block - 1] ;
|
||||
}
|
||||
|
||||
xtrans_decode_loop (&common_info, fuji_total_blocks, raw_block_offsets, block_sizes);
|
||||
|
||||
free (block_sizes);
|
||||
free (raw_block_offsets);
|
||||
free (common_info.q_table);
|
||||
}
|
||||
|
||||
void CLASS xtrans_decode_loop (const struct xtrans_params* common_info, int count, INT64* raw_block_offsets, unsigned *block_sizes)
|
||||
{
|
||||
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel for
|
||||
#endif
|
||||
|
||||
for (int cur_block = 0; cur_block < count ; cur_block++) {
|
||||
xtrans_decode_strip (common_info, cur_block, raw_block_offsets[cur_block], block_sizes[cur_block]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CLASS parse_xtrans_header()
|
||||
{
|
||||
|
||||
uchar header[16];
|
||||
|
||||
ushort signature;
|
||||
uchar version;
|
||||
uchar h_raw_type;
|
||||
uchar h_raw_bits;
|
||||
ushort h_raw_height;
|
||||
ushort h_raw_rounded_width;
|
||||
ushort h_raw_width;
|
||||
ushort h_block_size;
|
||||
uchar h_blocks_in_row;
|
||||
ushort h_total_lines;
|
||||
|
||||
fseek (ifp, data_offset, SEEK_SET);
|
||||
fread (header, 1, sizeof (header), ifp);
|
||||
|
||||
signature = sgetn (2, header);
|
||||
version = header[2];
|
||||
h_raw_type = header[3];
|
||||
h_raw_bits = header[4];
|
||||
h_raw_height = sgetn (2, header + 5);
|
||||
h_raw_rounded_width = sgetn (2, header + 7);
|
||||
h_raw_width = sgetn (2, header + 9);
|
||||
h_block_size = sgetn (2, header + 11);
|
||||
h_blocks_in_row = header[13];
|
||||
h_total_lines = sgetn (2, header + 14);
|
||||
|
||||
|
||||
// general validation
|
||||
if (signature != 0x4953
|
||||
|| version != 1
|
||||
|| h_raw_height > 0x3000
|
||||
|| h_raw_height < 6
|
||||
|| h_raw_height % 6
|
||||
|| h_raw_width > 0x3000
|
||||
|| h_raw_width < 0x300
|
||||
|| h_raw_width % 24
|
||||
|| h_raw_rounded_width > 0x3000
|
||||
|| h_raw_rounded_width < h_block_size
|
||||
|| h_raw_rounded_width % h_block_size
|
||||
|| h_raw_rounded_width - h_raw_width >= h_block_size
|
||||
|| h_block_size != 0x300
|
||||
|| h_blocks_in_row > 0x10
|
||||
|| h_blocks_in_row == 0
|
||||
|| h_blocks_in_row != h_raw_rounded_width / h_block_size
|
||||
|| h_total_lines > 0x800
|
||||
|| h_total_lines == 0
|
||||
|| h_total_lines != h_raw_height / 6
|
||||
|| (h_raw_bits != 12 && h_raw_bits != 14)
|
||||
|| h_raw_type != 16) {
|
||||
xtransCompressed = false;
|
||||
return;
|
||||
}
|
||||
|
||||
// modify data
|
||||
fuji_total_lines = h_total_lines;
|
||||
fuji_total_blocks = h_blocks_in_row;
|
||||
fuji_block_width = h_block_size;
|
||||
fuji_bits = h_raw_bits;
|
||||
raw_width = h_raw_width;
|
||||
raw_height = h_raw_height;
|
||||
data_offset += 16;
|
||||
load_raw = &CLASS xtrans_compressed_load_raw;
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
add_library (rtexif rtexif.cc stdattribs.cc nikonattribs.cc canonattribs.cc pentaxattribs.cc fujiattribs.cc sonyminoltaattribs.cc olympusattribs.cc kodakattribs.cc)
|
||||
add_dependencies (rtexif AboutFile)
|
||||
add_dependencies (rtexif UpdateInfo)
|
||||
|
||||
IF (WIN32)
|
||||
set_target_properties (rtexif PROPERTIES COMPILE_FLAGS " -ffast-math -fexpensive-optimizations")
|
||||
|
@ -278,7 +278,7 @@ bool TagDirectory::CPBDump (const Glib::ustring &commFName, const Glib::ustring
|
||||
try {
|
||||
|
||||
kf->set_string ("RT General", "CachePath", options.cacheBaseDir);
|
||||
kf->set_string ("RT General", "AppVersion", VERSION);
|
||||
kf->set_string ("RT General", "AppVersion", RTVERSION);
|
||||
kf->set_integer("RT General", "ProcParamsVersion", PPVERSION);
|
||||
kf->set_string ("RT General", "ImageFileName", imageFName);
|
||||
kf->set_string ("RT General", "OutputProfileFileName", profileFName);
|
||||
@ -2797,7 +2797,7 @@ std::vector<Tag*> ExifManager::getDefaultTIFFTags (TagDirectory* forthis)
|
||||
defTags.push_back (new Tag (forthis, lookupAttrib(ifdAttribs, "XResolution"), 300, RATIONAL));
|
||||
defTags.push_back (new Tag (forthis, lookupAttrib(ifdAttribs, "YResolution"), 300, RATIONAL));
|
||||
defTags.push_back (new Tag (forthis, lookupAttrib(ifdAttribs, "ResolutionUnit"), 2, SHORT));
|
||||
defTags.push_back (new Tag (forthis, lookupAttrib(ifdAttribs, "Software"), "RawTherapee " VERSION));
|
||||
defTags.push_back (new Tag (forthis, lookupAttrib(ifdAttribs, "Software"), "RawTherapee " RTVERSION));
|
||||
defTags.push_back (new Tag (forthis, lookupAttrib(ifdAttribs, "Orientation"), 1, SHORT));
|
||||
defTags.push_back (new Tag (forthis, lookupAttrib(ifdAttribs, "SamplesPerPixel"), 3, SHORT));
|
||||
defTags.push_back (new Tag (forthis, lookupAttrib(ifdAttribs, "BitsPerSample"), 8, SHORT));
|
||||
|
@ -1,7 +1,6 @@
|
||||
# common source files for both CLI and non-CLI execautables
|
||||
set (CLISOURCEFILES
|
||||
paramsedited.cc options.cc multilangmgr.cc pathutils.cc edit.cc threadutils.cc
|
||||
#cachemanager.cc cacheimagedata.cc
|
||||
main-cli.cc)
|
||||
|
||||
set (NONCLISOURCEFILES
|
||||
@ -72,8 +71,8 @@ add_executable (rth ${EXTRA_SRC_NONCLI} ${NONCLISOURCEFILES})
|
||||
add_executable (rth-cli ${EXTRA_SRC_CLI} ${CLISOURCEFILES})
|
||||
|
||||
# add dependencies to executables targets
|
||||
add_dependencies (rth AboutFile)
|
||||
add_dependencies (rth-cli AboutFile)
|
||||
add_dependencies (rth UpdateInfo)
|
||||
add_dependencies (rth-cli UpdateInfo)
|
||||
|
||||
# set executables targets properties, i.e. output filename and compile flags
|
||||
set_target_properties (rth PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS}" OUTPUT_NAME rawtherapee)
|
||||
@ -81,11 +80,12 @@ set_target_properties (rth-cli PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS}" OUT
|
||||
|
||||
# add linked libraries dependencies to executables targets
|
||||
target_link_libraries (rth rtengine ${JPEG_LIBRARIES} ${PNG_LIBRARIES} ${ZLIB_LIBRARIES} ${TIFF_LIBRARIES} ${GOBJECT_LIBRARIES} ${GTHREAD_LIBRARIES}
|
||||
${GLIB2_LIBRARIES} ${GLIBMM_LIBRARIES} ${GTK_LIBRARIES} ${GTKMM_LIBRARIES} ${GIO_LIBRARIES} ${GIOMM_LIBRARIES} ${LCMS_LIBRARIES} ${EXPAT_LIBRARIES}
|
||||
${FFTW3F_LIBRARIES} ${IPTCDATA_LIBRARIES} ${CANBERRA-GTK_LIBRARIES} ${EXTRA_LIB_RTGUI})
|
||||
${GLIB2_LIBRARIES} ${GLIBMM_LIBRARIES} ${GTK_LIBRARIES} ${GTKMM_LIBRARIES} ${GIO_LIBRARIES} ${GIOMM_LIBRARIES} ${LCMS_LIBRARIES} ${EXPAT_LIBRARIES}
|
||||
${FFTW3F_LIBRARIES} ${IPTCDATA_LIBRARIES} ${CANBERRA-GTK_LIBRARIES} ${EXTRA_LIB_RTGUI})
|
||||
|
||||
target_link_libraries (rth-cli rtengine ${JPEG_LIBRARIES} ${PNG_LIBRARIES} ${ZLIB_LIBRARIES} ${TIFF_LIBRARIES} ${GOBJECT_LIBRARIES} ${GTHREAD_LIBRARIES}
|
||||
${GLIB2_LIBRARIES} ${GLIBMM_LIBRARIES} ${CAIROMM_LIBRARIES} ${GIO_LIBRARIES} ${GIOMM_LIBRARIES} ${LCMS_LIBRARIES} ${EXPAT_LIBRARIES}
|
||||
${FFTW3F_LIBRARIES} ${IPTCDATA_LIBRARIES} ${EXTRA_LIB_RTGUI})
|
||||
${GLIB2_LIBRARIES} ${GLIBMM_LIBRARIES} ${CAIROMM_LIBRARIES} ${GIO_LIBRARIES} ${GIOMM_LIBRARIES} ${LCMS_LIBRARIES} ${EXPAT_LIBRARIES}
|
||||
${FFTW3F_LIBRARIES} ${IPTCDATA_LIBRARIES} ${EXTRA_LIB_RTGUI})
|
||||
|
||||
# install executables
|
||||
install (TARGETS rth DESTINATION ${BINDIR})
|
||||
|
@ -85,6 +85,8 @@ BatchQueue::BatchQueue (FileCatalog* aFileCatalog) : processing(nullptr), fileCa
|
||||
|
||||
BatchQueue::~BatchQueue ()
|
||||
{
|
||||
idle_register.destroy();
|
||||
|
||||
MYWRITERLOCK(l, entryRW);
|
||||
|
||||
// The listener merges parameters with old values, so delete afterwards
|
||||
@ -937,7 +939,7 @@ void BatchQueue::notifyListener (bool queueEmptied)
|
||||
}
|
||||
params->queueEmptied = queueEmptied;
|
||||
params->queueError = false;
|
||||
add_idle (bqnotifylistenerUI, params);
|
||||
idle_register.add(bqnotifylistenerUI, params);
|
||||
}
|
||||
}
|
||||
|
||||
@ -967,6 +969,6 @@ void BatchQueue::error (Glib::ustring msg)
|
||||
params->queueEmptied = false;
|
||||
params->queueError = true;
|
||||
params->queueErrorMessage = msg;
|
||||
add_idle (bqnotifylistenerUI, params);
|
||||
idle_register.add(bqnotifylistenerUI, params);
|
||||
}
|
||||
}
|
||||
|
@ -36,37 +36,12 @@ public:
|
||||
};
|
||||
|
||||
class FileCatalog;
|
||||
class BatchQueue : public ThumbBrowserBase,
|
||||
|
||||
class BatchQueue final :
|
||||
public ThumbBrowserBase,
|
||||
public rtengine::BatchProcessingListener,
|
||||
public LWButtonListener
|
||||
{
|
||||
|
||||
protected:
|
||||
int getMaxThumbnailHeight() const;
|
||||
void saveThumbnailHeight (int height);
|
||||
int getThumbnailHeight ();
|
||||
|
||||
BatchQueueEntry* processing; // holds the currently processed image
|
||||
FileCatalog* fileCatalog;
|
||||
int sequence; // holds the current sequence index
|
||||
|
||||
Glib::ustring nameTemplate;
|
||||
|
||||
MyImageMenuItem* cancel;
|
||||
MyImageMenuItem* head;
|
||||
MyImageMenuItem* tail;
|
||||
Gtk::MenuItem* selall;
|
||||
Gtk::MenuItem* open;
|
||||
Glib::RefPtr<Gtk::AccelGroup> pmaccelgroup;
|
||||
Gtk::Menu pmenu;
|
||||
|
||||
BatchQueueListener* listener;
|
||||
|
||||
Glib::ustring autoCompleteFileName (const Glib::ustring& fileName, const Glib::ustring& format);
|
||||
Glib::ustring getTempFilenameForParams( const Glib::ustring &filename );
|
||||
bool saveBatchQueue ();
|
||||
void notifyListener (bool queueEmptied);
|
||||
|
||||
public:
|
||||
explicit BatchQueue (FileCatalog* aFileCatalog);
|
||||
~BatchQueue ();
|
||||
@ -106,6 +81,34 @@ public:
|
||||
|
||||
static Glib::ustring calcAutoFileNameBase (const Glib::ustring& origFileName, int sequence = 0);
|
||||
static int calcMaxThumbnailHeight();
|
||||
|
||||
protected:
|
||||
int getMaxThumbnailHeight() const;
|
||||
void saveThumbnailHeight (int height);
|
||||
int getThumbnailHeight ();
|
||||
|
||||
Glib::ustring autoCompleteFileName (const Glib::ustring& fileName, const Glib::ustring& format);
|
||||
Glib::ustring getTempFilenameForParams( const Glib::ustring &filename );
|
||||
bool saveBatchQueue ();
|
||||
void notifyListener (bool queueEmptied);
|
||||
|
||||
BatchQueueEntry* processing; // holds the currently processed image
|
||||
FileCatalog* fileCatalog;
|
||||
int sequence; // holds the current sequence index
|
||||
|
||||
Glib::ustring nameTemplate;
|
||||
|
||||
MyImageMenuItem* cancel;
|
||||
MyImageMenuItem* head;
|
||||
MyImageMenuItem* tail;
|
||||
Gtk::MenuItem* selall;
|
||||
Gtk::MenuItem* open;
|
||||
Glib::RefPtr<Gtk::AccelGroup> pmaccelgroup;
|
||||
Gtk::Menu pmenu;
|
||||
|
||||
BatchQueueListener* listener;
|
||||
|
||||
IdleRegister idle_register;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -364,23 +364,25 @@ BlackWhite::BlackWhite (): FoldableToolPanel(this, "blackwhite", M("TP_BWMIX_LAB
|
||||
}
|
||||
BlackWhite::~BlackWhite ()
|
||||
{
|
||||
idle_register.destroy();
|
||||
|
||||
delete luminanceCEG;
|
||||
delete beforeCurveCEG;
|
||||
delete afterCurveCEG;
|
||||
}
|
||||
|
||||
int BWChangedUI (void* data)
|
||||
{
|
||||
(static_cast<BlackWhite*>(data))->BWComputed_ ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void BlackWhite::BWChanged (double redbw, double greenbw, double bluebw)
|
||||
{
|
||||
nextredbw = redbw;
|
||||
nextgreenbw = greenbw;
|
||||
nextbluebw = bluebw;
|
||||
add_idle (BWChangedUI, this);
|
||||
|
||||
const auto func = [](gpointer data) -> gboolean {
|
||||
static_cast<BlackWhite*>(data)->BWComputed_();
|
||||
return FALSE;
|
||||
};
|
||||
|
||||
idle_register.add(func, this);
|
||||
}
|
||||
|
||||
bool BlackWhite::BWComputed_ ()
|
||||
|
@ -28,10 +28,64 @@
|
||||
#include "mycurve.h"
|
||||
#include "colorprovider.h"
|
||||
|
||||
class BlackWhite : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel, public rtengine::AutoBWListener, public CurveListener, public ColorProvider
|
||||
class BlackWhite final :
|
||||
public ToolParamBlock,
|
||||
public AdjusterListener,
|
||||
public FoldableToolPanel,
|
||||
public rtengine::AutoBWListener,
|
||||
public CurveListener,
|
||||
public ColorProvider
|
||||
{
|
||||
public:
|
||||
|
||||
BlackWhite ();
|
||||
~BlackWhite ();
|
||||
|
||||
void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr);
|
||||
void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr);
|
||||
void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr);
|
||||
void setBatchMode (bool batchMode);
|
||||
void autoOpenCurve ();
|
||||
void setEditProvider (EditDataProvider *provider);
|
||||
|
||||
void autoch_toggled ();
|
||||
void neutral_pressed ();
|
||||
|
||||
void updateRGBLabel ();
|
||||
void adjusterChanged (Adjuster* a, double newval);
|
||||
void setAdjusterBehavior (bool bwadd, bool bwgadd);
|
||||
void trimValues (rtengine::procparams::ProcParams* pp);
|
||||
void enabledcc_toggled ();
|
||||
void enabledChanged ();
|
||||
void methodChanged ();
|
||||
void filterChanged ();
|
||||
void settingChanged ();
|
||||
virtual void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller);
|
||||
void BWChanged (double redbw, double greenbw, double bluebw);
|
||||
bool BWComputed_ ();
|
||||
void curveChanged (CurveEditor* ce);
|
||||
void curveMode1Changed ();
|
||||
bool curveMode1Changed_ ();
|
||||
void curveMode1Changed2 ();
|
||||
bool curveMode1Changed2_ ();
|
||||
void algoChanged ();
|
||||
|
||||
Glib::ustring getSettingString ();
|
||||
Glib::ustring getFilterString ();
|
||||
Glib::ustring getalgoString ();
|
||||
|
||||
private:
|
||||
void showLuminance();
|
||||
void hideLuminance();
|
||||
void showFilter();
|
||||
void hideFilter();
|
||||
void showEnabledCC();
|
||||
void hideEnabledCC();
|
||||
void showMixer(int nChannels, bool RGBIsSensitive = true);
|
||||
void hideMixer();
|
||||
void showGamma();
|
||||
void hideGamma();
|
||||
|
||||
protected:
|
||||
FlatCurveEditor* luminanceCurve;
|
||||
Gtk::HSeparator* luminanceSep;
|
||||
CurveEditorGroup* luminanceCEG;
|
||||
@ -85,55 +139,7 @@ protected:
|
||||
double nextgreenbw;
|
||||
double nextbluebw;
|
||||
|
||||
void showLuminance();
|
||||
void hideLuminance();
|
||||
void showFilter();
|
||||
void hideFilter();
|
||||
void showEnabledCC();
|
||||
void hideEnabledCC();
|
||||
void showMixer(int nChannels, bool RGBIsSensitive = true);
|
||||
void hideMixer();
|
||||
void showGamma();
|
||||
void hideGamma();
|
||||
|
||||
public:
|
||||
|
||||
BlackWhite ();
|
||||
~BlackWhite ();
|
||||
|
||||
void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr);
|
||||
void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr);
|
||||
void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr);
|
||||
void setBatchMode (bool batchMode);
|
||||
void autoOpenCurve ();
|
||||
void setEditProvider (EditDataProvider *provider);
|
||||
|
||||
void autoch_toggled ();
|
||||
void neutral_pressed ();
|
||||
|
||||
void updateRGBLabel ();
|
||||
void adjusterChanged (Adjuster* a, double newval);
|
||||
void setAdjusterBehavior (bool bwadd, bool bwgadd);
|
||||
void trimValues (rtengine::procparams::ProcParams* pp);
|
||||
void enabledcc_toggled ();
|
||||
void enabledChanged ();
|
||||
void methodChanged ();
|
||||
void filterChanged ();
|
||||
void settingChanged ();
|
||||
virtual void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller);
|
||||
void BWChanged (double redbw, double greenbw, double bluebw);
|
||||
bool BWComputed_ ();
|
||||
void curveChanged (CurveEditor* ce);
|
||||
void curveMode1Changed ();
|
||||
bool curveMode1Changed_ ();
|
||||
void curveMode1Changed2 ();
|
||||
bool curveMode1Changed2_ ();
|
||||
void algoChanged ();
|
||||
|
||||
Glib::ustring getSettingString ();
|
||||
Glib::ustring getFilterString ();
|
||||
Glib::ustring getalgoString ();
|
||||
|
||||
IdleRegister idle_register;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -203,7 +203,7 @@ int CacheImageData::save (const Glib::ustring& fname)
|
||||
} catch (Glib::Error&) {}
|
||||
|
||||
keyFile.set_string ("General", "MD5", md5);
|
||||
keyFile.set_string ("General", "Version", VERSION); // Application's version
|
||||
keyFile.set_string ("General", "Version", RTVERSION);
|
||||
keyFile.set_boolean ("General", "Supported", supported);
|
||||
keyFile.set_integer ("General", "Format", format);
|
||||
keyFile.set_boolean ("General", "RecentlySaved", recentlySaved);
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include "cachemanager.h"
|
||||
|
||||
#include <memory>
|
||||
#include <iostream>
|
||||
|
||||
#include <glib/gstdio.h>
|
||||
#include <giomm.h>
|
||||
@ -35,8 +36,8 @@
|
||||
namespace
|
||||
{
|
||||
|
||||
constexpr auto cacheDirMode = 511;
|
||||
constexpr auto cacheDirs = { "profiles", "images", "aehistograms", "embprofiles", "data" };
|
||||
constexpr int cacheDirMode = 0777;
|
||||
constexpr const char* cacheDirs[] = { "profiles", "images", "aehistograms", "embprofiles", "data" };
|
||||
|
||||
}
|
||||
|
||||
|
@ -424,6 +424,8 @@ ColorAppearance::ColorAppearance () : FoldableToolPanel(this, "colorappearance",
|
||||
|
||||
ColorAppearance::~ColorAppearance ()
|
||||
{
|
||||
idle_register.destroy();
|
||||
|
||||
delete curveEditorG;
|
||||
delete curveEditorG2;
|
||||
delete curveEditorG3;
|
||||
@ -1002,15 +1004,17 @@ void ColorAppearance::setDefaults (const ProcParams* defParams, const ParamsEdit
|
||||
|
||||
}
|
||||
}
|
||||
int autoCamChangedUI (void* data)
|
||||
{
|
||||
(static_cast<ColorAppearance*>(data))->autoCamComputed_ ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ColorAppearance::autoCamChanged (double ccam)
|
||||
{
|
||||
nextCcam = ccam;
|
||||
add_idle (autoCamChangedUI, this);
|
||||
|
||||
const auto func = [](gpointer data) -> gboolean {
|
||||
static_cast<ColorAppearance*>(data)->autoCamComputed_();
|
||||
return FALSE;
|
||||
};
|
||||
|
||||
idle_register.add(func, this);
|
||||
}
|
||||
|
||||
bool ColorAppearance::autoCamComputed_ ()
|
||||
@ -1023,15 +1027,17 @@ bool ColorAppearance::autoCamComputed_ ()
|
||||
|
||||
return false;
|
||||
}
|
||||
int adapCamChangedUI (void* data)
|
||||
{
|
||||
(static_cast<ColorAppearance*>(data))->adapCamComputed_ ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ColorAppearance::adapCamChanged (double cadap)
|
||||
{
|
||||
nextCadap = cadap;
|
||||
add_idle (adapCamChangedUI, this);
|
||||
|
||||
const auto func = [](gpointer data) -> gboolean {
|
||||
static_cast<ColorAppearance*>(data)->adapCamComputed_();
|
||||
return FALSE;
|
||||
};
|
||||
|
||||
idle_register.add(func, this);
|
||||
}
|
||||
|
||||
bool ColorAppearance::adapCamComputed_ ()
|
||||
|
@ -28,10 +28,61 @@
|
||||
#include "guiutils.h"
|
||||
#include "colorprovider.h"
|
||||
|
||||
class ColorAppearance : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel, public rtengine::AutoCamListener, public CurveListener, public ColorProvider
|
||||
class ColorAppearance final :
|
||||
public ToolParamBlock,
|
||||
public AdjusterListener,
|
||||
public FoldableToolPanel,
|
||||
public rtengine::AutoCamListener,
|
||||
public CurveListener,
|
||||
public ColorProvider
|
||||
{
|
||||
public:
|
||||
ColorAppearance ();
|
||||
~ColorAppearance ();
|
||||
|
||||
void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr);
|
||||
void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr);
|
||||
void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr);
|
||||
void setBatchMode (bool batchMode);
|
||||
void adjusterChanged (Adjuster* a, double newval);
|
||||
void adjusterAutoToggled (Adjuster* a, bool newval);
|
||||
// void adjusterAdapToggled (Adjuster* a, bool newval);
|
||||
void enabledChanged ();
|
||||
void surroundChanged ();
|
||||
void wbmodelChanged ();
|
||||
void algoChanged ();
|
||||
void surrsource_toggled ();
|
||||
void gamut_toggled ();
|
||||
// void badpix_toggled ();
|
||||
void datacie_toggled ();
|
||||
void tonecie_toggled ();
|
||||
// void sharpcie_toggled ();
|
||||
void autoCamChanged (double ccam);
|
||||
bool autoCamComputed_ ();
|
||||
void adapCamChanged (double cadap);
|
||||
bool adapCamComputed_ ();
|
||||
|
||||
void curveChanged (CurveEditor* ce);
|
||||
void curveMode1Changed ();
|
||||
bool curveMode1Changed_ ();
|
||||
void curveMode2Changed ();
|
||||
bool curveMode2Changed_ ();
|
||||
void curveMode3Changed ();
|
||||
bool curveMode3Changed_ ();
|
||||
|
||||
void expandCurve (bool isExpanded);
|
||||
bool isCurveExpanded ();
|
||||
void autoOpenCurve ();
|
||||
|
||||
void setAdjusterBehavior (bool degreeadd, bool adapscenadd, bool adaplumadd, bool badpixsladd, bool jlightadd, bool chromaadd, bool contrastadd, bool rstprotectionadd, bool qbrightadd, bool qcontrastadd, bool schromaadd, bool mchromaadd, bool colorhadd);
|
||||
void trimValues (rtengine::procparams::ProcParams* pp);
|
||||
void updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI);
|
||||
virtual void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller *caller);
|
||||
|
||||
private:
|
||||
bool bgTTipQuery(int x, int y, bool keyboard_tooltip, const Glib::RefPtr<Gtk::Tooltip>& tooltip);
|
||||
bool srTTipQuery(int x, int y, bool keyboard_tooltip, const Glib::RefPtr<Gtk::Tooltip>& tooltip);
|
||||
|
||||
protected:
|
||||
Glib::RefPtr<Gtk::Tooltip> bgTTips;
|
||||
Glib::RefPtr<Gtk::Tooltip> srTTips;
|
||||
Glib::RefPtr<Gdk::Pixbuf> bgPixbuf;
|
||||
@ -83,56 +134,10 @@ protected:
|
||||
bool lastAutoAdapscen;
|
||||
bool lastsurr;
|
||||
bool lastgamut;
|
||||
// bool lastbadpix;
|
||||
bool lastdatacie;
|
||||
bool lasttonecie;
|
||||
// bool lastsharpcie;
|
||||
bool bgTTipQuery(int x, int y, bool keyboard_tooltip, const Glib::RefPtr<Gtk::Tooltip>& tooltip);
|
||||
bool srTTipQuery(int x, int y, bool keyboard_tooltip, const Glib::RefPtr<Gtk::Tooltip>& tooltip);
|
||||
|
||||
public:
|
||||
|
||||
ColorAppearance ();
|
||||
~ColorAppearance ();
|
||||
|
||||
void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr);
|
||||
void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr);
|
||||
void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr);
|
||||
void setBatchMode (bool batchMode);
|
||||
void adjusterChanged (Adjuster* a, double newval);
|
||||
void adjusterAutoToggled (Adjuster* a, bool newval);
|
||||
// void adjusterAdapToggled (Adjuster* a, bool newval);
|
||||
void enabledChanged ();
|
||||
void surroundChanged ();
|
||||
void wbmodelChanged ();
|
||||
void algoChanged ();
|
||||
void surrsource_toggled ();
|
||||
void gamut_toggled ();
|
||||
// void badpix_toggled ();
|
||||
void datacie_toggled ();
|
||||
void tonecie_toggled ();
|
||||
// void sharpcie_toggled ();
|
||||
void autoCamChanged (double ccam);
|
||||
bool autoCamComputed_ ();
|
||||
void adapCamChanged (double cadap);
|
||||
bool adapCamComputed_ ();
|
||||
|
||||
void curveChanged (CurveEditor* ce);
|
||||
void curveMode1Changed ();
|
||||
bool curveMode1Changed_ ();
|
||||
void curveMode2Changed ();
|
||||
bool curveMode2Changed_ ();
|
||||
void curveMode3Changed ();
|
||||
bool curveMode3Changed_ ();
|
||||
|
||||
void expandCurve (bool isExpanded);
|
||||
bool isCurveExpanded ();
|
||||
void autoOpenCurve ();
|
||||
|
||||
void setAdjusterBehavior (bool degreeadd, bool adapscenadd, bool adaplumadd, bool badpixsladd, bool jlightadd, bool chromaadd, bool contrastadd, bool rstprotectionadd, bool qbrightadd, bool qcontrastadd, bool schromaadd, bool mchromaadd, bool colorhadd);
|
||||
void trimValues (rtengine::procparams::ProcParams* pp);
|
||||
void updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI);
|
||||
virtual void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller *caller);
|
||||
IdleRegister idle_register;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -324,6 +324,8 @@ ColorToning::ColorToning () : FoldableToolPanel(this, "colortoning", M("TP_COLOR
|
||||
|
||||
ColorToning::~ColorToning()
|
||||
{
|
||||
idle_register.destroy();
|
||||
|
||||
delete colorCurveEditorG;
|
||||
delete opacityCurveEditorG;
|
||||
delete clCurveEditorG;
|
||||
@ -650,19 +652,18 @@ void ColorToning::adjusterChanged (ThresholdAdjuster* a, double newBottom, doubl
|
||||
Glib::ustring::compose(Glib::ustring(M("TP_COLORTONING_HUE") + ": %1" + "\n" + M("TP_COLORTONING_STRENGTH") + ": %2"), int(newTop), int(newBottom)));
|
||||
}
|
||||
|
||||
int CTChanged_UI (void* data)
|
||||
{
|
||||
(static_cast<ColorToning*>(data))->CTComp_ ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void ColorToning::autoColorTonChanged(int bwct, int satthres, int satprot)
|
||||
{
|
||||
nextbw = bwct;
|
||||
nextsatth = satthres;
|
||||
nextsatpr = satprot;
|
||||
add_idle (CTChanged_UI, this);
|
||||
|
||||
const auto func = [](gpointer data) -> gboolean {
|
||||
static_cast<ColorToning*>(data)->CTComp_();
|
||||
return FALSE;
|
||||
};
|
||||
|
||||
idle_register.add(func, this);
|
||||
}
|
||||
|
||||
bool ColorToning::CTComp_ ()
|
||||
|
@ -13,12 +13,43 @@
|
||||
#include "thresholdadjuster.h"
|
||||
#include "colorprovider.h"
|
||||
|
||||
class ColorToning : public ToolParamBlock, public FoldableToolPanel, public rtengine::AutoColorTonListener, public CurveListener, public ColorProvider,
|
||||
public ThresholdAdjusterListener, public AdjusterListener
|
||||
class ColorToning final :
|
||||
public ToolParamBlock,
|
||||
public FoldableToolPanel,
|
||||
public rtengine::AutoColorTonListener,
|
||||
public CurveListener,
|
||||
public ColorProvider,
|
||||
public ThresholdAdjusterListener,
|
||||
public AdjusterListener
|
||||
{
|
||||
public:
|
||||
ColorToning ();
|
||||
~ColorToning();
|
||||
void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr);
|
||||
void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr);
|
||||
void setBatchMode (bool batchMode);
|
||||
void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr);
|
||||
void trimValues (rtengine::procparams::ProcParams* pp);
|
||||
void adjusterChanged (Adjuster* a, double newval);
|
||||
void adjusterChanged (ThresholdAdjuster* a, double newBottom, double newTop);
|
||||
void setAdjusterBehavior (bool splitAdd, bool satThresholdAdd, bool satOpacityAdd, bool strprotectAdd, bool balanceAdd);
|
||||
void neutral_pressed ();
|
||||
//void neutralCurves_pressed ();
|
||||
void autoColorTonChanged (int bwct, int satthres, int satprot);
|
||||
bool CTComp_ ();
|
||||
|
||||
protected:
|
||||
//Gtk::HSeparator* splitSep;
|
||||
void enabledChanged ();
|
||||
void curveChanged (CurveEditor* ce);
|
||||
void autosatChanged ();
|
||||
void autoOpenCurve ();
|
||||
void methodChanged ();
|
||||
void twocolorChanged (bool changedbymethod);
|
||||
void twoColorChangedByGui ();
|
||||
void lumamodeChanged ();
|
||||
|
||||
void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller);
|
||||
|
||||
private:
|
||||
Gtk::HSeparator* satLimiterSep;
|
||||
Gtk::HSeparator* colorSep;
|
||||
CurveEditorGroup* colorCurveEditorG;
|
||||
@ -57,7 +88,6 @@ protected:
|
||||
Gtk::Image* irg;
|
||||
|
||||
Gtk::Button* neutral;
|
||||
//Gtk::Button* neutralCurves;
|
||||
Gtk::HBox* neutrHBox;
|
||||
Gtk::HBox* chromaHbox;
|
||||
Gtk::Label* chroLabel;
|
||||
@ -75,32 +105,7 @@ protected:
|
||||
bool lastLumamode;
|
||||
sigc::connection lumamodeConn;
|
||||
|
||||
public:
|
||||
ColorToning ();
|
||||
~ColorToning();
|
||||
void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr);
|
||||
void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr);
|
||||
void setBatchMode (bool batchMode);
|
||||
void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr);
|
||||
void trimValues (rtengine::procparams::ProcParams* pp);
|
||||
void adjusterChanged (Adjuster* a, double newval);
|
||||
void adjusterChanged (ThresholdAdjuster* a, double newBottom, double newTop);
|
||||
void setAdjusterBehavior (bool splitAdd, bool satThresholdAdd, bool satOpacityAdd, bool strprotectAdd, bool balanceAdd);
|
||||
void neutral_pressed ();
|
||||
//void neutralCurves_pressed ();
|
||||
void autoColorTonChanged (int bwct, int satthres, int satprot);
|
||||
bool CTComp_ ();
|
||||
|
||||
void enabledChanged ();
|
||||
void curveChanged (CurveEditor* ce);
|
||||
void autosatChanged ();
|
||||
void autoOpenCurve ();
|
||||
void methodChanged ();
|
||||
void twocolorChanged (bool changedbymethod);
|
||||
void twoColorChangedByGui ();
|
||||
void lumamodeChanged ();
|
||||
|
||||
void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller);
|
||||
IdleRegister idle_register;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
113
rtgui/crop.cc
@ -25,6 +25,9 @@ using namespace rtengine::procparams;
|
||||
|
||||
extern Options options;
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
class RefreshSpinHelper
|
||||
{
|
||||
|
||||
@ -35,6 +38,22 @@ public:
|
||||
: crop(_crop), notify(_notify) {}
|
||||
};
|
||||
|
||||
int refreshSpinsUI (void* data)
|
||||
{
|
||||
RefreshSpinHelper* rsh = static_cast<RefreshSpinHelper*>(data);
|
||||
rsh->crop->refreshSpins (rsh->notify);
|
||||
delete rsh;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int notifyListenerUI (void* data)
|
||||
{
|
||||
static_cast<Crop*>(data)->notifyListener();
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Crop::Crop (): FoldableToolPanel(this, "crop", M("TP_CROP_LABEL"), false, true)
|
||||
{
|
||||
|
||||
@ -252,6 +271,11 @@ Crop::Crop (): FoldableToolPanel(this, "crop", M("TP_CROP_LABEL"), false, true)
|
||||
show_all ();
|
||||
}
|
||||
|
||||
Crop::~Crop()
|
||||
{
|
||||
idle_register.destroy();
|
||||
}
|
||||
|
||||
void Crop::writeOptions ()
|
||||
{
|
||||
|
||||
@ -508,32 +532,18 @@ void Crop::enabledChanged ()
|
||||
}
|
||||
}
|
||||
|
||||
int notifyListenerUI (void* data)
|
||||
{
|
||||
(static_cast<Crop*>(data))->notifyListener ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int refreshSpinsUI (void* data)
|
||||
{
|
||||
RefreshSpinHelper* rsh = static_cast<RefreshSpinHelper*>(data);
|
||||
rsh->crop->refreshSpins (rsh->notify);
|
||||
delete rsh;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Crop::hFlipCrop ()
|
||||
{
|
||||
|
||||
nx = maxw - nx - nw;
|
||||
add_idle (refreshSpinsUI, new RefreshSpinHelper (this, false));
|
||||
idle_register.add(refreshSpinsUI, new RefreshSpinHelper(this, false));
|
||||
}
|
||||
|
||||
void Crop::vFlipCrop ()
|
||||
{
|
||||
|
||||
ny = maxh - ny - nh;
|
||||
add_idle (refreshSpinsUI, new RefreshSpinHelper (this, false));
|
||||
idle_register.add(refreshSpinsUI, new RefreshSpinHelper(this, false));
|
||||
}
|
||||
|
||||
void Crop::rotateCrop (int deg, bool hflip, bool vflip)
|
||||
@ -573,7 +583,7 @@ void Crop::rotateCrop (int deg, bool hflip, bool vflip)
|
||||
}
|
||||
|
||||
lastRotationDeg = deg;
|
||||
add_idle (refreshSpinsUI, new RefreshSpinHelper (this, false));
|
||||
idle_register.add(refreshSpinsUI, new RefreshSpinHelper(this, false));
|
||||
}
|
||||
|
||||
void Crop::positionChanged ()
|
||||
@ -587,7 +597,7 @@ void Crop::positionChanged ()
|
||||
int W = nw;
|
||||
int H = nh;
|
||||
cropMoved (X, Y, W, H);
|
||||
add_idle (notifyListenerUI, this);
|
||||
idle_register.add(notifyListenerUI, this);
|
||||
}
|
||||
|
||||
void Crop::widthChanged ()
|
||||
@ -600,7 +610,7 @@ void Crop::widthChanged ()
|
||||
int W = (int)w->get_value ();
|
||||
int H = nh;
|
||||
cropWidth2Resized (X, Y, W, H);
|
||||
add_idle (notifyListenerUI, this);
|
||||
idle_register.add(notifyListenerUI, this);
|
||||
}
|
||||
|
||||
void Crop::heightChanged ()
|
||||
@ -613,7 +623,7 @@ void Crop::heightChanged ()
|
||||
int W = nw;
|
||||
int H = (int)h->get_value ();
|
||||
cropHeight2Resized (X, Y, W, H);
|
||||
add_idle (notifyListenerUI, this);
|
||||
idle_register.add(notifyListenerUI, this);
|
||||
}
|
||||
|
||||
// Fixed ratio toggle button
|
||||
@ -665,7 +675,7 @@ void Crop::adjustCropToRatio()
|
||||
}
|
||||
|
||||
// This will save the options
|
||||
add_idle (refreshSpinsUI, new RefreshSpinHelper (this, true));
|
||||
idle_register.add(refreshSpinsUI, new RefreshSpinHelper(this, true));
|
||||
}
|
||||
|
||||
void Crop::refreshSize ()
|
||||
@ -737,28 +747,28 @@ void Crop::setDimensions (int mw, int mh)
|
||||
refreshSize ();
|
||||
}
|
||||
|
||||
struct setdimparams {
|
||||
Crop* crop;
|
||||
int x;
|
||||
int y;
|
||||
};
|
||||
|
||||
int sizeChangedUI (void* data)
|
||||
{
|
||||
setdimparams* params = static_cast<setdimparams*>(data);
|
||||
params->crop->setDimensions (params->x, params->y);
|
||||
delete params;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Crop::sizeChanged (int x, int y, int ow, int oh)
|
||||
{
|
||||
struct Params {
|
||||
Crop* crop;
|
||||
int x;
|
||||
int y;
|
||||
};
|
||||
|
||||
setdimparams* params = new setdimparams;
|
||||
params->x = x;
|
||||
params->y = y;
|
||||
params->crop = this;
|
||||
add_idle (sizeChangedUI, params);
|
||||
Params* const params = new Params{
|
||||
this,
|
||||
x,
|
||||
y
|
||||
};
|
||||
|
||||
const auto func = [](gpointer data) -> gboolean {
|
||||
Params* const params = static_cast<Params*>(data);
|
||||
params->crop->setDimensions(params->x, params->y);
|
||||
delete params;
|
||||
return FALSE;
|
||||
};
|
||||
|
||||
idle_register.add(func, params);
|
||||
}
|
||||
|
||||
bool Crop::refreshSpins (bool notify)
|
||||
@ -822,7 +832,7 @@ void Crop::cropMoved (int &X, int &Y, int &W, int &H)
|
||||
nw = W;
|
||||
nh = H;
|
||||
|
||||
add_idle (refreshSpinsUI, new RefreshSpinHelper (this, false));
|
||||
idle_register.add(refreshSpinsUI, new RefreshSpinHelper(this, false));
|
||||
// Glib::signal_idle().connect (sigc::mem_fun(*this, &Crop::refreshSpins));
|
||||
}
|
||||
|
||||
@ -866,7 +876,7 @@ void Crop::cropWidth1Resized (int &X, int &Y, int &W, int &H)
|
||||
nw = W;
|
||||
nh = H;
|
||||
|
||||
add_idle (refreshSpinsUI, new RefreshSpinHelper (this, false));
|
||||
idle_register.add(refreshSpinsUI, new RefreshSpinHelper(this, false));
|
||||
}
|
||||
|
||||
void Crop::cropWidth2Resized (int &X, int &Y, int &W, int &H)
|
||||
@ -906,7 +916,7 @@ void Crop::cropWidth2Resized (int &X, int &Y, int &W, int &H)
|
||||
nw = W;
|
||||
nh = H;
|
||||
|
||||
add_idle (refreshSpinsUI, new RefreshSpinHelper (this, false));
|
||||
idle_register.add(refreshSpinsUI, new RefreshSpinHelper(this, false));
|
||||
}
|
||||
|
||||
void Crop::cropHeight1Resized (int &X, int &Y, int &W, int &H)
|
||||
@ -949,7 +959,7 @@ void Crop::cropHeight1Resized (int &X, int &Y, int &W, int &H)
|
||||
nw = W;
|
||||
nh = H;
|
||||
|
||||
add_idle (refreshSpinsUI, new RefreshSpinHelper (this, false));
|
||||
idle_register.add(refreshSpinsUI, new RefreshSpinHelper(this, false));
|
||||
}
|
||||
|
||||
void Crop::cropHeight2Resized (int &X, int &Y, int &W, int &H)
|
||||
@ -989,7 +999,7 @@ void Crop::cropHeight2Resized (int &X, int &Y, int &W, int &H)
|
||||
nw = W;
|
||||
nh = H;
|
||||
|
||||
add_idle (refreshSpinsUI, new RefreshSpinHelper (this, false));
|
||||
idle_register.add(refreshSpinsUI, new RefreshSpinHelper(this, false));
|
||||
}
|
||||
|
||||
void Crop::cropTopLeftResized (int &X, int &Y, int &W, int &H)
|
||||
@ -1031,7 +1041,7 @@ void Crop::cropTopLeftResized (int &X, int &Y, int &W, int &H)
|
||||
nw = W;
|
||||
nh = H;
|
||||
|
||||
add_idle (refreshSpinsUI, new RefreshSpinHelper (this, false));
|
||||
idle_register.add(refreshSpinsUI, new RefreshSpinHelper(this, false));
|
||||
}
|
||||
|
||||
void Crop::cropTopRightResized (int &X, int &Y, int &W, int &H)
|
||||
@ -1071,7 +1081,7 @@ void Crop::cropTopRightResized (int &X, int &Y, int &W, int &H)
|
||||
nw = W;
|
||||
nh = H;
|
||||
|
||||
add_idle (refreshSpinsUI, new RefreshSpinHelper (this, false));
|
||||
idle_register.add(refreshSpinsUI, new RefreshSpinHelper(this, false));
|
||||
}
|
||||
|
||||
void Crop::cropBottomLeftResized (int &X, int &Y, int &W, int &H)
|
||||
@ -1111,7 +1121,7 @@ void Crop::cropBottomLeftResized (int &X, int &Y, int &W, int &H)
|
||||
nw = W;
|
||||
nh = H;
|
||||
|
||||
add_idle (refreshSpinsUI, new RefreshSpinHelper (this, false));
|
||||
idle_register.add(refreshSpinsUI, new RefreshSpinHelper(this, false));
|
||||
}
|
||||
|
||||
void Crop::cropBottomRightResized (int &X, int &Y, int &W, int &H)
|
||||
@ -1148,7 +1158,7 @@ void Crop::cropBottomRightResized (int &X, int &Y, int &W, int &H)
|
||||
nw = W;
|
||||
nh = H;
|
||||
|
||||
add_idle (refreshSpinsUI, new RefreshSpinHelper (this, false));
|
||||
idle_register.add(refreshSpinsUI, new RefreshSpinHelper(this, false));
|
||||
}
|
||||
|
||||
void Crop::cropInit (int &x, int &y, int &w, int &h)
|
||||
@ -1266,13 +1276,12 @@ void Crop::cropResized (int &x, int &y, int& x2, int& y2)
|
||||
nw = W;
|
||||
nh = H;
|
||||
|
||||
add_idle (refreshSpinsUI, new RefreshSpinHelper (this, false));
|
||||
idle_register.add(refreshSpinsUI, new RefreshSpinHelper(this, false));
|
||||
}
|
||||
|
||||
void Crop::cropManipReady ()
|
||||
{
|
||||
|
||||
add_idle (notifyListenerUI, this);
|
||||
idle_register.add(notifyListenerUI, this);
|
||||
}
|
||||
|
||||
double Crop::getRatio ()
|
||||
|
68
rtgui/crop.h
@ -33,44 +33,20 @@ public:
|
||||
virtual void cropSelectRequested() = 0;
|
||||
};
|
||||
|
||||
class CropRatio
|
||||
{
|
||||
|
||||
public:
|
||||
struct CropRatio {
|
||||
Glib::ustring label;
|
||||
double value;
|
||||
};
|
||||
|
||||
class Crop : public ToolParamBlock, public CropGUIListener, public FoldableToolPanel, public rtengine::SizeListener
|
||||
class Crop final :
|
||||
public ToolParamBlock,
|
||||
public CropGUIListener,
|
||||
public FoldableToolPanel,
|
||||
public rtengine::SizeListener
|
||||
{
|
||||
protected:
|
||||
Gtk::CheckButton* fixr;
|
||||
MyComboBoxText* ratio;
|
||||
MyComboBoxText* orientation;
|
||||
MyComboBoxText* guide;
|
||||
Gtk::Button* selectCrop;
|
||||
CropPanelListener* clistener;
|
||||
int opt;
|
||||
MySpinButton* x;
|
||||
MySpinButton* y;
|
||||
MySpinButton* w;
|
||||
MySpinButton* h;
|
||||
MySpinButton* ppi;
|
||||
Gtk::Label* sizecm;
|
||||
Gtk::Label* sizein;
|
||||
Gtk::VBox* ppibox;
|
||||
Gtk::VBox* sizebox;
|
||||
int maxw, maxh;
|
||||
double nx, ny;
|
||||
int nw, nh;
|
||||
int lastRotationDeg;
|
||||
sigc::connection xconn, yconn, wconn, hconn, fconn, rconn, oconn, gconn;
|
||||
bool wDirty, hDirty, xDirty, yDirty, lastFixRatio;
|
||||
void adjustCropToRatio();
|
||||
std::vector<CropRatio> cropratio;
|
||||
|
||||
public:
|
||||
Crop ();
|
||||
Crop();
|
||||
~Crop();
|
||||
|
||||
void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr);
|
||||
void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr);
|
||||
@ -116,6 +92,34 @@ public:
|
||||
void hFlipCrop ();
|
||||
void vFlipCrop ();
|
||||
void rotateCrop (int deg, bool hflip, bool vflip);
|
||||
|
||||
private:
|
||||
Gtk::CheckButton* fixr;
|
||||
MyComboBoxText* ratio;
|
||||
MyComboBoxText* orientation;
|
||||
MyComboBoxText* guide;
|
||||
Gtk::Button* selectCrop;
|
||||
CropPanelListener* clistener;
|
||||
int opt;
|
||||
MySpinButton* x;
|
||||
MySpinButton* y;
|
||||
MySpinButton* w;
|
||||
MySpinButton* h;
|
||||
MySpinButton* ppi;
|
||||
Gtk::Label* sizecm;
|
||||
Gtk::Label* sizein;
|
||||
Gtk::VBox* ppibox;
|
||||
Gtk::VBox* sizebox;
|
||||
int maxw, maxh;
|
||||
double nx, ny;
|
||||
int nw, nh;
|
||||
int lastRotationDeg;
|
||||
sigc::connection xconn, yconn, wconn, hconn, fconn, rconn, oconn, gconn;
|
||||
bool wDirty, hDirty, xDirty, yDirty, lastFixRatio;
|
||||
void adjustCropToRatio();
|
||||
std::vector<CropRatio> cropratio;
|
||||
|
||||
IdleRegister idle_register;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -38,14 +38,15 @@ CropHandler::CropHandler ()
|
||||
displayHandler(nullptr)
|
||||
{
|
||||
|
||||
chi = new CropHandlerIdleHelper;
|
||||
chi->destroyed = false;
|
||||
chi->pending = 0;
|
||||
chi->cropHandler = this;
|
||||
idle_helper = new IdleHelper;
|
||||
idle_helper->destroyed = false;
|
||||
idle_helper->pending = 0;
|
||||
idle_helper->cropHandler = this;
|
||||
}
|
||||
|
||||
CropHandler::~CropHandler ()
|
||||
{
|
||||
idle_register.destroy();
|
||||
|
||||
if (ipc) {
|
||||
ipc->delSizeListener (this);
|
||||
@ -61,10 +62,10 @@ CropHandler::~CropHandler ()
|
||||
|
||||
cimg.lock ();
|
||||
|
||||
if (chi->pending) {
|
||||
chi->destroyed = true;
|
||||
if (idle_helper->pending) {
|
||||
idle_helper->destroyed = true;
|
||||
} else {
|
||||
delete chi;
|
||||
delete idle_helper;
|
||||
}
|
||||
|
||||
cimg.unlock ();
|
||||
@ -292,83 +293,6 @@ void CropHandler::getPosition (int& x, int& y)
|
||||
}
|
||||
|
||||
|
||||
int createpixbufs (void* data)
|
||||
{
|
||||
|
||||
CropHandlerIdleHelper* chi = static_cast<CropHandlerIdleHelper*>(data);
|
||||
|
||||
if (chi->destroyed) {
|
||||
if (chi->pending == 1) {
|
||||
delete chi;
|
||||
} else {
|
||||
chi->pending--;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
CropHandler* ch = chi->cropHandler;
|
||||
|
||||
ch->cimg.lock ();
|
||||
ch->cropPixbuf.clear ();
|
||||
|
||||
if (!ch->enabled) {
|
||||
delete [] ch->cropimg;
|
||||
ch->cropimg = nullptr;
|
||||
delete [] ch->cropimgtrue;
|
||||
ch->cropimgtrue = nullptr;
|
||||
ch->cimg.unlock ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (ch->cropimg) {
|
||||
if (ch->cix == ch->cropX && ch->ciy == ch->cropY && ch->ciw == ch->cropW && ch->cih == ch->cropH && ch->cis == (ch->zoom >= 1000 ? 1 : ch->zoom)) {
|
||||
// calculate final image size
|
||||
int czoom = ch->zoom < 1000 ? 1000 : ch->zoom;
|
||||
int imw = ch->cropimg_width * czoom / 1000;
|
||||
int imh = ch->cropimg_height * czoom / 1000;
|
||||
|
||||
if (imw > ch->ww) {
|
||||
imw = ch->ww;
|
||||
}
|
||||
|
||||
if (imh > ch->wh) {
|
||||
imh = ch->wh;
|
||||
}
|
||||
|
||||
Glib::RefPtr<Gdk::Pixbuf> tmpPixbuf = Gdk::Pixbuf::create_from_data (ch->cropimg, Gdk::COLORSPACE_RGB, false, 8, ch->cropimg_width, 2 * ch->cropimg_height, 3 * ch->cropimg_width);
|
||||
ch->cropPixbuf = Gdk::Pixbuf::create (Gdk::COLORSPACE_RGB, false, 8, imw, imh);
|
||||
tmpPixbuf->scale (ch->cropPixbuf, 0, 0, imw, imh, 0, 0, czoom / 1000.0, czoom / 1000.0, Gdk::INTERP_NEAREST);
|
||||
tmpPixbuf.clear ();
|
||||
|
||||
Glib::RefPtr<Gdk::Pixbuf> tmpPixbuftrue = Gdk::Pixbuf::create_from_data (ch->cropimgtrue, Gdk::COLORSPACE_RGB, false, 8, ch->cropimg_width, 2 * ch->cropimg_height, 3 * ch->cropimg_width);
|
||||
ch->cropPixbuftrue = Gdk::Pixbuf::create (Gdk::COLORSPACE_RGB, false, 8, imw, imh);
|
||||
tmpPixbuftrue->scale (ch->cropPixbuftrue, 0, 0, imw, imh, 0, 0, czoom / 1000.0, czoom / 1000.0, Gdk::INTERP_NEAREST);
|
||||
tmpPixbuftrue.clear ();
|
||||
}
|
||||
|
||||
delete [] ch->cropimg;
|
||||
ch->cropimg = nullptr;
|
||||
delete [] ch->cropimgtrue;
|
||||
ch->cropimgtrue = nullptr;
|
||||
}
|
||||
|
||||
ch->cimg.unlock ();
|
||||
|
||||
if (ch->displayHandler) {
|
||||
ch->displayHandler->cropImageUpdated ();
|
||||
|
||||
if (ch->initial) {
|
||||
ch->displayHandler->initialImageArrived ();
|
||||
ch->initial = false;
|
||||
}
|
||||
}
|
||||
|
||||
chi->pending--;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void CropHandler::setDetailedCrop (IImage8* im, IImage8* imtrue, rtengine::procparams::ColorManagementParams cmp,
|
||||
rtengine::procparams::CropParams cp, int ax, int ay, int aw, int ah, int askip)
|
||||
{
|
||||
@ -408,8 +332,84 @@ void CropHandler::setDetailedCrop (IImage8* im, IImage8* imtrue, rtengine::procp
|
||||
ciw = aw;
|
||||
cih = ah;
|
||||
cis = askip;
|
||||
chi->pending++;
|
||||
add_idle (createpixbufs, chi);
|
||||
idle_helper->pending++;
|
||||
|
||||
const auto func = [](gpointer data) -> gboolean {
|
||||
IdleHelper* const idle_helper = static_cast<IdleHelper*>(data);
|
||||
|
||||
if (idle_helper->destroyed) {
|
||||
if (idle_helper->pending == 1) {
|
||||
delete idle_helper;
|
||||
} else {
|
||||
idle_helper->pending--;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
CropHandler* ch = idle_helper->cropHandler;
|
||||
|
||||
ch->cimg.lock ();
|
||||
ch->cropPixbuf.clear ();
|
||||
|
||||
if (!ch->enabled) {
|
||||
delete [] ch->cropimg;
|
||||
ch->cropimg = nullptr;
|
||||
delete [] ch->cropimgtrue;
|
||||
ch->cropimgtrue = nullptr;
|
||||
ch->cimg.unlock ();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (ch->cropimg) {
|
||||
if (ch->cix == ch->cropX && ch->ciy == ch->cropY && ch->ciw == ch->cropW && ch->cih == ch->cropH && ch->cis == (ch->zoom >= 1000 ? 1 : ch->zoom)) {
|
||||
// calculate final image size
|
||||
int czoom = ch->zoom < 1000 ? 1000 : ch->zoom;
|
||||
int imw = ch->cropimg_width * czoom / 1000;
|
||||
int imh = ch->cropimg_height * czoom / 1000;
|
||||
|
||||
if (imw > ch->ww) {
|
||||
imw = ch->ww;
|
||||
}
|
||||
|
||||
if (imh > ch->wh) {
|
||||
imh = ch->wh;
|
||||
}
|
||||
|
||||
Glib::RefPtr<Gdk::Pixbuf> tmpPixbuf = Gdk::Pixbuf::create_from_data (ch->cropimg, Gdk::COLORSPACE_RGB, false, 8, ch->cropimg_width, 2 * ch->cropimg_height, 3 * ch->cropimg_width);
|
||||
ch->cropPixbuf = Gdk::Pixbuf::create (Gdk::COLORSPACE_RGB, false, 8, imw, imh);
|
||||
tmpPixbuf->scale (ch->cropPixbuf, 0, 0, imw, imh, 0, 0, czoom / 1000.0, czoom / 1000.0, Gdk::INTERP_NEAREST);
|
||||
tmpPixbuf.clear ();
|
||||
|
||||
Glib::RefPtr<Gdk::Pixbuf> tmpPixbuftrue = Gdk::Pixbuf::create_from_data (ch->cropimgtrue, Gdk::COLORSPACE_RGB, false, 8, ch->cropimg_width, 2 * ch->cropimg_height, 3 * ch->cropimg_width);
|
||||
ch->cropPixbuftrue = Gdk::Pixbuf::create (Gdk::COLORSPACE_RGB, false, 8, imw, imh);
|
||||
tmpPixbuftrue->scale (ch->cropPixbuftrue, 0, 0, imw, imh, 0, 0, czoom / 1000.0, czoom / 1000.0, Gdk::INTERP_NEAREST);
|
||||
tmpPixbuftrue.clear ();
|
||||
}
|
||||
|
||||
delete [] ch->cropimg;
|
||||
ch->cropimg = nullptr;
|
||||
delete [] ch->cropimgtrue;
|
||||
ch->cropimgtrue = nullptr;
|
||||
}
|
||||
|
||||
ch->cimg.unlock ();
|
||||
|
||||
if (ch->displayHandler) {
|
||||
ch->displayHandler->cropImageUpdated ();
|
||||
|
||||
if (ch->initial) {
|
||||
ch->displayHandler->initialImageArrived ();
|
||||
ch->initial = false;
|
||||
}
|
||||
}
|
||||
|
||||
idle_helper->pending--;
|
||||
|
||||
return FALSE;
|
||||
};
|
||||
|
||||
idle_register.add(func, idle_helper);
|
||||
}
|
||||
|
||||
cimg.unlock ();
|
||||
|
@ -36,56 +36,15 @@ public:
|
||||
virtual void setDisplayPosition (int x, int y) {}
|
||||
};
|
||||
|
||||
class CropHandler;
|
||||
struct CropHandlerIdleHelper {
|
||||
CropHandler* cropHandler;
|
||||
bool destroyed;
|
||||
int pending;
|
||||
};
|
||||
|
||||
/**
|
||||
* This class handle the displayed part of the image, ask for the initial data and process it so it can display it.
|
||||
* Its position on the preview is handled not set by this class but by the CropHandlerListener (i.e. CropWindow) with which it works closely.
|
||||
*/
|
||||
class CropHandler : public rtengine::DetailedCropListener, public rtengine::SizeListener
|
||||
class CropHandler final :
|
||||
public rtengine::DetailedCropListener,
|
||||
public rtengine::SizeListener
|
||||
{
|
||||
|
||||
friend int createpixbufs (void* data);
|
||||
|
||||
protected:
|
||||
int zoom; // scale factor (e.g. 5 if 1:5 scale) ; if 1:1 scale and bigger, factor is multiplied by 1000 (i.e. 1000 for 1:1 scale, 2000 for 2:1, etc...)
|
||||
int ww, wh; // size of the crop's canvas on the screen ; might be bigger than the displayed image, but not smaller
|
||||
int imx, imy, imw, imh; // this is a copy of the cropwindow's parameters
|
||||
int cax, cay; // clamped crop anchor's coordinate, i.e. point of the image that coincide to the center of the display area, expressed in image coordinates; cannot be outside the image's bounds; but if cax==cay==-1, designate the center of the image
|
||||
int cx, cy, cw, ch; // position and size of the requested crop ; position expressed in image coordinates, so cx and cy might be negative and cw and ch higher than the image's 1:1 size
|
||||
int cropX, cropY, cropW, cropH; // cropPixbuf's displayed area (position and size), i.e. coordinates in 1:1 scale, i.e. cx, cy, cw & ch trimmed to the image's bounds
|
||||
bool enabled;
|
||||
unsigned char* cropimg;
|
||||
unsigned char* cropimgtrue;
|
||||
int cropimg_width, cropimg_height, cix, ciy, ciw, cih, cis;
|
||||
bool initial;
|
||||
bool isLowUpdatePriority;
|
||||
|
||||
rtengine::StagedImageProcessor* ipc;
|
||||
rtengine::DetailedCrop* crop;
|
||||
|
||||
CropDisplayHandler* displayHandler;
|
||||
CropHandlerIdleHelper* chi;
|
||||
|
||||
void compDim ();
|
||||
|
||||
public:
|
||||
|
||||
void update ();
|
||||
|
||||
|
||||
rtengine::procparams::CropParams cropParams;
|
||||
rtengine::procparams::ColorManagementParams colorParams;
|
||||
Glib::RefPtr<Gdk::Pixbuf> cropPixbuf;
|
||||
Glib::RefPtr<Gdk::Pixbuf> cropPixbuftrue;
|
||||
|
||||
MyMutex cimg;
|
||||
|
||||
CropHandler ();
|
||||
~CropHandler ();
|
||||
|
||||
@ -127,6 +86,46 @@ public:
|
||||
bool getWindow (int& cwx, int& cwy, int& cww, int& cwh, int& cskip);
|
||||
// SizeListener interface
|
||||
void sizeChanged (int w, int h, int ow, int oh);
|
||||
|
||||
void update ();
|
||||
|
||||
|
||||
rtengine::procparams::CropParams cropParams;
|
||||
rtengine::procparams::ColorManagementParams colorParams;
|
||||
Glib::RefPtr<Gdk::Pixbuf> cropPixbuf;
|
||||
Glib::RefPtr<Gdk::Pixbuf> cropPixbuftrue;
|
||||
|
||||
MyMutex cimg;
|
||||
|
||||
private:
|
||||
struct IdleHelper {
|
||||
CropHandler* cropHandler;
|
||||
bool destroyed;
|
||||
int pending;
|
||||
};
|
||||
|
||||
void compDim ();
|
||||
|
||||
int zoom; // scale factor (e.g. 5 if 1:5 scale) ; if 1:1 scale and bigger, factor is multiplied by 1000 (i.e. 1000 for 1:1 scale, 2000 for 2:1, etc...)
|
||||
int ww, wh; // size of the crop's canvas on the screen ; might be bigger than the displayed image, but not smaller
|
||||
int imx, imy, imw, imh; // this is a copy of the cropwindow's parameters
|
||||
int cax, cay; // clamped crop anchor's coordinate, i.e. point of the image that coincide to the center of the display area, expressed in image coordinates; cannot be outside the image's bounds; but if cax==cay==-1, designate the center of the image
|
||||
int cx, cy, cw, ch; // position and size of the requested crop ; position expressed in image coordinates, so cx and cy might be negative and cw and ch higher than the image's 1:1 size
|
||||
int cropX, cropY, cropW, cropH; // cropPixbuf's displayed area (position and size), i.e. coordinates in 1:1 scale, i.e. cx, cy, cw & ch trimmed to the image's bounds
|
||||
bool enabled;
|
||||
unsigned char* cropimg;
|
||||
unsigned char* cropimgtrue;
|
||||
int cropimg_width, cropimg_height, cix, ciy, ciw, cih, cis;
|
||||
bool initial;
|
||||
bool isLowUpdatePriority;
|
||||
|
||||
rtengine::StagedImageProcessor* ipc;
|
||||
rtengine::DetailedCrop* crop;
|
||||
|
||||
CropDisplayHandler* displayHandler;
|
||||
IdleHelper* idle_helper;
|
||||
|
||||
IdleRegister idle_register;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -18,6 +18,7 @@
|
||||
*/
|
||||
#include "dirbrowser.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
|
||||
#ifdef WIN32
|
||||
|
@ -327,22 +327,24 @@ DirPyrDenoise::DirPyrDenoise () : FoldableToolPanel(this, "dirpyrdenoise", M("TP
|
||||
|
||||
DirPyrDenoise::~DirPyrDenoise ()
|
||||
{
|
||||
idle_register.destroy();
|
||||
|
||||
delete NoiscurveEditorG;
|
||||
delete CCcurveEditorG;
|
||||
}
|
||||
|
||||
}
|
||||
int chromaChangedUI (void* data)
|
||||
{
|
||||
(static_cast<DirPyrDenoise*>(data))->chromaComputed_ ();
|
||||
return 0;
|
||||
}
|
||||
void DirPyrDenoise::chromaChanged (double autchroma, double autred, double autblue)
|
||||
{
|
||||
nextchroma = autchroma;
|
||||
// printf("CHROM=%f\n",nextchroma);
|
||||
nextred = autred;
|
||||
nextblue = autblue;
|
||||
add_idle(chromaChangedUI, this);
|
||||
|
||||
const auto func = [](gpointer data) -> gboolean {
|
||||
static_cast<DirPyrDenoise*>(data)->chromaComputed_();
|
||||
return false;
|
||||
};
|
||||
|
||||
idle_register.add(func, this);
|
||||
}
|
||||
|
||||
bool DirPyrDenoise::chromaComputed_ ()
|
||||
@ -356,12 +358,6 @@ bool DirPyrDenoise::chromaComputed_ ()
|
||||
updateNoiseLabel ();
|
||||
return false;
|
||||
}
|
||||
int TilePrevChangedUI (void* data)
|
||||
{
|
||||
(static_cast<DirPyrDenoise*>(data))->TilePrevComputed_ ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void DirPyrDenoise::noiseTilePrev (int tileX, int tileY, int prevX, int prevY, int sizeT, int sizeP)
|
||||
{
|
||||
@ -372,10 +368,14 @@ void DirPyrDenoise::noiseTilePrev (int tileX, int tileY, int prevX, int prevY, i
|
||||
nextsizeT = sizeT;
|
||||
nextsizeP = sizeP;
|
||||
|
||||
add_idle(TilePrevChangedUI, this);
|
||||
|
||||
const auto func = [](gpointer data) -> gboolean {
|
||||
static_cast<DirPyrDenoise*>(data)->TilePrevComputed_();
|
||||
return false;
|
||||
};
|
||||
|
||||
idle_register.add(func, this);
|
||||
}
|
||||
|
||||
bool DirPyrDenoise::TilePrevComputed_ ()
|
||||
{
|
||||
|
||||
@ -385,6 +385,7 @@ bool DirPyrDenoise::TilePrevComputed_ ()
|
||||
updatePrevLabel ();
|
||||
return false;
|
||||
}
|
||||
|
||||
void DirPyrDenoise::updateTileLabel ()
|
||||
{
|
||||
if (!batchMode) {
|
||||
@ -422,19 +423,17 @@ void DirPyrDenoise::updatePrevLabel ()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int noiseChangedUI (void* data)
|
||||
{
|
||||
(static_cast<DirPyrDenoise*>(data))->noiseComputed_ ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void DirPyrDenoise::noiseChanged (double nresid, double highresid)
|
||||
{
|
||||
nextnresid = nresid;
|
||||
nexthighresid = highresid;
|
||||
add_idle(noiseChangedUI, this);
|
||||
|
||||
const auto func = [](gpointer data) -> gboolean {
|
||||
static_cast<DirPyrDenoise*>(data)->noiseComputed_();
|
||||
return false;
|
||||
};
|
||||
|
||||
idle_register.add(func, this);
|
||||
}
|
||||
|
||||
bool DirPyrDenoise::noiseComputed_ ()
|
||||
|
@ -28,10 +28,58 @@
|
||||
#include "guiutils.h"
|
||||
#include "options.h"
|
||||
|
||||
class DirPyrDenoise : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel, public rtengine::AutoChromaListener, public CurveListener, public ColorProvider
|
||||
class DirPyrDenoise final :
|
||||
public ToolParamBlock,
|
||||
public AdjusterListener,
|
||||
public FoldableToolPanel,
|
||||
public rtengine::AutoChromaListener,
|
||||
public CurveListener,
|
||||
public ColorProvider
|
||||
{
|
||||
public:
|
||||
DirPyrDenoise ();
|
||||
~DirPyrDenoise ();
|
||||
|
||||
protected:
|
||||
void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr);
|
||||
void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr);
|
||||
void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr);
|
||||
void setBatchMode (bool batchMode);
|
||||
void curveChanged (CurveEditor* ce);
|
||||
void setEditProvider (EditDataProvider *provider);
|
||||
void autoOpenCurve ();
|
||||
|
||||
void adjusterChanged (Adjuster* a, double newval);
|
||||
void enabledChanged ();
|
||||
void enhanceChanged ();
|
||||
void medianChanged ();
|
||||
void autochromaChanged ();
|
||||
void chromaChanged (double autchroma, double autred, double autblue);
|
||||
bool chromaComputed_ ();
|
||||
void noiseChanged (double nresid, double highresid);
|
||||
bool noiseComputed_ ();
|
||||
void noiseTilePrev (int tileX, int tileY, int prevX, int prevY, int sizeT, int sizeP);
|
||||
bool TilePrevComputed_ ();
|
||||
|
||||
// void perform_toggled ();
|
||||
void updateNoiseLabel ();
|
||||
void LmethodChanged ();
|
||||
void CmethodChanged ();
|
||||
void C2methodChanged ();
|
||||
void updateTileLabel ();
|
||||
void updatePrevLabel ();
|
||||
|
||||
void dmethodChanged ();
|
||||
void medmethodChanged ();
|
||||
void methodmedChanged ();
|
||||
void rgbmethodChanged ();
|
||||
void smethodChanged ();
|
||||
virtual void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller);
|
||||
|
||||
void setAdjusterBehavior (bool lumaadd, bool lumdetadd, bool chromaadd, bool chromaredadd, bool chromablueadd, bool gammaadd, bool passesadd);
|
||||
void trimValues (rtengine::procparams::ProcParams* pp);
|
||||
Glib::ustring getSettingString ();
|
||||
|
||||
private:
|
||||
CurveEditorGroup* NoiscurveEditorG;
|
||||
CurveEditorGroup* CCcurveEditorG;
|
||||
Adjuster* luma;
|
||||
@ -92,50 +140,7 @@ protected:
|
||||
int nextsizeT;
|
||||
int nextsizeP;
|
||||
|
||||
public:
|
||||
|
||||
DirPyrDenoise ();
|
||||
~DirPyrDenoise ();
|
||||
|
||||
void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr);
|
||||
void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr);
|
||||
void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr);
|
||||
void setBatchMode (bool batchMode);
|
||||
void curveChanged (CurveEditor* ce);
|
||||
void setEditProvider (EditDataProvider *provider);
|
||||
void autoOpenCurve ();
|
||||
|
||||
void adjusterChanged (Adjuster* a, double newval);
|
||||
void enabledChanged ();
|
||||
void enhanceChanged ();
|
||||
void medianChanged ();
|
||||
void autochromaChanged ();
|
||||
void chromaChanged (double autchroma, double autred, double autblue);
|
||||
bool chromaComputed_ ();
|
||||
void noiseChanged (double nresid, double highresid);
|
||||
bool noiseComputed_ ();
|
||||
void noiseTilePrev (int tileX, int tileY, int prevX, int prevY, int sizeT, int sizeP);
|
||||
bool TilePrevComputed_ ();
|
||||
|
||||
// void perform_toggled ();
|
||||
void updateNoiseLabel ();
|
||||
void LmethodChanged ();
|
||||
void CmethodChanged ();
|
||||
void C2methodChanged ();
|
||||
void updateTileLabel ();
|
||||
void updatePrevLabel ();
|
||||
|
||||
void dmethodChanged ();
|
||||
void medmethodChanged ();
|
||||
void methodmedChanged ();
|
||||
void rgbmethodChanged ();
|
||||
void smethodChanged ();
|
||||
virtual void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller);
|
||||
|
||||
void setAdjusterBehavior (bool lumaadd, bool lumdetadd, bool chromaadd, bool chromaredadd, bool chromablueadd, bool gammaadd, bool passesadd);
|
||||
void trimValues (rtengine::procparams::ProcParams* pp);
|
||||
Glib::ustring getSettingString ();
|
||||
|
||||
IdleRegister idle_register;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -35,6 +35,44 @@
|
||||
|
||||
using namespace rtengine::procparams;
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
struct spparams {
|
||||
double val;
|
||||
Glib::ustring str;
|
||||
MyProgressBar *pProgress;
|
||||
Glib::RefPtr<Gtk::CssProvider> cssProvider;
|
||||
};
|
||||
|
||||
int setprogressStrUI ( void *p )
|
||||
{
|
||||
spparams *s = static_cast<spparams*> (p);
|
||||
|
||||
if ( ! s->str.empty() ) {
|
||||
s->pProgress->set_text ( M (s->str) );
|
||||
}
|
||||
|
||||
if ( s->val >= 0 ) {
|
||||
s->pProgress->set_fraction ( s->val );
|
||||
|
||||
if (s->cssProvider) {
|
||||
if ( s->val < 1.0 ) {
|
||||
s->cssProvider->load_from_data ("ProgressBar { background-color: red }");
|
||||
} else {
|
||||
s->cssProvider->load_from_data ("ProgressBar { background-color: grey }");
|
||||
}
|
||||
|
||||
s->pProgress->get_style_context()->set_background (s->pProgress->get_window());
|
||||
}
|
||||
}
|
||||
|
||||
delete s;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class EditorPanel::ColorManagementToolbar
|
||||
{
|
||||
private:
|
||||
@ -683,6 +721,7 @@ EditorPanel::EditorPanel (FilePanel* filePanel)
|
||||
|
||||
EditorPanel::~EditorPanel ()
|
||||
{
|
||||
idle_register.destroy();
|
||||
|
||||
history->setHistoryBeforeLineListener (nullptr);
|
||||
// the order is important!
|
||||
@ -1017,46 +1056,12 @@ void EditorPanel::setProgressState (bool inProcessing)
|
||||
g_idle_add (setProgressStateUIThread, p);
|
||||
}
|
||||
|
||||
struct spparams {
|
||||
double val;
|
||||
Glib::ustring str;
|
||||
MyProgressBar *pProgress;
|
||||
Glib::RefPtr<Gtk::CssProvider> cssProvider;
|
||||
|
||||
};
|
||||
|
||||
int setprogressStrUI ( void *p )
|
||||
{
|
||||
spparams *s = static_cast<spparams*> (p);
|
||||
|
||||
if ( ! s->str.empty() ) {
|
||||
s->pProgress->set_text ( M (s->str) );
|
||||
}
|
||||
|
||||
if ( s->val >= 0 ) {
|
||||
s->pProgress->set_fraction ( s->val );
|
||||
|
||||
if (s->cssProvider) {
|
||||
if ( s->val < 1.0 ) {
|
||||
s->cssProvider->load_from_data ("ProgressBar { background-color: red }");
|
||||
} else {
|
||||
s->cssProvider->load_from_data ("ProgressBar { background-color: grey }");
|
||||
}
|
||||
|
||||
s->pProgress->get_style_context()->set_background (s->pProgress->get_window());
|
||||
}
|
||||
}
|
||||
|
||||
delete s;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void EditorPanel::setProgress (double p)
|
||||
{
|
||||
spparams *s = new spparams;
|
||||
s->val = p;
|
||||
s->pProgress = progressLabel;
|
||||
add_idle (setprogressStrUI, s);
|
||||
idle_register.add(setprogressStrUI, s);
|
||||
}
|
||||
|
||||
void EditorPanel::setProgressStr (Glib::ustring str)
|
||||
@ -1065,7 +1070,7 @@ void EditorPanel::setProgressStr (Glib::ustring str)
|
||||
s->str = str;
|
||||
s->val = -1;
|
||||
s->pProgress = progressLabel;
|
||||
add_idle (setprogressStrUI, s);
|
||||
idle_register.add(setprogressStrUI, s);
|
||||
}
|
||||
|
||||
// This is only called from the ThreadUI, so within the gtk thread
|
||||
|
@ -45,102 +45,17 @@ struct EditorPanelIdleHelper {
|
||||
};
|
||||
|
||||
class RTWindow;
|
||||
class EditorPanel : public Gtk::VBox,
|
||||
class EditorPanel final :
|
||||
public Gtk::VBox,
|
||||
public PParamsChangeListener,
|
||||
public rtengine::ProgressListener,
|
||||
public ThumbnailListener,
|
||||
public HistoryBeforeLineListener,
|
||||
public rtengine::HistogramListener
|
||||
{
|
||||
private:
|
||||
|
||||
Glib::ustring lastSaveAsFileName;
|
||||
bool realized;
|
||||
|
||||
protected:
|
||||
MyProgressBar *progressLabel;
|
||||
Gtk::ToggleButton* info;
|
||||
Gtk::ToggleButton* hidehp;
|
||||
Gtk::ToggleButton* tbShowHideSidePanels;
|
||||
Gtk::ToggleButton* tbTopPanel_1;
|
||||
Gtk::ToggleButton* tbRightPanel_1;
|
||||
Gtk::ToggleButton* tbBeforeLock;
|
||||
//bool bAllSidePanelsVisible;
|
||||
Gtk::ToggleButton* beforeAfter;
|
||||
Gtk::Paned* hpanedl;
|
||||
Gtk::Paned* hpanedr;
|
||||
Gtk::Image *iHistoryShow, *iHistoryHide;
|
||||
Gtk::Image *iTopPanel_1_Show, *iTopPanel_1_Hide;
|
||||
Gtk::Image *iRightPanel_1_Show, *iRightPanel_1_Hide;
|
||||
Gtk::Image *iShowHideSidePanels;
|
||||
Gtk::Image *iShowHideSidePanels_exit;
|
||||
Gtk::Image *iBeforeLockON, *iBeforeLockOFF;
|
||||
Gtk::VBox *leftbox;
|
||||
Gtk::VBox *vboxright;
|
||||
|
||||
Gtk::Button* queueimg;
|
||||
Gtk::Button* saveimgas;
|
||||
Gtk::Button* sendtogimp;
|
||||
Gtk::Button* navSync;
|
||||
Gtk::Button* navNext;
|
||||
Gtk::Button* navPrev;
|
||||
|
||||
class ColorManagementToolbar;
|
||||
std::unique_ptr<ColorManagementToolbar> colorMgmtToolBar;
|
||||
|
||||
ImageAreaPanel* iareapanel;
|
||||
PreviewHandler* previewHandler;
|
||||
PreviewHandler* beforePreviewHandler; // for the before-after view
|
||||
Navigator* navigator;
|
||||
ImageAreaPanel* beforeIarea; // for the before-after view
|
||||
Gtk::VBox* beforeBox;
|
||||
Gtk::VBox* afterBox;
|
||||
Gtk::Label* beforeLabel;
|
||||
Gtk::Label* afterLabel;
|
||||
Gtk::HBox* beforeAfterBox;
|
||||
Gtk::HBox* beforeHeaderBox;
|
||||
Gtk::HBox* afterHeaderBox;
|
||||
|
||||
Gtk::Frame* ppframe;
|
||||
ProfilePanel* profilep;
|
||||
History* history;
|
||||
HistogramPanel* histogramPanel;
|
||||
ToolPanelCoordinator* tpc;
|
||||
RTWindow* parent;
|
||||
//SaveAsDialog* saveAsDialog;
|
||||
BatchToolPanelCoordinator* btpCoordinator;
|
||||
FilePanel* fPanel;
|
||||
|
||||
bool firstProcessingDone;
|
||||
|
||||
Thumbnail* openThm; // may get invalid on external delete event
|
||||
Glib::ustring fname; // must be saved separately
|
||||
|
||||
rtengine::InitialImage* isrc;
|
||||
rtengine::StagedImageProcessor* ipc;
|
||||
rtengine::StagedImageProcessor* beforeIpc; // for the before-after view
|
||||
|
||||
EditorPanelIdleHelper* epih;
|
||||
|
||||
void close ();
|
||||
|
||||
BatchQueueEntry* createBatchQueueEntry ();
|
||||
bool idle_imageSaved (ProgressConnector<int> *pc, rtengine::IImage16* img, Glib::ustring fname, SaveFormat sf);
|
||||
bool idle_saveImage (ProgressConnector<rtengine::IImage16*> *pc, Glib::ustring fname, SaveFormat sf);
|
||||
bool idle_sendToGimp ( ProgressConnector<rtengine::IImage16*> *pc, Glib::ustring fname);
|
||||
bool idle_sentToGimp (ProgressConnector<int> *pc, rtengine::IImage16* img, Glib::ustring filename);
|
||||
int err;
|
||||
|
||||
time_t processingStartedTime;
|
||||
|
||||
sigc::connection ShowHideSidePanelsconn;
|
||||
|
||||
bool isProcessing;
|
||||
|
||||
|
||||
public:
|
||||
explicit EditorPanel (FilePanel* filePanel = nullptr);
|
||||
virtual ~EditorPanel ();
|
||||
~EditorPanel ();
|
||||
|
||||
void open (Thumbnail* tmb, rtengine::InitialImage* isrc);
|
||||
void setAspect ();
|
||||
@ -214,7 +129,93 @@ public:
|
||||
void updateTabsUsesIcons (bool useIcons);
|
||||
void updateHistogramPosition (int oldPosition, int newPosition);
|
||||
|
||||
Gtk::Paned *catalogPane;
|
||||
Gtk::Paned* catalogPane;
|
||||
|
||||
private:
|
||||
void close ();
|
||||
|
||||
BatchQueueEntry* createBatchQueueEntry ();
|
||||
bool idle_imageSaved (ProgressConnector<int> *pc, rtengine::IImage16* img, Glib::ustring fname, SaveFormat sf);
|
||||
bool idle_saveImage (ProgressConnector<rtengine::IImage16*> *pc, Glib::ustring fname, SaveFormat sf);
|
||||
bool idle_sendToGimp ( ProgressConnector<rtengine::IImage16*> *pc, Glib::ustring fname);
|
||||
bool idle_sentToGimp (ProgressConnector<int> *pc, rtengine::IImage16* img, Glib::ustring filename);
|
||||
|
||||
Glib::ustring lastSaveAsFileName;
|
||||
bool realized;
|
||||
|
||||
MyProgressBar *progressLabel;
|
||||
Gtk::ToggleButton* info;
|
||||
Gtk::ToggleButton* hidehp;
|
||||
Gtk::ToggleButton* tbShowHideSidePanels;
|
||||
Gtk::ToggleButton* tbTopPanel_1;
|
||||
Gtk::ToggleButton* tbRightPanel_1;
|
||||
Gtk::ToggleButton* tbBeforeLock;
|
||||
//bool bAllSidePanelsVisible;
|
||||
Gtk::ToggleButton* beforeAfter;
|
||||
Gtk::Paned* hpanedl;
|
||||
Gtk::Paned* hpanedr;
|
||||
Gtk::Image *iHistoryShow, *iHistoryHide;
|
||||
Gtk::Image *iTopPanel_1_Show, *iTopPanel_1_Hide;
|
||||
Gtk::Image *iRightPanel_1_Show, *iRightPanel_1_Hide;
|
||||
Gtk::Image *iShowHideSidePanels;
|
||||
Gtk::Image *iShowHideSidePanels_exit;
|
||||
Gtk::Image *iBeforeLockON, *iBeforeLockOFF;
|
||||
Gtk::VBox *leftbox;
|
||||
Gtk::VBox *vboxright;
|
||||
|
||||
Gtk::Button* queueimg;
|
||||
Gtk::Button* saveimgas;
|
||||
Gtk::Button* sendtogimp;
|
||||
Gtk::Button* navSync;
|
||||
Gtk::Button* navNext;
|
||||
Gtk::Button* navPrev;
|
||||
|
||||
class ColorManagementToolbar;
|
||||
std::unique_ptr<ColorManagementToolbar> colorMgmtToolBar;
|
||||
|
||||
ImageAreaPanel* iareapanel;
|
||||
PreviewHandler* previewHandler;
|
||||
PreviewHandler* beforePreviewHandler; // for the before-after view
|
||||
Navigator* navigator;
|
||||
ImageAreaPanel* beforeIarea; // for the before-after view
|
||||
Gtk::VBox* beforeBox;
|
||||
Gtk::VBox* afterBox;
|
||||
Gtk::Label* beforeLabel;
|
||||
Gtk::Label* afterLabel;
|
||||
Gtk::HBox* beforeAfterBox;
|
||||
Gtk::HBox* beforeHeaderBox;
|
||||
Gtk::HBox* afterHeaderBox;
|
||||
|
||||
Gtk::Frame* ppframe;
|
||||
ProfilePanel* profilep;
|
||||
History* history;
|
||||
HistogramPanel* histogramPanel;
|
||||
ToolPanelCoordinator* tpc;
|
||||
RTWindow* parent;
|
||||
//SaveAsDialog* saveAsDialog;
|
||||
BatchToolPanelCoordinator* btpCoordinator;
|
||||
FilePanel* fPanel;
|
||||
|
||||
bool firstProcessingDone;
|
||||
|
||||
Thumbnail* openThm; // may get invalid on external delete event
|
||||
Glib::ustring fname; // must be saved separately
|
||||
|
||||
rtengine::InitialImage* isrc;
|
||||
rtengine::StagedImageProcessor* ipc;
|
||||
rtengine::StagedImageProcessor* beforeIpc; // for the before-after view
|
||||
|
||||
EditorPanelIdleHelper* epih;
|
||||
|
||||
int err;
|
||||
|
||||
time_t processingStartedTime;
|
||||
|
||||
sigc::connection ShowHideSidePanelsconn;
|
||||
|
||||
bool isProcessing;
|
||||
|
||||
IdleRegister idle_register;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -585,7 +585,6 @@ void FileBrowser::addEntry (FileBrowserEntry* entry)
|
||||
|
||||
void FileBrowser::addEntry_ (FileBrowserEntry* entry)
|
||||
{
|
||||
GThreadLock lock; // All GUI acces from idle_add callbacks or separate thread HAVE to be protected
|
||||
entry->selected = false;
|
||||
entry->drawable = false;
|
||||
entry->framed = editedFiles.find (entry->filename) != editedFiles.end();
|
||||
|
@ -22,12 +22,6 @@
|
||||
#include "inspector.h"
|
||||
#include "placesbrowser.h"
|
||||
|
||||
int FilePanelInitUI (void* data)
|
||||
{
|
||||
(static_cast<FilePanel*>(data))->init ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
FilePanel::FilePanel () : parent(nullptr)
|
||||
{
|
||||
|
||||
@ -143,13 +137,21 @@ FilePanel::FilePanel () : parent(nullptr)
|
||||
fileCatalog->setFileSelectionChangeListener (tpc);
|
||||
|
||||
fileCatalog->setFileSelectionListener (this);
|
||||
add_idle (FilePanelInitUI, this);
|
||||
|
||||
const auto func = [](gpointer data) -> gboolean {
|
||||
static_cast<FilePanel*>(data)->init();
|
||||
return FALSE;
|
||||
};
|
||||
|
||||
idle_register.add(func, this);
|
||||
|
||||
show_all ();
|
||||
}
|
||||
|
||||
FilePanel::~FilePanel ()
|
||||
{
|
||||
idle_register.destroy();
|
||||
|
||||
rightNotebookSwitchConn.disconnect();
|
||||
|
||||
if (inspectorPanel) {
|
||||
|
@ -33,38 +33,12 @@
|
||||
#include "progressconnector.h"
|
||||
|
||||
class RTWindow;
|
||||
class FilePanel : public Gtk::HPaned,
|
||||
|
||||
class FilePanel final :
|
||||
public Gtk::HPaned,
|
||||
public FileSelectionListener,
|
||||
public PParamsChangeListener
|
||||
{
|
||||
|
||||
protected:
|
||||
//DirBrowser* dirBrowser;
|
||||
PlacesBrowser* placesBrowser;
|
||||
RecentBrowser* recentBrowser;
|
||||
// FileCatalog* fileCatalog; // filecatalog is the file browser with the button bar above it
|
||||
|
||||
Inspector* inspectorPanel;
|
||||
Gtk::VPaned* tpcPaned;
|
||||
BatchToolPanelCoordinator* tpc;
|
||||
History* history;
|
||||
//FilterPanel* filterPanel;
|
||||
RTWindow* parent;
|
||||
Gtk::Notebook* rightNotebook;
|
||||
sigc::connection rightNotebookSwitchConn;
|
||||
|
||||
struct pendingLoad {
|
||||
bool complete;
|
||||
ProgressConnector<rtengine::InitialImage*> *pc;
|
||||
Thumbnail *thm;
|
||||
};
|
||||
MyMutex pendingLoadMutex;
|
||||
std::vector<struct pendingLoad*> pendingLoads;
|
||||
|
||||
int error;
|
||||
|
||||
void on_NB_switch_page(Gtk::Widget* page, guint page_num);
|
||||
|
||||
public:
|
||||
FilePanel ();
|
||||
~FilePanel ();
|
||||
@ -107,6 +81,32 @@ public:
|
||||
bool handleShortcutKey (GdkEventKey* event);
|
||||
void updateTPVScrollbar (bool hide);
|
||||
void updateTabsUsesIcons (bool useIcons);
|
||||
|
||||
private:
|
||||
void on_NB_switch_page(Gtk::Widget* page, guint page_num);
|
||||
|
||||
PlacesBrowser* placesBrowser;
|
||||
RecentBrowser* recentBrowser;
|
||||
|
||||
Inspector* inspectorPanel;
|
||||
Gtk::VPaned* tpcPaned;
|
||||
BatchToolPanelCoordinator* tpc;
|
||||
History* history;
|
||||
RTWindow* parent;
|
||||
Gtk::Notebook* rightNotebook;
|
||||
sigc::connection rightNotebookSwitchConn;
|
||||
|
||||
struct pendingLoad {
|
||||
bool complete;
|
||||
ProgressConnector<rtengine::InitialImage*> *pc;
|
||||
Thumbnail *thm;
|
||||
};
|
||||
MyMutex pendingLoadMutex;
|
||||
std::vector<struct pendingLoad*> pendingLoads;
|
||||
|
||||
int error;
|
||||
|
||||
IdleRegister idle_register;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -44,6 +44,53 @@ guint add_idle (GSourceFunc function, gpointer data)
|
||||
//gtk_main_iteration_do(false);
|
||||
}
|
||||
|
||||
IdleRegister::~IdleRegister()
|
||||
{
|
||||
destroy();
|
||||
}
|
||||
|
||||
void IdleRegister::add(GSourceFunc function, gpointer data)
|
||||
{
|
||||
struct DataWrapper {
|
||||
IdleRegister* const self;
|
||||
GSourceFunc function;
|
||||
gpointer data;
|
||||
};
|
||||
|
||||
const auto dispatch = [](gpointer data) -> gboolean {
|
||||
DataWrapper* const data_wrapper = static_cast<DataWrapper*>(data);
|
||||
|
||||
if (!data_wrapper->function(data_wrapper->data)) {
|
||||
data_wrapper->self->mutex.lock();
|
||||
data_wrapper->self->ids.erase(data_wrapper);
|
||||
data_wrapper->self->mutex.unlock();
|
||||
|
||||
delete data_wrapper;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
};
|
||||
|
||||
DataWrapper* const data_wrapper = new DataWrapper{
|
||||
this,
|
||||
function,
|
||||
data
|
||||
};
|
||||
|
||||
mutex.lock();
|
||||
ids[data_wrapper] = add_idle(dispatch, data_wrapper);
|
||||
mutex.unlock();
|
||||
}
|
||||
|
||||
void IdleRegister::destroy()
|
||||
{
|
||||
mutex.lock();
|
||||
for (const auto id : ids) {
|
||||
g_source_remove(id.second);
|
||||
}
|
||||
mutex.unlock();
|
||||
}
|
||||
|
||||
/*
|
||||
gboolean giveMeAGo(void* data) {
|
||||
|
@ -19,13 +19,17 @@
|
||||
#ifndef __GUI_UTILS_
|
||||
#define __GUI_UTILS_
|
||||
|
||||
#include <map>
|
||||
|
||||
#include <gtkmm.h>
|
||||
|
||||
#include <cairomm/cairomm.h>
|
||||
#include "../rtengine/rtengine.h"
|
||||
|
||||
#include "../rtengine/coord.h"
|
||||
#include "../rtengine/noncopyable.h"
|
||||
#include "../rtengine/rtengine.h"
|
||||
|
||||
#include "rtimage.h"
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
|
||||
// for convenience...
|
||||
#include "pathutils.h"
|
||||
@ -42,6 +46,20 @@ void setExpandAlignProperties(Gtk::Widget *widget, bool hExpand, bool vExpand, e
|
||||
|
||||
guint add_idle (GSourceFunc function, gpointer data);
|
||||
|
||||
class IdleRegister final :
|
||||
public rtengine::NonCopyable
|
||||
{
|
||||
public:
|
||||
~IdleRegister();
|
||||
|
||||
void add(GSourceFunc function, gpointer data);
|
||||
void destroy();
|
||||
|
||||
private:
|
||||
std::map<void*, guint> ids;
|
||||
MyMutex mutex;
|
||||
};
|
||||
|
||||
// TODO: The documentation says gdk_threads_enter and gdk_threads_leave should be replaced
|
||||
// by g_main_context_invoke(), g_idle_add() and related functions, but this will require more extensive changes.
|
||||
// We silence those warnings until then so that we notice the others.
|
||||
|
@ -86,11 +86,7 @@ Glib::ustring fname_to_utf8 (const char* fname)
|
||||
}
|
||||
|
||||
// This recursive mutex will be used by gdk_threads_enter/leave instead of a simple mutex
|
||||
#ifdef WIN32
|
||||
static Glib::RecMutex myGdkRecMutex;
|
||||
#else
|
||||
static Glib::Threads::RecMutex myGdkRecMutex;
|
||||
#endif
|
||||
|
||||
static void myGdkLockEnter()
|
||||
{
|
||||
@ -187,6 +183,9 @@ int main(int argc, char **argv)
|
||||
#ifdef WIN32
|
||||
bool consoleOpened = false;
|
||||
|
||||
// suppression of annoying error boxes
|
||||
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX);
|
||||
|
||||
if (argc > 1 || options.rtSettings.verbose) {
|
||||
if (options.rtSettings.verbose || ( !Glib::file_test (fname_to_utf8 (argv[1]), Glib::FILE_TEST_EXISTS ) && !Glib::file_test (fname_to_utf8 (argv[1]), Glib::FILE_TEST_IS_DIR))) {
|
||||
bool stdoutRedirectedtoFile = (GetFileType(GetStdHandle(STD_OUTPUT_HANDLE)) == 0x0001);
|
||||
@ -211,7 +210,7 @@ int main(int argc, char **argv)
|
||||
SetConsoleCtrlHandler( NULL, true );
|
||||
// Set title of console
|
||||
char consoletitle[128];
|
||||
sprintf(consoletitle, "RawTherapee %s Console", VERSION);
|
||||
sprintf(consoletitle, "RawTherapee %s Console", RTVERSION);
|
||||
SetConsoleTitle(consoletitle);
|
||||
// increase size of screen buffer
|
||||
COORD c;
|
||||
@ -237,7 +236,7 @@ int main(int argc, char **argv)
|
||||
consoleOpened = true;
|
||||
|
||||
// printing RT's version in every case, particularly useful for the 'verbose' mode, but also for the batch processing
|
||||
std::cout << "RawTherapee, version " << VERSION << std::endl;
|
||||
std::cout << "RawTherapee, version " << RTVERSION << std::endl;
|
||||
std::cout << "WARNING: closing this window will close RawTherapee!" << std::endl << std::endl;
|
||||
}
|
||||
}
|
||||
@ -260,7 +259,7 @@ int main(int argc, char **argv)
|
||||
|
||||
if (argc > 1 || options.rtSettings.verbose) {
|
||||
// printing RT's version in all case, particularly useful for the 'verbose' mode, but also for the batch processing
|
||||
std::cout << "RawTherapee, version " << VERSION << std::endl;
|
||||
std::cout << "RawTherapee, version " << RTVERSION << std::endl;
|
||||
#ifdef WIN32
|
||||
std::cout << "WARNING: closing this window will close RawTherapee!" << std::endl << std::endl;
|
||||
#endif
|
||||
|
@ -46,8 +46,7 @@ Glib::ustring Options::rtdir;
|
||||
Glib::ustring Options::cacheBaseDir;
|
||||
|
||||
Options options;
|
||||
Glib::ustring versionString = VERSION;
|
||||
Glib::ustring versionSuffixString = VERSION_SUFFIX;
|
||||
Glib::ustring versionString = RTVERSION;
|
||||
Glib::ustring paramFileExtension = ".pp3";
|
||||
|
||||
Options::Options ()
|
||||
@ -1454,11 +1453,11 @@ int Options::readFromFile (Glib::ustring fname)
|
||||
}
|
||||
|
||||
if (keyFile.has_key ("Color Management", "PrinterIntent")) {
|
||||
rtSettings.printerIntent = static_cast<rtengine::RenderingIntent>(keyFile.get_integer("Color Management", "PrinterIntent"));
|
||||
rtSettings.printerIntent = static_cast<rtengine::RenderingIntent> (keyFile.get_integer ("Color Management", "PrinterIntent"));
|
||||
}
|
||||
|
||||
if (keyFile.has_key ("Color Management", "PrinterBPC")) {
|
||||
rtSettings.printerBPC = keyFile.get_boolean("Color Management", "PrinterBPC");
|
||||
rtSettings.printerBPC = keyFile.get_boolean ("Color Management", "PrinterBPC");
|
||||
}
|
||||
|
||||
if (keyFile.has_key ("Color Management", "PrinterProfile")) {
|
||||
@ -1486,7 +1485,7 @@ int Options::readFromFile (Glib::ustring fname)
|
||||
}
|
||||
|
||||
if (keyFile.has_key ("Color Management", "MonitorBPC")) {
|
||||
rtSettings.monitorBPC = keyFile.get_boolean("Color Management", "MonitorBPC");
|
||||
rtSettings.monitorBPC = keyFile.get_boolean ("Color Management", "MonitorBPC");
|
||||
}
|
||||
|
||||
if (keyFile.has_key ("Color Management", "CRI")) {
|
||||
@ -1825,7 +1824,7 @@ bool Options::safeDirGet (const Glib::KeyFile& keyFile, const Glib::ustring& sec
|
||||
const Glib::ustring& entryName, Glib::ustring& destination)
|
||||
{
|
||||
try {
|
||||
|
||||
|
||||
if (keyFile.has_key (section, entryName) && !keyFile.get_string (section, entryName).empty ()) {
|
||||
destination = keyFile.get_string (section, entryName);
|
||||
return true;
|
||||
@ -1866,7 +1865,7 @@ int Options::saveToFile (Glib::ustring fname)
|
||||
keyFile.set_string ("General", "Language", language);
|
||||
keyFile.set_boolean ("General", "LanguageAutoDetect", languageAutoDetect);
|
||||
keyFile.set_string ("General", "Theme", theme);
|
||||
keyFile.set_string ("General", "Version", VERSION);
|
||||
keyFile.set_string ("General", "Version", RTVERSION);
|
||||
keyFile.set_string ("General", "DarkFramesPath", rtSettings.darkFramesPath);
|
||||
keyFile.set_string ("General", "FlatFieldsPath", rtSettings.flatFieldsPath);
|
||||
keyFile.set_boolean ("General", "Verbose", rtSettings.verbose);
|
||||
@ -2103,41 +2102,41 @@ int Options::saveToFile (Glib::ustring fname)
|
||||
keyFile.set_double ("Sounds", "LngEditProcDoneSecs", sndLngEditProcDoneSecs);
|
||||
|
||||
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_sharpening" , fastexport_bypass_sharpening );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_sharpenEdge" , fastexport_bypass_sharpenEdge );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_sharpenMicro" , fastexport_bypass_sharpenMicro );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_sharpening", fastexport_bypass_sharpening );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_sharpenEdge", fastexport_bypass_sharpenEdge );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_sharpenMicro", fastexport_bypass_sharpenMicro );
|
||||
//keyFile.set_boolean ("Fast Export", "fastexport_bypass_lumaDenoise" , fastexport_bypass_lumaDenoise );
|
||||
//keyFile.set_boolean ("Fast Export", "fastexport_bypass_colorDenoise" , fastexport_bypass_colorDenoise );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_defringe" , fastexport_bypass_defringe );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_dirpyrDenoise" , fastexport_bypass_dirpyrDenoise );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_sh_hq" , fastexport_bypass_sh_hq );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_dirpyrequalizer" , fastexport_bypass_dirpyrequalizer );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_wavelet" , fastexport_bypass_wavelet );
|
||||
keyFile.set_string ("Fast Export", "fastexport_raw_bayer_method" , fastexport_raw_bayer_method );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_defringe", fastexport_bypass_defringe );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_dirpyrDenoise", fastexport_bypass_dirpyrDenoise );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_sh_hq", fastexport_bypass_sh_hq );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_dirpyrequalizer", fastexport_bypass_dirpyrequalizer );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_wavelet", fastexport_bypass_wavelet );
|
||||
keyFile.set_string ("Fast Export", "fastexport_raw_bayer_method", fastexport_raw_bayer_method );
|
||||
//keyFile.set_boolean ("Fast Export", "fastexport_bypass_bayer_raw_all_enhance" , fastexport_bypass_raw_bayer_all_enhance );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_raw_bayer_dcb_iterations" , fastexport_bypass_raw_bayer_dcb_iterations );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_raw_bayer_dcb_enhance" , fastexport_bypass_raw_bayer_dcb_enhance );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_raw_bayer_dcb_iterations", fastexport_bypass_raw_bayer_dcb_iterations );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_raw_bayer_dcb_enhance", fastexport_bypass_raw_bayer_dcb_enhance );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_raw_bayer_lmmse_iterations", fastexport_bypass_raw_bayer_lmmse_iterations);
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_raw_bayer_linenoise" , fastexport_bypass_raw_bayer_linenoise );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_raw_bayer_greenthresh" , fastexport_bypass_raw_bayer_greenthresh );
|
||||
keyFile.set_string ("Fast Export", "fastexport_raw_xtrans_method" , fastexport_raw_xtrans_method );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_raw_ccSteps" , fastexport_bypass_raw_ccSteps );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_raw_ca" , fastexport_bypass_raw_ca );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_raw_df" , fastexport_bypass_raw_df );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_raw_ff" , fastexport_bypass_raw_ff );
|
||||
keyFile.set_string ("Fast Export", "fastexport_icm_input" , fastexport_icm_input );
|
||||
keyFile.set_string ("Fast Export", "fastexport_icm_working" , fastexport_icm_working );
|
||||
keyFile.set_string ("Fast Export", "fastexport_icm_output" , fastexport_icm_output );
|
||||
keyFile.set_integer ("Fast Export", "fastexport_icm_output_intent" , fastexport_icm_outputIntent );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_icm_output_bpc" , fastexport_icm_outputBPC );
|
||||
keyFile.set_string ("Fast Export", "fastexport_icm_gamma" , fastexport_icm_gamma );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_resize_enabled" , fastexport_resize_enabled );
|
||||
keyFile.set_double ("Fast Export", "fastexport_resize_scale" , fastexport_resize_scale );
|
||||
keyFile.set_string ("Fast Export", "fastexport_resize_appliesTo" , fastexport_resize_appliesTo );
|
||||
keyFile.set_string ("Fast Export", "fastexport_resize_method" , fastexport_resize_method );
|
||||
keyFile.set_integer ("Fast Export", "fastexport_resize_dataspec" , fastexport_resize_dataspec );
|
||||
keyFile.set_integer ("Fast Export", "fastexport_resize_width" , fastexport_resize_width );
|
||||
keyFile.set_integer ("Fast Export", "fastexport_resize_height" , fastexport_resize_height );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_raw_bayer_linenoise", fastexport_bypass_raw_bayer_linenoise );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_raw_bayer_greenthresh", fastexport_bypass_raw_bayer_greenthresh );
|
||||
keyFile.set_string ("Fast Export", "fastexport_raw_xtrans_method", fastexport_raw_xtrans_method );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_raw_ccSteps", fastexport_bypass_raw_ccSteps );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_raw_ca", fastexport_bypass_raw_ca );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_raw_df", fastexport_bypass_raw_df );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_bypass_raw_ff", fastexport_bypass_raw_ff );
|
||||
keyFile.set_string ("Fast Export", "fastexport_icm_input", fastexport_icm_input );
|
||||
keyFile.set_string ("Fast Export", "fastexport_icm_working", fastexport_icm_working );
|
||||
keyFile.set_string ("Fast Export", "fastexport_icm_output", fastexport_icm_output );
|
||||
keyFile.set_integer ("Fast Export", "fastexport_icm_output_intent", fastexport_icm_outputIntent );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_icm_output_bpc", fastexport_icm_outputBPC );
|
||||
keyFile.set_string ("Fast Export", "fastexport_icm_gamma", fastexport_icm_gamma );
|
||||
keyFile.set_boolean ("Fast Export", "fastexport_resize_enabled", fastexport_resize_enabled );
|
||||
keyFile.set_double ("Fast Export", "fastexport_resize_scale", fastexport_resize_scale );
|
||||
keyFile.set_string ("Fast Export", "fastexport_resize_appliesTo", fastexport_resize_appliesTo );
|
||||
keyFile.set_string ("Fast Export", "fastexport_resize_method", fastexport_resize_method );
|
||||
keyFile.set_integer ("Fast Export", "fastexport_resize_dataspec", fastexport_resize_dataspec );
|
||||
keyFile.set_integer ("Fast Export", "fastexport_resize_width", fastexport_resize_width );
|
||||
keyFile.set_integer ("Fast Export", "fastexport_resize_height", fastexport_resize_height );
|
||||
|
||||
keyFile.set_string ("Dialogs", "LastIccDir", lastIccDir);
|
||||
keyFile.set_string ("Dialogs", "LastDarkframeDir", lastDarkframeDir);
|
||||
|
@ -345,7 +345,6 @@ extern Glib::ustring argv0;
|
||||
extern Glib::ustring argv1;
|
||||
extern bool simpleEditor;
|
||||
extern Glib::ustring versionString;
|
||||
extern Glib::ustring versionSuffixString;
|
||||
extern Glib::ustring paramFileExtension;
|
||||
|
||||
#endif
|
||||
|
118
rtgui/resize.cc
@ -118,7 +118,7 @@ Resize::Resize () : FoldableToolPanel(this, "resize", M("TP_RESIZE_LABEL"), fals
|
||||
|
||||
Resize::~Resize ()
|
||||
{
|
||||
|
||||
idle_register.destroy();
|
||||
delete scale;
|
||||
delete sizeBox;
|
||||
}
|
||||
@ -352,68 +352,76 @@ void Resize::sizeChanged (int mw, int mh, int ow, int oh)
|
||||
|
||||
void Resize::setDimensions ()
|
||||
{
|
||||
const auto func = [](gpointer data) -> gboolean {
|
||||
Resize* const self = static_cast<Resize*>(data);
|
||||
|
||||
int refw, refh;
|
||||
self->wconn.block(true);
|
||||
self->hconn.block(true);
|
||||
self->scale->block(true);
|
||||
|
||||
wconn.block (true);
|
||||
hconn.block (true);
|
||||
scale->block(true);
|
||||
int refw, refh;
|
||||
|
||||
if (appliesTo->get_active_row_number() == 0 && cropw) {
|
||||
// Applies to Cropped area
|
||||
refw = cropw;
|
||||
refh = croph;
|
||||
} else {
|
||||
// Applies to Full image or crop is disabled
|
||||
refw = maxw;
|
||||
refh = maxh;
|
||||
}
|
||||
|
||||
GThreadLock lock;
|
||||
w->set_range (32, 4 * refw);
|
||||
h->set_range (32, 4 * refh);
|
||||
|
||||
double tmpScale;
|
||||
|
||||
switch (spec->get_active_row_number()) {
|
||||
case (0): // Scale mode
|
||||
w->set_value((double)((int)( (double)(refw) * scale->getValue() + 0.5) ));
|
||||
h->set_value((double)((int)( (double)(refh) * scale->getValue() + 0.5) ));
|
||||
break;
|
||||
|
||||
case (1): // Width mode
|
||||
tmpScale = w->get_value() / (double)refw;
|
||||
scale->setValue (tmpScale);
|
||||
h->set_value((double)((int)( (double)(refh) * tmpScale + 0.5) ));
|
||||
break;
|
||||
|
||||
case (2): // Height mode
|
||||
tmpScale = h->get_value() / (double)refh;
|
||||
scale->setValue (tmpScale);
|
||||
w->set_value((double)((int)( (double)(refw) * tmpScale + 0.5) ));
|
||||
break;
|
||||
|
||||
case (3): { // Bounding box mode
|
||||
double wSliderValue = w->get_value();
|
||||
double hSliderValue = h->get_value();
|
||||
|
||||
if ( (wSliderValue / hSliderValue) < ((double)refw / (double)refh)) {
|
||||
tmpScale = wSliderValue / (double)refw;
|
||||
if (self->appliesTo->get_active_row_number() == 0 && self->cropw) {
|
||||
// Applies to Cropped area
|
||||
refw = self->cropw;
|
||||
refh = self->croph;
|
||||
} else {
|
||||
tmpScale = hSliderValue / (double)refh;
|
||||
// Applies to Full image or crop is disabled
|
||||
refw = self->maxw;
|
||||
refh = self->maxh;
|
||||
}
|
||||
|
||||
scale->setValue (tmpScale);
|
||||
break;
|
||||
}
|
||||
self->w->set_range(32, 4 * refw);
|
||||
self->h->set_range(32, 4 * refh);
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
switch (self->spec->get_active_row_number()) {
|
||||
case 0: {
|
||||
// Scale mode
|
||||
self->w->set_value(static_cast<double>(static_cast<int>(static_cast<double>(refw) * self->scale->getValue() + 0.5)));
|
||||
self->h->set_value(static_cast<double>(static_cast<int>(static_cast<double>(refh) * self->scale->getValue() + 0.5)));
|
||||
break;
|
||||
}
|
||||
|
||||
scale->block(false);
|
||||
wconn.block (false);
|
||||
hconn.block (false);
|
||||
case 1: {
|
||||
// Width mode
|
||||
const double tmp_scale = self->w->get_value() / static_cast<double>(refw);
|
||||
self->scale->setValue(tmp_scale);
|
||||
self->h->set_value(static_cast<double>(static_cast<int>(static_cast<double>(refh) * tmp_scale + 0.5)));
|
||||
break;
|
||||
}
|
||||
|
||||
case 2: {
|
||||
// Height mode
|
||||
const double tmp_scale = self->h->get_value() / static_cast<double>(refh);
|
||||
self->scale->setValue(tmp_scale);
|
||||
self->w->set_value(static_cast<double>(static_cast<int>(static_cast<double>(refw) * tmp_scale + 0.5)));
|
||||
break;
|
||||
}
|
||||
|
||||
case 3: {
|
||||
// Bounding box mode
|
||||
const double tmp_scale =
|
||||
self->w->get_value() / self->h->get_value() < static_cast<double>(refw) / static_cast<double>(refh)
|
||||
? self->w->get_value() / static_cast<double>(refw)
|
||||
: self->h->get_value() / static_cast<double>(refh);
|
||||
|
||||
self->scale->setValue(tmp_scale);
|
||||
break;
|
||||
}
|
||||
|
||||
default: {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
self->scale->block(false);
|
||||
self->wconn.block(false);
|
||||
self->hconn.block(false);
|
||||
|
||||
return FALSE;
|
||||
};
|
||||
|
||||
idle_register.add(func, this);
|
||||
}
|
||||
|
||||
void Resize::fitBoxScale()
|
||||
|
@ -25,25 +25,13 @@
|
||||
#include "toolpanel.h"
|
||||
#include "guiutils.h"
|
||||
|
||||
class Resize : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel, public rtengine::SizeListener
|
||||
class Resize final :
|
||||
public ToolParamBlock,
|
||||
public AdjusterListener,
|
||||
public FoldableToolPanel,
|
||||
public rtengine::SizeListener
|
||||
{
|
||||
|
||||
protected:
|
||||
Adjuster* scale;
|
||||
Gtk::VBox* sizeBox;
|
||||
MyComboBoxText* appliesTo;
|
||||
MyComboBoxText* method;
|
||||
MyComboBoxText* spec;
|
||||
MySpinButton* w;
|
||||
MySpinButton* h;
|
||||
int maxw, maxh;
|
||||
int cropw, croph;
|
||||
sigc::connection sconn, aconn, wconn, hconn;
|
||||
bool wDirty, hDirty;
|
||||
ToolParamBlock* packBox;
|
||||
|
||||
public:
|
||||
|
||||
Resize ();
|
||||
~Resize ();
|
||||
|
||||
@ -75,6 +63,20 @@ private:
|
||||
int getComputedHeight ();
|
||||
void notifyBBox ();
|
||||
void updateGUI ();
|
||||
|
||||
Adjuster* scale;
|
||||
Gtk::VBox* sizeBox;
|
||||
MyComboBoxText* appliesTo;
|
||||
MyComboBoxText* method;
|
||||
MyComboBoxText* spec;
|
||||
MySpinButton* w;
|
||||
MySpinButton* h;
|
||||
int maxw, maxh;
|
||||
int cropw, croph;
|
||||
sigc::connection sconn, aconn, wconn, hconn;
|
||||
bool wDirty, hDirty;
|
||||
ToolParamBlock* packBox;
|
||||
IdleRegister idle_register;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -121,10 +121,6 @@ RTWindow::RTWindow ()
|
||||
#endif
|
||||
versionStr = "RawTherapee " + versionString;
|
||||
|
||||
if (!versionSuffixString.empty()) {
|
||||
versionStr += " " + versionSuffixString;
|
||||
}
|
||||
|
||||
set_title_decorated("");
|
||||
set_resizable(true);
|
||||
set_resize_mode(Gtk::ResizeMode::RESIZE_QUEUE);
|
||||
@ -309,30 +305,6 @@ RTWindow::~RTWindow()
|
||||
}
|
||||
}
|
||||
|
||||
void RTWindow::findVerNumbers(int* numbers, Glib::ustring versionStr)
|
||||
{
|
||||
numbers[0] = numbers[1] = numbers[2] = numbers[3] = 0;
|
||||
int n = 0;
|
||||
|
||||
for (unsigned int i = 0; i < versionStr.length(); i++) {
|
||||
char chr = (char)versionStr.at(i);
|
||||
|
||||
if (chr >= '0' && chr <= '9') {
|
||||
numbers[n] *= 10;
|
||||
numbers[n] += (int)(chr - '0');
|
||||
} else {
|
||||
n++;
|
||||
|
||||
if (n > 4) {
|
||||
printf("Error: malformed version string; \"%s\" must follow this format: xx.xx.xx.xx. Admitting it's a developer version...\n", versionStr.c_str());
|
||||
// Reseting the already found numbers
|
||||
numbers[0] = numbers[1] = numbers[2] = numbers[3] = 100;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RTWindow::on_realize ()
|
||||
{
|
||||
Gtk::Window::on_realize ();
|
||||
@ -349,38 +321,20 @@ void RTWindow::on_realize ()
|
||||
|
||||
// Check if first run of this version, then display the Release Notes text
|
||||
if (options.version != versionString) {
|
||||
int prevVerNbr[4];
|
||||
int currVerNbr[4];
|
||||
findVerNumbers(prevVerNbr, options.version);
|
||||
findVerNumbers(currVerNbr, versionString);
|
||||
|
||||
// Now we can update the version parameter with the right value
|
||||
// Update the version parameter with the right value
|
||||
options.version = versionString;
|
||||
|
||||
bool showReleaseNotes = false;
|
||||
splash = new Splash (*this);
|
||||
splash->set_transient_for (*this);
|
||||
splash->signal_delete_event().connect( sigc::mem_fun(*this, &RTWindow::splashClosed) );
|
||||
|
||||
// Check if the current version is newer
|
||||
if (currVerNbr[0] > prevVerNbr[0]) {
|
||||
showReleaseNotes = true;
|
||||
} else if (currVerNbr[1] > prevVerNbr[1]) {
|
||||
showReleaseNotes = true;
|
||||
} else if (currVerNbr[2] > prevVerNbr[2]) {
|
||||
showReleaseNotes = true;
|
||||
}
|
||||
|
||||
if (showReleaseNotes) {
|
||||
// this is a first run!
|
||||
splash = new Splash (*this);
|
||||
splash->set_transient_for (*this);
|
||||
splash->signal_delete_event().connect( sigc::mem_fun(*this, &RTWindow::splashClosed) );
|
||||
|
||||
if (splash->hasReleaseNotes()) {
|
||||
splash->showReleaseNotes();
|
||||
splash->show ();
|
||||
} else {
|
||||
delete splash;
|
||||
splash = nullptr;
|
||||
}
|
||||
if (splash->hasReleaseNotes()) {
|
||||
splash->showReleaseNotes();
|
||||
splash->show ();
|
||||
} else {
|
||||
delete splash;
|
||||
splash = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -26,7 +26,6 @@
|
||||
extern Glib::ustring creditsPath;
|
||||
extern Glib::ustring licensePath;
|
||||
extern Glib::ustring versionString;
|
||||
extern Glib::ustring versionSuffixString;
|
||||
|
||||
SplashImage::SplashImage ()
|
||||
{
|
||||
@ -53,10 +52,6 @@ bool SplashImage::on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr)
|
||||
int w, h;
|
||||
Glib::ustring versionStr(versionString);
|
||||
|
||||
if (!versionSuffixString.empty()) {
|
||||
versionStr += " " + versionSuffixString;
|
||||
}
|
||||
|
||||
version = create_pango_layout (versionStr);
|
||||
version->set_text(versionStr);
|
||||
version->get_pixel_size (w, h);
|
||||
|
@ -4,9 +4,7 @@
|
||||
#ifndef _VERSION_
|
||||
#define _VERSION_
|
||||
|
||||
#define VERSION "${GIT_VERSION}"
|
||||
#define VERSION_SUFFIX "${VERSION_SUFFIX}"
|
||||
#define TAGDISTANCE ${GIT_TAGDISTANCE}
|
||||
#define RTVERSION "${GIT_DESCRIBE}"
|
||||
#define CACHEFOLDERNAME "RawTherapee${CACHE_NAME_SUFFIX}"
|
||||
|
||||
#endif
|
||||
|
@ -83,7 +83,7 @@ while getopts "bc:fnp:s:t:uvh?-" opt; do
|
||||
" -s <string>" \
|
||||
"Suffix of destination build directory, so that if you have applied a patch, say \"dustremoval-1.patch\", and want to have RawTherapee compiled to a folder whose name ends with \"_dustremoval1\", you would set \"-s dustremoval1\" (the underscore is automated)." "" \
|
||||
" -t \"<string>\"" \
|
||||
"Suffix displayed next to the RawTherapee version in the window titlebar. It is recommended that you include the changeset of the newest public commit (the one you would see if you cloned the repository anew) so it is clear which commit you applied the patches to. E.g.:" "-t \": ee72ddbcfd4e + dustremoval-1.patch + mustafa ibrahim\"" "" \
|
||||
"Suffix displayed next to the RawTherapee version in the window titlebar. It is recommended that you include the commit of the newest public commit (the one you would see if you cloned the repository anew) so it is clear which commit you applied the patches to. E.g.:" "-t \": ee72ddbcfd4e + dustremoval-1.patch + mustafa ibrahim\"" "" \
|
||||
" -u" \
|
||||
"Check for an update of buildRT on GitHub." "" \
|
||||
" -v" \
|
||||
@ -193,7 +193,7 @@ if [[ ! -d "${repo}" ]]; then
|
||||
currentBranch="$(git branch | grep "*" | sed -e 's/.* \+//')"
|
||||
rev="$(git rev-list --all --count)"
|
||||
node="$(git rev-parse --short HEAD)"
|
||||
printf "\nRepository state:\n Branch: ${currentBranch}\n RawTherapee-${verLatesttag}.${verLatesttagdistance}\n Changeset: ${rev}:${node}\n Latest tag: ${verLatesttag}\n\n"
|
||||
printf "\nRepository state:\n Branch: ${currentBranch}\n RawTherapee-${verLatesttag}.${verLatesttagdistance}\n Commit: ${rev}:${node}\n Latest tag: ${verLatesttag}\n\n"
|
||||
alert "Repository cloned succesfully. What would you like to do next?"
|
||||
printf "%b" "Repository cloned succesfully.\n" "Press 'q' to quit or any other key to continue... "
|
||||
read -r -n 1
|
||||
@ -239,7 +239,7 @@ verLatesttagdistance="$(git describe --tags | sed -e 's/.*-\([0-9]\+\)-.*/\1/')"
|
||||
currentBranch="$(git branch | grep "*" | sed -e 's/.* \+//')"
|
||||
rev="$(git rev-list --all --count)"
|
||||
node="$(git rev-parse --short HEAD)"
|
||||
printf "\nRepository state:\n Branch: ${currentBranch}\n RawTherapee-${verLatesttag}.${verLatesttagdistance}\n Changeset: ${rev}:${node}\n Latest tag: ${verLatesttag}\n\n"
|
||||
printf "\nRepository state:\n Branch: ${currentBranch}\n RawTherapee-${verLatesttag}.${verLatesttagdistance}\n Commit: ${rev}:${node}\n Latest tag: ${verLatesttag}\n\n"
|
||||
|
||||
#--- Print the menu
|
||||
branches=()
|
||||
|
@ -37,8 +37,8 @@ for rtDir in "${rtDirs[@]}"; do
|
||||
c=1
|
||||
pp3name=${pp3%.*}
|
||||
pp3name=${pp3name#*/}
|
||||
v+=("$(grep "Changeset:.*" "${rtDir}/AboutThisBuild.txt" | sed "s/Changeset: //")")
|
||||
printf "%s\n" "Developing images using RawTherapee changeset ${v[$i]} - ${rtDir}"
|
||||
v+=("$(grep "Commit:.*" "${rtDir}/AboutThisBuild.txt" | sed "s/Commit: //")")
|
||||
printf "%s\n" "Developing images using RawTherapee commit ${v[$i]} - ${rtDir}"
|
||||
for img in "${imgs[@]}"; do
|
||||
printf "%s" "${c}/${#imgs[@]} - "
|
||||
"${rtDir}rawtherapee" -o "${outDir}${img%.*}_${v[i]}_${pp3%.*}.tif" -p "${pp3}" -t -Y -c "$img" | grep Processing
|
||||
|
@ -1,12 +1,76 @@
|
||||
#!/usr/bin/env bash
|
||||
gitBranch="`git symbolic-ref --short -q HEAD`"
|
||||
gitVersion="`git describe --tags --always`"
|
||||
gitLatesttag="`echo $gitVersion | sed 's/-.*//'`"
|
||||
gitLatesttagdistance="`echo $gitVersion | sed 's/.*-\(.*\)-g.*/\1/'`"
|
||||
gitChangeset="`git rev-parse --verify HEAD`"
|
||||
# This script is called from tools/generateSourceTarball
|
||||
# It is used to generate a ReleaseInfo.cmake file with commit information which
|
||||
# enables compilation without needing to have git installed.
|
||||
|
||||
echo "set(GIT_BRANCH $gitBranch)
|
||||
set(GIT_VERSION $gitLatesttag.$gitLatesttagdistance)
|
||||
set(GIT_CHANGESET $gitChangeset)
|
||||
set(GIT_TAGDISTANCE $gitLatesttagdistance)" > ReleaseInfo.cmake
|
||||
rm -f ReleaseInfo.cmake
|
||||
|
||||
# Get version description.
|
||||
# Depending on whether you checked out a branch (dev) or a tag (release),
|
||||
# "git describe" will return "5.0-gtk2-2-g12345678" or "5.0-gtk2", respectively.
|
||||
gitDescribe="$(git describe --tags --always)"
|
||||
|
||||
# Get branch name.
|
||||
# Will return empty if you checked out a commit or tag. Empty string handled later.
|
||||
gitBranch="$(git symbolic-ref --short -q HEAD)"
|
||||
|
||||
# Get commit hash.
|
||||
gitCommit="$(git rev-parse --short --verify HEAD)"
|
||||
|
||||
# Get commit date, YYYY-MM-DD.
|
||||
gitCommitDate="$(git show -s --format=%cd --date=format:%Y-%m-%d)"
|
||||
|
||||
# Get number of commits since tagging. This is what gitDescribe uses.
|
||||
# Works when checking out branch, tag or commit.
|
||||
gitCommitsSinceTag="$(git rev-list --count HEAD --not $(git tag --merged HEAD))"
|
||||
|
||||
# Get number of commits since branching.
|
||||
# Works when checking out branch, tag or commit.
|
||||
gitCommitsSinceBranch="$(git rev-list --count HEAD --not --tags)"
|
||||
|
||||
if [[ -z $gitDescribe ]]; then
|
||||
printf '%s\n' "Failed finding commit description, aborting."
|
||||
exit 1
|
||||
fi
|
||||
if [[ -z $gitBranch ]]; then
|
||||
printf '%s\n' "No branch found. Using commit description as branch name."
|
||||
gitBranch="$gitDescribe"
|
||||
fi
|
||||
if [[ -z $gitCommit ]]; then
|
||||
printf '%s\n' "Failed finding commit hash, aborting."
|
||||
exit 1
|
||||
fi
|
||||
if [[ -z $gitCommitDate ]]; then
|
||||
printf '%s\n' "Failed finding commit date, aborting."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Create numeric version.
|
||||
# This version is nonsense, either don't use it at all or use it only where you have no other choice, e.g. Inno Setup's VersionInfoVersion.
|
||||
# Strip everything after hyphen, e.g. "5.0-gtk2" -> "5.0", "5.1-rc1" -> "5.1" (ergo BS).
|
||||
if [[ -z $gitCommitsSinceTag ]]; then
|
||||
gitVersionNumericBS="0.0.0"
|
||||
else
|
||||
gitVersionNumericBS="${gitDescribe%%-*}" # Remove everything after first hyphen.
|
||||
gitVersionNumericBS="${gitVersionNumericBS}.${gitCommitsSinceTag}" # Remove everything until after first hyphen: 5.0
|
||||
fi
|
||||
|
||||
cat <<EOF > ReleaseInfo.cmake
|
||||
set(GIT_DESCRIBE $gitDescribe)
|
||||
set(GIT_BRANCH $gitBranch)
|
||||
set(GIT_COMMIT $gitCommit)
|
||||
set(GIT_COMMIT_DATE $gitCommitDate)
|
||||
set(GIT_COMMITS_SINCE_TAG $gitCommitsSinceTag)
|
||||
set(GIT_COMMITS_SINCE_BRANCH $gitCommitsSinceBranch)
|
||||
set(GIT_VERSION_NUMERIC_BS $gitVersionNumericBS)
|
||||
EOF
|
||||
|
||||
printf '%s\n' "Git checkout information:" \
|
||||
" Commit description: ${gitDescribe}" \
|
||||
" Branch: ${gitBranch}" \
|
||||
" Commit: ${gitCommit}" \
|
||||
" Commit date: ${gitCommitDate}" \
|
||||
" Commits since tag: ${gitCommitsSinceTag}" \
|
||||
" Commits since branch: ${gitCommitsSinceBranch}" \
|
||||
" Version (unreliable): ${gitVersionNumericBS}" \
|
||||
""
|
||||
|
@ -1,17 +1,24 @@
|
||||
#!/usr/bin/env bash
|
||||
# Run from the root of the cloned repository.
|
||||
# This script is used to generate a source code tarball which includes commit
|
||||
# metadata so that RawTherapee can be compiled without needing to install git.
|
||||
# It is meant to be used every time a release is made after creating an
|
||||
# annotated tag in git.
|
||||
# It is your job to checkout the tag before running this script.
|
||||
|
||||
if [[ ! "$1" ]]; then
|
||||
printf "%s\n" "Usage: $0 <git tag>" "Example: $0 4.2"
|
||||
exit
|
||||
./tools/generateReleaseInfo
|
||||
ret=$?
|
||||
if [[ $ret -ne 0 ]]; then
|
||||
printf '%s\n' "Something went wrong while running tools/generateReleaseInfo" "Aborting."
|
||||
exit 1
|
||||
fi
|
||||
desc="$(grep GIT_DESCRIBE ReleaseInfo.cmake)" # Gets whole string: set(GIT_DESCRIBE 5.0-gtk2-1-g96bf9129)
|
||||
desc="${desc#*GIT_DESCRIBE }" # Removes front: 5.0-gtk2-1-g96bf9129)
|
||||
desc="${desc%)}" # Removes back: 5.0-gtk2-1-g96bf9129
|
||||
|
||||
git checkout "$1" || exit 0
|
||||
tools/generateReleaseInfo
|
||||
mkdir rawtherapee-"$1"
|
||||
mv ReleaseInfo.cmake rawtherapee-"$1"
|
||||
#hg archive -X ".hg*" -X "rtgui/config.h" -X "rtgui/version.h" -X "rtdata/rawtherapee.desktop" rawtherapee-"$1".tar
|
||||
git archive --format=tar "$1" > rawtherapee-"$1".tar
|
||||
tar --append --file=rawtherapee-"$1".tar rawtherapee-"$1"/ReleaseInfo.cmake
|
||||
xz -z -9e rawtherapee-"$1".tar
|
||||
rm -r rawtherapee-"$1"
|
||||
git checkout
|
||||
mkdir "rawtherapee-${desc}" || exit 1
|
||||
mv ReleaseInfo.cmake "rawtherapee-${desc}" || exit 1
|
||||
git archive --format=tar --prefix="rawtherapee-${desc}/" -o "rawtherapee-${desc}.tar" HEAD || exit 1
|
||||
tar --append --file="rawtherapee-${desc}.tar" "rawtherapee-${desc}/ReleaseInfo.cmake" || exit 1
|
||||
xz -z -9e "rawtherapee-${desc}.tar" || exit 1
|
||||
rm -r "rawtherapee-${desc}"
|
||||
|
@ -111,7 +111,7 @@
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>rawtherapee</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>@version@, Copyright © 2004-2010 Gábor Horváth, 2010-2016 RT dev team</string>
|
||||
<string>@version@, Copyright © 2004-2010 Gábor Horváth, 2010-2017 RawTherapee Development Team</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>rawtherapee.icns</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
@ -127,7 +127,7 @@
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>@version@</string>
|
||||
<string>@shortVersion@</string>
|
||||
<key>LSExecutableArchitectures</key>
|
||||
<array>
|
||||
<string>@arch@</string>
|
||||
@ -135,7 +135,7 @@
|
||||
<key>NSHighResolutionCapable</key>
|
||||
<true/>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright © 2004-2013 Gábor Horváth</string>
|
||||
<string>Copyright © 2004-2010 Gábor Horváth, 2010-2017 RawTherapee Development Team</string>
|
||||
<key>UTExportedTypeDeclarations</key>
|
||||
<array>
|
||||
<dict>
|
||||
|
@ -33,12 +33,33 @@ fi
|
||||
|
||||
# update project version
|
||||
if test -x "$(which git)" -a -d "${PROJECT_SOURCE_DIR}/.git"; then
|
||||
# This is what the version ought to look like to be accurate in the git universe:
|
||||
PROJECT_FULL_VERSION="$(git describe --tags --always | sed 's/-g.*//')_$(git symbolic-ref --short -q HEAD)"
|
||||
# outputs: 4.2-677-g904467b_master
|
||||
# but Apple requirements https://goo.gl/eWDQv6 state we should use this:
|
||||
PROJECT_VERSION="$(git describe --tags --always | sed -e 's/-g.*//' -e 's/-/./')"
|
||||
# outputs: 4.2.677
|
||||
### This section is copied from tools/generateReleaseInfo
|
||||
# Get version description.
|
||||
# Depending on whether you checked out a branch (dev) or a tag (release),
|
||||
# "git describe" will return "5.0-gtk2-2-g12345678" or "5.0-gtk2", respectively.
|
||||
gitDescribe="$(git describe --tags --always)"
|
||||
|
||||
# Apple requires a numeric version of the form n.n.n
|
||||
# https://goo.gl/eWDQv6
|
||||
|
||||
# Get number of commits since tagging. This is what gitDescribe uses.
|
||||
# Works when checking out branch, tag or commit.
|
||||
gitCommitsSinceTag="$(git rev-list --count HEAD --not $(git tag --merged HEAD))"
|
||||
|
||||
# Create numeric version.
|
||||
# This version is nonsense, either don't use it at all or use it only where you have no other choice, e.g. Inno Setup's VersionInfoVersion.
|
||||
# Strip everything after hyphen, e.g. "5.0-gtk2" -> "5.0", "5.1-rc1" -> "5.1" (ergo BS).
|
||||
if [[ -z $gitCommitsSinceTag ]]; then
|
||||
gitVersionNumericBS="0.0.0"
|
||||
else
|
||||
gitVersionNumericBS="${gitDescribe%%-*}" # Remove everything after first hyphen.
|
||||
gitVersionNumericBS="${gitVersionNumericBS}.${gitCommitsSinceTag}" # Remove everything until after first hyphen: 5.0
|
||||
fi
|
||||
### Copy end.
|
||||
|
||||
PROJECT_FULL_VERSION="$gitDescribe"
|
||||
PROJECT_VERSION="$gitVersionNumericBS"
|
||||
|
||||
fi
|
||||
|
||||
# if not specify CMAKE_OSX_DEPLOYMENT_TARGET when compiling,
|
||||
@ -85,7 +106,7 @@ ETC="${MACOS}"/etc
|
||||
EXECUTABLE="${MACOS}"/rawtherapee
|
||||
|
||||
message "Removing old files"
|
||||
rm -rf "${APP}" ${PROJECT_NAME}_*.dmg
|
||||
rm -rf "${APP}" "${PROJECT_NAME}_*.dmg"
|
||||
|
||||
message "Creating bundle container"
|
||||
install -d "${RESOURCES}" \
|
||||
@ -163,7 +184,7 @@ install -m 0755 "${PROJECT_SOURCE_DATA_DIR}"/executable_loader.in "${MACOS}"/raw
|
||||
cp "${PROJECT_SOURCE_DATA_DIR}"/{rawtherapee,profile}.icns "${RESOURCES}"
|
||||
cp "${PROJECT_SOURCE_DATA_DIR}"/PkgInfo "${CONTENTS}"
|
||||
install -m 0644 "${PROJECT_SOURCE_DATA_DIR}"/Info.plist.in "${CONTENTS}"/Info.plist
|
||||
sed -i "" -e "s|@version@|${PROJECT_VERSION}|
|
||||
sed -i "" -e "s|@version@|${PROJECT_FULL_VERSION}|
|
||||
s|@shortVersion@|${PROJECT_VERSION}|
|
||||
s|@arch@|${arch}|" \
|
||||
"${CONTENTS}"/Info.plist
|
||||
|
@ -1,30 +1,26 @@
|
||||
; Script initially generated by the Inno Setup Script Wizard
|
||||
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
|
||||
|
||||
|
||||
|
||||
; This script has to be used by "INNO Setup" (http://www.jrsoftware.org/) to create a setup executable.
|
||||
; When the "make install" process ends, you can double click on this file to load it into
|
||||
; INNO Setup, then execute it to create the archive. It expect to find all the dependency libs
|
||||
; in the root destination folder (the one of the 'make install' process), and the usual 'lib' directory.
|
||||
; Please note that all *.dll files will be added, so be carefull on which dll are present in the directory
|
||||
; before compiling the INNO Setup script.
|
||||
; Script initially generated by the Inno Setup Script Wizard.
|
||||
; Documentation: http://www.jrsoftware.org/ishelp/
|
||||
;
|
||||
; It also search for and bundles all "rawtherapee*.exe" files, which mean that you can bundle a Release and
|
||||
; a Debug build at the same time (for conveniency), but official downloads must only contain the Release
|
||||
; version.
|
||||
; This script is used by "Inno Setup" (http://www.jrsoftware.org/) to create a
|
||||
; setup executable. When the "make install" process ends, double-click on this
|
||||
; file to load it into Inno Setup, then execute it to create the installer. It
|
||||
; expects to find all the dependency libs in the root destination folder (the
|
||||
; one from the 'make install' process), and the usual 'lib' directory.
|
||||
; Note that all *.dll files will be added, so be careful which DLLs are present
|
||||
; in the folder before running this script.
|
||||
;
|
||||
; In all cases, you have to bundle at least one file named "rawtherapee.exe", which INNO Setup will require
|
||||
; as a default executable to run.
|
||||
; This script searches for and bundles all "rawtherapee*.exe" files, allowing
|
||||
; you to bundle a "release" as well as a "debug" version at the same time.
|
||||
; At least one "rawtherapee.exe" file is required.
|
||||
;
|
||||
; This script is configured to check that the operating system's bit depth is the same than the executable file.
|
||||
; Please note that the ia64 architecture is not supported (is it really necessary?)
|
||||
|
||||
|
||||
; This script is configured to check that the operating system's bit depth is
|
||||
; the same as that of the executable file.
|
||||
;
|
||||
; The IA-64 architecture is not supported.
|
||||
|
||||
#define MyAppName "RawTherapee"
|
||||
#define MyAppVersion "${GIT_VERSION}"
|
||||
#define MyAppFullVersion "${GIT_VERSION}.${GIT_TAGDISTANCE}"
|
||||
#define MyAppVersion "${GIT_DESCRIBE}"
|
||||
#define MyAppVersionNumeric "${GIT_NUMERIC_VERSION_BS}"
|
||||
#define MyAppPublisher "rawtherapee.com"
|
||||
#define MyAppURL "http://www.rawtherapee.com/"
|
||||
#define MyAppExeName "rawtherapee.exe"
|
||||
@ -39,21 +35,20 @@
|
||||
; NOTE: The value of AppId uniquely identifies this application.
|
||||
; Do not use the same AppId value in installers for other applications.
|
||||
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
|
||||
AppId={{128459AB-59A7-430A-8BD0-3D8803D50400}
|
||||
AppId={#MyAppName}{#MyAppVersion}
|
||||
AppName={#MyAppName}
|
||||
AppVersion={#MyAppVersion}
|
||||
VersionInfoVersion={#MyAppFullVersion}
|
||||
;AppVerName={#MyAppName} {#MyAppVersion}
|
||||
VersionInfoVersion={#MyAppVersionNumeric}
|
||||
AppPublisher={#MyAppPublisher}
|
||||
AppPublisherURL={#MyAppURL}
|
||||
AppSupportURL={#MyAppURL}
|
||||
AppUpdatesURL={#MyAppURL}
|
||||
DefaultDirName={pf}\{#MyAppName}-{#MyAppFullVersion}
|
||||
DefaultGroupName={#MyAppName} {#MyAppFullVersion}
|
||||
DefaultDirName={pf}\{#MyAppName}\{#MyAppVersion}
|
||||
DefaultGroupName={#MyAppName}
|
||||
AllowNoIcons=yes
|
||||
LicenseFile={#MyBuildBasePath}\LICENSE.txt
|
||||
OutputDir={#MyBuildBasePath}\..\
|
||||
OutputBaseFilename={#MyAppName}_{#MySystemName}_{#MyBitDepth}_{#MyAppFullVersion}
|
||||
OutputBaseFilename={#MyAppName}_{#MyAppVersion}_{#MySystemName}_{#MyBitDepth}
|
||||
SetupIconFile={#MySourceBasePath}\rtdata\icons\RT.ico
|
||||
WizardImageFile={#MySourceBasePath}\tools\win\InnoSetup\installerStrip.bmp
|
||||
WizardImageBackColor=$2A2A2A
|
||||
@ -79,7 +74,6 @@ Name: "hebrew"; MessagesFile: "compiler:Languages\Hebrew.isl"
|
||||
Name: "hungarian"; MessagesFile: "compiler:Languages\Hungarian.isl"
|
||||
Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl"
|
||||
Name: "japanese"; MessagesFile: "compiler:Languages\Japanese.isl"
|
||||
Name: "nepali"; MessagesFile: "compiler:Languages\Nepali.islu"
|
||||
Name: "norwegian"; MessagesFile: "compiler:Languages\Norwegian.isl"
|
||||
Name: "polish"; MessagesFile: "compiler:Languages\Polish.isl"
|
||||
Name: "portuguese"; MessagesFile: "compiler:Languages\Portuguese.isl"
|
||||
@ -97,7 +91,7 @@ Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{
|
||||
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1
|
||||
|
||||
[Files]
|
||||
Source: "{#MyBuildBasePath}\rawtherapee.exe"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "{#MyBuildBasePath}\rawtherapee*.exe"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "{#MyBuildBasePath}\camconst.json"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "{#MyBuildBasePath}\dcpprofiles\*"; DestDir: "{app}\dcpprofiles\"; Flags: ignoreversion recursesubdirs createallsubdirs
|
||||
;Source: "{#MyBuildBasePath}\etc\*"; DestDir: "{app}\etc\"; Flags: ignoreversion recursesubdirs createallsubdirs
|
||||
@ -122,11 +116,11 @@ Source: "{#MyBuildBasePath}\fonts\DroidSansMonoSlashed.ttf"; DestDir: "{fonts}";
|
||||
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
|
||||
|
||||
[Icons]
|
||||
Name: "{group}\{#MyAppName} {#MyAppFullVersion}"; Filename: "{app}\{#MyAppExeName}"
|
||||
Name: "{group}\{#MyAppName} {#MyAppVersion}"; Filename: "{app}\{#MyAppExeName}"
|
||||
Name: "{group}\{cm:ProgramOnTheWeb,{#MyAppName}}"; Filename: "{#MyAppURL}"
|
||||
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
|
||||
Name: "{commondesktop}\{#MyAppName}{#MyAppFullVersion}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
|
||||
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName} {#MyAppFullVersion}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon
|
||||
Name: "{commondesktop}\{#MyAppName} {#MyAppVersion}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
|
||||
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName} {#MyAppVersion}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon
|
||||
|
||||
[Run]
|
||||
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
|
||||
|
41
win.cmake
@ -1,45 +1,40 @@
|
||||
# Use the 'Debug' build type to have a non optimized, with debugging information, with a console executable
|
||||
# Use the 'Release' build type to have an optimized, without debugging information, console free executable
|
||||
# Use the 'RelWithDebInfo' build type to have an optimized, without debugging information, with a console executable
|
||||
# Use the 'MinSizeRel' build type to have the smallest possible, without debugging information, console free executable
|
||||
# Use the 'Debug' build type to have a non optimized, with debugging information, with a console executable.
|
||||
# Use the 'Release' build type to have an optimized, without debugging information, console-free executable.
|
||||
# Use the 'RelWithDebInfo' build type to have an optimized, without debugging information, with a console executable.
|
||||
# Use the 'MinSizeRel' build type to have the smallest possible, without debugging information, console-free executable.
|
||||
#
|
||||
#set(CMAKE_BUILD_TYPE Release CACHE STRING "Between: None Debug Release RelWithDebInfo MinSizeRel.")
|
||||
|
||||
set(CMAKE_INSTALL_PREFIX ./Builds/${CMAKE_BUILD_TYPE} CACHE PATH "Libraries installation path")
|
||||
set(DATADIR . CACHE PATH "Datas installation path")
|
||||
set(CMAKE_INSTALL_PREFIX ./Builds/${CMAKE_BUILD_TYPE} CACHE PATH "Library installation path")
|
||||
set(DATADIR . CACHE PATH "Data installation path")
|
||||
set(BINDIR . CACHE PATH "Binaries installation path")
|
||||
set(LIBDIR . CACHE PATH "Libraries installation path")
|
||||
set(LIBDIR . CACHE PATH "Library installation path")
|
||||
set(DOCDIR ./doc CACHE PATH "Documentation installation path")
|
||||
set(CREDITSDIR . CACHE PATH "Credit file installation path")
|
||||
set(LICENCEDIR . CACHE PATH "Licence file installation path")
|
||||
|
||||
set(BUILD_SHARED OFF CACHE BOOL "Should RT generate shared libraries")
|
||||
set(BUILD_SHARED OFF CACHE BOOL "Should shared libraries be generated")
|
||||
set(OPTION_OMP ON CACHE BOOL "Use OpenMP to speedup the preview and batch processing")
|
||||
# set WITH_MYFILE_MMAP to OFF if you experience crash with thumbnail creation (it should be slower, but more reliable)
|
||||
set(WITH_MYFILE_MMAP ON CACHE BOOL "Use the MMAP mechanism to speedup thumbnail creations")
|
||||
# set WITH_MYFILE_MMAP to OFF if you experience crashes caused by thumbnail creation (it will be slower but more reliable).
|
||||
set(WITH_MYFILE_MMAP ON CACHE BOOL "Use the MMAP mechanism to speedup thumbnail creation")
|
||||
|
||||
set(CACHE_NAME_SUFFIX "" CACHE STRING "RawTherapee's cache folder suffix (leave empty to use the default suffix, i.e. latesttag)")
|
||||
set(CACHE_NAME_SUFFIX "" CACHE STRING "RawTherapee's cache folder suffix (leave empty to use default from UpdateIndo.cmake)")
|
||||
|
||||
# This line will let you chose the target number, and the associated processor
|
||||
set(PROC_TARGET_NUMBER 0 CACHE STRING "Target Processor")
|
||||
|
||||
# To add a version suffix (text) after the standard version number, e.g. for patched builds
|
||||
set(VERSION_SUFFIX "" CACHE STRING "For patched builds, use this string to add a version suffix (text); KEEP EMPTY FOR RELEASE BULDS")
|
||||
# Choose the target processor's number from ProcessorTargets.cmake.
|
||||
set(PROC_TARGET_NUMBER 0 CACHE STRING "Target processor")
|
||||
|
||||
# If you want to force the target processor name when PROC_TARGET_NUMBER = 0 or 2,
|
||||
# uncomment the next line and replace labelWithoutQuotes by its value
|
||||
#set (PROC_LABEL labelWithoutQuotes CACHE STRING "Target Processor label")
|
||||
# uncomment the next line and replace labelWithoutQuotes with a string.
|
||||
#set (PROC_LABEL labelWithoutQuotes CACHE STRING "Target processor label")
|
||||
|
||||
# Important: MinGW-w64 user may need to specify the -m32 or -m64 flag in CMAKE_CXX_FLAGS,
|
||||
# CMAKE_C_FLAGS and CMAKE_EXE_LINKER_FLAGS to select between 32/64bit build
|
||||
# Important: MinGW-w64 users may need to specify the -m32 or -m64 flag in CMAKE_CXX_FLAGS,
|
||||
# CMAKE_C_FLAGS and CMAKE_EXE_LINKER_FLAGS to select between 32-/64-bit builds.
|
||||
set(CMAKE_CXX_FLAGS "-mwin32 -mthreads" CACHE STRING "Compiler options for C++ source files")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g2" CACHE STRING "Compiler options for C++ source files and Debug target")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "-mwindows -DNDEBUG -O2" CACHE STRING "Compiler options for C++ source files and Release target")
|
||||
set(CMAKE_CXX_FLAGS_MINSIZEREL "-mwindows -DNDEBUG -Os" CACHE STRING "Compiler options for C++ source files and MinSizeRel target")
|
||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g" CACHE STRING "Compiler options for C++ source files and RelWithDebInfo target")
|
||||
|
||||
# Uncomment the next line and set the right value to override the default value (special compiling flags for RTEngine)
|
||||
#set(RTENGINE_CXX_FLAGS "-funroll-loops" CACHE STRING "Special compilation flags for RTEngine")
|
||||
|
||||
set(CMAKE_C_FLAGS "-mwin32 -mthreads" CACHE STRING "Compiler options for C source files")
|
||||
set(CMAKE_C_FLAGS_DEBUG "-O0 -g2" CACHE STRING "Compiler options for C source files and Debug target")
|
||||
set(CMAKE_C_FLAGS_RELEASE "-mwindows -DNDEBUG -O2" CACHE STRING "Compiler options for C source files and Release target")
|
||||
|