X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fwidget_coloredit.cpp;h=ac852607ac9b0d1e4aa9af58a035ee5105cbf37f;hb=c3ad95144d148602f672e95ddda1f18fc35502f8;hp=ded67eb7194d4f6a25d3a3f3fffa24559631b055;hpb=ce408de81ca266b1f334ee9bc6c8fb7ba1492ed4;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/widget_coloredit.cpp b/synfig-studio/trunk/src/gtkmm/widget_coloredit.cpp index ded67eb..ac85260 100644 --- a/synfig-studio/trunk/src/gtkmm/widget_coloredit.cpp +++ b/synfig-studio/trunk/src/gtkmm/widget_coloredit.cpp @@ -2,7 +2,7 @@ /*! \file widget_coloredit.cpp ** \brief Template File ** -** $Id: widget_coloredit.cpp,v 1.1.1.1 2005/01/07 03:34:37 darco Exp $ +** $Id$ ** ** \legal ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley @@ -114,7 +114,7 @@ ColorSlider::adjust_color(Type type, Color &color, float amount) } bool -ColorSlider::redraw(GdkEventExpose*bleh) +ColorSlider::redraw(GdkEventExpose */*bleh*/) { Color color(color_); @@ -130,9 +130,9 @@ ColorSlider::redraw(GdkEventExpose*bleh) slider_color_TYPE_SAT, slider_color_TYPE_A, }; - + slider_color_func color_func(jump_table[int(type)]); - + float amount; switch(type) { @@ -149,12 +149,12 @@ ColorSlider::redraw(GdkEventExpose*bleh) } if(use_colorspace_gamma() && (type gc(Gdk::GC::create(get_window())); const Color bg1(0.75, 0.75, 0.75); const Color bg2(0.5, 0.5, 0.5); @@ -167,14 +167,14 @@ ColorSlider::redraw(GdkEventExpose*bleh) const Color c2(Color::blend(color,bg2,1.0).clamped()); assert(c1.is_valid()); assert(c2.is_valid()); - + gushort r1; gushort g1; gushort b1; gushort r2; gushort g2; gushort b2; - + if(use_colorspace_gamma() && (typeset_rgb_fg_color(gdk_c); - get_window()->draw_rectangle(gc, true, ca.get_x()+i, ca.get_y(), 1, height/2); - + get_window()->draw_rectangle(gc, true, ca.get_x()+i, ca.get_y(), 1, height/2); + gdk_c.set_rgb(r2,g2,b2); gc->set_rgb_fg_color(gdk_c); get_window()->draw_rectangle(gc, true, ca.get_x()+i, ca.get_y()+height/2, 1, height/2); @@ -209,14 +209,14 @@ ColorSlider::redraw(GdkEventExpose*bleh) { gdk_c.set_rgb(r2,g2,b2); gc->set_rgb_fg_color(gdk_c); - get_window()->draw_rectangle(gc, true, ca.get_x()+i, ca.get_y(), 1, height/2); - + get_window()->draw_rectangle(gc, true, ca.get_x()+i, ca.get_y(), 1, height/2); + gdk_c.set_rgb(r1,g1,b1); gc->set_rgb_fg_color(gdk_c); get_window()->draw_rectangle(gc, true, ca.get_x()+i, ca.get_y()+height/2, 1, height/2); } } - + get_style()->paint_arrow( get_window(), Gtk::STATE_SELECTED, @@ -231,7 +231,7 @@ ColorSlider::redraw(GdkEventExpose*bleh) height, height ); - + gc->set_rgb_fg_color(Gdk::Color("#ffffff")); get_window()->draw_rectangle(gc, false, ca.get_x()+1, ca.get_y()+1, width-3, height-3); gc->set_rgb_fg_color(Gdk::Color("#000000")); @@ -256,7 +256,7 @@ ColorSlider::on_event(GdkEvent *event) case GDK_BUTTON_RELEASE: signal_activated_(); return true; - + case GDK_MOTION_NOTIFY: // adjust_color(type,color_,pos); signal_slider_moved_(type,pos); @@ -278,7 +278,7 @@ Widget_ColorEdit::Widget_ColorEdit(): A_adjustment(0,-10000000,10000000,1,10,0) { notebook=manage(new Gtk::Notebook); - + Gtk::Table* rgb_table(manage(new Gtk::Table())); Gtk::Table* yuv_table(manage(new Gtk::Table())); Gtk::Table* main_table(this); @@ -295,27 +295,27 @@ Widget_ColorEdit::Widget_ColorEdit(): color=Color(0,0,0,0); set_size_request(150,-1); - hold_signals=true; + hold_signals=true; Gtk::Label *label; - + R_adjustment.set_lower(-10000000); G_adjustment.set_lower(-10000000); B_adjustment.set_lower(-10000000); A_adjustment.set_lower(-10000000); - + clamp_=true; - + Pango::AttrList attr_list; Pango::AttrInt pango_size(Pango::Attribute::create_attr_size(Pango::SCALE*7)); pango_size.set_start_index(0); pango_size.set_end_index(64); attr_list.change(pango_size); - + widget_color.set_size_request(-1,16); attach(widget_color, 0, 2, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0); attach(*notebook, 0, 2, 1, 2, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0); - + #define SLIDER_ROW(i,n,l) \ slider_##n=manage(new ColorSlider(ColorSlider::TYPE_##n)); \ slider_##n->signal_slider_moved().connect(sigc::mem_fun(*this,&studio::Widget_ColorEdit::on_slider_moved)); \ @@ -343,6 +343,17 @@ Widget_ColorEdit::Widget_ColorEdit(): ATTACH_SPIN_BUTTON(1,G); SLIDER_ROW(2,B,_("Blue")); ATTACH_SPIN_BUTTON(2,B); + + hex_color_label = manage(new Gtk::Label(_("HTML code"), 0.0, 0.5)); + hex_color_label->set_use_markup(false); + hex_color_label->set_use_underline(false); + hex_color_label->set_attributes(attr_list); + table->attach(*hex_color_label, 0, 1, 7, 8, Gtk::SHRINK, Gtk::SHRINK, 0, 0); + + hex_color = manage(new Gtk::Entry()); + hex_color->set_width_chars(8); + hex_color->signal_activate().connect(sigc::mem_fun(*this,&studio::Widget_ColorEdit::on_hex_edited)); + table->attach(*hex_color, 0, 1, 8, 9, Gtk::SHRINK, Gtk::SHRINK, 0, 0); } { Gtk::Table* table(yuv_table); @@ -357,10 +368,10 @@ Widget_ColorEdit::Widget_ColorEdit(): SLIDER_ROW(1,A,_("Alpha")); ATTACH_SPIN_BUTTON(1,A); } - + #undef SLIDER_ROW -#undef ATTACH_SPIN_BUTTON - +#undef ATTACH_SPIN_BUTTON + spinbutton_R->signal_activate().connect(sigc::mem_fun(*spinbutton_G,&Gtk::SpinButton::grab_focus)); spinbutton_G->signal_activate().connect(sigc::mem_fun(*spinbutton_B,&Gtk::SpinButton::grab_focus)); spinbutton_B->signal_activate().connect(sigc::mem_fun(*spinbutton_A,&Gtk::SpinButton::grab_focus)); @@ -386,7 +397,7 @@ void Widget_ColorEdit::on_slider_moved(ColorSlider::Type type, float amount) { Color color(get_value_raw()); - + assert(color.is_valid()); ColorSlider::adjust_color(type,color,amount); assert(color.is_valid()); @@ -402,17 +413,27 @@ Widget_ColorEdit::on_slider_moved(ColorSlider::Type type, float amount) if(type==ColorSlider::TYPE_B && color.get_b()<0)clamp_=false; */ clamp_=false; - + set_value(color); assert(color.is_valid()); } void +Widget_ColorEdit::on_hex_edited() +{ + Color color(get_value_raw()); + String s = hex_color->get_text(); + color.set_hex(s); + set_value(color); + signal_value_changed_(); +} + +void Widget_ColorEdit::on_value_changed() { if(hold_signals) return; - + const Color color(get_value_raw()); assert(color.is_valid()); slider_R->set_color(color); @@ -424,6 +445,7 @@ Widget_ColorEdit::on_value_changed() slider_HUE->set_color(color); slider_SAT->set_color(color); slider_A->set_color(color); + hex_color->set_text(color.get_hex()); widget_color.set_value(color); activate(); @@ -488,6 +510,7 @@ Widget_ColorEdit::set_value(const synfig::Color &data) slider_HUE->set_color(color); slider_SAT->set_color(color); slider_A->set_color(color); + hex_color->set_text(color.get_hex()); widget_color.set_value(color); hold_signals=false; @@ -502,18 +525,16 @@ Widget_ColorEdit::get_value_raw() color.set_r(gamma_out(R_adjustment.get_value()/100.0f)); color.set_g(gamma_out(G_adjustment.get_value()/100.0f)); color.set_b(gamma_out(B_adjustment.get_value()/100.0f)); - assert(color.is_valid()); } else { color.set_r(R_adjustment.get_value()/100); color.set_g(G_adjustment.get_value()/100); color.set_b(B_adjustment.get_value()/100); - assert(color.is_valid()); } color.set_a(A_adjustment.get_value()/100); assert(color.is_valid()); - + return color; } @@ -536,16 +557,16 @@ Widget_ColorEdit::get_value() } color.set_a(A_adjustment.get_value()/100); assert(color.is_valid()); - + if(notebook->get_current_page()!=0) color=color.clamped(); - + /*{ // Clamp out negative values color.set_r(std::max(0.0f,(float)color.get_r())); color.set_g(std::max(0.0f,(float)color.get_g())); color.set_b(std::max(0.0f,(float)color.get_b())); }*/ - + return color; }