X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fwidget_coloredit.cpp;h=6c3b39fd5d4aa02f1cb79fe2f14dc19366c701a8;hb=197d6d1c81c6dec1b762af182cadcfc7404823e6;hp=1e6c7d2d2e11eb87acc9ae36845e434a9d30109b;hpb=837b63e9fb829d66d43f4f169861f8979f76820d;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/widget_coloredit.cpp b/synfig-studio/trunk/src/gtkmm/widget_coloredit.cpp index 1e6c7d2..6c3b39f 100644 --- a/synfig-studio/trunk/src/gtkmm/widget_coloredit.cpp +++ b/synfig-studio/trunk/src/gtkmm/widget_coloredit.cpp @@ -6,6 +6,7 @@ ** ** \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 @@ -39,6 +40,8 @@ #include #include +#include "general.h" + #endif /* === U S I N G =========================================================== */ @@ -50,10 +53,7 @@ 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())) +#define SPINBUTTON_WIDTH 100 /* === G L O B A L S ======================================================= */ @@ -74,29 +74,29 @@ void ColorSlider::set_type(Type x) { type=x; queue_draw(); } void -ColorSlider::set_color(Color x) { color_=x; queue_draw(); } +ColorSlider::set_color(synfig::Color x) { color_=x; queue_draw(); } void -ColorSlider::slider_color_TYPE_R(Color &color, float amount) { color.set_r(amount); } +ColorSlider::slider_color_TYPE_R(synfig::Color &color, float amount) { color.set_r(amount); } void -ColorSlider::slider_color_TYPE_G(Color &color, float amount) { color.set_g(amount); } +ColorSlider::slider_color_TYPE_G(synfig::Color &color, float amount) { color.set_g(amount); } void -ColorSlider::slider_color_TYPE_B(Color &color, float amount) { color.set_b(amount); } +ColorSlider::slider_color_TYPE_B(synfig::Color &color, float amount) { color.set_b(amount); } void -ColorSlider::slider_color_TYPE_Y(Color &color, float amount) { color.set_y(amount); } +ColorSlider::slider_color_TYPE_Y(synfig::Color &color, float amount) { color.set_y(amount); } void -ColorSlider::slider_color_TYPE_U(Color &color, float amount) { color.set_u(amount-0.5f); } +ColorSlider::slider_color_TYPE_U(synfig::Color &color, float amount) { color.set_u(amount-0.5f); } void -ColorSlider::slider_color_TYPE_V(Color &color, float amount) { color.set_v(amount-0.5f); } +ColorSlider::slider_color_TYPE_V(synfig::Color &color, float amount) { color.set_v(amount-0.5f); } void -ColorSlider::slider_color_TYPE_HUE(Color &color, float amount) { color.set_uv_angle(Angle::rot(amount)); } +ColorSlider::slider_color_TYPE_HUE(synfig::Color &color, float amount) { color.set_uv_angle(Angle::rot(amount)); } void -ColorSlider::slider_color_TYPE_SAT(Color &color, float amount) { color.set_s(amount*0.5f); } +ColorSlider::slider_color_TYPE_SAT(synfig::Color &color, float amount) { color.set_s(amount*0.5f); } void -ColorSlider::slider_color_TYPE_A(Color &color, float amount) { color.set_a(amount); } +ColorSlider::slider_color_TYPE_A(synfig::Color &color, float amount) { color.set_a(amount); } void -ColorSlider::adjust_color(Type type, Color &color, float amount) +ColorSlider::adjust_color(Type type, synfig::Color &color, float amount) { static const slider_color_func jump_table[int(TYPE_END)] = { @@ -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_); @@ -158,61 +158,32 @@ ColorSlider::redraw(GdkEventExpose*bleh) Glib::RefPtr 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); + gc->set_rgb_fg_color(colorconv_synfig2gdk(c1)); 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(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); + gc->set_rgb_fg_color(colorconv_synfig2gdk(c2)); 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(c1)); get_window()->draw_rectangle(gc, true, ca.get_x()+i, ca.get_y()+height/2, 1, height/2); } } @@ -294,7 +265,7 @@ Widget_ColorEdit::Widget_ColorEdit(): color=Color(0,0,0,0); - set_size_request(150,-1); + set_size_request(200,-1); hold_signals=true; Gtk::Label *label; @@ -331,7 +302,7 @@ Widget_ColorEdit::Widget_ColorEdit(): #define ATTACH_SPIN_BUTTON(i,n) \ spinbutton_##n=manage(new class Gtk::SpinButton(n##_adjustment,1,0)); \ spinbutton_##n->set_update_policy(Gtk::UPDATE_ALWAYS); \ - spinbutton_##n->set_size_request(48,-1); \ + spinbutton_##n->set_size_request(SPINBUTTON_WIDTH,-1); \ spinbutton_##n->show(); \ table->attach(*spinbutton_##n, 1, 2, 1+2*i, 3+2*i, Gtk::SHRINK, Gtk::EXPAND, 2, 0) @@ -343,6 +314,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); @@ -373,6 +355,7 @@ Widget_ColorEdit::Widget_ColorEdit(): show_all_children(); + set_digits(1); set_value(color); hold_signals=false; @@ -408,6 +391,16 @@ Widget_ColorEdit::on_slider_moved(ColorSlider::Type type, float amount) } 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) @@ -424,6 +417,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(); @@ -437,10 +431,10 @@ Widget_ColorEdit::set_has_frame(bool x) spinbutton_G->set_has_frame(x); spinbutton_B->set_has_frame(x); spinbutton_A->set_has_frame(x); - spinbutton_R->set_size_request(48,-1); - spinbutton_G->set_size_request(48,-1); - spinbutton_B->set_size_request(48,-1); - spinbutton_A->set_size_request(48,-1); + spinbutton_R->set_size_request(SPINBUTTON_WIDTH,-1); + spinbutton_G->set_size_request(SPINBUTTON_WIDTH,-1); + spinbutton_B->set_size_request(SPINBUTTON_WIDTH,-1); + spinbutton_A->set_size_request(SPINBUTTON_WIDTH,-1); } void @@ -450,10 +444,10 @@ Widget_ColorEdit::set_digits(int x) spinbutton_G->set_digits(x); spinbutton_B->set_digits(x); spinbutton_A->set_digits(x); - spinbutton_R->set_size_request(48,-1); - spinbutton_G->set_size_request(48,-1); - spinbutton_B->set_size_request(48,-1); - spinbutton_A->set_size_request(48,-1); + spinbutton_R->set_size_request(SPINBUTTON_WIDTH,-1); + spinbutton_G->set_size_request(SPINBUTTON_WIDTH,-1); + spinbutton_B->set_size_request(SPINBUTTON_WIDTH,-1); + spinbutton_A->set_size_request(SPINBUTTON_WIDTH,-1); } void @@ -488,6 +482,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,14 +497,12 @@ 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());