Author: Carlos Lopez <[email protected]>
Date: Wed Mar 28 00:12:20 2012 +0200
Improve constrast on color sliders for Color Edit and Gradient Edit widgets.
Patch thanks to Bertrand Gregoire
---
synfig-studio/src/gui/widgets/widget_coloredit.cpp | 6 +++-
synfig-studio/src/gui/widgets/widget_coloredit.h | 2 +-
synfig-studio/src/gui/widgets/widget_gradient.cpp | 27 ++++++++++++++++---
3 files changed, 27 insertions(+), 8 deletions(-)
diff --git a/synfig-studio/src/gui/widgets/widget_coloredit.cpp
b/synfig-studio/src/gui/widgets/widget_coloredit.cpp
index 3657052..72b0656 100644
--- a/synfig-studio/src/gui/widgets/widget_coloredit.cpp
+++ b/synfig-studio/src/gui/widgets/widget_coloredit.cpp
@@ -55,6 +55,7 @@ using namespace studio;
/* === M A C R O S ========================================================= */
#define SPINBUTTON_WIDTH 100
+#define ARROW_NEGATIVE_THRESHOLD 0.4
/* === G L O B A L S ======================================================= */
@@ -75,7 +76,7 @@ void
ColorSlider::set_type(Type x) { type=x; queue_draw(); }
void
-ColorSlider::set_color(synfig::Color x) { color_=x; queue_draw(); }
+ColorSlider::set_color(synfig::Color x) { orig_color=x; color_=x;
queue_draw(); }
void
ColorSlider::slider_color_TYPE_R(synfig::Color &color, float amount) {
color.set_r(amount); }
@@ -191,7 +192,8 @@ ColorSlider::redraw(GdkEventExpose */*bleh*/)
get_style()->paint_arrow(
get_window(),
- Gtk::STATE_SELECTED,
+
(orig_color.get_y()<ARROW_NEGATIVE_THRESHOLD)?Gtk::STATE_SELECTED:Gtk::STATE_ACTIVE,
+ //use light arrow on dark color, and dark arrow on light color
, TODO: detect from style which is darkest from SELECTED or ACTIVE
Gtk::SHADOW_OUT,
ca,
*this,
diff --git a/synfig-studio/src/gui/widgets/widget_coloredit.h
b/synfig-studio/src/gui/widgets/widget_coloredit.h
index bb9c71d..7152b6d 100644
--- a/synfig-studio/src/gui/widgets/widget_coloredit.h
+++ b/synfig-studio/src/gui/widgets/widget_coloredit.h
@@ -71,7 +71,7 @@ private:
sigc::signal<void> signal_activated_;
Type type;
- synfig::Color color_;
+ synfig::Color color_, orig_color;
public:
diff --git a/synfig-studio/src/gui/widgets/widget_gradient.cpp
b/synfig-studio/src/gui/widgets/widget_gradient.cpp
index ccbc94e..a3a5ad1 100644
--- a/synfig-studio/src/gui/widgets/widget_gradient.cpp
+++ b/synfig-studio/src/gui/widgets/widget_gradient.cpp
@@ -49,6 +49,8 @@ using namespace studio;
/* === M A C R O S ========================================================= */
+#define ARROW_NEGATIVE_THRESHOLD 0.4
+
/* === G L O B A L S ======================================================= */
/* === P R O C E D U R E S ================================================= */
@@ -135,11 +137,9 @@ Widget_Gradient::redraw(GdkEventExpose */*bleh*/)
return true;
}
-
render_gradient_to_window(get_window(),Gdk::Rectangle(0,0,w,h-CONTROL_HEIGHT),gradient_);
+
render_gradient_to_window(get_window(),Gdk::Rectangle(0,0,w,h),gradient_);
gc->set_rgb_fg_color(Gdk::Color("#7f7f7f"));
- get_window()->draw_rectangle(gc, false, 0, h-CONTROL_HEIGHT, w,
CONTROL_HEIGHT);
-
Gradient::iterator iter,selected_iter;
bool show_selected(false);
for(iter=gradient_.begin();iter!=gradient_.end();iter++)
@@ -147,7 +147,7 @@ Widget_Gradient::redraw(GdkEventExpose */*bleh*/)
if(*iter!=selected_cpoint)
get_style()->paint_arrow(
get_window(),
-
(*iter==selected_cpoint)?Gtk::STATE_SELECTED:Gtk::STATE_ACTIVE,
+
(iter->color.get_y()<ARROW_NEGATIVE_THRESHOLD)?Gtk::STATE_SELECTED:Gtk::STATE_ACTIVE,
//use light arrow on dark color, and dark arrow on light color , todo detect
from style which is darkest from SELECTED or ACTIVE, here SELECTED is lighter.
Gtk::SHADOW_OUT,
area,
*this,
@@ -168,11 +168,14 @@ Widget_Gradient::redraw(GdkEventExpose */*bleh*/)
// we do this so that we can be sure that
// the selected marker is shown on top
+ // show 2 arrows for selected, to compensate for lack of contrast in some
color schemes, such as ubuntu default theme
+ // Gtk::STATE_SELECTED was used, but resulted in a barely visible arrow in
some color scheme, hence double arrow with contrasting color
+
if(show_selected)
{
get_style()->paint_arrow(
get_window(),
- Gtk::STATE_SELECTED,
+
(selected_iter->color.get_y()<ARROW_NEGATIVE_THRESHOLD)?Gtk::STATE_SELECTED:Gtk::STATE_ACTIVE,
//use light arrow on dark color, and dark arrow on light color , todo detect
from style which is darkest from SELECTED or ACTIVE
Gtk::SHADOW_OUT,
area,
*this,
@@ -183,6 +186,20 @@ Widget_Gradient::redraw(GdkEventExpose */*bleh*/)
h-CONTROL_HEIGHT,
CONTROL_HEIGHT,
CONTROL_HEIGHT
+ ); // paint_arrow(window, state_type, shadow_type, area,
widget, detail, arrow_type, fill, x, y, width, height)
+ get_style()->paint_arrow(
+ get_window(),
+
(selected_iter->color.get_y()<ARROW_NEGATIVE_THRESHOLD)?Gtk::STATE_SELECTED:Gtk::STATE_ACTIVE,
//use light arrow on dark color, and dark arrow on light color , todo detect
from style which is darkest from SELECTED or ACTIVE
+ Gtk::SHADOW_OUT,
+ area,
+ *this,
+ " ",
+ Gtk::ARROW_UP,
+ 1,
+ round_to_int(selected_iter->pos*w)-CONTROL_HEIGHT/2+1,
+ h-CONTROL_HEIGHT*1.3,
+ CONTROL_HEIGHT,
+ CONTROL_HEIGHT
);
}
------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
Synfig-devl mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/synfig-devl