X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fwidget_coloredit.cpp;h=2d7940ef6402e9bfadbcc1e53fef6598037f362f;hb=37600b4b217caa5e316984ec0b035c5e8f9698af;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..2d7940e 100644 --- a/synfig-studio/trunk/src/gtkmm/widget_coloredit.cpp +++ b/synfig-studio/trunk/src/gtkmm/widget_coloredit.cpp @@ -2,10 +2,11 @@ /*! \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 +** Copyright (c) 2007 Chris Moore ** ** This package is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License as @@ -50,11 +51,6 @@ using namespace studio; /* === M A C R O S ========================================================= */ -#define use_colorspace_gamma() App::use_colorspace_gamma -#define colorspace_gamma() (2.2f) -#define gamma_in(x) ((x>=0)?pow((float)x,1.0f/colorspace_gamma()):-pow((float)-x,1.0f/colorspace_gamma())) -#define gamma_out(x) ((x>=0)?pow((float)x,colorspace_gamma()):-pow((float)-x,colorspace_gamma())) - /* === G L O B A L S ======================================================= */ /* === P R O C E D U R E S ================================================= */ @@ -114,7 +110,7 @@ ColorSlider::adjust_color(Type type, Color &color, float amount) } bool -ColorSlider::redraw(GdkEventExpose*bleh) +ColorSlider::redraw(GdkEventExpose */*bleh*/) { Color color(color_); @@ -130,9 +126,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,74 +145,45 @@ 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); - Gdk::Color gdk_c; int i; for(i=width-1;i>=0;i--) { - color_func(color,float(i)/float(width)); + color_func(color, + (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); - - gdk_c.set_rgb(r2,g2,b2); - gc->set_rgb_fg_color(gdk_c); + gc->set_rgb_fg_color(colorconv_synfig2gdk(c1)); + get_window()->draw_rectangle(gc, true, ca.get_x()+i, ca.get_y(), 1, height/2); + + gc->set_rgb_fg_color(colorconv_synfig2gdk(c2)); get_window()->draw_rectangle(gc, true, ca.get_x()+i, ca.get_y()+height/2, 1, height/2); } else { - 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); - - gdk_c.set_rgb(r1,g1,b1); - gc->set_rgb_fg_color(gdk_c); + gc->set_rgb_fg_color(colorconv_synfig2gdk(c2)); + get_window()->draw_rectangle(gc, true, ca.get_x()+i, ca.get_y(), 1, height/2); + + gc->set_rgb_fg_color(colorconv_synfig2gdk(c1)); 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 +198,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 +223,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 +245,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 +262,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 +310,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 +335,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 +364,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 +380,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 +412,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 +477,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 +492,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 +524,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; }