/*! \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
slider_color_TYPE_SAT,
slider_color_TYPE_A,
};
-
+
slider_color_func color_func(jump_table[int(type)]);
-
+
float amount;
switch(type)
{
}
if(use_colorspace_gamma() && (type<TYPE_U))
amount=gamma_in(amount);
-
+
const int height(get_height());
const int width(get_width());
Gdk::Rectangle ca(0,0,width,height);
-
+
Glib::RefPtr<Gdk::GC> gc(Gdk::GC::create(get_window()));
const Color bg1(0.75, 0.75, 0.75);
const Color bg2(0.5, 0.5, 0.5);
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() && (type<TYPE_U))
{
r1=(256*App::gamma.r_F32_to_U8(gamma_out(c1.get_r())));
g2=(256*App::gamma.g_F32_to_U8(c2.get_g()));
b2=(256*App::gamma.b_F32_to_U8(c2.get_b()));
}
-
-
+
+
if((i*2/height)&1)
{
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(), 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);
{
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,
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"));
case GDK_BUTTON_RELEASE:
signal_activated_();
return true;
-
+
case GDK_MOTION_NOTIFY:
// adjust_color(type,color_,pos);
signal_slider_moved_(type,pos);
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);
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)); \
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);
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));
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());
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);
+}
+
+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);
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();
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;
}
color.set_a(A_adjustment.get_value()/100);
assert(color.is_valid());
-
+
return color;
}
}
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;
}