X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fwidget_coloredit.cpp;h=5e3175a4989d83b826da24bdc20b194ea6e76fb0;hb=9459638ad6797b8139f1e9f0715c96076dbf0890;hp=527481277d703eabea02c59652a04dea1fc4dba0;hpb=e94afbea92edb78826bff981ddc84b0757b2550f;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/widget_coloredit.cpp b/synfig-studio/trunk/src/gtkmm/widget_coloredit.cpp index 5274812..5e3175a 100644 --- a/synfig-studio/trunk/src/gtkmm/widget_coloredit.cpp +++ b/synfig-studio/trunk/src/gtkmm/widget_coloredit.cpp @@ -6,6 +6,8 @@ ** ** \legal ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2007 Chris Moore +** Copyright (c) 2008 Paul Wise ** ** 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 +41,8 @@ #include #include +#include "general.h" + #endif /* === U S I N G =========================================================== */ @@ -50,6 +54,8 @@ using namespace studio; /* === M A C R O S ========================================================= */ +#define SPINBUTTON_WIDTH 100 + /* === G L O B A L S ======================================================= */ /* === P R O C E D U R E S ================================================= */ @@ -69,29 +75,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)] = { @@ -208,8 +214,43 @@ ColorSlider::redraw(GdkEventExpose */*bleh*/) bool ColorSlider::on_event(GdkEvent *event) { - float pos(event->button.x/(float)get_width()); - if(pos<0 || event->button.x<=0)pos=0; + const int width(get_width()); + float x = 0; + if( GDK_SCROLL == event->type ){ + Color color(color_); + float amount; + switch(type) + { + case TYPE_R: amount=color.get_r(); break; + case TYPE_G: amount=color.get_g(); break; + case TYPE_B: amount=color.get_b(); break; + case TYPE_Y: amount=color.get_y(); break; + case TYPE_U: amount=color.get_u()+0.5; break; + case TYPE_V: amount=color.get_v()+0.5; break; + case TYPE_HUE: amount=Angle::rot(color.get_uv_angle()).get(); amount-=floor(amount); break; + case TYPE_SAT: amount=color.get_s()*2.0; break; + case TYPE_A: amount=color.get_a(); break; + default: amount=0; break; + } + if(use_colorspace_gamma() && (typescroll.direction){ + case GDK_SCROLL_UP: + case GDK_SCROLL_RIGHT: + x+=1.0; + break; + case GDK_SCROLL_DOWN: + case GDK_SCROLL_LEFT: + x-=1.0; + break; + } + } else { + x = float(event->button.x); + } + + float pos(x/width); + if(pos<0 || x<=0)pos=0; if(pos>1)pos=1; if(use_colorspace_gamma() && (typetype) { + case GDK_SCROLL: + signal_slider_moved_(type,pos); + queue_draw(); + signal_activated_(); + return true; + case GDK_BUTTON_RELEASE: signal_activated_(); return true; + case GDK_BUTTON_PRESS: case GDK_MOTION_NOTIFY: // adjust_color(type,color_,pos); signal_slider_moved_(type,pos); @@ -260,7 +308,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; @@ -297,7 +345,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) @@ -350,6 +398,7 @@ Widget_ColorEdit::Widget_ColorEdit(): show_all_children(); + set_digits(1); set_value(color); hold_signals=false; @@ -425,10 +474,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 @@ -438,10 +487,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