Changed back the order of the buttons

This commit is contained in:
Thanatomanic 2018-06-16 08:57:50 +02:00
parent ab5ce7f130
commit c8bddca09b

View File

@ -72,8 +72,8 @@ HistogramPanel::HistogramPanel ()
valueImage = new RTImage ("histValue.png"); valueImage = new RTImage ("histValue.png");
chroImage = new RTImage ("histChro.png"); chroImage = new RTImage ("histChro.png");
rawImage = new RTImage ("histRaw.png"); rawImage = new RTImage ("histRaw.png");
modeImage = new RTImage ("histFull.png"); // needs replacement!
barImage = new RTImage ("histBar.png"); barImage = new RTImage ("histBar.png");
modeImage = new RTImage ("histFull.png"); // needs replacement!
redImage_g = new RTImage ("histRedg.png"); redImage_g = new RTImage ("histRedg.png");
greenImage_g = new RTImage ("histGreeng.png"); greenImage_g = new RTImage ("histGreeng.png");
@ -81,9 +81,9 @@ HistogramPanel::HistogramPanel ()
valueImage_g = new RTImage ("histValueg.png"); valueImage_g = new RTImage ("histValueg.png");
chroImage_g = new RTImage ("histChrog.png"); chroImage_g = new RTImage ("histChrog.png");
rawImage_g = new RTImage ("histRawg.png"); rawImage_g = new RTImage ("histRawg.png");
modeImage_g = new RTImage ("histFullg.png"); // needs replacement!
modeImage_g2 = new RTImage ("histBarg.png"); // needs replacement!
barImage_g = new RTImage ("histBarg.png"); barImage_g = new RTImage ("histBarg.png");
modeImage_g = new RTImage ("histFullg.png"); // needs replacement!
modeImage_g2 = new RTImage ("histBarg.png"); // needs replacement!
showRed = Gtk::manage (new Gtk::ToggleButton ()); showRed = Gtk::manage (new Gtk::ToggleButton ());
showGreen = Gtk::manage (new Gtk::ToggleButton ()); showGreen = Gtk::manage (new Gtk::ToggleButton ());
@ -91,8 +91,8 @@ HistogramPanel::HistogramPanel ()
showValue = Gtk::manage (new Gtk::ToggleButton ()); showValue = Gtk::manage (new Gtk::ToggleButton ());
showChro = Gtk::manage (new Gtk::ToggleButton ()); showChro = Gtk::manage (new Gtk::ToggleButton ());
showRAW = Gtk::manage (new Gtk::ToggleButton ()); showRAW = Gtk::manage (new Gtk::ToggleButton ());
showMode = Gtk::manage (new Gtk::Button ());
showBAR = Gtk::manage (new Gtk::ToggleButton ()); showBAR = Gtk::manage (new Gtk::ToggleButton ());
showMode = Gtk::manage (new Gtk::Button ());
showRed->set_name("histButton"); showRed->set_name("histButton");
showRed->set_can_focus(false); showRed->set_can_focus(false);
@ -106,10 +106,10 @@ HistogramPanel::HistogramPanel ()
showChro->set_can_focus(false); showChro->set_can_focus(false);
showRAW->set_name("histButton"); showRAW->set_name("histButton");
showRAW->set_can_focus(false); showRAW->set_can_focus(false);
showMode->set_name("histButton");
showMode->set_can_focus(false);
showBAR->set_name("histButton"); showBAR->set_name("histButton");
showBAR->set_can_focus(false); showBAR->set_can_focus(false);
showMode->set_name("histButton");
showMode->set_can_focus(false);
showRed->set_relief (Gtk::RELIEF_NONE); showRed->set_relief (Gtk::RELIEF_NONE);
showGreen->set_relief (Gtk::RELIEF_NONE); showGreen->set_relief (Gtk::RELIEF_NONE);
@ -117,8 +117,8 @@ HistogramPanel::HistogramPanel ()
showValue->set_relief (Gtk::RELIEF_NONE); showValue->set_relief (Gtk::RELIEF_NONE);
showChro->set_relief (Gtk::RELIEF_NONE); showChro->set_relief (Gtk::RELIEF_NONE);
showRAW->set_relief (Gtk::RELIEF_NONE); showRAW->set_relief (Gtk::RELIEF_NONE);
showMode->set_relief (Gtk::RELIEF_NONE);
showBAR->set_relief (Gtk::RELIEF_NONE); showBAR->set_relief (Gtk::RELIEF_NONE);
showMode->set_relief (Gtk::RELIEF_NONE);
showRed->set_tooltip_text (M("HISTOGRAM_TOOLTIP_R")); showRed->set_tooltip_text (M("HISTOGRAM_TOOLTIP_R"));
showGreen->set_tooltip_text (M("HISTOGRAM_TOOLTIP_G")); showGreen->set_tooltip_text (M("HISTOGRAM_TOOLTIP_G"));
@ -126,8 +126,8 @@ HistogramPanel::HistogramPanel ()
showValue->set_tooltip_text (M("HISTOGRAM_TOOLTIP_L")); showValue->set_tooltip_text (M("HISTOGRAM_TOOLTIP_L"));
showChro->set_tooltip_text (M("HISTOGRAM_TOOLTIP_CHRO")); showChro->set_tooltip_text (M("HISTOGRAM_TOOLTIP_CHRO"));
showRAW->set_tooltip_text (M("HISTOGRAM_TOOLTIP_RAW")); showRAW->set_tooltip_text (M("HISTOGRAM_TOOLTIP_RAW"));
showMode->set_tooltip_text (M("HISTOGRAM_TOOLTIP_FULL")); // needs replacement!
showBAR->set_tooltip_text (M("HISTOGRAM_TOOLTIP_BAR")); showBAR->set_tooltip_text (M("HISTOGRAM_TOOLTIP_BAR"));
showMode->set_tooltip_text (M("HISTOGRAM_TOOLTIP_FULL")); // needs replacement!
buttonGrid = Gtk::manage (new Gtk::Grid ()); buttonGrid = Gtk::manage (new Gtk::Grid ());
buttonGrid->set_orientation(Gtk::ORIENTATION_VERTICAL); buttonGrid->set_orientation(Gtk::ORIENTATION_VERTICAL);
@ -136,8 +136,8 @@ HistogramPanel::HistogramPanel ()
showBlue->set_active (true); showBlue->set_active (true);
showValue->set_active (false);//unactive by default showValue->set_active (false);//unactive by default
showChro->set_active (false);//unactive by default showChro->set_active (false);//unactive by default
showRAW->set_active (false); showRAW->set_active (false);
// no showMode->set_active(), as it's not a ToggleButton
showBAR->set_active (options.histogramBar); showBAR->set_active (options.histogramBar);
showRed->set_image (showRed->get_active() ? *redImage : *redImage_g); showRed->set_image (showRed->get_active() ? *redImage : *redImage_g);
@ -146,14 +146,13 @@ HistogramPanel::HistogramPanel ()
showValue->set_image (showValue->get_active() ? *valueImage : *valueImage_g); showValue->set_image (showValue->get_active() ? *valueImage : *valueImage_g);
showChro->set_image (showChro->get_active() ? *chroImage : *chroImage_g); showChro->set_image (showChro->get_active() ? *chroImage : *chroImage_g);
showRAW->set_image (showRAW->get_active() ? *rawImage : *rawImage_g); showRAW->set_image (showRAW->get_active() ? *rawImage : *rawImage_g);
if (options.histogramDrawMode == 0)
showMode->set_image(*modeImage);
else if (options.histogramDrawMode == 1)
showMode->set_image(*modeImage_g);
else
showMode->set_image(*modeImage_g2);
showBAR->set_image (showBAR->get_active() ? *barImage : *barImage_g); showBAR->set_image (showBAR->get_active() ? *barImage : *barImage_g);
if (options.histogramDrawMode == 0)
showMode->set_image(*modeImage);
else if (options.histogramDrawMode == 1)
showMode->set_image(*modeImage_g);
else
showMode->set_image(*modeImage_g2);
showRed->set_hexpand(false); showRed->set_hexpand(false);
showRed->set_vexpand(false); showRed->set_vexpand(false);
@ -179,14 +178,14 @@ HistogramPanel::HistogramPanel ()
showRAW->set_vexpand(false); showRAW->set_vexpand(false);
showRAW->set_halign(Gtk::ALIGN_CENTER); showRAW->set_halign(Gtk::ALIGN_CENTER);
showRAW->set_valign(Gtk::ALIGN_START); showRAW->set_valign(Gtk::ALIGN_START);
showMode->set_hexpand(false);
showMode->set_vexpand(false);
showMode->set_halign(Gtk::ALIGN_CENTER);
showMode->set_valign(Gtk::ALIGN_START);
showBAR->set_hexpand(false); showBAR->set_hexpand(false);
showBAR->set_vexpand(false); showBAR->set_vexpand(false);
showBAR->set_halign(Gtk::ALIGN_CENTER); showBAR->set_halign(Gtk::ALIGN_CENTER);
showBAR->set_valign(Gtk::ALIGN_START); showBAR->set_valign(Gtk::ALIGN_START);
showMode->set_hexpand(false);
showMode->set_vexpand(false);
showMode->set_halign(Gtk::ALIGN_CENTER);
showMode->set_valign(Gtk::ALIGN_START);
showRed->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::red_toggled), showRed ); showRed->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::red_toggled), showRed );
showGreen->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::green_toggled), showGreen ); showGreen->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::green_toggled), showGreen );
@ -194,8 +193,8 @@ HistogramPanel::HistogramPanel ()
showValue->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::value_toggled), showValue ); showValue->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::value_toggled), showValue );
showChro->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::chro_toggled), showChro ); showChro->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::chro_toggled), showChro );
showRAW->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::raw_toggled), showRAW ); showRAW->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::raw_toggled), showRAW );
showBAR->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::bar_toggled), showBAR );
showMode->signal_released().connect( sigc::mem_fun(*this, &HistogramPanel::mode_released), showMode ); showMode->signal_released().connect( sigc::mem_fun(*this, &HistogramPanel::mode_released), showMode );
showBAR->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::bar_toggled), showBAR );
buttonGrid->add (*showRed); buttonGrid->add (*showRed);
buttonGrid->add (*showGreen); buttonGrid->add (*showGreen);
@ -203,8 +202,8 @@ HistogramPanel::HistogramPanel ()
buttonGrid->add (*showValue); buttonGrid->add (*showValue);
buttonGrid->add (*showChro); buttonGrid->add (*showChro);
buttonGrid->add (*showRAW); buttonGrid->add (*showRAW);
buttonGrid->add (*showMode);
buttonGrid->add (*showBAR); buttonGrid->add (*showBAR);
buttonGrid->add (*showMode);
// Put the button vbox next to the window's border to be less disturbing // Put the button vbox next to the window's border to be less disturbing
if (options.histogramPosition == 1) { if (options.histogramPosition == 1) {
@ -228,8 +227,8 @@ HistogramPanel::~HistogramPanel ()
delete valueImage; delete valueImage;
delete chroImage; delete chroImage;
delete rawImage; delete rawImage;
delete modeImage;
delete barImage; delete barImage;
delete modeImage;
delete redImage_g; delete redImage_g;
delete greenImage_g; delete greenImage_g;
@ -237,9 +236,9 @@ HistogramPanel::~HistogramPanel ()
delete valueImage_g; delete valueImage_g;
delete chroImage_g; delete chroImage_g;
delete rawImage_g; delete rawImage_g;
delete modeImage_g;
delete modeImage_g2;
delete barImage_g; delete barImage_g;
delete modeImage_g;
delete modeImage_g2;
} }
@ -320,22 +319,25 @@ void HistogramPanel::raw_toggled ()
rgbv_toggled(); rgbv_toggled();
} }
void HistogramPanel::mode_released ()
{
options.histogramDrawMode = (options.histogramDrawMode + 1) % 3;
if (options.histogramDrawMode == 0)
showMode->set_image(*modeImage);
else if (options.histogramDrawMode == 1)
showMode->set_image(*modeImage_g);
else
showMode->set_image(*modeImage_g2);
rgbv_toggled();
}
void HistogramPanel::bar_toggled () void HistogramPanel::bar_toggled ()
{ {
showBAR->set_image(showBAR->get_active() ? *barImage : *barImage_g); showBAR->set_image(showBAR->get_active() ? *barImage : *barImage_g);
rgbv_toggled(); rgbv_toggled();
} }
void HistogramPanel::mode_released ()
{
options.histogramDrawMode = (options.histogramDrawMode + 1) % 3;
if (options.histogramDrawMode == 0)
showMode->set_image(*modeImage);
else if (options.histogramDrawMode == 1)
showMode->set_image(*modeImage_g);
else
showMode->set_image(*modeImage_g2);
rgbv_toggled();
}
void HistogramPanel::rgbv_toggled () void HistogramPanel::rgbv_toggled ()
{ {
// Update Display // Update Display
@ -401,13 +403,13 @@ void HistogramPanel::reorder (Gtk::PositionType align)
// DrawModeListener interface: // DrawModeListener interface:
void HistogramPanel::toggle_button_mode () void HistogramPanel::toggle_button_mode ()
{ {
if (options.histogramDrawMode == 0) if (options.histogramDrawMode == 0)
showMode->set_image(*modeImage); showMode->set_image(*modeImage);
else if (options.histogramDrawMode == 1) else if (options.histogramDrawMode == 1)
showMode->set_image(*modeImage_g); showMode->set_image(*modeImage_g);
else else
showMode->set_image(*modeImage_g2); showMode->set_image(*modeImage_g2);
} }
// //
@ -751,11 +753,11 @@ void HistogramArea::get_preferred_height_for_width_vfunc (int width, int &minimu
} else if (gHeight < 100) { } else if (gHeight < 100) {
gHeight = 100; gHeight = 100;
}*/ }*/
int gHeight = width; // aspect ratio 1:1 should fit on most monitors int gHeight = width; // aspect ratio 1:1 should fit on most monitors
if (gHeight < 100) { if (gHeight < 100) {
gHeight = 100; gHeight = 100;
} }
minimum_height = gHeight * 0.7; minimum_height = gHeight * 0.7;
natural_height = gHeight; natural_height = gHeight;
@ -776,7 +778,7 @@ void HistogramArea::updateOptions (bool r, bool g, bool b, bool l, bool raw, boo
needLuma = l; needLuma = l;
rawMode = raw; rawMode = raw;
needChroma = c; needChroma = c;
drawMode = mode; drawMode = mode;
updateBackBuffer (); updateBackBuffer ();
} }
@ -907,8 +909,8 @@ void HistogramArea::updateBackBuffer ()
fullhistheight = bhtemp[i]; fullhistheight = bhtemp[i];
} }
} }
int realhistheight = fullhistheight; int realhistheight = fullhistheight;
if (realhistheight < winh - 2) { if (realhistheight < winh - 2) {
realhistheight = winh - 2; realhistheight = winh - 2;
@ -916,7 +918,7 @@ void HistogramArea::updateBackBuffer ()
cr->set_antialias (Cairo::ANTIALIAS_SUBPIXEL); cr->set_antialias (Cairo::ANTIALIAS_SUBPIXEL);
cr->set_line_width (1.0); cr->set_line_width (1.0);
cr->set_operator(Cairo::OPERATOR_ADD); cr->set_operator(Cairo::OPERATOR_ADD);
int ui = 0, oi = 0; int ui = 0, oi = 0;
@ -924,39 +926,39 @@ void HistogramArea::updateBackBuffer ()
drawCurve(cr, bhchanged, realhistheight, w, h); drawCurve(cr, bhchanged, realhistheight, w, h);
cr->set_source_rgba (0.0, 0.0, 1.0, 0.4); cr->set_source_rgba (0.0, 0.0, 1.0, 0.4);
cr->fill (); cr->fill ();
drawCurve(cr, bhchanged, realhistheight, w, h); drawCurve(cr, bhchanged, realhistheight, w, h);
cr->set_source_rgba (0.0, 0.0, 1.0, 0.9); cr->set_source_rgba (0.0, 0.0, 1.0, 0.9);
cr->stroke (); cr->stroke ();
drawMarks(cr, bhchanged, realhistheight, w, ui, oi); drawMarks(cr, bhchanged, realhistheight, w, ui, oi);
} }
if (needGreen) { if (needGreen) {
drawCurve(cr, ghchanged, realhistheight, w, h); drawCurve(cr, ghchanged, realhistheight, w, h);
cr->set_source_rgba (0.0, 1.0, 0.0, 0.4); cr->set_source_rgba (0.0, 1.0, 0.0, 0.4);
cr->fill (); cr->fill ();
drawCurve(cr, ghchanged, realhistheight, w, h); drawCurve(cr, ghchanged, realhistheight, w, h);
cr->set_source_rgba (0.0, 1.0, 0.0, 0.9); cr->set_source_rgba (0.0, 1.0, 0.0, 0.9);
cr->stroke (); cr->stroke ();
drawMarks(cr, ghchanged, realhistheight, w, ui, oi); drawMarks(cr, ghchanged, realhistheight, w, ui, oi);
} }
if (needRed) { if (needRed) {
drawCurve(cr, rhchanged, realhistheight, w, h); drawCurve(cr, rhchanged, realhistheight, w, h);
cr->set_source_rgba (1.0, 0.0, 0.0, 0.4); cr->set_source_rgba (1.0, 0.0, 0.0, 0.4);
cr->fill (); cr->fill ();
drawCurve(cr, rhchanged, realhistheight, w, h); drawCurve(cr, rhchanged, realhistheight, w, h);
cr->set_source_rgba (1.0, 0.0, 0.0, 0.9); cr->set_source_rgba (1.0, 0.0, 0.0, 0.9);
cr->stroke (); cr->stroke ();
drawMarks(cr, rhchanged, realhistheight, w, ui, oi); drawMarks(cr, rhchanged, realhistheight, w, ui, oi);
} }
cr->set_operator(Cairo::OPERATOR_SOURCE); cr->set_operator(Cairo::OPERATOR_SOURCE);
if (needLuma && !rawMode) { if (needLuma && !rawMode) {
drawCurve(cr, lhist, realhistheight, w, h); drawCurve(cr, lhist, realhistheight, w, h);
@ -965,7 +967,7 @@ void HistogramArea::updateBackBuffer ()
drawMarks(cr, lhist, realhistheight, w, ui, oi); drawMarks(cr, lhist, realhistheight, w, ui, oi);
} }
if (needChroma && !rawMode) { if (needChroma && !rawMode) {
drawCurve(cr, chist, realhistheight, w, h); drawCurve(cr, chist, realhistheight, w, h);
cr->set_source_rgb (0.4, 0.4, 0.4); cr->set_source_rgb (0.4, 0.4, 0.4);
@ -973,7 +975,7 @@ void HistogramArea::updateBackBuffer ()
drawMarks(cr, chist, realhistheight, w, ui, oi); drawMarks(cr, chist, realhistheight, w, ui, oi);
} }
} }
cr->set_source_rgba (1., 1., 1., 0.35); cr->set_source_rgba (1., 1., 1., 0.35);
@ -985,7 +987,7 @@ void HistogramArea::updateBackBuffer ()
std::valarray<double> ch_ds (1); std::valarray<double> ch_ds (1);
ch_ds[0] = 4; ch_ds[0] = 4;
cr->set_dash (ch_ds, 0); cr->set_dash (ch_ds, 0);
cr->move_to(w / 4 + 0.5, 1.5); cr->move_to(w / 4 + 0.5, 1.5);
cr->line_to(w / 4 + 0.5, h - 2); cr->line_to(w / 4 + 0.5, h - 2);
cr->stroke(); cr->stroke();
@ -995,44 +997,44 @@ void HistogramArea::updateBackBuffer ()
cr->move_to(3 * w / 4 + 0.5, 1.5); cr->move_to(3 * w / 4 + 0.5, 1.5);
cr->line_to(3 * w / 4 + 0.5, h - 2); cr->line_to(3 * w / 4 + 0.5, h - 2);
cr->stroke(); cr->stroke();
if (options.histogramDrawMode == 0) if (options.histogramDrawMode == 0)
{ {
cr->move_to(1.5, h / 4 + 0.5); cr->move_to(1.5, h / 4 + 0.5);
cr->line_to(w - 2, h / 4 + 0.5); cr->line_to(w - 2, h / 4 + 0.5);
cr->stroke(); cr->stroke();
cr->move_to(1.5, 2 * h / 4 + 0.5); cr->move_to(1.5, 2 * h / 4 + 0.5);
cr->line_to(w - 2, 2 * h / 4 + 0.5); cr->line_to(w - 2, 2 * h / 4 + 0.5);
cr->stroke(); cr->stroke();
cr->move_to(1.5, 3 * h / 4 + 0.5); cr->move_to(1.5, 3 * h / 4 + 0.5);
cr->line_to(w - 2, 3 * h / 4 + 0.5); cr->line_to(w - 2, 3 * h / 4 + 0.5);
cr->stroke(); cr->stroke();
} }
if (options.histogramDrawMode == 1) if (options.histogramDrawMode == 1)
{ {
cr->move_to(1.5, h - scalingFunctionLog(h,h / 4 + 0.5)); cr->move_to(1.5, h - scalingFunctionLog(h,h / 4 + 0.5));
cr->line_to(w - 2, h - scalingFunctionLog(h,h / 4 + 0.5)); cr->line_to(w - 2, h - scalingFunctionLog(h,h / 4 + 0.5));
cr->stroke(); cr->stroke();
cr->move_to(1.5, h - scalingFunctionLog(h,2 * h / 4 + 0.5)); cr->move_to(1.5, h - scalingFunctionLog(h,2 * h / 4 + 0.5));
cr->line_to(w - 2, h - scalingFunctionLog(h,2 * h / 4 + 0.5)); cr->line_to(w - 2, h - scalingFunctionLog(h,2 * h / 4 + 0.5));
cr->stroke(); cr->stroke();
cr->move_to(1.5, h - scalingFunctionLog(h,3 * h / 4 + 0.5)); cr->move_to(1.5, h - scalingFunctionLog(h,3 * h / 4 + 0.5));
cr->line_to(w - 2, h - scalingFunctionLog(h,3 * h / 4 + 0.5)); cr->line_to(w - 2, h - scalingFunctionLog(h,3 * h / 4 + 0.5));
cr->stroke(); cr->stroke();
} }
if (options.histogramDrawMode == 2) if (options.histogramDrawMode == 2)
{ {
cr->move_to(1.5, scalingFunctionCube(h,h / 4 + 0.5)); cr->move_to(1.5, scalingFunctionCube(h,h / 4 + 0.5));
cr->line_to(w - 2, scalingFunctionCube(h,h / 4 + 0.5)); cr->line_to(w - 2, scalingFunctionCube(h,h / 4 + 0.5));
cr->stroke(); cr->stroke();
cr->move_to(1.5, scalingFunctionCube(h,2 * h / 4 + 0.5)); cr->move_to(1.5, scalingFunctionCube(h,2 * h / 4 + 0.5));
cr->line_to(w - 2, scalingFunctionCube(h,2 * h / 4 + 0.5)); cr->line_to(w - 2, scalingFunctionCube(h,2 * h / 4 + 0.5));
cr->stroke(); cr->stroke();
cr->move_to(1.5, scalingFunctionCube(h,3 * h / 4 + 0.5)); cr->move_to(1.5, scalingFunctionCube(h,3 * h / 4 + 0.5));
cr->line_to(w - 2, scalingFunctionCube(h,3 * h / 4 + 0.5)); cr->line_to(w - 2, scalingFunctionCube(h,3 * h / 4 + 0.5));
cr->stroke(); cr->stroke();
} }
cr->unset_dash(); cr->unset_dash();
// Draw the frame's border // Draw the frame's border
@ -1054,14 +1056,14 @@ void HistogramArea::on_realize ()
double HistogramArea::scalingFunctionLog(double vsize, double val) double HistogramArea::scalingFunctionLog(double vsize, double val)
{ {
double factor = 1.0; // can be tuned if necessary - makes the log 'steeper' double factor = 1.0; // can be tuned if necessary - makes the log 'steeper'
return vsize * log(factor / (factor + val)) / log(factor / vsize); return vsize * log(factor / (factor + val)) / log(factor / vsize);
} }
double HistogramArea::scalingFunctionCube(double vsize, double val) double HistogramArea::scalingFunctionCube(double vsize, double val)
{ {
double factor = 3.0; // can be tuned; higher values compress the middel part of the scale double factor = 3.0; // can be tuned; higher values compress the middel part of the scale
return (val * (4 * (-1.0 + factor) * val * val - 6.0 * (-1.0 + factor) * val * vsize + (-2.0 + 3.0 * factor) * vsize *vsize))/(factor * vsize * vsize); return (val * (4 * (-1.0 + factor) * val * val - 6.0 * (-1.0 + factor) * val * vsize + (-2.0 + 3.0 * factor) * vsize *vsize))/(factor * vsize * vsize);
} }
void HistogramArea::drawCurve(Cairo::RefPtr<Cairo::Context> &cr, void HistogramArea::drawCurve(Cairo::RefPtr<Cairo::Context> &cr,
@ -1072,11 +1074,11 @@ void HistogramArea::drawCurve(Cairo::RefPtr<Cairo::Context> &cr,
for (int i = 0; i < 256; i++) { for (int i = 0; i < 256; i++) {
double val = data[i] * (double)(vsize - 2) / scale; double val = data[i] * (double)(vsize - 2) / scale;
if (drawMode == 1) if (drawMode == 1)
val = scalingFunctionLog((double)vsize,val); val = scalingFunctionLog((double)vsize,val);
if (drawMode == 2) if (drawMode == 2)
val = scalingFunctionCube((double)vsize,val); val = scalingFunctionCube((double)vsize,val);
if (val > vsize - 1) { if (val > vsize - 1) {
val = vsize - 1; val = vsize - 1;
@ -1125,18 +1127,18 @@ bool HistogramArea::on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr)
bool HistogramArea::on_button_press_event (GdkEventButton* event) bool HistogramArea::on_button_press_event (GdkEventButton* event)
{ {
if (event->type == GDK_2BUTTON_PRESS && event->button == 1) { if (event->type == GDK_2BUTTON_PRESS && event->button == 1) {
drawMode = (drawMode + 1) % 3; drawMode = (drawMode + 1) % 3;
options.histogramDrawMode = (options.histogramDrawMode + 1) % 3; options.histogramDrawMode = (options.histogramDrawMode + 1) % 3;
if (myDrawModeListener) { if (myDrawModeListener) {
myDrawModeListener->toggle_button_mode (); myDrawModeListener->toggle_button_mode ();
} }
updateBackBuffer (); updateBackBuffer ();
queue_draw (); queue_draw ();
} }
return true; return true;
} }