+++ /dev/null
-
-/*
- * CINELERRA
- * Copyright (C) 1997-2011 Adam Williams <broadcast at earthling dot net>
- *
- * This program 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 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "bcdisplayinfo.h"
-#include "bcsignals.h"
-#include "cursors.h"
-#include "histogram.h"
-#include "histogramconfig.h"
-#include "histogramwindow.h"
-#include "keys.h"
-#include "language.h"
-#include "theme.h"
-
-#include <unistd.h>
-
-
-
-
-HistogramWindow::HistogramWindow(HistogramMain *plugin)
- : PluginClientWindow(plugin,
- plugin->w,
- plugin->h,
- 440,
- 500,
- 1)
-{
- this->plugin = plugin;
- active_value = 0;
-}
-
-HistogramWindow::~HistogramWindow()
-{
-}
-
-
-void HistogramWindow::create_objects()
-{
- int margin = plugin->get_theme()->widget_border;
- int x = margin, y = margin, x1 = margin;
-
- add_subwindow(mode_v = new HistogramMode(plugin,
- x,
- y,
- HISTOGRAM_VALUE,
- _("Value")));
- x += mode_v->get_w() + margin;
- add_subwindow(mode_r = new HistogramMode(plugin,
- x,
- y,
- HISTOGRAM_RED,
- _("Red")));
- x += mode_r->get_w() + margin;
- add_subwindow(mode_g = new HistogramMode(plugin,
- x,
- y,
- HISTOGRAM_GREEN,
- _("Green")));
- x += mode_g->get_w() + margin;
- add_subwindow(mode_b = new HistogramMode(plugin,
- x,
- y,
- HISTOGRAM_BLUE,
- _("Blue")));
-
-
- x = get_w() - margin - plugin->get_theme()->get_image_set("histogram_rgb_toggle")[0]->get_w();
- add_subwindow(parade_on = new HistogramParade(plugin,
- this,
- x,
- y,
- 1));
- x -= parade_on->get_w() + margin;
- add_subwindow(parade_off = new HistogramParade(plugin,
- this,
- x,
- y,
- 0));
-
-
- x = x1;
- y += parade_on->get_h() + margin;
- add_subwindow(canvas_title1 = new BC_Title(margin,
- y,
- "-10%"));
- add_subwindow(canvas_title2 = new BC_Title(get_w() - get_text_width(MEDIUMFONT, "110%") - margin,
- y,
- "110%"));
-
- y += canvas_title2->get_h() + margin;
- x = x1;
- canvas_h = get_h() - y - 210;
-
-
- add_subwindow(low_input_carrot = new HistogramCarrot(plugin,
- this,
- x,
- y + canvas_h));
-
- x = low_input_carrot->get_w() / 2 + x;
- canvas_w = get_w() - x - x;
-
- title1_x = x;
- title2_x = x + (int)(canvas_w * -HIST_MIN_INPUT / FLOAT_RANGE);
- title3_x = x + (int)(canvas_w * (1.0 - HIST_MIN_INPUT) / FLOAT_RANGE);
- title4_x = x + (int)(canvas_w);
-
-
-
-
-
- add_subwindow(canvas = new HistogramCanvas(plugin,
- this,
- x,
- y,
- canvas_w,
- canvas_h));
-
-// Canvas border
- draw_3d_border(x - 2,
- y - 2,
- canvas_w + 4,
- canvas_h + 4,
- get_bg_color(),
- BLACK,
- MDGREY,
- get_bg_color());
-
-// Calculate output curve with no value function
- plugin->tabulate_curve(plugin->mode, 0);
-
- y += canvas->get_h();
- x = margin;
-
- add_subwindow(gamma_carrot = new HistogramCarrot(plugin,
- this,
- canvas->get_x() +
- canvas->get_w() / 2 -
- low_input_carrot->get_w() / 2 ,
- y));
-
- add_subwindow(high_input_carrot = new HistogramCarrot(plugin,
- this,
- canvas->get_x() +
- canvas->get_w() -
- low_input_carrot->get_w() / 2,
- y));
- y += low_input_carrot->get_h() + margin;
-
-
-// add_subwindow(title = new BC_Title(x, y, _("Input:")));
-// x += title->get_w() + margin;
- low_input = new HistogramText(plugin,
- this,
- x,
- y);
- low_input->create_objects();
-
- x = get_w() / 2 - low_input->get_w() / 2;
- gamma = new HistogramText(plugin,
- this,
- x,
- y);
- gamma->create_objects();
-
-
- x = get_w() - low_input->get_w() - margin;
- high_input = new HistogramText(plugin,
- this,
- x,
- y);
- high_input->create_objects();
-
-
- y += high_input->get_h() + margin;
- x = x1;
-
-
-
- add_subwindow(output = new HistogramSlider(plugin,
- this,
- canvas->get_x(),
- y,
- canvas->get_w(),
- 20,
- 0));
- output->update();
-
-// Output border
- draw_3d_border(output->get_x() - 2,
- output->get_y() - 2,
- output->get_w() + 4,
- output->get_h() + 4,
- get_bg_color(),
- BLACK,
- MDGREY,
- get_bg_color());
-
-
- y += output->get_h();
-
-
-
- add_subwindow(low_output_carrot = new HistogramCarrot(plugin,
- this,
- margin,
- y));
-
- add_subwindow(high_output_carrot = new HistogramCarrot(plugin,
- this,
- canvas->get_x() +
- canvas->get_w() -
- low_output_carrot->get_w() / 2,
- y));
- y += high_output_carrot->get_h() + margin;
-
-
-// add_subwindow(title = new BC_Title(x, y, _("Output:")));
-// x += title->get_w() + margin;
- low_output = new HistogramText(plugin,
- this,
- x,
- y);
- low_output->create_objects();
- high_output = new HistogramText(plugin,
- this,
- get_w() - low_output->get_w() - margin,
- y);
- high_output->create_objects();
-
- x = x1;
- y += high_output->get_h() + margin;
-
- add_subwindow(bar = new BC_Bar(x, y, get_w() - margin * 2));
- y += bar->get_h() + margin;
-
- add_subwindow(automatic = new HistogramAuto(plugin,
- x,
- y));
-
- //int y1 = y;
- x = 200;
- add_subwindow(threshold_title = new BC_Title(x, y, _("Threshold:")));
- x += threshold_title->get_w() + margin;
- threshold = new HistogramText(plugin,
- this,
- x,
- y);
- threshold->create_objects();
-
- x = get_w() / 2;
- add_subwindow(reset = new HistogramReset(plugin,
- x,
- y + threshold->get_h() + margin));
-
- x = x1;
- y += automatic->get_h() + margin;
- add_subwindow(plot = new HistogramPlot(plugin,
- x,
- y));
-
- y += plot->get_h() + 5;
- add_subwindow(split = new HistogramSplit(plugin,
- x,
- y));
-
- update(1, 1, 1, 1);
-
- flash(0);
- show_window();
-}
-
-
-
-int HistogramWindow::resize_event(int w, int h)
-{
- int xdiff = w - get_w();
- int ydiff = h - get_h();
-
- parade_on->reposition_window(parade_on->get_x() + xdiff,
- parade_on->get_y());
- parade_off->reposition_window(parade_off->get_x() + xdiff,
- parade_on->get_y());
- canvas_title2->reposition_window(canvas_title2->get_x() + xdiff,
- canvas_title2->get_y());
-
-// Canvas follows window size
- canvas_w = canvas_w + xdiff;
- canvas_h = canvas_h + ydiff;
- canvas->reposition_window(canvas->get_x(),
- canvas->get_y(),
- canvas_w,
- canvas_h);
-
-// Canvas border
- draw_3d_border(canvas->get_x() - 2,
- canvas->get_y() - 2,
- canvas_w + 4,
- canvas_h + 4,
- get_bg_color(),
- BLACK,
- MDGREY,
- get_bg_color());
-
- low_input_carrot->reposition_window(low_input_carrot->get_x(),
- low_input_carrot->get_y() + ydiff);
- gamma_carrot->reposition_window(gamma_carrot->get_x(),
- gamma_carrot->get_y() + ydiff);
- high_input_carrot->reposition_window(high_input_carrot->get_x(),
- high_input_carrot->get_y() + ydiff);
-
- low_input->reposition_window(low_input->get_x(),
- low_input->get_y() + ydiff);
- gamma->reposition_window(w / 2 - gamma->get_w() / 2,
- gamma->get_y() + ydiff);
- high_input->reposition_window(high_input->get_x() + xdiff,
- low_input->get_y() + ydiff);
-
- output->reposition_window(output->get_x(),
- output->get_y() + ydiff,
- output->get_w() + xdiff,
- output->get_h());
- output->update();
-
-// Output border
- draw_3d_border(output->get_x() - 2,
- output->get_y() - 2,
- output->get_w() + 4,
- output->get_h() + 4,
- get_bg_color(),
- BLACK,
- MDGREY,
- get_bg_color());
-
- low_output_carrot->reposition_window(low_output_carrot->get_x(),
- low_output_carrot->get_y() + ydiff);
- high_output_carrot->reposition_window(high_output_carrot->get_x(),
- high_output_carrot->get_y() + ydiff);
-
- low_output->reposition_window(low_output->get_x(),
- low_output->get_y() + ydiff);
- high_output->reposition_window(high_output->get_x() + xdiff,
- high_output->get_y() + ydiff);
-
- bar->reposition_window(bar->get_x(),
- bar->get_y() + ydiff,
- bar->get_w() + xdiff);
-
- automatic->reposition_window(automatic->get_x(),
- automatic->get_y() + ydiff);
- threshold_title->reposition_window(threshold_title->get_x(),
- threshold_title->get_y() + ydiff);
- threshold->reposition_window(threshold->get_x(),
- threshold->get_y() + ydiff);
- reset->reposition_window(reset->get_x(),
- reset->get_y() + ydiff);
-
- plot->reposition_window(plot->get_x(),
- plot->get_y() + ydiff);
- split->reposition_window(split->get_x(),
- split->get_y() + ydiff);
-
- update(1, 1, 1, 1);
-
- plugin->w = w;
- plugin->h = h;
- flash();
- return 1;
-}
-
-
-
-int HistogramWindow::keypress_event()
-{
- int result = 0;
-
- if(active_value)
- {
- float sign = 1;
- for(int i = 0; i < HISTOGRAM_MODES; i++)
- {
- if(active_value == &plugin->config.gamma[i])
- sign = -1;
- }
-
- if(get_keypress() == RIGHT || get_keypress() == UP)
- {
- *active_value += sign * PRECISION;
- plugin->config.boundaries();
- update(1, 1, 1, 0);
- plugin->send_configure_change();
- return 1;
- }
- else
- if(get_keypress() == LEFT || get_keypress() == DOWN)
- {
- *active_value -= sign * PRECISION;
- plugin->config.boundaries();
- update(1, 1, 1, 0);
- plugin->send_configure_change();
- return 1;
- }
- }
-
- return result;
-}
-
-void HistogramWindow::update(int do_canvases,
- int do_carrots,
- int do_text,
- int do_toggles)
-{
- if(do_toggles)
- {
- automatic->update(plugin->config.automatic);
- mode_v->update(plugin->mode == HISTOGRAM_VALUE ? 1 : 0);
- mode_r->update(plugin->mode == HISTOGRAM_RED ? 1 : 0);
- mode_g->update(plugin->mode == HISTOGRAM_GREEN ? 1 : 0);
- mode_b->update(plugin->mode == HISTOGRAM_BLUE ? 1 : 0);
- plot->update(plugin->config.plot);
- split->update(plugin->config.split);
- parade_on->update(plugin->parade ? 1 : 0);
- parade_off->update(plugin->parade ? 0 : 1);
- output->update();
- }
-
- if(do_canvases)
- {
- update_canvas();
- }
-
- if(do_carrots)
- {
- low_input_carrot->update();
- high_input_carrot->update();
- gamma_carrot->update();
- low_output_carrot->update();
- high_output_carrot->update();
- }
-
- if(do_text)
- {
- low_input->update();
- gamma->update();
- high_input->update();
- low_output->update();
- high_output->update();
- threshold->update();
- }
-
-
-}
-
-
-void HistogramWindow::draw_canvas_mode(int mode, int color, int y, int h)
-{
- int *accum = plugin->accum[mode];
- int accum_per_canvas_i = HISTOGRAM_SLOTS / canvas_w + 1;
- float accum_per_canvas_f = (float)HISTOGRAM_SLOTS / canvas_w;
- int normalize = 0;
- int max = 0;
-
-
-// Draw histogram
- for(int i = 0; i < HISTOGRAM_SLOTS; i++)
- {
- if(accum && accum[i] > normalize) normalize = accum[i];
- }
-
-
- if(normalize)
- {
- for(int i = 0; i < canvas_w; i++)
- {
- int accum_start = (int)(accum_per_canvas_f * i);
- int accum_end = accum_start + accum_per_canvas_i;
- max = 0;
- for(int j = accum_start; j < accum_end; j++)
- {
- max = MAX(accum[j], max);
- }
-
-// max = max * h / normalize;
- max = (int)(log(max) / log(normalize) * h);
-
- canvas->set_color(BLACK);
- canvas->draw_line(i, y, i, y + h - max);
- canvas->set_color(color);
- canvas->draw_line(i, y + h - max, i, y + h);
- }
- }
- else
- {
- canvas->set_color(BLACK);
- canvas->draw_box(0, y, canvas_w, h);
- }
-
-// Draw overlays
- canvas->set_color(WHITE);
- canvas->set_line_width(2);
- int y1 = 0;
-
-// Draw output line
- for(int i = 0; i < canvas_w; i++)
- {
- float input = (float)i /
- canvas_w *
- FLOAT_RANGE +
- HIST_MIN_INPUT;
- float output = plugin->calculate_level(input,
- mode,
- 0);
-
- int y2 = h - (int)(output * h);
- if(i > 0)
- {
- canvas->draw_line(i - 1, y + y1, i, y + y2);
- }
- y1 = y2;
- }
-
- canvas->set_line_width(1);
-
-}
-
-
-void HistogramWindow::update_canvas()
-{
- if(plugin->parade)
- {
- draw_canvas_mode(HISTOGRAM_RED, RED, 0, canvas_h / 3);
- draw_canvas_mode(HISTOGRAM_GREEN, GREEN, canvas_h / 3, canvas_h / 3);
- draw_canvas_mode(HISTOGRAM_BLUE, BLUE, canvas_h * 2 / 3, canvas_h - canvas_h * 2 / 3);
- }
- else
- {
- draw_canvas_mode(plugin->mode, MEGREY, 0, canvas_h);
- }
-
-
-// Draw 0 and 100% lines.
- canvas->set_color(RED);
- int x = (int)(canvas_w * -HIST_MIN_INPUT / FLOAT_RANGE);
- canvas->draw_line(x,
- 0,
- x,
- canvas_h);
- x = (int)(canvas_w * (1.0 - HIST_MIN_INPUT) / FLOAT_RANGE);
- canvas->draw_line(x,
- 0,
- x,
- canvas_h);
- canvas->flash();
-}
-
-
-
-
-HistogramParade::HistogramParade(HistogramMain *plugin,
- HistogramWindow *gui,
- int x,
- int y,
- int value)
- : BC_Toggle(x,
- y,
- value ? plugin->get_theme()->get_image_set("histogram_rgb_toggle") :
- plugin->get_theme()->get_image_set("histogram_toggle"),
- 0)
-{
- this->plugin = plugin;
- this->gui = gui;
- this->value = value;
- if(value)
- set_tooltip(_("RGB Parade on"));
- else
- set_tooltip(_("RGB Parade off"));
-}
-
-int HistogramParade::handle_event()
-{
- update(1);
- plugin->parade = value;
- gui->update(1,
- 0,
- 0,
- 1);
- return 1;
-}
-
-
-
-
-
-
-
-HistogramCanvas::HistogramCanvas(HistogramMain *plugin,
- HistogramWindow *gui,
- int x,
- int y,
- int w,
- int h)
- : BC_SubWindow(x,
- y,
- w,
- h,
- BLACK)
-{
- this->plugin = plugin;
- this->gui = gui;
-}
-
-int HistogramCanvas::button_press_event()
-{
- int result = 0;
- if(is_event_win() && cursor_inside())
- {
- if(!plugin->dragging_point &&
- (!plugin->config.automatic || plugin->mode == HISTOGRAM_VALUE))
- {
- gui->deactivate();
- }
- }
- return result;
-}
-
-int HistogramCanvas::cursor_motion_event()
-{
- if(is_event_win() && cursor_inside())
- {
- }
- return 0;
-}
-
-int HistogramCanvas::button_release_event()
-{
- return 0;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-HistogramReset::HistogramReset(HistogramMain *plugin,
- int x,
- int y)
- : BC_GenericButton(x, y, _("Reset"))
-{
- this->plugin = plugin;
-}
-int HistogramReset::handle_event()
-{
- plugin->config.reset(0);
- ((HistogramWindow*)plugin->thread->window)->update(1, 1, 1, 1);
- plugin->send_configure_change();
- return 1;
-}
-
-
-
-
-
-
-
-HistogramCarrot::HistogramCarrot(HistogramMain *plugin,
- HistogramWindow *gui,
- int x,
- int y)
- : BC_Toggle(x,
- y,
- plugin->get_theme()->get_image_set("histogram_carrot"),
- 0)
-{
- this->plugin = plugin;
- this->gui = gui;
- drag_operation = 0;
-}
-
-HistogramCarrot::~HistogramCarrot()
-{
-}
-
-float* HistogramCarrot::get_value()
-{
- if(this == gui->low_input_carrot)
- {
- return &plugin->config.low_input[plugin->mode];
- }
- else
- if(this == gui->high_input_carrot)
- {
- return &plugin->config.high_input[plugin->mode];
- }
- else
- if(this == gui->gamma_carrot)
- {
- return &plugin->config.gamma[plugin->mode];
- }
- else
- if(this == gui->low_output_carrot)
- {
- return &plugin->config.low_output[plugin->mode];
- }
- else
- if(this == gui->high_output_carrot)
- {
- return &plugin->config.high_output[plugin->mode];
- }
- return 0;
-}
-
-void HistogramCarrot::update()
-{
- int new_x = 0;
- float *value = get_value();
-
- if(this != gui->gamma_carrot)
- {
- new_x = (int)(gui->canvas->get_x() +
- (*value - HIST_MIN_INPUT) *
- gui->canvas->get_w() /
- (HIST_MAX_INPUT - HIST_MIN_INPUT) -
- get_w() / 2);
- }
- else
- {
- float min = plugin->config.low_input[plugin->mode];
- float max = plugin->config.high_input[plugin->mode];
- float delta = (max - min) / 2.0;
- float mid = min + delta;
- float tmp = log10(1.0 / *value);
- tmp = mid + delta * tmp;
-
-//printf("HistogramCarrot::update %d %f %f\n", __LINE__, *value, tmp);
-
- new_x = gui->canvas->get_x() -
- get_w() / 2 +
- (int)(gui->canvas->get_w() *
- (tmp - HIST_MIN_INPUT) /
- (HIST_MAX_INPUT - HIST_MIN_INPUT));
- }
-
- reposition_window(new_x, get_y());
-}
-
-int HistogramCarrot::button_press_event()
-{
- if(is_event_win() && get_buttonpress() == 1)
- {
- //int w = get_w();
- gui->deactivate();
- set_status(BC_Toggle::TOGGLE_DOWN);
-
- BC_Toggle::update(0);
- gui->active_value = get_value();
-// Disable the other toggles
- if(this != gui->low_input_carrot) gui->low_input_carrot->BC_Toggle::update(0);
- if(this != gui->high_input_carrot) gui->high_input_carrot->BC_Toggle::update(0);
- if(this != gui->gamma_carrot) gui->gamma_carrot->BC_Toggle::update(0);
- if(this != gui->low_output_carrot) gui->low_output_carrot->BC_Toggle::update(0);
- if(this != gui->high_output_carrot) gui->high_output_carrot->BC_Toggle::update(0);
- starting_x = get_x();
- offset_x = gui->get_relative_cursor_x();
- offset_y = gui->get_relative_cursor_y();
-//printf("HistogramCarrot::button_press_event %d %d %d\n", __LINE__, starting_x, offset_x);
- drag_operation = 1;
- draw_face(1, 1);
- return 1;
- }
- return 0;
-}
-
-int HistogramCarrot::button_release_event()
-{
- int result = BC_Toggle::button_release_event();
- handle_event();
- drag_operation = 0;
- return result;
-}
-
-int HistogramCarrot::cursor_motion_event()
-{
- int cursor_x = gui->get_relative_cursor_x();
-
- if(drag_operation)
- {
-//printf("HistogramCarrot::cursor_motion_event %d %d\n", __LINE__, cursor_x);
- int new_x = starting_x + cursor_x - offset_x;
-
-// Clamp x
-// Get level from x
- float *value = get_value();
- if(this == gui->gamma_carrot)
- {
- float min = gui->low_input_carrot->get_x();
- float max = gui->high_input_carrot->get_x();
- float delta = (max - min) / 2.0;
- if(delta >= 0.5)
- {
- float mid = min + delta;
- float tmp = (float)(new_x - mid) /
- delta;
- tmp = 1.0 / pow(10, tmp);
- CLAMP(tmp, MIN_GAMMA, MAX_GAMMA);
- *value = tmp;
-//printf("HistogramCarrot::update %d %f\n", __LINE__, tmp);
- }
- }
- else
- {
- int min_x = gui->canvas->get_x() - get_w() / 2;
- int max_x = gui->canvas->get_x() + gui->canvas->get_w() - get_w() / 2;
- CLAMP(new_x, min_x, max_x);
- *value = HIST_MIN_INPUT +
- (HIST_MAX_INPUT - HIST_MIN_INPUT) *
- (new_x - min_x) /
- (max_x - min_x);
- }
-
- reposition_window(new_x, get_y());
- flush();
-
- gui->update(1,
- (this == gui->low_input_carrot || this == gui->high_input_carrot),
- 1,
- 0);
- plugin->send_configure_change();
-
- return 1;
- }
- return 0;
-}
-
-
-
-
-
-
-
-
-HistogramSlider::HistogramSlider(HistogramMain *plugin,
- HistogramWindow *gui,
- int x,
- int y,
- int w,
- int h,
- int is_input)
- : BC_SubWindow(x, y, w, h)
-{
- this->plugin = plugin;
- this->gui = gui;
- this->is_input = is_input;
- operation = NONE;
-}
-
-int HistogramSlider::input_to_pixel(float input)
-{
- return (int)((input - HIST_MIN_INPUT) / FLOAT_RANGE * get_w());
-}
-
-void HistogramSlider::update()
-{
- int w = get_w();
- int h = get_h();
- //int half_h = get_h() / 2;
- //int quarter_h = get_h() / 4;
- int mode = plugin->mode;
- int r = 0xff;
- int g = 0xff;
- int b = 0xff;
-
- clear_box(0, 0, w, h);
-
- switch(mode)
- {
- case HISTOGRAM_RED:
- g = b = 0x00;
- break;
- case HISTOGRAM_GREEN:
- r = b = 0x00;
- break;
- case HISTOGRAM_BLUE:
- r = g = 0x00;
- break;
- }
-
- for(int i = 0; i < w; i++)
- {
- int color = (int)(i * 0xff / w);
- set_color(((r * color / 0xff) << 16) |
- ((g * color / 0xff) << 8) |
- (b * color / 0xff));
-
- draw_line(i, 0, i, h);
- }
-
-
- flash();
-}
-
-
-
-
-
-
-
-
-
-HistogramAuto::HistogramAuto(HistogramMain *plugin,
- int x,
- int y)
- : BC_CheckBox(x, y, plugin->config.automatic, _("Automatic"))
-{
- this->plugin = plugin;
-}
-
-int HistogramAuto::handle_event()
-{
- plugin->config.automatic = get_value();
- plugin->send_configure_change();
- return 1;
-}
-
-
-
-
-HistogramPlot::HistogramPlot(HistogramMain *plugin,
- int x,
- int y)
- : BC_CheckBox(x, y, plugin->config.plot, _("Plot histogram"))
-{
- this->plugin = plugin;
-}
-
-int HistogramPlot::handle_event()
-{
- plugin->config.plot = get_value();
- plugin->send_configure_change();
- return 1;
-}
-
-
-
-
-HistogramSplit::HistogramSplit(HistogramMain *plugin,
- int x,
- int y)
- : BC_CheckBox(x, y, plugin->config.split, _("Split output"))
-{
- this->plugin = plugin;
-}
-
-int HistogramSplit::handle_event()
-{
- plugin->config.split = get_value();
- plugin->send_configure_change();
- return 1;
-}
-
-
-
-HistogramMode::HistogramMode(HistogramMain *plugin,
- int x,
- int y,
- int value,
- char *text)
- : BC_Radial(x, y, plugin->mode == value, text)
-{
- this->plugin = plugin;
- this->value = value;
-}
-int HistogramMode::handle_event()
-{
- HistogramWindow *gui = (HistogramWindow*)plugin->thread->window;
- plugin->mode = value;
- plugin->current_point= -1;
- gui->active_value = 0;
- gui->low_input_carrot->BC_Toggle::update(0);
- gui->gamma_carrot->BC_Toggle::update(0);
- gui->high_input_carrot->BC_Toggle::update(0);
- gui->low_output_carrot->BC_Toggle::update(0);
- gui->high_output_carrot->BC_Toggle::update(0);
- gui->update(1, 1, 1, 1);
-// plugin->send_configure_change();
- return 1;
-}
-
-
-
-
-
-
-
-
-
-
-HistogramText::HistogramText(HistogramMain *plugin,
- HistogramWindow *gui,
- int x,
- int y)
- : BC_TumbleTextBox(gui,
- 0.0,
- (float)HIST_MIN_INPUT,
- (float)HIST_MAX_INPUT,
- x,
- y,
- 70)
-{
- this->plugin = plugin;
- this->gui = gui;
- set_precision(DIGITS);
- set_increment(PRECISION);
-}
-
-float* HistogramText::get_value()
-{
- if(this == gui->low_input)
- {
- return &plugin->config.low_input[plugin->mode];
- }
- else
- if(this == gui->high_input)
- {
- return &plugin->config.high_input[plugin->mode];
- }
- else
- if(this == gui->gamma)
- {
- return &plugin->config.gamma[plugin->mode];
- }
- else
- if(this == gui->low_output)
- {
- return &plugin->config.low_output[plugin->mode];
- }
- else
- if(this == gui->high_output)
- {
- return &plugin->config.high_output[plugin->mode];
- }
- else
- if(this == gui->threshold)
- {
- return &plugin->config.threshold;
- }
-
- return 0;
-}
-
-int HistogramText::handle_event()
-{
- float *output = get_value();
- if(output)
- {
- *output = atof(get_text());
- }
-
- gui->update(1, 1, 0, 0);
- plugin->send_configure_change();
- return 1;
-}
-
-void HistogramText::update()
-{
- float *output = get_value();
- if(output)
- {
- BC_TumbleTextBox::update(*output);
- }
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-