X-Git-Url: https://cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fplugins%2Fcrop%2Fcropwin.C;fp=cinelerra-5.1%2Fplugins%2Fcrop%2Fcropwin.C;h=654263b41de4cd3e834f3f5c82176e20608b4321;hb=721a106de35567bcab14a0e92718767189acf176;hp=0000000000000000000000000000000000000000;hpb=8b315b1f6c8c44d65132cbbd558180ab03a585c0;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/plugins/crop/cropwin.C b/cinelerra-5.1/plugins/crop/cropwin.C new file mode 100644 index 00000000..654263b4 --- /dev/null +++ b/cinelerra-5.1/plugins/crop/cropwin.C @@ -0,0 +1,550 @@ + +/* + * CINELERRA + * Copyright (C) 2008 Adam Williams + * + * 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 + * + */ + +/* + * 2019. Derivative by Translate plugin. This plugin works also with Proxy. + * It uses Percent values instead of Pixel value coordinates. +*/ + +#include "bcdisplayinfo.h" +#include "clip.h" +#include "language.h" +#include "theme.h" +#include "crop.h" +#include "cropwin.h" + + + + + + + + + + + + +CropWin::CropWin(CropMain *client) + : PluginClientWindow(client, + 420, + 290, + 420, + 290, + 0) +{ + this->client = client; +} + +CropWin::~CropWin() +{ +} + +void CropWin::create_objects() +{ + int x = 10, x1 = 40, x2 = 80, x_middle= (get_w() / 2), x3 = 180; + int y = 10; + int clr_x = get_w()-x - 22; // note: clrBtn_w = 22 + + BC_TitleBar *title_bar; + BC_Bar *bar; + +// Crop section + add_subwindow(title_bar = new BC_TitleBar(x, y, get_w()-2*x, 20, 10, _("Crop"))); + y += 20; + add_tool(new BC_Title(x, y, _("Left"))); + add_tool(new BC_Title((x2-x), y, _("%"))); + crop_left_text = new CropLeftText(this, client, (x + x2), y); + crop_left_text->create_objects(); + crop_left_slider = new CropLeftSlider(this, client, x3, y, 200); + add_subwindow(crop_left_slider); + clr_x = x3 + crop_left_slider->get_w() + x; + add_subwindow(crop_left_clr = new CropEdgesClr(this, client, + clr_x, y, RESET_LEFT)); + y += 30; + add_tool(new BC_Title(x, y, _("Top"))); + add_tool(new BC_Title((x2-x), y, _("%"))); + crop_top_text = new CropTopText(this, client, (x + x2), y); + crop_top_text->create_objects(); + crop_top_slider = new CropTopSlider(this, client, x3, y, 200); + add_subwindow(crop_top_slider); + add_subwindow(crop_top_clr = new CropEdgesClr(this, client, + clr_x, y, RESET_TOP)); + y += 30; + add_tool(new BC_Title(x, y, _("Right"))); + add_tool(new BC_Title((x2-x), y, _("%"))); + crop_right_text = new CropRightText(this, client, (x + x2), y); + crop_right_text->create_objects(); + crop_right_slider = new CropRightSlider(this, client, x3, y, 200); + add_subwindow(crop_right_slider); + add_subwindow(crop_right_clr = new CropEdgesClr(this, client, + clr_x, y, RESET_RIGHT)); + y += 30; + add_tool(new BC_Title(x, y, _("Bottom"))); + add_tool(new BC_Title((x2-x), y, _("%"))); + crop_bottom_text = new CropBottomText(this, client, (x + x2), y); + crop_bottom_text->create_objects(); + crop_bottom_slider = new CropBottomSlider(this, client, x3, y, 200); + add_subwindow(crop_bottom_slider); + add_subwindow(crop_bottom_clr = new CropEdgesClr(this, client, + clr_x, y, RESET_BOTTOM)); + y += 40; + +// Position section + add_subwindow(title_bar = new BC_TitleBar(x, y, get_w()-2*x, 20, 10, _("Position"))); + y += 20; + add_tool(new BC_Title(x, y, _("X"))); + add_tool(new BC_Title((x2-x), y, _("%"))); + crop_position_x_text = new CropPositionXText(this, client, (x + x2), y); + crop_position_x_text->create_objects(); + crop_position_x_slider = new CropPositionXSlider(this, client, x3, y, 200); + add_subwindow(crop_position_x_slider); + add_subwindow(crop_position_x_clr = new CropEdgesClr(this, client, + clr_x, y, RESET_POSITION_X)); + y += 30; + add_tool(new BC_Title(x, y, _("Y"))); + add_tool(new BC_Title((x2-x), y, _("%"))); + crop_position_y_text = new CropPositionYText(this, client, (x + x2), y); + crop_position_y_text->create_objects(); + crop_position_y_slider = new CropPositionYSlider(this, client, x3, y, 200); + add_subwindow(crop_position_y_slider); + add_subwindow(crop_position_y_clr = new CropEdgesClr(this, client, + clr_x, y, RESET_POSITION_Y)); + y += 40; + +// Reset section + add_subwindow(bar = new BC_Bar(x, y, get_w()-2*x)); + y += 10; + add_tool(reset = new CropReset(client, this, x, y)); + + show_window(); + flush(); +} + +void CropWin::update(int clear) +{ + switch(clear) { + case RESET_LEFT : + crop_left_text->update((float)client->config.crop_l); + crop_left_slider->update((float)client->config.crop_l); + break; + case RESET_TOP : + crop_top_text->update((float)client->config.crop_t); + crop_top_slider->update((float)client->config.crop_t); + break; + case RESET_RIGHT : + crop_right_text->update((float)client->config.crop_r); + crop_right_slider->update((float)client->config.crop_r); + break; + case RESET_BOTTOM : + crop_bottom_text->update((float)client->config.crop_b); + crop_bottom_slider->update((float)client->config.crop_b); + break; + case RESET_POSITION_X : + crop_position_x_text->update((float)client->config.position_x); + crop_position_x_slider->update((float)client->config.position_x); + break; + case RESET_POSITION_Y : + crop_position_y_text->update((float)client->config.position_y); + crop_position_y_slider->update((float)client->config.position_y); + break; + case RESET_ALL : + case RESET_DEFAULT_SETTINGS : + default: + crop_left_text->update((float)client->config.crop_l); + crop_left_slider->update((float)client->config.crop_l); + crop_top_text->update((float)client->config.crop_t); + crop_top_slider->update((float)client->config.crop_t); + crop_right_text->update((float)client->config.crop_r); + crop_right_slider->update((float)client->config.crop_r); + crop_bottom_text->update((float)client->config.crop_b); + crop_bottom_slider->update((float)client->config.crop_b); + + crop_position_x_text->update((float)client->config.position_x); + crop_position_x_slider->update((float)client->config.position_x); + crop_position_y_text->update((float)client->config.position_y); + crop_position_y_slider->update((float)client->config.position_y); + break; + } +} + + + + + + + +/* *********************************** */ +/* **** CROP LEFT ******************** */ +CropLeftText::CropLeftText(CropWin *win, + CropMain *client, + int x, + int y) + : BC_TumbleTextBox(win, + client->config.crop_l, + (float)0.00, + (float)100.00, + x, + y, + 60, 2) +{ + this->win = win; + this->client = client; +} + +CropLeftText::~CropLeftText() +{ +} + +int CropLeftText::handle_event() +{ + client->config.crop_l = atof(get_text()); + win->crop_left_slider->update(client->config.crop_l); + client->send_configure_change(); + return 1; +} + +CropLeftSlider::CropLeftSlider(CropWin *win, CropMain *client, + int x, int y, int w) + : BC_FSlider(x, y, 0, w, w, 0.00, 100.00, client->config.crop_l) +{ + this->win = win; + this->client = client; + enable_show_value(0); // Hide caption + set_precision(0.01); +} + +CropLeftSlider::~CropLeftSlider() +{ +} + +int CropLeftSlider::handle_event() +{ + client->config.crop_l = get_value(); + win->crop_left_text->update(client->config.crop_l); + win->update(RESET_ALL); + client->send_configure_change(); + return 1; +} +/* *********************************** */ + +/* *********************************** */ +/* **** CROP TOP ******************** */ +CropTopText::CropTopText(CropWin *win, + CropMain *client, + int x, + int y) + : BC_TumbleTextBox(win, + client->config.crop_t, + (float)0.00, + (float)100.00, + x, + y, + 60, 2) +{ + this->win = win; + this->client = client; +} + +CropTopText::~CropTopText() +{ +} + +int CropTopText::handle_event() +{ + client->config.crop_t = atof(get_text()); + win->crop_top_slider->update(client->config.crop_t); + client->send_configure_change(); + return 1; +} + +CropTopSlider::CropTopSlider(CropWin *win, CropMain *client, + int x, int y, int w) + : BC_FSlider(x, y, 0, w, w, 0.00, 100.00, client->config.crop_t) +{ + this->win = win; + this->client = client; + enable_show_value(0); // Hide caption + set_precision(0.01); +} + +CropTopSlider::~CropTopSlider() +{ +} + +int CropTopSlider::handle_event() +{ + client->config.crop_t = get_value(); + win->crop_top_text->update(client->config.crop_t); + win->update(RESET_ALL); + client->send_configure_change(); + return 1; +} +/* *********************************** */ + +/* *********************************** */ +/* **** CROP RIGHT ******************* */ +CropRightText::CropRightText(CropWin *win, CropMain *client, + int x, + int y) + : BC_TumbleTextBox(win, + client->config.crop_r, + (float)0.00, + (float)100.00, + x, + y, + 60, 2) +{ + this->win = win; + this->client = client; +} + +CropRightText::~CropRightText() +{ +} + +int CropRightText::handle_event() +{ + client->config.crop_r = atof(get_text()); + win->crop_right_slider->update(client->config.crop_r); + client->send_configure_change(); + return 1; +} + +CropRightSlider::CropRightSlider(CropWin *win, CropMain *client, + int x, int y, int w) + : BC_FSlider(x, y, 0, w, w, 0.00, 100.00, client->config.crop_r) +{ + this->win = win; + this->client = client; + enable_show_value(0); // Hide caption + set_precision(0.01); +} + +CropRightSlider::~CropRightSlider() +{ +} + +int CropRightSlider::handle_event() +{ + client->config.crop_r = get_value(); + win->crop_right_text->update(client->config.crop_r); + win->update(RESET_ALL); + client->send_configure_change(); + return 1; +} +/* *********************************** */ + +/* *********************************** */ +/* **** CROP BOTTOM ****************** */ +CropBottomText::CropBottomText(CropWin *win, CropMain *client, + int x, + int y) + : BC_TumbleTextBox(win, + client->config.crop_b, + (float)0.00, + (float)100.00, + x, + y, + 60, 2) +{ + this->win = win; + this->client = client; +} + +CropBottomText::~CropBottomText() +{ +} + +int CropBottomText::handle_event() +{ + client->config.crop_b = atof(get_text()); + win->crop_bottom_slider->update(client->config.crop_b); + client->send_configure_change(); + return 1; +} + +CropBottomSlider::CropBottomSlider(CropWin *win, CropMain *client, + int x, int y, int w) + : BC_FSlider(x, y, 0, w, w, 0.00, 100.00, client->config.crop_b) +{ + this->win = win; + this->client = client; + enable_show_value(0); // Hide caption + set_precision(0.01); +} + +CropBottomSlider::~CropBottomSlider() +{ +} + +int CropBottomSlider::handle_event() +{ + client->config.crop_b = get_value(); + win->crop_bottom_text->update(client->config.crop_b); + win->update(RESET_ALL); + client->send_configure_change(); + return 1; +} +/* *********************************** */ + +/* *********************************** */ +/* **** CROP POSITION X ************** */ +CropPositionXText::CropPositionXText(CropWin *win, CropMain *client, + int x, + int y) + : BC_TumbleTextBox(win, + client->config.position_x, + (float)-100.00, + (float)100.00, + x, + y, + 60, 2) +{ + this->win = win; + this->client = client; +} + +CropPositionXText::~CropPositionXText() +{ +} + +int CropPositionXText::handle_event() +{ + client->config.position_x = atof(get_text()); + win->crop_position_x_slider->update(client->config.position_x); + client->send_configure_change(); + return 1; +} + +CropPositionXSlider::CropPositionXSlider(CropWin *win, CropMain *client, + int x, int y, int w) + : BC_FSlider(x, y, 0, w, w, -100.00, 100.00, client->config.position_x) +{ + this->win = win; + this->client = client; + enable_show_value(0); // Hide caption + set_precision(0.01); +} + +CropPositionXSlider::~CropPositionXSlider() +{ +} + +int CropPositionXSlider::handle_event() +{ + client->config.position_x = get_value(); + win->crop_position_x_text->update(client->config.position_x); + win->update(RESET_ALL); + client->send_configure_change(); + return 1; +} +/* *********************************** */ + +/* *********************************** */ +/* **** CROP POSITION Y ************** */ +CropPositionYText::CropPositionYText(CropWin *win, CropMain *client, + int x, + int y) + : BC_TumbleTextBox(win, + client->config.position_y, + (float)-100.00, + (float)100.00, + x, + y, + 60, 2) +{ + this->win = win; + this->client = client; +} + +CropPositionYText::~CropPositionYText() +{ +} + +int CropPositionYText::handle_event() +{ + client->config.position_y = atof(get_text()); + win->crop_position_y_slider->update(client->config.position_y); + client->send_configure_change(); + return 1; +} + +CropPositionYSlider::CropPositionYSlider(CropWin *win, CropMain *client, + int x, int y, int w) + : BC_FSlider(x, y, 0, w, w, -100.00, 100.00, client->config.position_y) +{ + this->win = win; + this->client = client; + enable_show_value(0); // Hide caption + set_precision(0.01); +} + +CropPositionYSlider::~CropPositionYSlider() +{ +} + +int CropPositionYSlider::handle_event() +{ + client->config.position_y = get_value(); + win->crop_position_y_text->update(client->config.position_y); + win->update(RESET_ALL); + client->send_configure_change(); + return 1; +} +/* *********************************** */ + + +CropEdgesClr::CropEdgesClr(CropWin *win, CropMain *client, int x, int y, int clear) + : BC_Button(x, y, client->get_theme()->get_image_set("reset_button")) +{ + this->win = win; + this->client = client; + this->clear = clear; +} +CropEdgesClr::~CropEdgesClr() +{ +} +int CropEdgesClr::handle_event() +{ + client->config.reset(clear); + win->update(clear); + client->send_configure_change(); + return 1; +} + +CropReset::CropReset(CropMain *client, CropWin *win, int x, int y) + : BC_GenericButton(x, y, _("Reset")) +{ + this->client = client; + this->win = win; +} + +CropReset::~CropReset() +{ +} + +int CropReset::handle_event() +{ + client->config.reset(RESET_ALL); + win->update(RESET_ALL); + client->send_configure_change(); + return 1; +}