/* * CINELERRA * Copyright (C) 2016 Eric Olson * * 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 "edl.h" #include "edlsession.h" #include "yuv411win.h" #include "language.h" yuv411Window::yuv411Window(yuv411Main *client) : PluginClientWindow(client, xS(260), yS(250), xS(260), yS(250), 0) { this->client = client; colormodel = -1; } yuv411Window::~yuv411Window() { } void yuv411Window::create_objects() { int xs10 = xS(10), xs90 = xS(90); int ys10 = yS(10), ys30 = yS(30); int x = xs10, y = ys10, x1=xs90; add_tool(avg_vertical = new yuv411Toggle(client, &(client->config.avg_vertical), _("Vertical average"), x, y)); y += ys30; add_tool(int_horizontal = new yuv411Toggle(client, &(client->config.int_horizontal), _("Horizontal interpolate"), x, y)); y += ys30; add_tool(inpainting = new yuv411Toggle(client, &(client->config.inpainting), _("Inpainting method"), x, y)); y += ys30; add_subwindow(new BC_Title(x, y, _("Offset:"))); add_subwindow(offset=new yuv411Offset(client,x1,y)); y += ys30; add_subwindow(new BC_Title(x, y, _("Threshold:"))); add_subwindow(thresh=new yuv411Thresh(client,x1,y)); y += ys30; add_subwindow(new BC_Title(x, y, _("Bias:"))); add_subwindow(bias=new yuv411Bias(client,x1,y)); y += ys30; int y1 = get_h() - yuv411Reset::calculate_h() - yS(20); add_subwindow(reset = new yuv411Reset(client, this, x, y1+ys10)); show_window(); flush(); yuv_warning = new BC_Title(x, y, _("Warning: colormodel not YUV"),MEDIUMFONT,RED); add_subwindow(yuv_warning); EDL *edl = client->get_edl(); colormodel = edl->session->color_model; switch( colormodel ) { case BC_YUV888: case BC_YUVA8888: yuv_warning->hide_window(); break; } } void yuv411Window::update() { avg_vertical->update(client->config.avg_vertical); int_horizontal->update(client->config.int_horizontal); inpainting->update(client->config.inpainting); offset->update(client->config.offset); thresh->update(client->config.thresh); bias->update(client->config.bias); } int yuv411Window::close_event() { set_done(1); return 1; } yuv411Toggle::yuv411Toggle(yuv411Main *client, int *output, char *string, int x, int y) : BC_CheckBox(x, y, *output, string) { this->client = client; this->output = output; } yuv411Toggle::~yuv411Toggle() { } int yuv411Toggle::handle_event() { *output = get_value(); ((yuv411Window*)client->thread->window)->update_enables(); client->send_configure_change(); return 1; } yuv411Offset::yuv411Offset(yuv411Main *client, int x, int y) : BC_FSlider(x+xS(60), y, 0, xS(100), yS(100), (float)0, (float)2, (float)client->config.offset) { this->client = client; set_precision(1.0); } int yuv411Offset::handle_event() { client->config.offset = get_value(); client->send_configure_change(); return 1; } yuv411Thresh::yuv411Thresh(yuv411Main *client, int x, int y) : BC_FSlider(x+xS(60), y, 0, xS(100), yS(100), (float)1, (float)100, (float)client->config.thresh) { this->client = client; set_precision(1.0); } int yuv411Thresh::handle_event() { client->config.thresh = get_value(); client->send_configure_change(); return 1; } yuv411Bias::yuv411Bias(yuv411Main *client, int x, int y) : BC_FSlider(x+xS(60), y, 0, xS(100), yS(100), (float)0, (float)25, (float)client->config.bias) { this->client = client; set_precision(1.0); } int yuv411Bias::handle_event() { client->config.bias = get_value(); client->send_configure_change(); return 1; } yuv411Reset::yuv411Reset(yuv411Main *client, yuv411Window *window, int x, int y) : BC_GenericButton(x, y, _("Reset")) { this->client = client; this->window = window; } yuv411Reset::~yuv411Reset() { } int yuv411Reset::handle_event() { client->config.reset(); window->update(); window->update_enables(); client->send_configure_change(); return 1; } void yuv411Window::update_enables() { yuv411Config &config = client->config; if( !config.int_horizontal && config.inpainting ) { config.inpainting = 0; inpainting->set_value(0); } if( config.int_horizontal ) { inpainting->enable(); offset->show_window(); } else { inpainting->disable(); offset->hide_window(); } if( config.int_horizontal && config.inpainting ) { thresh->show_window(); bias->show_window(); } else { thresh->hide_window(); bias->hide_window(); } } void yuv411Window::show_warning(int warn) { if( warn ) yuv_warning->show_window(); else yuv_warning->hide_window(); }