X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Fsrc%2Fgtkmm%2Fdialog_color.cpp;fp=synfig-studio%2Fsrc%2Fgtkmm%2Fdialog_color.cpp;h=6953a75488338f6f7b1e2d9f669fc6a6114e92c0;hb=a095981e18cc37a8ecc7cd237cc22b9c10329264;hp=0000000000000000000000000000000000000000;hpb=9459638ad6797b8139f1e9f0715c96076dbf0890;p=synfig.git diff --git a/synfig-studio/src/gtkmm/dialog_color.cpp b/synfig-studio/src/gtkmm/dialog_color.cpp new file mode 100644 index 0000000..6953a75 --- /dev/null +++ b/synfig-studio/src/gtkmm/dialog_color.cpp @@ -0,0 +1,155 @@ +/* === S Y N F I G ========================================================= */ +/*! \file dialog_color.cpp +** \brief Template File +** +** $Id$ +** +** \legal +** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** +** This package 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 package 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. +** \endlegal +*/ +/* ========================================================================= */ + +/* === H E A D E R S ======================================================= */ + +#ifdef USING_PCH +# include "pch.h" +#else +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "dialog_color.h" +#include "widget_color.h" +#include +#include +#include +#include "app.h" + +#include "general.h" + +#endif + +/* === U S I N G =========================================================== */ + +using namespace std; +using namespace etl; +using namespace synfig; +using namespace studio; + +/* === M A C R O S ========================================================= */ + +/* === G L O B A L S ======================================================= */ + +/* === P R O C E D U R E S ================================================= */ + +/* === M E T H O D S ======================================================= */ + +Dialog_Color::Dialog_Color(): + Dialog(_("Colors"), false, true), + dialog_settings(this, "color"), + busy_(false) +{ + set_type_hint(Gdk::WINDOW_TYPE_HINT_UTILITY); + + create_color_edit_widget(); + create_set_color_button("synfig-set_outline_color", _("Set as Outline"), 0, + sigc::mem_fun(*this, &Dialog_Color::on_set_oc_pressed)); + create_set_color_button("synfig-set_fill_color", _("Set as Fill"), 1, + sigc::mem_fun(*this, &Dialog_Color::on_set_fc_pressed)); + create_close_button(); + + add_accel_group(App::ui_manager()->get_accel_group()); + show_all_children(); +} + +Dialog_Color::~Dialog_Color() +{ +} + +void +Dialog_Color::create_color_edit_widget() +{ + color_edit_widget = manage(new Widget_ColorEdit()); + color_edit_widget->signal_value_changed().connect(sigc::mem_fun(*this, + &studio::Dialog_Color::on_color_changed)); + get_vbox()->pack_start(*color_edit_widget); +} + +void +Dialog_Color::create_set_color_button(const char *stock_id, + const Glib::ustring& tip_text, int index, + const sigc::slot0& callback) +{ + Gtk::Button *set_color_button = manage(new Gtk::Button()); + Gtk::Image *set_color_icon = manage(new Gtk::Image(Gtk::StockID(stock_id), + Gtk::IconSize::IconSize(Gtk::ICON_SIZE_BUTTON))); + set_color_button->add(*set_color_icon); + set_color_icon->show(); + tooltips.set_tip(*set_color_button, tip_text); + set_color_button->show(); + add_action_widget(*set_color_button, index); + set_color_button->signal_clicked().connect(callback); +} + +void +Dialog_Color::create_close_button() +{ + Gtk::Button *close_button(manage(new Gtk::Button(Gtk::StockID("gtk-close")))); + close_button->show(); + add_action_widget(*close_button, 2); + close_button->signal_clicked().connect(sigc::hide_return(sigc::mem_fun(*this, + &Dialog_Color::on_close_pressed))); + signal_delete_event().connect(sigc::hide(sigc::mem_fun(*this, + &Dialog_Color::on_close_pressed))); +} + +void +Dialog_Color::on_color_changed() +{ + busy_ = true; + signal_edited_(get_color()); + busy_ = false; +} + +void +Dialog_Color::on_set_oc_pressed() +{ + busy_ = true; + synfigapp::Main::set_outline_color(get_color()); + busy_ = false; +} + +void +Dialog_Color::on_set_fc_pressed() +{ + busy_ = true; + synfigapp::Main::set_fill_color(get_color()); + busy_ = false; +} + +bool +Dialog_Color::on_close_pressed() +{ + busy_ = false; + grab_focus(); + reset(); + hide(); + return true; +} + +void +Dialog_Color::reset() +{ + signal_edited_.clear(); +}