Merge pull request #5396 from Beep6581/cppcheck

Cppcheck fixes
This commit is contained in:
Ingo Weyrich 2019-08-07 18:28:20 +02:00 committed by GitHub
commit 2accd75bd0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
84 changed files with 320 additions and 659 deletions

View File

@ -401,13 +401,10 @@ bool MultiDiagonalSymmetricMatrix::CreateIncompleteCholeskyFactorization(int Max
//How many diagonals in the decomposition?
MaxFillAbove++; //Conceptually, now "fill" includes an existing diagonal. Simpler in the math that follows.
int j, mic, fp;
mic = 1;
fp = 1;
int mic = 1;
for(int ii = 1; ii < m; ii++) {
fp = rtengine::min(StartRows[ii] - StartRows[ii - 1], MaxFillAbove); //Guaranteed positive since StartRows must be created in increasing order.
mic = mic + fp;
mic += rtengine::min(StartRows[ii] - StartRows[ii - 1], MaxFillAbove); //Guaranteed positive since StartRows must be created in increasing order.
}
//Initialize the decomposition - setup memory, start rows, etc.
@ -421,7 +418,7 @@ bool MultiDiagonalSymmetricMatrix::CreateIncompleteCholeskyFactorization(int Max
for(int ii = 1; ii < m; ii++) {
//Set j to the number of diagonals to be created corresponding to a diagonal on this source matrix...
j = rtengine::min(StartRows[ii] - StartRows[ii - 1], MaxFillAbove);
int j = rtengine::min(StartRows[ii] - StartRows[ii - 1], MaxFillAbove);
//...and create those diagonals. I want to take a moment to tell you about how much I love minimalistic loops: very much.
while(j-- != 0)
@ -491,7 +488,7 @@ bool MultiDiagonalSymmetricMatrix::CreateIncompleteCholeskyFactorization(int Max
findmap[j] = FindIndex( icStartRows[j]);
}
for(j = 0; j < n; j++) {
for(int j = 0; j < n; j++) {
//Calculate d for this column.
d[j] = Diagonals[0][j];
@ -557,12 +554,11 @@ void MultiDiagonalSymmetricMatrix::CholeskyBackSolve(float* RESTRICT x, float* R
float* RESTRICT *d = IncompleteCholeskyFactorization->Diagonals;
int* RESTRICT s = IncompleteCholeskyFactorization->StartRows;
int M = IncompleteCholeskyFactorization->m, N = IncompleteCholeskyFactorization->n;
int i, j;
if(M != DIAGONALSP1) { // can happen in theory
for(j = 0; j < N; j++) {
for(int j = 0; j < N; j++) {
float sub = b[j]; // using local var to reduce memory writes, gave a big speedup
i = 1;
int i = 1;
int c = j - s[i];
while(c >= 0) {
@ -574,9 +570,9 @@ void MultiDiagonalSymmetricMatrix::CholeskyBackSolve(float* RESTRICT x, float* R
x[j] = sub; // only one memory-write per j
}
} else { // that's the case almost every time
for(j = 0; j <= s[M - 1]; j++) {
for(int j = 0; j <= s[M - 1]; j++) {
float sub = b[j]; // using local var to reduce memory writes, gave a big speedup
i = 1;
int i = 1;
int c = j - s[1];
while(c >= 0) {
@ -588,7 +584,7 @@ void MultiDiagonalSymmetricMatrix::CholeskyBackSolve(float* RESTRICT x, float* R
x[j] = sub; // only one memory-write per j
}
for(j = s[M - 1] + 1; j < N; j++) {
for(int j = s[M - 1] + 1; j < N; j++) {
float sub = b[j]; // using local var to reduce memory writes, gave a big speedup
for(int i = DIAGONALSP1 - 1; i > 0; i--) { // using a constant upperbound allows the compiler to unroll this loop (gives a good speedup)
@ -605,14 +601,15 @@ void MultiDiagonalSymmetricMatrix::CholeskyBackSolve(float* RESTRICT x, float* R
#pragma omp parallel for
#endif
for(j = 0; j < N; j++) {
for(int j = 0; j < N; j++) {
x[j] = x[j] / d[0][j];
}
if(M != DIAGONALSP1) { // can happen in theory
int j = N;
while(j-- > 0) {
float sub = x[j]; // using local var to reduce memory writes, gave a big speedup
i = 1;
int i = 1;
int c = j + s[1];
while(c < N) {
@ -624,9 +621,9 @@ void MultiDiagonalSymmetricMatrix::CholeskyBackSolve(float* RESTRICT x, float* R
x[j] = sub; // only one memory-write per j
}
} else { // that's the case almost every time
for(j = N - 1; j >= (N - 1) - s[M - 1]; j--) {
for(int j = N - 1; j >= (N - 1) - s[M - 1]; j--) {
float sub = x[j]; // using local var to reduce memory writes, gave a big speedup
i = 1;
int i = 1;
int c = j + s[1];
while(c < N) {
@ -638,7 +635,7 @@ void MultiDiagonalSymmetricMatrix::CholeskyBackSolve(float* RESTRICT x, float* R
x[j] = sub; // only one memory-write per j
}
for(j = (N - 2) - s[M - 1]; j >= 0; j--) {
for(int j = (N - 2) - s[M - 1]; j >= 0; j--) {
float sub = x[j]; // using local var to reduce memory writes, gave a big speedup
for(int i = DIAGONALSP1 - 1; i > 0; i--) { // using a constant upperbound allows the compiler to unroll this loop (gives a good speedup)

View File

@ -2016,45 +2016,6 @@ void Color::Lch2Luv(float c, float h, float &u, float &v)
v = c * sincosval.y;
}
// NOT TESTED
void Color::XYZ2Luv (float X, float Y, float Z, float &L, float &u, float &v)
{
X /= 65535.f;
Y /= 65535.f;
Z /= 65535.f;
if (Y > float(eps)) {
L = 116.f * std::cbrt(Y) - 16.f;
} else {
L = float(kappa) * Y;
}
u = 13.f * L * float(u0);
v = 13.f * L * float(v0);
}
// NOT TESTED
void Color::Luv2XYZ (float L, float u, float v, float &X, float &Y, float &Z)
{
if (L > float(epskap)) {
float t = (L + 16.f) / 116.f;
Y = t * t * t;
} else {
Y = L / float(kappa);
}
float a = ((52.f * L) / (u + 13.f * L * float(u0)) - 1.f) / 3.f;
float d = Y * (((39 * L) / (v + 13 * float(v0))) - 5.f);
float b = -5.f * Y;
X = (d - b) / (a + 1.f / 3.f);
Z = X * a + b;
X *= 65535.f;
Y *= 65535.f;
Z *= 65535.f;
}
/*
* Gamut mapping algorithm

View File

@ -240,20 +240,20 @@ public:
static inline void rgb2slfloat(float r, float g, float b, float &s, float &l)
{
float m = min(r, g, b);
float M = max(r, g, b);
float C = M - m;
float minVal = min(r, g, b);
float maxVal = max(r, g, b);
float C = maxVal - minVal;
l = (M + m) * 7.6295109e-6f; // (0.5f / 65535.f)
l = (maxVal + minVal) * 7.6295109e-6f; // (0.5f / 65535.f)
if (C < 0.65535f) { // 0.00001f * 65535.f
s = 0.f;
} else {
if (l <= 0.5f) {
s = C / (M + m);
s = C / (maxVal + minVal);
} else {
s = C / (131070.f - (M + m)); // 131070.f = 2.f * 65535.f
s = C / (131070.f - (maxVal + minVal)); // 131070.f = 2.f * 65535.f
}
}
}
@ -261,11 +261,11 @@ public:
static inline void rgb2hslfloat(float r, float g, float b, float &h, float &s, float &l)
{
float m = min(r, g, b);
float M = max(r, g, b);
float C = M - m;
float minVal = min(r, g, b);
float maxVal = max(r, g, b);
float C = maxVal - minVal;
l = (M + m) * 7.6295109e-6f; // (0.5f / 65535.f)
l = (maxVal + minVal) * 7.6295109e-6f; // (0.5f / 65535.f)
if (C < 0.65535f) { // 0.00001f * 65535.f
h = 0.f;
@ -273,14 +273,14 @@ public:
} else {
if (l <= 0.5f) {
s = C / (M + m);
s = C / (maxVal + minVal);
} else {
s = C / (131070.f - (M + m)); // 131070.f = 2.f * 65535.f
s = C / (131070.f - (maxVal + minVal)); // 131070.f = 2.f * 65535.f
}
if ( r == M ) {
if ( r == maxVal ) {
h = (g - b);
} else if ( g == M ) {
} else if ( g == maxVal ) {
h = (2.f * C) + (b - r);
} else {
h = (4.f * C) + (r - g);
@ -686,32 +686,6 @@ public:
static void Lch2Luv(float c, float h, float &u, float &v);
/**
* @brief Convert the XYZ values to Luv values
* Warning: this method has never been used/tested so far
* @param x X coordinate [0 ; 65535] ; can be negative or superior to 65535
* @param y Y coordinate [0 ; 65535] ; can be negative or superior to 65535
* @param z Z coordinate [0 ; 65535] ; can be negative or superior to 65535
* @param L 'L' channel [0 ; 32768] (return value)
* @param u 'u' channel [-42000 ; 42000] ; can be more than 42000 (return value)
* @param v 'v' channel [-42000 ; 42000] ; can be more than 42000 (return value)
*/
static void XYZ2Luv (float X, float Y, float Z, float &L, float &u, float &v);
/**
* @brief Convert the Luv values to XYZ values
* Warning: this method has never been used/tested so far
* @param L 'L' channel [0 ; 32768]
* @param u 'u' channel [-42000 ; 42000] ; can be more than 42000
* @param v 'v' channel [-42000 ; 42000] ; can be more than 42000
* @param x X coordinate [0 ; 65535] ; can be negative or superior to 65535 (return value)
* @param y Y coordinate [0 ; 65535] ; can be negative or superior to 65535 (return value)
* @param z Z coordinate [0 ; 65535] ; can be negative or superior to 65535 (return value)
*/
static void Luv2XYZ (float L, float u, float v, float &X, float &Y, float &Z);
/**
* @brief Return "f" in function of CIE's kappa and epsilon constants
* @param f f can be fx fy fz where:

View File

@ -31,7 +31,7 @@
#include "../rtgui/mydiagonalcurve.h"
#include "color.h"
#include "pipettebuffer.h"
#include "noncopyable.h"
#include "LUT.h"
#define CURVES_MIN_POLY_POINTS 1000
@ -468,7 +468,7 @@ protected:
void NURBS_set ();
public:
DiagonalCurve (const std::vector<double>& points, int ppn = CURVES_MIN_POLY_POINTS);
explicit DiagonalCurve (const std::vector<double>& points, int ppn = CURVES_MIN_POLY_POINTS);
~DiagonalCurve () override;
double getVal (double t) const override;
@ -479,7 +479,7 @@ public:
};
};
class FlatCurve : public Curve
class FlatCurve : public Curve, public rtengine::NonCopyable
{
private:
@ -493,7 +493,7 @@ private:
public:
FlatCurve (const std::vector<double>& points, bool isPeriodic = true, int ppn = CURVES_MIN_POLY_POINTS);
explicit FlatCurve (const std::vector<double>& points, bool isPeriodic = true, int ppn = CURVES_MIN_POLY_POINTS);
~FlatCurve () override;
double getVal (double t) const override;

View File

@ -334,8 +334,6 @@ double xyCoordToTemperature(const std::array<double, 2>& white_xy)
// Search for line pair coordinate is between.
double last_dt = 0.0;
double last_dv = 0.0;
double last_du = 0.0;
for (uint32_t index = 1; index <= 30; ++index) {
// Convert slope to delta-u and delta-v, with length 1.
@ -371,23 +369,11 @@ double xyCoordToTemperature(const std::array<double, 2>& white_xy)
// Interpolate the temperature.
res = 1.0e6 / (temp_table[index - 1].r * f + temp_table[index].r * (1.0 - f));
// Find delta from black body point to test coordinate.
uu = u - (temp_table [index - 1].u * f + temp_table [index].u * (1.0 - f));
vv = v - (temp_table [index - 1].v * f + temp_table [index].v * (1.0 - f));
// Interpolate vectors along slope.
du = du * (1.0 - f) + last_du * f;
dv = dv * (1.0 - f) + last_dv * f;
len = sqrt (du * du + dv * dv);
du /= len;
dv /= len;
break;
}
// Try next line pair.
last_dt = dt;
last_du = du;
last_dv = dv;
}
return res;

View File

@ -204,10 +204,8 @@ void Crop::update(int todo)
}
int numtiles_W, numtiles_H, tilewidth, tileheight, tileWskip, tileHskip;
int kall = 2;
parent->ipf.Tile_calc(tilesize, overlap, kall, widIm, heiIm, numtiles_W, numtiles_H, tilewidth, tileheight, tileWskip, tileHskip);
kall = 0;
parent->ipf.Tile_calc(tilesize, overlap, 2, widIm, heiIm, numtiles_W, numtiles_H, tilewidth, tileheight, tileWskip, tileHskip);
float *min_b = new float [9];
float *min_r = new float [9];
@ -653,10 +651,9 @@ void Crop::update(int todo)
if (todo & M_LINDENOISE) {
if (skip == 1 && denoiseParams.enabled) {
int kall = 0;
float nresi, highresi;
parent->ipf.RGB_denoise(kall, origCrop, origCrop, calclum, parent->denoiseInfoStore.ch_M, parent->denoiseInfoStore.max_r, parent->denoiseInfoStore.max_b, parent->imgsrc->isRAW(), /*Roffset,*/ denoiseParams, parent->imgsrc->getDirPyrDenoiseExpComp(), noiseLCurve, noiseCCurve, nresi, highresi);
parent->ipf.RGB_denoise(0, origCrop, origCrop, calclum, parent->denoiseInfoStore.ch_M, parent->denoiseInfoStore.max_r, parent->denoiseInfoStore.max_b, parent->imgsrc->isRAW(), /*Roffset,*/ denoiseParams, parent->imgsrc->getDirPyrDenoiseExpComp(), noiseLCurve, noiseCCurve, nresi, highresi);
if (parent->adnListener) {
parent->adnListener->noiseChanged(nresi, highresi);
@ -885,9 +882,6 @@ void Crop::update(int todo)
if (skip == 1) {
if ((params.colorappearance.enabled && !settings->autocielab) || (!params.colorappearance.enabled)) {
parent->ipf.impulsedenoise(labnCrop);
}
if ((params.colorappearance.enabled && !settings->autocielab) || (!params.colorappearance.enabled)) {
parent->ipf.defringe(labnCrop);
}
@ -900,7 +894,6 @@ void Crop::update(int todo)
}
// if (skip==1) {
WaveletParams WaveParams = params.wavelet;
if (params.dirpyrequalizer.cbdlMethod == "aft") {
if (((params.colorappearance.enabled && !settings->autocielab) || (!params.colorappearance.enabled))) {
@ -909,81 +902,81 @@ void Crop::update(int todo)
}
}
int kall = 0;
int minwin = min(labnCrop->W, labnCrop->H);
int maxlevelcrop = 10;
// if(cp.mul[9]!=0)maxlevelcrop=10;
// adap maximum level wavelet to size of crop
if (minwin * skip < 1024) {
maxlevelcrop = 9; //sampling wavelet 512
}
if (minwin * skip < 512) {
maxlevelcrop = 8; //sampling wavelet 256
}
if (minwin * skip < 256) {
maxlevelcrop = 7; //sampling 128
}
if (minwin * skip < 128) {
maxlevelcrop = 6;
}
if (minwin < 64) {
maxlevelcrop = 5;
}
int realtile;
if (params.wavelet.Tilesmethod == "big") {
realtile = 22;
} else /*if (params.wavelet.Tilesmethod == "lit")*/ {
realtile = 12;
}
int tilesize = 128 * realtile;
int overlap = (int) tilesize * 0.125f;
int numtiles_W, numtiles_H, tilewidth, tileheight, tileWskip, tileHskip;
parent->ipf.Tile_calc(tilesize, overlap, kall, labnCrop->W, labnCrop->H, numtiles_W, numtiles_H, tilewidth, tileheight, tileWskip, tileHskip);
//now we have tile dimensions, overlaps
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
int minsizetile = min(tilewidth, tileheight);
int maxlev2 = 10;
if (minsizetile < 1024 && maxlevelcrop == 10) {
maxlev2 = 9;
}
if (minsizetile < 512) {
maxlev2 = 8;
}
if (minsizetile < 256) {
maxlev2 = 7;
}
if (minsizetile < 128) {
maxlev2 = 6;
}
int maxL = min(maxlev2, maxlevelcrop);
if (parent->awavListener) {
parent->awavListener->wavChanged(float (maxL));
}
if ((params.wavelet.enabled)) {
WaveletParams WaveParams = params.wavelet;
int kall = 0;
int minwin = min(labnCrop->W, labnCrop->H);
int maxlevelcrop = 10;
// if(cp.mul[9]!=0)maxlevelcrop=10;
// adap maximum level wavelet to size of crop
if (minwin * skip < 1024) {
maxlevelcrop = 9; //sampling wavelet 512
}
if (minwin * skip < 512) {
maxlevelcrop = 8; //sampling wavelet 256
}
if (minwin * skip < 256) {
maxlevelcrop = 7; //sampling 128
}
if (minwin * skip < 128) {
maxlevelcrop = 6;
}
if (minwin < 64) {
maxlevelcrop = 5;
}
int realtile;
if (params.wavelet.Tilesmethod == "big") {
realtile = 22;
} else /*if (params.wavelet.Tilesmethod == "lit")*/ {
realtile = 12;
}
int tilesize = 128 * realtile;
int overlap = (int) tilesize * 0.125f;
int numtiles_W, numtiles_H, tilewidth, tileheight, tileWskip, tileHskip;
parent->ipf.Tile_calc(tilesize, overlap, kall, labnCrop->W, labnCrop->H, numtiles_W, numtiles_H, tilewidth, tileheight, tileWskip, tileHskip);
//now we have tile dimensions, overlaps
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
int minsizetile = min(tilewidth, tileheight);
int maxlev2 = 10;
if (minsizetile < 1024 && maxlevelcrop == 10) {
maxlev2 = 9;
}
if (minsizetile < 512) {
maxlev2 = 8;
}
if (minsizetile < 256) {
maxlev2 = 7;
}
if (minsizetile < 128) {
maxlev2 = 6;
}
int maxL = min(maxlev2, maxlevelcrop);
if (parent->awavListener) {
parent->awavListener->wavChanged(float (maxL));
}
WavCurve wavCLVCurve;
WavOpacityCurveRG waOpacityCurveRG;
WavOpacityCurveBY waOpacityCurveBY;
WavOpacityCurveW waOpacityCurveW;
WavOpacityCurveWL waOpacityCurveWL;
LUTf wavclCurve;
LUTu dummy;
params.wavelet.getCurves(wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL);

View File

@ -328,8 +328,8 @@ void DFManager::init(const Glib::ustring& pathname)
} else {
printf( "%s: MEAN of \n ", i.key().c_str());
for( std::list<Glib::ustring>::iterator iter = i.pathNames.begin(); iter != i.pathNames.end(); ++iter ) {
printf( "%s, ", iter->c_str() );
for(std::list<Glib::ustring>::iterator path = i.pathNames.begin(); path != i.pathNames.end(); ++path) {
printf("%s, ", path->c_str());
}
printf("\n");

View File

@ -230,7 +230,6 @@ void DiagonalCurve::NURBS_set ()
poly_x.clear();
poly_y.clear();
unsigned int sc_xsize = j - 1;
j = 0;
// adding the initial horizontal segment, if any
if (x[0] > 0.) {
@ -314,18 +313,13 @@ inline void catmull_rom_spline(int n_points,
double space = (t2-t1) / n_points;
double t;
int i;
double c, d, A1_x, A1_y, A2_x, A2_y, A3_x, A3_y;
double B1_x, B1_y, B2_x, B2_y, C_x, C_y;
res_x.push_back(p1_x);
res_y.push_back(p1_y);
// special case, a segment at 0 or 1 is computed exactly
if (p1_y == p2_y && (p1_y == 0 || p1_y == 1)) {
for (i = 1; i < n_points-1; ++i) {
t = p1_x + space * i;
for (int i = 1; i < n_points-1; ++i) {
double t = p1_x + space * i;
if (t >= p2_x) {
break;
}
@ -333,38 +327,38 @@ inline void catmull_rom_spline(int n_points,
res_y.push_back(p1_y);
}
} else {
for (i = 1; i < n_points-1; ++i) {
t = t1 + space * i;
for (int i = 1; i < n_points-1; ++i) {
double t = t1 + space * i;
c = (t1 - t)/(t1 - t0);
d = (t - t0)/(t1 - t0);
A1_x = c * p0_x + d * p1_x;
A1_y = c * p0_y + d * p1_y;
double c = (t1 - t)/(t1 - t0);
double d = (t - t0)/(t1 - t0);
double A1_x = c * p0_x + d * p1_x;
double A1_y = c * p0_y + d * p1_y;
c = (t2 - t)/(t2 - t1);
d = (t - t1)/(t2 - t1);
A2_x = c * p1_x + d * p2_x;
A2_y = c * p1_y + d * p2_y;
double A2_x = c * p1_x + d * p2_x;
double A2_y = c * p1_y + d * p2_y;
c = (t3 - t)/(t3 - t2);
d = (t - t2)/(t3 - t2);
A3_x = c * p2_x + d * p3_x;
A3_y = c * p2_y + d * p3_y;
double A3_x = c * p2_x + d * p3_x;
double A3_y = c * p2_y + d * p3_y;
c = (t2 - t)/(t2 - t0);
d = (t - t0)/(t2 - t0);
B1_x = c * A1_x + d * A2_x;
B1_y = c * A1_y + d * A2_y;
double B1_x = c * A1_x + d * A2_x;
double B1_y = c * A1_y + d * A2_y;
c = (t3 - t)/(t3 - t1);
d = (t - t1)/(t3 - t1);
B2_x = c * A2_x + d * A3_x;
B2_y = c * A2_y + d * A3_y;
double B2_x = c * A2_x + d * A3_x;
double B2_y = c * A2_y + d * A3_y;
c = (t2 - t)/(t2 - t1);
d = (t - t1)/(t2 - t1);
C_x = c * B1_x + d * B2_x;
C_y = c * B1_y + d * B2_y;
double C_x = c * B1_x + d * B2_x;
double C_y = c * B1_y + d * B2_y;
res_x.push_back(C_x);
res_y.push_back(C_y);
@ -512,7 +506,6 @@ double DiagonalCurve::getVal (double t) const
++d;
}
return LIM01(*(poly_y.begin() + d));
break;
}
case DCT_NURBS : {

View File

@ -1,94 +0,0 @@
/*
* This file is part of RawTherapee.
*
* Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
*
* RawTherapee is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* RawTherapee is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
*/
#include "rtengine.h"
#include <iostream>
//#include <giomm.h>
#include <helpers.h>
class PListener :
public rtengine::ProgressListener
{
public:
void setProgressStr(const Glib::ustring& str)
{
std::cout << str << std::endl;
}
void setProgress (double p)
{
std::cout << p << std::endl;
}
void setProgressState(bool inProcessing)
{
}
void error(const Glib::ustring& descr)
{
}
};
int main (int argc, char* argv[])
{
if (argc < 4) {
std::cout << "Usage: rtcmd <infile> <paramfile> <outfile>" << std::endl;
exit(1);
}
Glib::thread_init ();
// create and fill settings
rtengine::Settings* s = rtengine::Settings::create ();
s->demosaicMethod = "hphd";
s->colorCorrectionSteps = 2;
s->iccDirectory = "";
s->colorimetricIntent = 1;
s->monitorProfile = "";
// init rtengine
rtengine::init (s);
// the settings can be modified later through the "s" pointer without calling any api function
// Create a listener object. Any class is appropriate that inherits from rtengine::ProgressListener
PListener pl;
// Load the image given in the first command line parameter
rtengine::InitialImage* ii;
int errorCode;
ii = rtengine::InitialImage::load (argv[1], true, errorCode, &pl);
if (!ii) {
ii = rtengine::InitialImage::load (argv[1], false, errorCode, &pl);
}
if (!ii) {
std::cout << "Input file not supported." << std::endl;
exit(2);
}
// create an instance of ProcParams structure that holds the image processing settings. You find the memory map in a separate file and the non-basic types like strings and vectors can be manipulated through helper functions
rtengine::procparams::ProcParams params;
params.load (argv[2]);
/* First, simplest scenario. Develop image and save it in a file */
// create a processing job with the loaded image and the current processing parameters
rtengine::ProcessingJob* job = ProcessingJob::create (i, params);
// process image. The error is given back in errorcode.
rtengine::IImage16* res = rtengine::processImage (job, errorCode, &pl);
// save image to disk
res->saveToFile (argv[3]);
// through "res" you can access width/height and pixel data, too
}

View File

@ -277,8 +277,8 @@ void FFManager::init(const Glib::ustring& pathname)
} else {
printf( "%s: MEAN of \n ", i.key().c_str());
for( std::list<Glib::ustring>::iterator iter = i.pathNames.begin(); iter != i.pathNames.end(); ++iter ) {
printf( "%s, ", iter->c_str() );
for(std::list<Glib::ustring>::iterator path = i.pathNames.begin(); path != i.pathNames.end(); ++path) {
printf("%s, ", path->c_str());
}
printf("\n");

View File

@ -970,8 +970,8 @@ void RawImageSource::HLRecovery_inpaint(float** red, float** green, float** blue
for (int c = 0; c < 3; ++c) {
lab[i2][c] = 0;
for (int j = 0; j < 3; ++j) {
lab[i2][c] += trans[c][j] * cam[i2][j];
for (int j2 = 0; j2 < 3; ++j2) {
lab[i2][c] += trans[c][j2] * cam[i2][j2];
}
}
@ -996,8 +996,8 @@ void RawImageSource::HLRecovery_inpaint(float** red, float** green, float** blue
for (int c = 0; c < 3; ++c) {
cam[0][c] = 0.f;
for (int j = 0; j < 3; ++j) {
cam[0][c] += itrans[c][j] * lab[0][j];
for (int j2 = 0; j2 < 3; ++j2) {
cam[0][c] += itrans[c][j2] * lab[0][j2];
}
}
@ -1081,12 +1081,11 @@ void RawImageSource::HLRecovery_inpaint(float** red, float** green, float** blue
//now correct clipped channels
if (pixel[0] > max_f[0] && pixel[1] > max_f[1] && pixel[2] > max_f[2]) {
//all channels clipped
const float Y = 0.299f * clipfix[0] + 0.587f * clipfix[1] + 0.114f * clipfix[2];
const float factor = whitept / Y;
red[i + miny][j + minx] = clipfix[0] * factor;
green[i + miny][j + minx] = clipfix[1] * factor;
blue[i + miny][j + minx] = clipfix[2] * factor;
const float mult = whitept / (0.299f * clipfix[0] + 0.587f * clipfix[1] + 0.114f * clipfix[2]);
red[i + miny][j + minx] = clipfix[0] * mult;
green[i + miny][j + minx] = clipfix[1] * mult;
blue[i + miny][j + minx] = clipfix[2] * mult;
} else {//some channels clipped
const float notclipped[3] = {
pixel[0] <= max_f[0] ? 1.f : 0.f,
@ -1113,11 +1112,11 @@ void RawImageSource::HLRecovery_inpaint(float** red, float** green, float** blue
Y = 0.299f * red[i + miny][j + minx] + 0.587f * green[i + miny][j + minx] + 0.114f * blue[i + miny][j + minx];
if (Y > whitept) {
const float factor = whitept / Y;
const float mult = whitept / Y;
red[i + miny][j + minx] *= factor;
green[i + miny][j + minx] *= factor;
blue[i + miny][j + minx] *= factor;
red[i + miny][j + minx] *= mult;
green[i + miny][j + minx] *= mult;
blue[i + miny][j + minx] *= mult;
}
}
}

View File

@ -329,8 +329,8 @@ void RawImageSource::getAutoMatchedToneCurve(const ColorManagementParams &cp, st
int tw = target->getWidth(), th = target->getHeight();
float thumb_ratio = float(std::max(sw, sh)) / float(std::min(sw, sh));
float target_ratio = float(std::max(tw, th)) / float(std::min(tw, th));
int cx = 0, cy = 0;
if (std::abs(thumb_ratio - target_ratio) > 0.01) {
int cx = 0, cy = 0;
if (thumb_ratio > target_ratio) {
// crop the height
int ch = th - (tw * float(sh) / float(sw));

View File

@ -258,7 +258,6 @@ FrameData::FrameData(rtexif::TagDirectory* frameRootDir_, rtexif::TagDirectory*
tag = exif->getTag("SubjectDistance");
if (tag) {
int num, denom;
tag->toRational(num, denom);
} else {
// Second try, XMP data
@ -524,8 +523,7 @@ FrameData::FrameData(rtexif::TagDirectory* frameRootDir_, rtexif::TagDirectory*
focal_len = flt->toDouble ();
}
} else if ((flt = mnote->getTagP ("FocalLength"))) {
rtexif::Tag* flt = mnote->getTag ("FocalLength");
focal_len = flt->toDouble ();
focal_len = mnote->getTag("FocalLength")->toDouble ();
}
if (mnote->getTag ("FocalLengthIn35mmFilm")) {

View File

@ -98,7 +98,7 @@ private:
unsigned int dcrawFrameCount;
public:
FramesData (const Glib::ustring& fname, std::unique_ptr<RawMetaDataLocation> rml = nullptr, bool firstFrameOnly = false);
explicit FramesData (const Glib::ustring& fname, std::unique_ptr<RawMetaDataLocation> rml = nullptr, bool firstFrameOnly = false);
~FramesData () override;
void setDCRawFrameCount (unsigned int frameCount);

View File

@ -200,7 +200,7 @@ public:
double lumimul[3];
ImProcFunctions(const ProcParams* iparams, bool imultiThread = true)
explicit ImProcFunctions(const ProcParams* iparams, bool imultiThread = true)
: monitorTransform(nullptr), params(iparams), scale(1), multiThread(imultiThread), lumimul{} {}
~ImProcFunctions();
bool needsLuminanceOnly()

View File

@ -186,8 +186,8 @@ void ImProcFunctions::Lanczos (const Imagefloat* src, Imagefloat* dst, float sca
void ImProcFunctions::Lanczos (const LabImage* src, LabImage* dst, float scale)
{
const float delta = 1.0f / scale;
const float a = 3.0f;
const float sc = min (scale, 1.0f);
constexpr float a = 3.0f;
const float sc = min(scale, 1.0f);
const int support = static_cast<int> (2.0f * a / sc) + 1;
// storage for precomputed parameters for horizontal interpolation
@ -268,66 +268,61 @@ void ImProcFunctions::Lanczos (const LabImage* src, LabImage* dst, float scale)
}
// Do vertical interpolation. Store results.
int j = 0;
#ifdef __SSE2__
int j;
__m128 Lv, av, bv, wkv;
for (j = 0; j < src->W - 3; j += 4) {
Lv = _mm_setzero_ps();
av = _mm_setzero_ps();
bv = _mm_setzero_ps();
Lv = ZEROV;
av = ZEROV;
bv = ZEROV;
for (int ii = ii0; ii < ii1; ii++) {
int k = ii - ii0;
wkv = _mm_set1_ps (w[k]);
Lv += wkv * LVFU (src->L[ii][j]);
av += wkv * LVFU (src->a[ii][j]);
bv += wkv * LVFU (src->b[ii][j]);
wkv = F2V(w[k]);
Lv += wkv * LVFU(src->L[ii][j]);
av += wkv * LVFU(src->a[ii][j]);
bv += wkv * LVFU(src->b[ii][j]);
}
STVF (lL[j], Lv);
STVF (la[j], av);
STVF (lb[j], bv);
STVF(lL[j], Lv);
STVF(la[j], av);
STVF(lb[j], bv);
}
#else
int j = 0;
#endif
for (; j < src->W; j++) {
float L = 0.0f, a = 0.0f, b = 0.0f;
for (; j < src->W; ++j) {
float Ll = 0.0f, La = 0.0f, Lb = 0.0f;
for (int ii = ii0; ii < ii1; ii++) {
for (int ii = ii0; ii < ii1; ++ii) {
int k = ii - ii0;
L += w[k] * src->L[ii][j];
a += w[k] * src->a[ii][j];
b += w[k] * src->b[ii][j];
Ll += w[k] * src->L[ii][j];
La += w[k] * src->a[ii][j];
Lb += w[k] * src->b[ii][j];
}
lL[j] = L;
la[j] = a;
lb[j] = b;
lL[j] = Ll;
la[j] = La;
lb[j] = Lb;
}
// Do horizontal interpolation
for (int j = 0; j < dst->W; j++) {
for (int x = 0; x < dst->W; ++x) {
float * wh = wwh + support * x;
float Ll = 0.0f, La = 0.0f, Lb = 0.0f;
float * wh = wwh + support * j;
for (int jj = jj0[x]; jj < jj1[x]; ++jj) {
int k = jj - jj0[x];
float L = 0.0f, a = 0.0f, b = 0.0f;
for (int jj = jj0[j]; jj < jj1[j]; jj++) {
int k = jj - jj0[j];
L += wh[k] * lL[jj];
a += wh[k] * la[jj];
b += wh[k] * lb[jj];
Ll += wh[k] * lL[jj];
La += wh[k] * la[jj];
Lb += wh[k] * lb[jj];
}
dst->L[i][j] = L;
dst->a[i][j] = a;
dst->b[i][j] = b;
dst->L[i][x] = Ll;
dst->a[i][x] = La;
dst->b[i][x] = Lb;
}
}
}

View File

@ -106,10 +106,10 @@ void ImProcFunctions::shadowsHighlights(LabImage *lab)
#pragma omp parallel for if (multiThread)
#endif
for (int l = 0; l < 32768; ++l) {
auto base = pow_F(l / 32768.f, gamma);
auto val = pow_F(l / 32768.f, gamma);
// get a bit more contrast in the shadows
base = sh_contrast.getVal(base);
f[l] = base * 32768.f;
val = sh_contrast.getVal(val);
f[l] = val * 32768.f;
}
} else {
#ifdef _OPENMP
@ -119,10 +119,10 @@ void ImProcFunctions::shadowsHighlights(LabImage *lab)
float l, a, b;
float R = c, G = c, B = c;
rgb2lab(R, G, B, l, a, b);
auto base = pow_F(l / 32768.f, gamma);
auto val = pow_F(l / 32768.f, gamma);
// get a bit more contrast in the shadows
base = sh_contrast.getVal(base);
l = base * 32768.f;
val = sh_contrast.getVal(val);
l = val * 32768.f;
lab2rgb(l, a, b, R, G, B);
f[c] = G;
}
@ -133,8 +133,8 @@ void ImProcFunctions::shadowsHighlights(LabImage *lab)
#pragma omp parallel for if (multiThread)
#endif
for (int l = 0; l < 32768; ++l) {
auto base = pow_F(l / 32768.f, gamma);
f[l] = base * 32768.f;
auto val = pow_F(l / 32768.f, gamma);
f[l] = val * 32768.f;
}
} else {
#ifdef _OPENMP
@ -144,8 +144,8 @@ void ImProcFunctions::shadowsHighlights(LabImage *lab)
float l, a, b;
float R = c, G = c, B = c;
rgb2lab(R, G, B, l, a, b);
auto base = pow_F(l / 32768.f, gamma);
l = base * 32768.f;
auto val = pow_F(l / 32768.f, gamma);
l = val * 32768.f;
lab2rgb(l, a, b, R, G, B);
f[c] = G;
}

View File

@ -435,12 +435,7 @@ static void calcGradientParams (int oW, int oH, const GradientParams& gradient,
if (gp.transpose) {
gp.bright_top = !gp.bright_top;
}
if (gp.transpose) {
int tmp = w;
w = h;
h = tmp;
std::swap(w, h);
}
gp.scale = 1.0 / pow (2, gradient_stops);

View File

@ -20,12 +20,14 @@
#pragma once
#include "rawimagesource.h"
#include <vector>
#include "rawimagesource.h"
#include "noncopyable.h"
namespace rtengine {
class PDAFLinesFilter {
class PDAFLinesFilter: public rtengine::NonCopyable
{
public:
explicit PDAFLinesFilter(RawImage *ri);
~PDAFLinesFilter();

View File

@ -65,7 +65,7 @@ Glib::ustring relativePathIfInside(const Glib::ustring &procparams_fname, bool f
return embedded_fname;
}
Glib::ustring prefix = "";
Glib::ustring prefix;
if (embedded_fname.length() > 5 && embedded_fname.substr(0, 5) == "file:") {
embedded_fname = embedded_fname.substr(5);

View File

@ -1634,8 +1634,8 @@ class PartialProfile :
{
public:
PartialProfile(bool createInstance = false, bool paramsEditedValue = false);
PartialProfile(ProcParams* pp, ParamsEdited* pe = nullptr, bool fullCopy = false);
PartialProfile(const ProcParams* pp, const ParamsEdited* pe = nullptr);
explicit PartialProfile(ProcParams* pp, ParamsEdited* pe = nullptr, bool fullCopy = false);
explicit PartialProfile(const ProcParams* pp, const ParamsEdited* pe = nullptr);
void deleteInstance();
void clearGeneral();
int load(const Glib::ustring& fName);

View File

@ -535,7 +535,7 @@ PartialProfile *ProfileStore::loadDynamicProfile (const FramesMetaData *im)
return ret;
}
ProfileStoreEntry::ProfileStoreEntry() : label (""), type (PSET_FOLDER), parentFolderId (0), folderId (0) {}
ProfileStoreEntry::ProfileStoreEntry() : type (PSET_FOLDER), parentFolderId (0), folderId (0) {}
ProfileStoreEntry::ProfileStoreEntry (Glib::ustring label, PSEType type, unsigned short parentFolder, unsigned short folder) : label (label), type (type), parentFolderId (parentFolder), folderId (folder) {}

View File

@ -429,6 +429,7 @@ RawImageSource::RawImageSource ()
, plistener(nullptr)
, scale_mul{}
, c_black{}
, c_white{}
, cblacksom{}
, ref_pre_mul{}
, refwb_red(0.0)

View File

@ -1,82 +0,0 @@
/*
* This file is part of RawTherapee.
*
* Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
*
* RawTherapee is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* RawTherapee is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with RawTherapee. If not, see <http://www.gnu.org/licenses/>.
*/
#include "rtengine.h"
#include <iostream>
//#include <giomm.h>
#include <helpers.h>
class PListener :
public rtengine::ProgressListener
{
public:
void setProgressStr(const Glib::ustring& str)
{
std::cout << str << std::endl;
}
void setProgress(double p)
{
std::cout << p << std::endl;
}
void setProgressState(bool inProcessing)
{
}
void error(const Glib::ustring& descr)
{
}
};
int main (int argc, char* argv[])
{
if (argc < 4) {
std::cout << "Usage: rtcmd <infile> <paramfile> <outfile>" << std::endl;
exit(1);
}
rtengine::Settings s;
s.demosaicMethod = "hphd";
s.colorCorrectionSteps = 2;
s.iccDirectory = "";
s.colorimetricIntent = 1;
s.monitorProfile = "";
Glib::thread_init ();
rtengine::init (s, "");
PListener pl;
rtengine::InitialImage* ii;
int errorCode;
ii = rtengine::InitialImage::load (argv[1], true, errorCode, &pl);
if (!ii) {
ii = rtengine::InitialImage::load (argv[1], false, errorCode, &pl);
}
if (!ii) {
std::cout << "Input file not supported." << std::endl;
exit(2);
}
rtengine::procparams::ProcParams params;
params.load (argv[2]);
rtengine::ProcessingJob* job = ProcessingJob::create (ii, params);
rtengine::IImage16* res = rtengine::processImage (job, errorCode, &pl);
res->saveToFile (argv[3]);
}

View File

@ -132,7 +132,7 @@ Glib::ustring LFModifier::getDisplayString() const
return "NONE";
} else {
Glib::ustring ret;
Glib::ustring sep = "";
Glib::ustring sep;
if (flags_ & LF_MODIFY_DISTORTION) {
ret += "distortion";
sep = ", ";

View File

@ -476,14 +476,14 @@ void tmo_fattal02 (size_t width,
Array2Df* H = new Array2Df (width, height);
float temp = 100.f / maxLum;
float eps = 1e-4f;
#ifdef _OPENMP
#pragma omp parallel if(multithread)
#endif
{
const float eps = 1e-4f;
#ifdef __SSE2__
vfloat epsv = F2V (eps);
vfloat tempv = F2V (temp);
const vfloat epsv = F2V(eps);
const vfloat tempv = F2V(temp);
#endif
#ifdef _OPENMP
#pragma omp for schedule(dynamic,16)
@ -926,13 +926,13 @@ void solve_pde_fft (Array2Df *F, Array2Df *U, Array2Df *buf, bool multithread)/*
// a solution which has no positive values: U_new(x,y)=U(x,y)-max
// (not really needed but good for numerics as we later take exp(U))
//DEBUG_STR << "solve_pde_fft: removing constant from solution" << std::endl;
float max = 0.f;
float maxVal = 0.f;
#ifdef _OPENMP
#pragma omp parallel for reduction(max:max) if(multithread)
#pragma omp parallel for reduction(max:maxVal) if(multithread)
#endif
for (int i = 0; i < width * height; i++) {
max = std::max (max, (*U) (i));
maxVal = std::max(maxVal, (*U)(i));
}
#ifdef _OPENMP
@ -940,7 +940,7 @@ void solve_pde_fft (Array2Df *F, Array2Df *U, Array2Df *buf, bool multithread)/*
#endif
for (int i = 0; i < width * height; i++) {
(*U) (i) -= max;
(*U) (i) -= maxVal;
}
}

View File

@ -380,7 +380,7 @@ public:
}
}
std::string EffectiveMaxApertureString = "";
std::string EffectiveMaxApertureString;
if (!d100) {
int EffectiveMaxApertureValue;

View File

@ -190,7 +190,7 @@ public:
};
// a table of tags: id are offset from beginning and not identifiers
class TagDirectoryTable: public TagDirectory
class TagDirectoryTable: public TagDirectory, public rtengine::NonCopyable
{
protected:
unsigned char *values; // Tags values are saved internally here
@ -405,7 +405,6 @@ public:
// Get the value as a double
virtual double toDouble (const Tag* t, int ofs = 0)
{
double ud, dd;
switch (t->getType()) {
case SBYTE:
@ -428,10 +427,11 @@ public:
return (double) ((int)sget4 (t->getValue() + ofs, t->getOrder()));
case SRATIONAL:
case RATIONAL:
ud = (int)sget4 (t->getValue() + ofs, t->getOrder());
dd = (int)sget4 (t->getValue() + ofs + 4, t->getOrder());
return dd == 0. ? 0. : (double)ud / (double)dd;
case RATIONAL: {
const double dividend = (int)sget4 (t->getValue() + ofs, t->getOrder());
const double divisor = (int)sget4 (t->getValue() + ofs + 4, t->getOrder());
return divisor == 0. ? 0. : dividend / divisor;
}
case FLOAT:
return double (sget4 (t->getValue() + ofs, t->getOrder()));

View File

@ -631,21 +631,21 @@ void Adjuster::setSliderValue(double val)
if (val >= logPivot) {
double range = vMax - logPivot;
double x = (val - logPivot) / range;
val = (vMin + mid) + std::log(x * (logBase - 1.0) + 1.0) / std::log(logBase) * mid;
val = (vMin + mid) + std::log1p(x * (logBase - 1.0)) / std::log(logBase) * mid;
} else {
double range = logPivot - vMin;
double x = (logPivot - val) / range;
val = (vMin + mid) - std::log(x * (logBase - 1.0) + 1.0) / std::log(logBase) * mid;
val = (vMin + mid) - std::log1p(x * (logBase - 1.0)) / std::log(logBase) * mid;
}
} else {
if (val >= logPivot) {
double range = vMax - logPivot;
double x = (val - logPivot) / range;
val = logPivot + std::log(x * (logBase - 1.0) + 1.0) / std::log(logBase) * range;
val = logPivot + std::log1p(x * (logBase - 1.0)) / std::log(logBase) * range;
} else {
double range = logPivot - vMin;
double x = (logPivot - val) / range;
val = logPivot - std::log(x * (logBase - 1.0) + 1.0) / std::log(logBase) * range;
val = logPivot - std::log1p(x * (logBase - 1.0)) / std::log(logBase) * range;
}
}
}

View File

@ -811,7 +811,7 @@ Glib::ustring BatchQueue::calcAutoFileNameBase (const Glib::ustring& origFileNam
break;
}
Glib::ustring tok = "";
Glib::ustring tok;
while ((i < origFileName.size()) && !(origFileName[i] == '\\' || origFileName[i] == '/')) {
tok = tok + origFileName[i++];
@ -857,7 +857,7 @@ Glib::ustring BatchQueue::calcAutoFileNameBase (const Glib::ustring& origFileNam
// constructing full output path
// printf ("path=|%s|\n", options.savePath.c_str());
Glib::ustring path = "";
Glib::ustring path;
if (options.saveUsePathTemplate) {
unsigned int ix = 0;

View File

@ -29,6 +29,7 @@
#include "options.h"
#include "threadutils.h"
#include "thumbbrowserbase.h"
#include "../rtengine/noncopyable.h"
class BatchQueueListener
{
@ -44,7 +45,8 @@ class FileCatalog;
class BatchQueue final :
public ThumbBrowserBase,
public rtengine::BatchProcessingListener,
public LWButtonListener
public LWButtonListener,
public rtengine::NonCopyable
{
public:
explicit BatchQueue (FileCatalog* aFileCatalog);

View File

@ -40,7 +40,6 @@ BatchQueueEntry::BatchQueueEntry (rtengine::ProcessingJob* pjob, const rtengine:
job(pjob),
params(new rtengine::procparams::ProcParams(pparams)),
progress(0),
outFileName(""),
sequence(0),
forceFormatOpts(false),
fast_pipeline(job->fastPipeline()),

View File

@ -26,6 +26,7 @@
#include "thumbbrowserentrybase.h"
#include "thumbnail.h"
#include "bqentryupdater.h"
#include "../rtengine/noncopyable.h"
class BatchQueueEntry;
struct BatchQueueEntryIdleHelper {
@ -34,7 +35,7 @@ struct BatchQueueEntryIdleHelper {
int pending;
};
class BatchQueueEntry : public ThumbBrowserEntryBase, public BQEntryUpdateListener
class BatchQueueEntry : public ThumbBrowserEntryBase, public BQEntryUpdateListener, public rtengine::NonCopyable
{
guint8* opreview;

View File

@ -100,13 +100,12 @@ void BatchQueueEntryUpdater::processThread ()
break;
}
rtengine::IImage8* img = nullptr;
bool newBuffer = false;
if (current.thumbnail && current.pparams) {
// the thumbnail and the pparams are provided, it means that we have to build the original preview image
double tmpscale;
img = current.thumbnail->processThumbImage (*current.pparams, current.oh, tmpscale);
rtengine::IImage8* img = current.thumbnail->processThumbImage (*current.pparams, current.oh, tmpscale);
//current.thumbnail->decreaseRef (); // WARNING: decreasing refcount (and maybe deleting) thumbnail, with or without processed image
if (img) {

View File

@ -23,7 +23,7 @@
#include "curveeditorgroup.h"
Axis::Axis()
: label(""), decimal(5), increment(0.001), pageIncrement(0.01), rangeLowerBound(0.), rangeUpperBound(1.)
: decimal(5), increment(0.001), pageIncrement(0.01), rangeLowerBound(0.), rangeUpperBound(1.)
{}
Axis::Axis(Glib::ustring label, unsigned int decimal, double increment, double pageIncrement, double valMin = 0.0, double valMax = 1.0)

View File

@ -1400,24 +1400,19 @@ void Crop::cropResized (int &x, int &y, int& x2, int& y2)
y2 = maxh - 1;
}
int X, Y;
int W;
if (x < x2) {
W = x2 - x + 1;
X = x;
} else {
W = x - x2 + 1;
X = x2;
}
int H;
int Y;
if (y < y2) {
H = y2 - y + 1;
Y = y;
} else {
H = y - y2 + 1;
Y = y2;
}
@ -1425,6 +1420,7 @@ void Crop::cropResized (int &x, int &y, int& x2, int& y2)
W = maxw;
}
int H;
if (fixr->get_active()) {
double r = getRatio ();
@ -1457,6 +1453,7 @@ void Crop::cropResized (int &x, int &y, int& x2, int& y2)
}
}
int X;
if (x < x2) {
W = x2 - x + 1;
X = x;

View File

@ -2198,8 +2198,6 @@ void CropWindow::updateHoveredPicker (rtengine::Coord *imgPos)
}
rtengine::Coord cropPos;
float r=0.f, g=0.f, b=0.f;
float rpreview=0.f, gpreview=0.f, bpreview=0.f;
if (imgPos) {
imageCoordToCropImage(imgPos->x, imgPos->y, cropPos.x, cropPos.y);
hoveredPicker->setPosition (*imgPos);
@ -2215,6 +2213,8 @@ void CropWindow::updateHoveredPicker (rtengine::Coord *imgPos)
MyMutex::MyLock lock(cropHandler.cimg);
if (validity == LockableColorPicker::Validity::INSIDE) {
float r=0.f, g=0.f, b=0.f;
float rpreview=0.f, gpreview=0.f, bpreview=0.f;
cropHandler.colorPick(cropPos, r, g, b, rpreview, gpreview, bpreview, hoveredPicker->getSize());
hoveredPicker->setRGB (r, g, b, rpreview, gpreview, bpreview);
}

View File

@ -31,6 +31,7 @@
#include "cursormanager.h"
#include "editbuffer.h"
#include "editcoordsys.h"
#include "../rtengine/noncopyable.h"
class CropWindow;
@ -45,7 +46,7 @@ public:
};
class ImageArea;
class CropWindow : public LWButtonListener, public CropDisplayHandler, public EditCoordSystem, public ObjectMOBuffer
class CropWindow : public LWButtonListener, public CropDisplayHandler, public EditCoordSystem, public ObjectMOBuffer, public rtengine::NonCopyable
{
static bool initialized;

View File

@ -25,6 +25,7 @@
#include "editcallbacks.h"
#include "mydiagonalcurve.h"
#include "myflatcurve.h"
#include "../rtengine/noncopyable.h"
class CurveEditorGroup;
class CurveEditorSubGroup;
@ -38,7 +39,7 @@ class CurveEditorSubGroup;
/** @brief This class is an interface between RT and the curve editor group
* It handles the methods related to a specific curve. It is created by CurveEditorGroup::addCurve
*/
class CurveEditor : public EditSubscriber
class CurveEditor : public EditSubscriber, public rtengine::NonCopyable
{
friend class CurveEditorGroup;

View File

@ -397,7 +397,7 @@ void CurveEditorGroup::setUnChanged (bool uc, CurveEditor* ce)
}
}
CurveEditorSubGroup::CurveEditorSubGroup(Glib::ustring& curveDir) : curveDir(curveDir), lastFilename(""), valLinear(0), valUnchanged(0), parent(nullptr)
CurveEditorSubGroup::CurveEditorSubGroup(Glib::ustring& curveDir) : curveDir(curveDir), valLinear(0), valUnchanged(0), parent(nullptr)
{
leftBar = nullptr;
bottomBar = nullptr;

View File

@ -70,7 +70,7 @@ public:
* dialogs.
*/
CurveEditorGroup(Glib::ustring& curveDir, Glib::ustring groupLabel = "");
explicit CurveEditorGroup(Glib::ustring& curveDir, Glib::ustring groupLabel = "");
~CurveEditorGroup() override;
void newLine();
void curveListComplete();

View File

@ -21,10 +21,11 @@
#include <gtkmm.h>
#include "curveeditorgroup.h"
#include "../rtengine/noncopyable.h"
class DiagonalCurveEditor;
class DiagonalCurveEditorSubGroup : public CurveEditorSubGroup, public SHCListener, public AdjusterListener
class DiagonalCurveEditorSubGroup : public CurveEditorSubGroup, public SHCListener, public AdjusterListener, public rtengine::NonCopyable
{
friend class DiagonalCurveEditor;

View File

@ -1377,7 +1377,7 @@ void EditorPanel::info_toggled ()
infoString = M ("QINFO_NOEXIF");
}
iareapanel->imageArea->setInfoText (infoString);
iareapanel->imageArea->setInfoText (std::move(infoString));
iareapanel->imageArea->infoEnabled (info->get_active ());
}

View File

@ -34,6 +34,7 @@
#include "navigator.h"
#include "progressconnector.h"
#include "filepanel.h"
#include "../rtengine/noncopyable.h"
class EditorPanel;
class MyProgressBar;
@ -52,7 +53,8 @@ class EditorPanel final :
public rtengine::ProgressListener,
public ThumbnailListener,
public HistoryBeforeLineListener,
public rtengine::HistogramListener
public rtengine::HistogramListener,
public rtengine::NonCopyable
{
public:
explicit EditorPanel (FilePanel* filePanel = nullptr);

View File

@ -632,7 +632,7 @@ Glib::ustring ExifPanel::getSelection (bool onlyeditable)
Gtk::TreeModel::iterator iter = exifTreeModel->get_iter (rows[0]);
Glib::ustring ret = "";
Glib::ustring ret;
bool first = true;
bool editable = false;

View File

@ -20,7 +20,7 @@
#include "multilangmgr.h"
#include "rtimage.h"
FavoritBrowser::FavoritBrowser () : listener (NULL), lastSelectedDir ("")
FavoritBrowser::FavoritBrowser () : listener (NULL)
{
scrollw = Gtk::manage (new Gtk::ScrolledWindow ());

View File

@ -30,6 +30,7 @@
#include "exportpanel.h"
#include "extprog.h"
#include "profilestorecombobox.h"
#include "../rtengine/noncopyable.h"
class ProfileStoreLabel;
class FileBrowser;
@ -56,7 +57,8 @@ public:
class FileBrowser : public ThumbBrowserBase,
public LWButtonListener,
public ExportPanelListener,
public ProfileStoreListener
public ProfileStoreListener,
public rtengine::NonCopyable
{
private:
typedef sigc::signal<void> type_trash_changed;

View File

@ -34,6 +34,7 @@
#include "thumbimageupdater.h"
#include "thumbnail.h"
#include "thumbnaillistener.h"
#include "../rtengine/noncopyable.h"
class FileBrowserEntry;
@ -46,7 +47,8 @@ struct FileBrowserEntryIdleHelper {
class FileThumbnailButtonSet;
class FileBrowserEntry : public ThumbBrowserEntryBase,
public ThumbnailListener,
public ThumbImageUpdateListener
public ThumbImageUpdateListener,
public rtengine::NonCopyable
{
double scale;

View File

@ -457,8 +457,6 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) :
hScrollPos[i] = 0;
vScrollPos[i] = 0;
}
selectedDirectory = "";
}
FileCatalog::~FileCatalog()

View File

@ -32,6 +32,7 @@
#include "previewloader.h"
#include "multilangmgr.h"
#include "threadutils.h"
#include "../rtengine/noncopyable.h"
class FilePanel;
/*
@ -44,7 +45,8 @@ class FileCatalog : public Gtk::VBox,
public PreviewLoaderListener,
public FilterPanelListener,
public FileBrowserListener,
public ExportPanelListener
public ExportPanelListener,
public rtengine::NonCopyable
{
public:
typedef sigc::slot<void, const Glib::ustring&> DirSelectionSlot;

View File

@ -31,12 +31,14 @@
#include "filterpanel.h"
#include "exportpanel.h"
#include "progressconnector.h"
#include "../rtengine/noncopyable.h"
class RTWindow;
class FilePanel final :
public Gtk::HPaned,
public FileSelectionListener
public FileSelectionListener,
public rtengine::NonCopyable
{
public:
FilePanel ();

View File

@ -28,8 +28,6 @@
#include "toolpanel.h"
#include "wbprovider.h"
#include "../rtengine/noncopyable.h"
class FilmNegProvider
{
public:
@ -39,7 +37,6 @@ public:
};
class FilmNegative :
public rtengine::NonCopyable,
public ToolParamBlock,
public AdjusterListener,
public FoldableToolPanel,

View File

@ -21,10 +21,11 @@
#include <gtkmm.h>
#include "curveeditorgroup.h"
#include "../rtengine/noncopyable.h"
class FlatCurveEditor;
class FlatCurveEditorSubGroup: public CurveEditorSubGroup
class FlatCurveEditorSubGroup: public CurveEditorSubGroup, public rtengine::NonCopyable
{
friend class FlatCurveEditor;

View File

@ -86,7 +86,6 @@ FlatField::FlatField () : FoldableToolPanel(this, "flatfield", M("TP_FLATFIELD_L
flatFieldFileReset->signal_clicked().connect( sigc::mem_fun(*this, &FlatField::flatFieldFile_Reset), true );
flatFieldAutoSelectconn = flatFieldAutoSelect->signal_toggled().connect ( sigc::mem_fun(*this, &FlatField::flatFieldAutoSelectChanged), true);
flatFieldBlurTypeconn = flatFieldBlurType->signal_changed().connect( sigc::mem_fun(*this, &FlatField::flatFieldBlurTypeChanged) );
lastShortcutPath = "";
// Set filename filters
b_filter_asCurrent = false;

View File

@ -298,17 +298,14 @@ void drawCrop (Cairo::RefPtr<Cairo::Context> cr, int imx, int imy, int imw, int
cr->line_to (rectx1, recty1);
cr->stroke ();
cr->set_source_rgba (0.0, 0.0, 0.0, 0.618);
std::valarray<double> ds (1);
ds[0] = 4;
cr->set_dash (ds, 0);
cr->set_dash (std::valarray<double>({4}), 0);
cr->move_to (rectx1, recty1);
cr->line_to (rectx2, recty1);
cr->line_to (rectx2, recty2);
cr->line_to (rectx1, recty2);
cr->line_to (rectx1, recty1);
cr->stroke ();
ds.resize (0);
cr->set_dash (ds, 0);
cr->set_dash (std::valarray<double>(), 0);
if (cparams.guide != "Rule of diagonals" && cparams.guide != "Golden Triangle 1" && cparams.guide != "Golden Triangle 2") {
// draw guide lines
@ -446,14 +443,11 @@ void drawCrop (Cairo::RefPtr<Cairo::Context> cr, int imx, int imy, int imw, int
cr->line_to (rectx2, recty2);
cr->stroke ();
cr->set_source_rgba (0.0, 0.0, 0.0, 0.618);
std::valarray<double> ds (1);
ds[0] = 4;
cr->set_dash (ds, 0);
cr->set_dash (std::valarray<double>({4}), 0);
cr->move_to (rectx1, recty1);
cr->line_to (rectx2, recty2);
cr->stroke ();
ds.resize (0);
cr->set_dash (ds, 0);
cr->set_dash (std::valarray<double>(), 0);
double height = recty2 - recty1;
double width = rectx2 - rectx1;
@ -470,14 +464,11 @@ void drawCrop (Cairo::RefPtr<Cairo::Context> cr, int imx, int imy, int imw, int
cr->line_to (rectx1 + x, recty1 + y);
cr->stroke ();
cr->set_source_rgba (0.0, 0.0, 0.0, 0.618);
ds.resize (1);
ds[0] = 4;
cr->set_dash (ds, 0);
cr->set_dash (std::valarray<double>({4}), 0);
cr->move_to (rectx1, recty2);
cr->line_to (rectx1 + x, recty1 + y);
cr->stroke ();
ds.resize (0);
cr->set_dash (ds, 0);
cr->set_dash (std::valarray<double>(), 0);
x = width - (a * b) / height;
y = (b * (d - a)) / width;
@ -486,14 +477,11 @@ void drawCrop (Cairo::RefPtr<Cairo::Context> cr, int imx, int imy, int imw, int
cr->line_to (rectx1 + x, recty1 + y);
cr->stroke ();
cr->set_source_rgba (0.0, 0.0, 0.0, 0.618);
ds.resize (1);
ds[0] = 4;
cr->set_dash (ds, 0);
cr->set_dash (std::valarray<double>({4}), 0);
cr->move_to (rectx2, recty1);
cr->line_to (rectx1 + x, recty1 + y);
cr->stroke ();
ds.resize (0);
cr->set_dash (ds, 0);
cr->set_dash (std::valarray<double>(), 0);
}
}
@ -675,12 +663,6 @@ MyExpander::MyExpander(bool useEnabled, Glib::ustring titleLabel) :
statusImage->set_can_focus(false);
Glib::ustring str("-");
if (!titleLabel.empty()) {
str = titleLabel;
}
label = Gtk::manage(new Gtk::Label());
setExpandAlignProperties(label, true, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER);
label->set_markup(Glib::ustring("<b>") + escapeHtmlChars(titleLabel) + Glib::ustring("</b>"));
@ -1604,7 +1586,7 @@ bool BackBuffer::setDrawRectangle(Glib::RefPtr<Gdk::Window> window, int newX, in
x = newX;
y = newY;
if (newH > 0) {
if (newW > 0) {
w = newW;
}
if (newH > 0) {
@ -1637,7 +1619,7 @@ bool BackBuffer::setDrawRectangle(Cairo::Format format, int newX, int newY, int
x = newX;
y = newY;
if (newH > 0) {
if (newW > 0) {
w = newW;
}
if (newH > 0) {

View File

@ -400,7 +400,7 @@ protected:
void set_none();
public:
MyFileChooserButton(const Glib::ustring &title, Gtk::FileChooserAction action=Gtk::FILE_CHOOSER_ACTION_OPEN);
explicit MyFileChooserButton(const Glib::ustring &title, Gtk::FileChooserAction action=Gtk::FILE_CHOOSER_ACTION_OPEN);
sigc::signal<void> &signal_selection_changed();
sigc::signal<void> &signal_file_set();

View File

@ -464,7 +464,6 @@ void HistogramRGBArea::updateBackBuffer (int r, int g, int b, const Glib::ustrin
if (surface) {
Cairo::RefPtr<Cairo::Context> cc = Cairo::Context::create(surface);
Glib::RefPtr<Gtk::StyleContext> style = get_style_context();
cc->set_source_rgba (0., 0., 0., 0.);
cc->set_operator (Cairo::OPERATOR_CLEAR);
@ -616,7 +615,6 @@ void HistogramRGBArea::on_realize ()
{
Gtk::DrawingArea::on_realize();
Glib::RefPtr<Gdk::Window> window = get_window();
add_events(Gdk::BUTTON_PRESS_MASK);
}
@ -984,7 +982,6 @@ void HistogramArea::on_realize ()
{
Gtk::DrawingArea::on_realize();
Glib::RefPtr<Gdk::Window> window = get_window();
add_events(Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK);
}
@ -1037,8 +1034,6 @@ void HistogramArea::drawMarks(Cairo::RefPtr<Cairo::Context> &cr,
bool HistogramArea::on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr)
{
Glib::RefPtr<Gdk::Window> window = get_window();
if (get_width() != oldwidth || get_height() != oldheight || isDirty ()) {
updateBackBuffer ();
}

View File

@ -28,6 +28,7 @@
#include "guiutils.h"
#include "pointermotionlistener.h"
#include "../rtengine/noncopyable.h"
class HistogramArea;
struct HistogramAreaIdleHelper {
@ -51,7 +52,7 @@ public:
double log (double vsize, double val);
};
class HistogramRGBArea : public Gtk::DrawingArea, public BackBuffer, private HistogramScaling
class HistogramRGBArea : public Gtk::DrawingArea, public BackBuffer, private HistogramScaling, public rtengine::NonCopyable
{
private:
typedef const double (*TMatrix)[3];
@ -114,7 +115,7 @@ public:
virtual void toggleButtonMode() = 0;
};
class HistogramArea : public Gtk::DrawingArea, public BackBuffer, private HistogramScaling
class HistogramArea : public Gtk::DrawingArea, public BackBuffer, private HistogramScaling, public rtengine::NonCopyable
{
public:
typedef sigc::signal<void, double> type_signal_factor_changed;
@ -172,7 +173,7 @@ private:
void get_preferred_width_for_height_vfunc (int height, int &minimum_width, int &natural_width) const override;
};
class HistogramPanel : public Gtk::Grid, public PointerMotionListener, public DrawModeListener
class HistogramPanel : public Gtk::Grid, public PointerMotionListener, public DrawModeListener, public rtengine::NonCopyable
{
protected:

View File

@ -674,8 +674,6 @@ void ICCProfileCreator::savePressed()
//necessary for V2 profile
if (!v2except) {
std::string is_RTv4 = "";
//used partially for v4, and in case of if we want to back to old manner for v2
if (primariesPreset == "ACES-AP0" && rtengine::ICCStore::getInstance()->outputProfileExist(options.rtSettings.ACESp0)) {
sNewProfile = options.rtSettings.ACESp0;
@ -687,11 +685,9 @@ void ICCProfileCreator::savePressed()
sNewProfile = options.rtSettings.adobe;
sPrimariesPreset = "Medium";
} else if (primariesPreset == "ProPhoto" && rtengine::ICCStore::getInstance()->outputProfileExist(options.rtSettings.prophoto)) {
is_RTv4 = options.rtSettings.prophoto.substr(0, 4);
if (is_RTv4 == "RTv4") {
if (options.rtSettings.prophoto.substr(0, 4) == "RTv4") {
options.rtSettings.prophoto = "RTv2_Large";
};
}
sNewProfile = options.rtSettings.prophoto;
@ -703,32 +699,26 @@ void ICCProfileCreator::savePressed()
sNewProfile = options.rtSettings.srgb;
sPrimariesPreset = "sRGB";
} else if (primariesPreset == "Widegamut" && rtengine::ICCStore::getInstance()->outputProfileExist(options.rtSettings.widegamut)) {
is_RTv4 = options.rtSettings.widegamut.substr(0, 4);
if (is_RTv4 == "RTv4") {
if (options.rtSettings.widegamut.substr(0, 4) == "RTv4") {
options.rtSettings.widegamut = "RTv2_Wide";
};
}
sNewProfile = options.rtSettings.widegamut;
sPrimariesPreset = "Wide";
} else if (primariesPreset == "BestRGB" && rtengine::ICCStore::getInstance()->outputProfileExist(options.rtSettings.best)) {
is_RTv4 = options.rtSettings.best.substr(0, 4);
if (is_RTv4 == "RTv4") {
if (options.rtSettings.best.substr(0, 4) == "RTv4") {
options.rtSettings.best = "RTv2_Best";
};
}
sNewProfile = options.rtSettings.best;
sPrimariesPreset = "Best";
} else if (primariesPreset == "BetaRGB" && rtengine::ICCStore::getInstance()->outputProfileExist(options.rtSettings.beta)) {
sNewProfile = options.rtSettings.beta;
is_RTv4 = options.rtSettings.beta.substr(0, 4);
if (is_RTv4 == "RTv4") {
if (options.rtSettings.beta.substr(0, 4) == "RTv4") {
options.rtSettings.widegamut = "RTv2_Beta";
};
}
sPrimariesPreset = "Beta";
} else if (primariesPreset == "BruceRGB" && rtengine::ICCStore::getInstance()->outputProfileExist(options.rtSettings.bruce)) {

View File

@ -34,7 +34,7 @@ using namespace rtengine::procparams;
extern Options options;
ICMPanel::ICMPanel() : FoldableToolPanel(this, "icm", M("TP_ICM_LABEL")), iunchanged(nullptr), icmplistener(nullptr), lastRefFilename(""), camName("")
ICMPanel::ICMPanel() : FoldableToolPanel(this, "icm", M("TP_ICM_LABEL")), iunchanged(nullptr), icmplistener(nullptr)
{
auto m = ProcEventMapper::getInstance();
EvICMprimariMethod = m->newEvent(GAMMA, "HISTORY_MSG_ICM_OUTPUT_PRIMARIES");
@ -304,8 +304,6 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, "icm", M("TP_ICM_LABEL")), iuncha
ipDialog->set_show_hidden(true); // ProgramData is hidden on Windows
#endif
oldip = "";
wprofnamesconn = wProfNames->signal_changed().connect(sigc::mem_fun(*this, &ICMPanel::wpChanged));
oprofnamesconn = oProfNames->signal_changed().connect(sigc::mem_fun(*this, &ICMPanel::opChanged));
orendintentconn = oRendIntent->signal_changed().connect(sigc::mem_fun(*this, &ICMPanel::oiChanged));
@ -617,8 +615,6 @@ void ICMPanel::write(ProcParams* pp, ParamsEdited* pedited)
} else {
pp->icm.inputProfile = ""; // just a directory
}
Glib::ustring p = Glib::path_get_dirname(ipDialog->get_filename());
}
pp->icm.workingProfile = wProfNames->get_active_text();

View File

@ -29,7 +29,6 @@
ImageArea::ImageArea (ImageAreaPanel* p) : parent(p), fullImageWidth(0), fullImageHeight(0)
{
infotext = "";
cropgl = nullptr;
pmlistener = nullptr;
pmhlistener = nullptr;
@ -148,7 +147,7 @@ void ImageArea::on_style_updated ()
void ImageArea::setInfoText (Glib::ustring text)
{
infotext = text;
infotext = std::move(text);
Glib::RefPtr<Pango::Context> context = get_pango_context () ;
Pango::FontDescription fontd(get_style_context()->get_font());
@ -160,7 +159,7 @@ void ImageArea::setInfoText (Glib::ustring text)
// create text layout
Glib::RefPtr<Pango::Layout> ilayout = create_pango_layout("");
ilayout->set_markup(text);
ilayout->set_markup(infotext);
// get size of the text block
int iw, ih;

View File

@ -83,7 +83,6 @@ InspectorBuffer::~InspectorBuffer() {
Inspector::Inspector () : currImage(nullptr), zoom(0.0), active(false)
{
Glib::RefPtr<Gtk::StyleContext> style = get_style_context();
set_name("Inspector");
}
@ -115,7 +114,6 @@ bool Inspector::on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr)
// compute the displayed area
rtengine::Coord availableSize;
rtengine::Coord topLeft;
rtengine::Coord displayedSize;
rtengine::Coord dest(0, 0);
availableSize.x = win->get_width();
availableSize.y = win->get_height();
@ -125,7 +123,6 @@ bool Inspector::on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr)
if (imW < availableSize.x) {
// center the image in the available space along X
topLeft.x = 0;
displayedSize.x = availableSize.x;
dest.x = (availableSize.x - imW) / 2;
} else {
// partial image display
@ -139,7 +136,6 @@ bool Inspector::on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr)
if (imH < availableSize.y) {
// center the image in the available space along Y
topLeft.y = 0;
displayedSize.y = availableSize.y;
dest.y = (availableSize.y - imH) / 2;
} else {
// partial image display

View File

@ -256,7 +256,7 @@ int processLineParams ( int argc, char **argv )
{
rtengine::procparams::PartialProfile *rawParams = nullptr, *imgParams = nullptr;
std::vector<Glib::ustring> inputFiles;
Glib::ustring outputPath = "";
Glib::ustring outputPath;
std::vector<rtengine::procparams::PartialProfile*> processingParams;
bool outputDirectory = false;
bool leaveUntouched = false;
@ -271,7 +271,7 @@ int processLineParams ( int argc, char **argv )
int subsampling = 3;
int bits = -1;
bool isFloat = false;
std::string outputType = "";
std::string outputType;
unsigned errors = 0;
for ( int iArg = 1; iArg < argc; iArg++) {

View File

@ -26,9 +26,8 @@ using namespace rtengine;
using namespace rtengine::procparams;
MetaDataPanel::MetaDataPanel()
MetaDataPanel::MetaDataPanel() : EvMetaDataMode(ProcEventMapper::getInstance()->newEvent(M_VOID, "HISTORY_MSG_METADATA_MODE"))
{
EvMetaDataMode = ProcEventMapper::getInstance()->newEvent(M_VOID, "HISTORY_MSG_METADATA_MODE");
Gtk::HBox *box = Gtk::manage(new Gtk::HBox());
box->pack_start(*Gtk::manage(new Gtk::Label(M("TP_METADATA_MODE") + ": ")), Gtk::PACK_SHRINK, 4);

View File

@ -28,6 +28,7 @@
#include "../rtengine/LUT.h"
#include "guiutils.h"
#include "options.h"
#include "../rtengine/noncopyable.h"
#define RADIUS 3.5 /** radius of the control points ; must be x.5 to target the center of a pixel */
#define CBAR_WIDTH 10 /** inner width of the colored bar (border excluded) */
@ -55,7 +56,7 @@ enum SnapToType {
class MyCurveIdleHelper;
class CurveEditor;
class MyCurve : public Gtk::DrawingArea, public BackBuffer, public ColorCaller, public CoordinateProvider
class MyCurve : public Gtk::DrawingArea, public BackBuffer, public ColorCaller, public CoordinateProvider, public rtengine::NonCopyable
{
friend class MyCurveIdleHelper;

View File

@ -637,13 +637,8 @@ bool MyDiagonalCurve::handleEvents (GdkEvent* event)
setDirty(true);
draw (lit_point);
new_type = CSArrow;
retval = true;
}
}
if (buttonPressed) {
retval = true;
}
} else { // if (edited_point > -1)
if (event->button.button == 3) {
// do we edit another point?
@ -679,7 +674,6 @@ bool MyDiagonalCurve::handleEvents (GdkEvent* event)
newBoundaries.at(1).minVal = 0.;
newBoundaries.at(1).maxVal = 1.;
retval = true;
editedPos.at(0) = curve.x.at(edited_point);
editedPos.at(1) = curve.y.at(edited_point);
coordinateAdjuster->switchAdjustedPoint(editedPos, newBoundaries);

View File

@ -556,7 +556,7 @@ bool MyFlatCurve::getHandles(int n)
if (!n) {
// first point, the left handle is then computed with the last point's right handle
prevX = curve.x.at(N - 1) - 1.0;
nextX = curve.x.at(n + 1);
nextX = curve.x.at(1);
} else if (n == N - 1) {
// last point, the right handle is then computed with the first point's left handle
prevX = curve.x.at(n - 1);
@ -745,7 +745,6 @@ bool MyFlatCurve::handleEvents (GdkEvent* event)
newBoundaries.at(2).maxVal = 1.;
newBoundaries.at(3).minVal = 0.;
newBoundaries.at(3).maxVal = 1.;
retval = true;
editedPos.at(0) = curve.x.at(edited_point);
editedPos.at(1) = curve.y.at(edited_point);
editedPos.at(2) = curve.leftTangent.at(edited_point);

View File

@ -1112,20 +1112,17 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
wavelet.exptoning = wavelet.exptoning && p.wavelet.exptoning == other.wavelet.exptoning;
wavelet.expnoise = wavelet.expnoise && p.wavelet.expnoise == other.wavelet.expnoise;
for (int i = 0; i < 9; i++) {
wavelet.c[i] = wavelet.c[i] && p.wavelet.c[i] == other.wavelet.c[i];
}
for (int i = 0; i < 9; i++) {
wavelet.ch[i] = wavelet.ch[i] && p.wavelet.ch[i] == other.wavelet.ch[i];
for (int level = 0; level < 9; ++level) {
wavelet.c[level] = wavelet.c[level] && p.wavelet.c[level] == other.wavelet.c[level];
wavelet.ch[level] = wavelet.ch[level] && p.wavelet.ch[level] == other.wavelet.ch[level];
}
dirpyrequalizer.enabled = dirpyrequalizer.enabled && p.dirpyrequalizer.enabled == other.dirpyrequalizer.enabled;
dirpyrequalizer.gamutlab = dirpyrequalizer.gamutlab && p.dirpyrequalizer.gamutlab == other.dirpyrequalizer.gamutlab;
dirpyrequalizer.cbdlMethod = dirpyrequalizer.cbdlMethod && p.dirpyrequalizer.cbdlMethod == other.dirpyrequalizer.cbdlMethod;
for (int i = 0; i < 6; i++) {
dirpyrequalizer.mult[i] = dirpyrequalizer.mult[i] && p.dirpyrequalizer.mult[i] == other.dirpyrequalizer.mult[i];
for (int level = 0; level < 6; ++level) {
dirpyrequalizer.mult[level] = dirpyrequalizer.mult[level] && p.dirpyrequalizer.mult[level] == other.dirpyrequalizer.mult[level];
}
dirpyrequalizer.threshold = dirpyrequalizer.threshold && p.dirpyrequalizer.threshold == other.dirpyrequalizer.threshold;

View File

@ -47,7 +47,7 @@ public:
type_signal_item_selected signal_item_selected();
Gtk::Grid* buttonGroup; // this is the widget to be packed
PopUpCommon (Gtk::Button* button, const Glib::ustring& label = "");
explicit PopUpCommon (Gtk::Button* button, const Glib::ustring& label = "");
virtual ~PopUpCommon ();
bool addEntry (const Glib::ustring& fileName, const Glib::ustring& label);
int getEntryCount () const;

View File

@ -28,6 +28,7 @@
#include "guiutils.h"
#include "../rtengine/rtengine.h"
#include "../rtengine/noncopyable.h"
class PreviewListener
{
@ -44,7 +45,7 @@ struct PreviewHandlerIdleHelper {
int pending;
};
class PreviewHandler : public rtengine::PreviewImageListener
class PreviewHandler : public rtengine::PreviewImageListener, public rtengine::NonCopyable
{
private:
friend int setImageUI (void* data);

View File

@ -42,7 +42,7 @@ void ProfilePanel::cleanup ()
delete partialProfileDlg;
}
ProfilePanel::ProfilePanel () : storedPProfile(nullptr), lastFilename(""), imagePath(""), lastSavedPSE(nullptr), customPSE(nullptr)
ProfilePanel::ProfilePanel () : storedPProfile(nullptr), lastSavedPSE(nullptr), customPSE(nullptr)
{
tpc = nullptr;

View File

@ -28,8 +28,9 @@
#include "guiutils.h"
#include "profilestorecombobox.h"
#include "rtimage.h"
#include "../rtengine/noncopyable.h"
class ProfilePanel : public Gtk::Grid, public PParamsChangeListener, public ProfileStoreListener
class ProfilePanel : public Gtk::Grid, public PParamsChangeListener, public ProfileStoreListener, public rtengine::NonCopyable
{
private:

View File

@ -37,12 +37,10 @@ int RTImage::scaleBack = 0;
RTImage::RTImage () {}
RTImage::RTImage (RTImage &other)
RTImage::RTImage (RTImage &other) : surface(other.surface), pixbuf(other.pixbuf)
{
dpiBack = other.dpiBack;
scaleBack = other.scaleBack;
pixbuf = other.pixbuf;
surface = other.surface;
if (pixbuf) {
set(pixbuf);
} else if (surface) {

View File

@ -38,11 +38,11 @@ protected:
public:
RTImage ();
RTImage (RTImage &other);
RTImage (Glib::RefPtr<Gdk::Pixbuf> &pixbuf);
RTImage (Cairo::RefPtr<Cairo::ImageSurface> &surf);
RTImage(Cairo::RefPtr<Cairo::ImageSurface> other);
RTImage (Glib::RefPtr<RTImage> &other);
RTImage (const Glib::ustring& fileName, const Glib::ustring& rtlFileName = Glib::ustring());
explicit RTImage (Glib::RefPtr<Gdk::Pixbuf> &pixbuf);
explicit RTImage (Cairo::RefPtr<Cairo::ImageSurface> &surf);
explicit RTImage(Cairo::RefPtr<Cairo::ImageSurface> other);
explicit RTImage (Glib::RefPtr<RTImage> &other);
explicit RTImage (const Glib::ustring& fileName, const Glib::ustring& rtlFileName = Glib::ustring());
void setImage (const Glib::ustring& fileName, const Glib::ustring& rtlFileName = Glib::ustring());
void changeImage (const Glib::ustring& imageName);

View File

@ -30,7 +30,7 @@ class RTSurface :
{
public:
RTSurface();
RTSurface(const Glib::ustring& fileName, const Glib::ustring& rtlFileName = {});
explicit RTSurface(const Glib::ustring& fileName, const Glib::ustring& rtlFileName = {});
void setImage(const Glib::ustring& fileName, const Glib::ustring& rtlFileName = {});

View File

@ -173,8 +173,8 @@ RTWindow::RTWindow ()
} else {
Glib::RefPtr<Gtk::StyleContext> style = Gtk::StyleContext::create();
Pango::FontDescription pfd = style->get_font(Gtk::STATE_FLAG_NORMAL);
int pt;
if (pfd.get_set_fields() & Pango::FONT_MASK_SIZE) {
int pt;
int fontSize = pfd.get_size();
bool isPix = pfd.get_size_is_absolute();
int resolution = (int)style->get_screen()->get_resolution();
@ -254,8 +254,6 @@ RTWindow::RTWindow ()
#if defined(__APPLE__)
{
osxApp = (GtkosxApplication *)g_object_new (GTKOSX_TYPE_APPLICATION, NULL);
gboolean falseval = FALSE;
gboolean trueval = TRUE;
RTWindow *rtWin = this;
g_signal_connect (osxApp, "NSApplicationBlockTermination", G_CALLBACK (osx_should_quit_cb), rtWin);
g_signal_connect (osxApp, "NSApplicationWillTerminate", G_CALLBACK (osx_will_quit_cb), rtWin);

View File

@ -29,8 +29,9 @@
#if defined(__APPLE__)
#include <gtkosxapplication.h>
#endif
#include "../rtengine/noncopyable.h"
class RTWindow : public Gtk::Window, public rtengine::ProgressListener
class RTWindow : public Gtk::Window, public rtengine::ProgressListener, public rtengine::NonCopyable
{
private:

View File

@ -23,6 +23,7 @@
#include "adjuster.h"
#include "guiutils.h"
#include "options.h"
#include "../rtengine/noncopyable.h"
class FormatChangeListener
{
@ -31,7 +32,7 @@ public:
virtual void formatChanged(const Glib::ustring& format) = 0;
};
class SaveFormatPanel : public Gtk::Grid, public AdjusterListener
class SaveFormatPanel : public Gtk::Grid, public AdjusterListener, public rtengine::NonCopyable
{
protected:

View File

@ -27,15 +27,13 @@ extern Glib::ustring creditsPath;
extern Glib::ustring licensePath;
extern Glib::ustring versionString;
SplashImage::SplashImage ()
SplashImage::SplashImage () : surface(RTImage::createImgSurfFromFile("splash.png"))
{
surface = RTImage::createImgSurfFromFile ("splash.png");
}
bool SplashImage::on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr)
{
Glib::RefPtr<Gdk::Window> window = get_window();
cr->set_source(surface, 0., 0.);
cr->rectangle(0, 0, surface->get_width(), surface->get_height());
cr->fill();

View File

@ -30,7 +30,7 @@
ThresholdSelector::ThresholdSelector(double minValueBottom, double maxValueBottom, double defBottom, Glib::ustring labelBottom, unsigned int precisionBottom,
double minValueTop, double maxValueTop, double defTop, Glib::ustring labelTop, unsigned int precisionTop,
ThresholdCurveProvider* curveProvider)
: coloredBar(RTO_Left2Right)
: separatedLabelBottom(std::move(labelBottom)), separatedLabelTop(std::move(labelTop)), coloredBar(RTO_Left2Right)
{
positions[TS_BOTTOMLEFT] = defPos[TS_BOTTOMLEFT] = defBottom;
positions[TS_TOPLEFT] = defPos[TS_TOPLEFT] = defTop;
@ -40,8 +40,6 @@ ThresholdSelector::ThresholdSelector(double minValueBottom, double maxValueBotto
this->precisionBottom = precisionBottom;
doubleThresh = false;
separatedLabelBottom = labelBottom;
separatedLabelTop = labelTop;
bgCurveProvider = curveProvider;
separatedSliders = true;
@ -66,9 +64,6 @@ ThresholdSelector::ThresholdSelector(double minValue, double maxValue, double de
this->precisionBottom = precision;
doubleThresh = false;
separatedLabelBottom = "";
separatedLabelTop = "";
#ifndef NDEBUG
if (startAtOne) {
@ -106,9 +101,6 @@ ThresholdSelector::ThresholdSelector(double minValue, double maxValue, double de
this->precisionBottom = precision;
doubleThresh = true;
separatedLabelBottom = "";
separatedLabelTop = "";
#ifndef NDEBUG
if (startAtOne) {
@ -329,14 +321,13 @@ void ThresholdSelector::updateBackBuffer()
if (pts.size() >= 4) {
std::vector<double>::iterator i = pts.begin();
double x = *i;
++i;
double y = *i;
++i;
cr->move_to (xStart, ih*y + yStart);
for (; i < pts.end(); ) {
x = *i;
double x = *i;
++i;
y = *i;
++i;

View File

@ -232,8 +232,6 @@ const ProcParams& Thumbnail::getProcParamsU ()
rtengine::procparams::ProcParams* Thumbnail::createProcParamsForUpdate(bool returnParams, bool force, bool flaggingMode)
{
static int index = 0; // Will act as unique identifier during the session
// try to load the last saved parameters from the cache or from the paramfile file
ProcParams* ldprof = nullptr;
@ -285,6 +283,7 @@ rtengine::procparams::ProcParams* Thumbnail::createProcParamsForUpdate(bool retu
imageMetaData = rtengine::FramesMetaData::fromFile (fname, nullptr, true);
}
static int index = 0; // Will act as unique identifier during the session
Glib::ustring tmpFileName( Glib::build_filename(options.cacheBaseDir, Glib::ustring::compose("CPB_temp_%1.txt", index++)) );
const rtexif::TagDirectory* exifDir = nullptr;
@ -1020,9 +1019,7 @@ int Thumbnail::getRank () const
void Thumbnail::setRank (int rank)
{
if (pparams->rank != rank) {
pparams->rank = rank;
}
pparams->rank = rank;
pparamsValid = true;
}

View File

@ -26,6 +26,7 @@
#include "guiutils.h"
#include "multilangmgr.h"
#include "paramsedited.h"
#include "../rtengine/noncopyable.h"
class ToolPanel;
class FoldableToolPanel;
@ -51,7 +52,7 @@ public:
ToolParamBlock();
};
class ToolPanel
class ToolPanel : public rtengine::NonCopyable
{
protected:

View File

@ -83,6 +83,7 @@
#include "dehaze.h"
#include "guiutils.h"
#include "filmnegative.h"
#include "../rtengine/noncopyable.h"
class ImageEditorCoordinator;
@ -99,7 +100,8 @@ class ToolPanelCoordinator :
public ICMPanelListener,
public ImageAreaToolListener,
public rtengine::ImageTypeListener,
public FilmNegProvider
public FilmNegProvider,
public rtengine::NonCopyable
{
protected:
WhiteBalance* whitebalance;

View File

@ -382,7 +382,6 @@ void WhiteBalance::adjusterChanged(Adjuster* a, double newval)
return;
}
Glib::ustring colLabel = row[methodColumns.colLabel];
const std::pair<bool, const WBEntry&> ppMethod = findWBEntry (row[methodColumns.colLabel], WBLT_GUI);
const std::pair<bool, const WBEntry&> wbCustom = findWBEntry ("Custom", WBLT_PP);