summaryrefslogtreecommitdiffstats
path: root/src/widgets/sp-color-slider.cpp
diff options
context:
space:
mode:
authorMartin Owens <doctormo@gmail.com>2014-03-27 01:33:44 +0000
committerMartin Owens <doctormo@gmail.com>2014-03-27 01:33:44 +0000
commit5a4fb2325f60d292b47330f540b26a3279341c90 (patch)
treed2aa7967be25450b83e625025366c618101ae49f /src/widgets/sp-color-slider.cpp
parentThe Polar Arrange Tab of the Arrange Dialog now hides the parametric (diff)
parentRemove Snap menu item and improve grid menu item text (diff)
downloadinkscape-5a4fb2325f60d292b47330f540b26a3279341c90.tar.gz
inkscape-5a4fb2325f60d292b47330f540b26a3279341c90.zip
Commit a merge to trunk, with probabal errors
(bzr r11073.1.36)
Diffstat (limited to 'src/widgets/sp-color-slider.cpp')
-rw-r--r--src/widgets/sp-color-slider.cpp394
1 files changed, 194 insertions, 200 deletions
diff --git a/src/widgets/sp-color-slider.cpp b/src/widgets/sp-color-slider.cpp
index 3b690afc9..9b13ba1c5 100644
--- a/src/widgets/sp-color-slider.cpp
+++ b/src/widgets/sp-color-slider.cpp
@@ -28,7 +28,7 @@ enum {
static void sp_color_slider_class_init (SPColorSliderClass *klass);
static void sp_color_slider_init (SPColorSlider *slider);
-static void sp_color_slider_destroy (GtkObject *object);
+static void sp_color_slider_dispose(GObject *object);
static void sp_color_slider_realize (GtkWidget *widget);
static void sp_color_slider_size_request (GtkWidget *widget, GtkRequisition *requisition);
@@ -41,14 +41,14 @@ static void sp_color_slider_get_preferred_width(GtkWidget *widget,
static void sp_color_slider_get_preferred_height(GtkWidget *widget,
gint *minimal_height,
gint *natural_height);
+#else
+static gboolean sp_color_slider_expose(GtkWidget *widget, GdkEventExpose *event);
#endif
static void sp_color_slider_size_allocate (GtkWidget *widget, GtkAllocation *allocation);
-/* static void sp_color_slider_draw (GtkWidget *widget, GdkRectangle *area); */
-/* static void sp_color_slider_draw_focus (GtkWidget *widget); */
-/* static void sp_color_slider_draw_default (GtkWidget *widget); */
-static gint sp_color_slider_expose (GtkWidget *widget, GdkEventExpose *event);
+static gboolean sp_color_slider_draw(GtkWidget *widget, cairo_t *cr);
+
static gint sp_color_slider_button_press (GtkWidget *widget, GdkEventButton *event);
static gint sp_color_slider_button_release (GtkWidget *widget, GdkEventButton *event);
static gint sp_color_slider_motion_notify (GtkWidget *widget, GdkEventMotion *event);
@@ -56,7 +56,6 @@ static gint sp_color_slider_motion_notify (GtkWidget *widget, GdkEventMotion *ev
static void sp_color_slider_adjustment_changed (GtkAdjustment *adjustment, SPColorSlider *slider);
static void sp_color_slider_adjustment_value_changed (GtkAdjustment *adjustment, SPColorSlider *slider);
-static void sp_color_slider_paint (SPColorSlider *slider, GdkRectangle *area);
static const guchar *sp_color_slider_render_gradient (gint x0, gint y0, gint width, gint height,
gint c[], gint dc[], guint b0, guint b1, guint mask);
static const guchar *sp_color_slider_render_map (gint x0, gint y0, gint width, gint height,
@@ -85,16 +84,12 @@ sp_color_slider_get_type (void)
return type;
}
-static void
-sp_color_slider_class_init (SPColorSliderClass *klass)
+static void sp_color_slider_class_init(SPColorSliderClass *klass)
{
- GtkObjectClass *object_class;
- GtkWidgetClass *widget_class;
+ GObjectClass *object_class = G_OBJECT_CLASS(klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
- object_class = (GtkObjectClass *) klass;
- widget_class = (GtkWidgetClass *) klass;
-
- parent_class = (GtkWidgetClass*)g_type_class_peek_parent (klass);
+ parent_class = GTK_WIDGET_CLASS(g_type_class_peek_parent(klass));
slider_signals[GRABBED] = g_signal_new ("grabbed",
G_TYPE_FROM_CLASS(object_class),
@@ -125,21 +120,21 @@ sp_color_slider_class_init (SPColorSliderClass *klass)
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
- object_class->destroy = sp_color_slider_destroy;
+ object_class->dispose = sp_color_slider_dispose;
widget_class->realize = sp_color_slider_realize;
#if GTK_CHECK_VERSION(3,0,0)
widget_class->get_preferred_width = sp_color_slider_get_preferred_width;
widget_class->get_preferred_height = sp_color_slider_get_preferred_height;
+ widget_class->draw = sp_color_slider_draw;
#else
widget_class->size_request = sp_color_slider_size_request;
+ widget_class->expose_event = sp_color_slider_expose;
#endif
widget_class->size_allocate = sp_color_slider_size_allocate;
-/* widget_class->draw = sp_color_slider_draw; */
/* widget_class->draw_focus = sp_color_slider_draw_focus; */
/* widget_class->draw_default = sp_color_slider_draw_default; */
- widget_class->expose_event = sp_color_slider_expose;
widget_class->button_press_event = sp_color_slider_button_press;
widget_class->button_release_event = sp_color_slider_button_release;
widget_class->motion_notify_event = sp_color_slider_motion_notify;
@@ -178,12 +173,9 @@ sp_color_slider_init (SPColorSlider *slider)
slider->map = NULL;
}
-static void
-sp_color_slider_destroy (GtkObject *object)
+static void sp_color_slider_dispose(GObject *object)
{
- SPColorSlider *slider;
-
- slider = SP_COLOR_SLIDER (object);
+ SPColorSlider *slider = SP_COLOR_SLIDER (object);
if (slider->adjustment) {
g_signal_handlers_disconnect_matched (G_OBJECT (slider->adjustment), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, slider);
@@ -191,8 +183,8 @@ sp_color_slider_destroy (GtkObject *object)
slider->adjustment = NULL;
}
- if (((GtkObjectClass *) (parent_class))->destroy)
- (* ((GtkObjectClass *) (parent_class))->destroy) (object);
+ if ((G_OBJECT_CLASS(parent_class))->dispose)
+ (* (G_OBJECT_CLASS(parent_class))->dispose) (object);
}
static void
@@ -212,7 +204,11 @@ sp_color_slider_realize (GtkWidget *widget)
attributes.height = allocation.height;
attributes.wclass = GDK_INPUT_OUTPUT;
attributes.visual = gdk_screen_get_system_visual(gdk_screen_get_default());
+
+#if !GTK_CHECK_VERSION(3,0,0)
attributes.colormap = gdk_screen_get_system_colormap(gdk_screen_get_default());
+#endif
+
attributes.event_mask = gtk_widget_get_events (widget);
attributes.event_mask |= (GDK_EXPOSURE_MASK |
GDK_BUTTON_PRESS_MASK |
@@ -220,7 +216,11 @@ sp_color_slider_realize (GtkWidget *widget)
GDK_POINTER_MOTION_MASK |
GDK_ENTER_NOTIFY_MASK |
GDK_LEAVE_NOTIFY_MASK);
+#if GTK_CHECK_VERSION(3,0,0)
+ attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL;
+#else
attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
+#endif
gtk_widget_set_window(widget,
gdk_window_new(gtk_widget_get_parent_window(widget),
@@ -228,9 +228,12 @@ sp_color_slider_realize (GtkWidget *widget)
gdk_window_set_user_data(gtk_widget_get_window(widget), widget);
+#if !GTK_CHECK_VERSION(3,0,0)
+ // This doesn't do anything in GTK+ 3
gtk_widget_set_style(widget,
- gtk_style_attach(gtk_widget_get_style(widget),
- gtk_widget_get_window(widget)));
+ gtk_style_attach(gtk_widget_get_style(widget),
+ gtk_widget_get_window(widget)));
+#endif
}
static void
@@ -270,19 +273,21 @@ sp_color_slider_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
}
}
-static gint
-sp_color_slider_expose (GtkWidget *widget, GdkEventExpose *event)
+#if !GTK_CHECK_VERSION(3,0,0)
+static gboolean sp_color_slider_expose(GtkWidget *widget, GdkEventExpose * /*event*/)
{
- SPColorSlider *slider;
+ gboolean result = FALSE;
- slider = SP_COLOR_SLIDER (widget);
-
- if (gtk_widget_is_drawable (widget)) {
- sp_color_slider_paint (slider, &event->area);
+ if (gtk_widget_is_drawable(widget)) {
+ GdkWindow *window = gtk_widget_get_window(widget);
+ cairo_t *cr = gdk_cairo_create(window);
+ result = sp_color_slider_draw(widget, cr);
+ cairo_destroy(cr);
}
- return FALSE;
+ return result;
}
+#endif
static gint
sp_color_slider_button_press (GtkWidget *widget, GdkEventButton *event)
@@ -302,10 +307,20 @@ sp_color_slider_button_press (GtkWidget *widget, GdkEventButton *event)
slider->oldvalue = slider->value;
ColorScales::setScaled( slider->adjustment, CLAMP ((gfloat) (event->x - cx) / cw, 0.0, 1.0) );
g_signal_emit (G_OBJECT (slider), slider_signals[DRAGGED], 0);
+
+#if GTK_CHECK_VERSION(3,0,0)
+ gdk_device_grab(gdk_event_get_device(reinterpret_cast<GdkEvent *>(event)),
+ gtk_widget_get_window(widget),
+ GDK_OWNERSHIP_NONE,
+ FALSE,
+ static_cast<GdkEventMask>(GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK),
+ NULL,
+ event->time);
+#else
gdk_pointer_grab(gtk_widget_get_window(widget), FALSE,
- (GdkEventMask)(GDK_POINTER_MOTION_MASK |
- GDK_BUTTON_RELEASE_MASK),
+ static_cast<GdkEventMask>(GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK),
NULL, NULL, event->time);
+#endif
}
return FALSE;
@@ -319,7 +334,14 @@ sp_color_slider_button_release (GtkWidget *widget, GdkEventButton *event)
slider = SP_COLOR_SLIDER (widget);
if (event->button == 1) {
+
+#if GTK_CHECK_VERSION(3,0,0)
+ gdk_device_ungrab(gdk_event_get_device(reinterpret_cast<GdkEvent *>(event)),
+ gdk_event_get_time(reinterpret_cast<GdkEvent *>(event)));
+#else
gdk_pointer_ungrab (event->time);
+#endif
+
slider->dragging = FALSE;
g_signal_emit (G_OBJECT (slider), slider_signals[RELEASED], 0);
if (slider->value != slider->oldvalue) g_signal_emit (G_OBJECT (slider), slider_signals[CHANGED], 0);
@@ -348,12 +370,9 @@ sp_color_slider_motion_notify (GtkWidget *widget, GdkEventMotion *event)
return FALSE;
}
-GtkWidget *
-sp_color_slider_new (GtkAdjustment *adjustment)
+GtkWidget *sp_color_slider_new(GtkAdjustment *adjustment)
{
- SPColorSlider *slider;
-
- slider = (SPColorSlider*)g_object_new (SP_TYPE_COLOR_SLIDER, NULL);
+ SPColorSlider *slider = SP_COLOR_SLIDER(g_object_new(SP_TYPE_COLOR_SLIDER, NULL));
sp_color_slider_set_adjustment (slider, adjustment);
@@ -366,7 +385,7 @@ void sp_color_slider_set_adjustment(SPColorSlider *slider, GtkAdjustment *adjust
g_return_if_fail (SP_IS_COLOR_SLIDER (slider));
if (!adjustment) {
- adjustment = (GtkAdjustment *) gtk_adjustment_new (0.0, 0.0, 1.0, 0.01, 0.0, 0.0);
+ adjustment = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 1.0, 0.01, 0.0, 0.0));
} else {
gtk_adjustment_set_page_increment(adjustment, 0.0);
gtk_adjustment_set_page_size(adjustment, 0.0);
@@ -426,7 +445,7 @@ sp_color_slider_set_map (SPColorSlider *slider, const guchar *map)
g_return_if_fail (slider != NULL);
g_return_if_fail (SP_IS_COLOR_SLIDER (slider));
- slider->map = (guchar *) map;
+ slider->map = const_cast<guchar *>(map);
gtk_widget_queue_draw (GTK_WIDGET (slider));
}
@@ -483,191 +502,167 @@ sp_color_slider_adjustment_value_changed (GtkAdjustment *adjustment, SPColorSlid
}
}
-static void
-sp_color_slider_paint (SPColorSlider *slider, GdkRectangle *area)
+static gboolean sp_color_slider_draw(GtkWidget *widget, cairo_t *cr)
{
- GtkWidget *widget;
- GdkRectangle warea, carea, aarea;
- GdkRectangle wpaint, cpaint, apaint;
- const guchar *b;
- gint w, x, y1, y2;
+ SPColorSlider *slider = SP_COLOR_SLIDER(widget);
+
gboolean colorsOnTop = Inkscape::Preferences::get()->getBool("/options/workarounds/colorsontop", false);
-
- widget = GTK_WIDGET (slider);
GtkAllocation allocation;
gtk_widget_get_allocation(widget, &allocation);
- GtkStyle *style = gtk_widget_get_style(widget);
+
+#if GTK_CHECK_VERSION(3,0,0)
+ GtkStyleContext *context = gtk_widget_get_style_context(widget);
+#else
GdkWindow *window = gtk_widget_get_window(widget);
+ GtkStyle *style = gtk_widget_get_style(widget);
+#endif
+
+ // Draw shadow
+ if (colorsOnTop) {
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_render_frame(context,
+ cr,
+ 0, 0,
+ allocation.width, allocation.height);
+#else
+ gtk_paint_shadow( style, window,
+ gtk_widget_get_state(widget), GTK_SHADOW_IN,
+ NULL, widget, "colorslider",
+ 0, 0,
+ allocation.width, allocation.height);
+#endif
+ }
- /* Widget area */
- warea.x = 0;
- warea.y = 0;
- warea.width = allocation.width;
- warea.height = allocation.height;
+ /* Paintable part of color gradient area */
+ GdkRectangle carea;
- /* Color gradient area */
+#if GTK_CHECK_VERSION(3,0,0)
+ GtkBorder padding;
+
+ gtk_style_context_get_padding(context,
+ gtk_widget_get_state_flags(widget),
+ &padding);
+
+ carea.x = padding.left;
+ carea.y = padding.top;
+#else
carea.x = style->xthickness;
carea.y = style->ythickness;
+#endif
+
carea.width = allocation.width - 2 * carea.x;
carea.height = allocation.height - 2 * carea.y;
- /* Arrow area */
- aarea.x = (int)(slider->value * (carea.width - 1) - ARROW_SIZE / 2 + carea.x);
- aarea.width = ARROW_SIZE;
- aarea.y = carea.y;
- aarea.height = carea.height;
+ if (slider->map) {
+ /* Render map pixelstore */
+ gint d = (1024 << 16) / carea.width;
+ gint s = 0;
- /* Actual paintable area */
- if (!gdk_rectangle_intersect (area, &warea, &wpaint)) {
- return;
- }
+ const guchar *b = sp_color_slider_render_map(0, 0, carea.width, carea.height,
+ slider->map, s, d,
+ slider->b0, slider->b1, slider->bmask);
- b = NULL;
+ if (b != NULL && carea.width > 0) {
+ GdkPixbuf *pb = gdk_pixbuf_new_from_data (b, GDK_COLORSPACE_RGB,
+ 0, 8, carea.width, carea.height, carea.width * 3, NULL, NULL);
- // Draw shadow
- if (colorsOnTop) {
- gtk_paint_shadow( style, window,
- gtk_widget_get_state(widget), GTK_SHADOW_IN,
- area, widget, "colorslider",
- 0, 0,
- warea.width, warea.height);
- }
+ gdk_cairo_set_source_pixbuf(cr, pb, carea.x, carea.y);
+ cairo_paint(cr);
+ g_object_unref(pb);
+ }
- /* Paintable part of color gradient area */
- if (gdk_rectangle_intersect (area, &carea, &cpaint)) {
- if (slider->map) {
- gint s, d;
- /* Render map pixelstore */
- d = (1024 << 16) / carea.width;
- s = (cpaint.x - carea.x) * d;
- b = sp_color_slider_render_map (cpaint.x - carea.x, cpaint.y - carea.y, cpaint.width, cpaint.height,
- slider->map, s, d,
- slider->b0, slider->b1, slider->bmask);
- if (b != NULL && cpaint.width > 0) {
-
- GdkPixbuf *pb = gdk_pixbuf_new_from_data (b, GDK_COLORSPACE_RGB,
- 0, 8, cpaint.width, cpaint.height, cpaint.width * 3, NULL, NULL);
-
- cairo_t *ct = gdk_cairo_create(window);
- gdk_cairo_set_source_pixbuf (ct, pb, cpaint.x, cpaint.y);
- cairo_paint(ct);
- cairo_destroy(ct);
-
- g_object_unref(pb);
+ } else {
+ gint c[4], dc[4];
+
+ /* Render gradient */
+ // part 1: from c0 to cm
+ if (carea.width > 0) {
+ for (gint i = 0; i < 4; i++) {
+ c[i] = slider->c0[i] << 16;
+ dc[i] = ((slider->cm[i] << 16) - c[i]) / (carea.width/2);
}
+ guint wi = carea.width/2;
+ const guchar *b = sp_color_slider_render_gradient(0, 0, wi, carea.height,
+ c, dc, slider->b0, slider->b1, slider->bmask);
+
+ /* Draw pixelstore 1 */
+ if (b != NULL && wi > 0) {
+ GdkPixbuf *pb = gdk_pixbuf_new_from_data (b, GDK_COLORSPACE_RGB,
+ 0, 8, wi, carea.height, wi * 3, NULL, NULL);
+
+ gdk_cairo_set_source_pixbuf(cr, pb, carea.x, carea.y);
+ cairo_paint(cr);
+ g_object_unref(pb);
+ }
+ }
- } else {
- gint c[4], dc[4];
- gint i;
- /* Render gradient */
-
- // part 1: from c0 to cm
- if ((cpaint.x - carea.x) <= carea.width/2) {
- for (i = 0; i < 4; i++) {
- c[i] = slider->c0[i] << 16;
- dc[i] = ((slider->cm[i] << 16) - c[i]) / (carea.width/2);
- c[i] += (cpaint.x - carea.x) * dc[i];
- }
- guint wi = MIN(cpaint.x - carea.x + cpaint.width, carea.width/2) - (cpaint.x - carea.x);
- b = sp_color_slider_render_gradient (cpaint.x - carea.x, cpaint.y - carea.y, wi, cpaint.height,
- c, dc,
- slider->b0, slider->b1, slider->bmask);
-
- /* Draw pixelstore 1 */
- if (b != NULL && wi > 0) {
-
- GdkPixbuf *pb = gdk_pixbuf_new_from_data (b, GDK_COLORSPACE_RGB,
- 0, 8, wi, cpaint.height, wi * 3, NULL, NULL);
-
- cairo_t *ct = gdk_cairo_create(window);
- gdk_cairo_set_source_pixbuf (ct, pb, cpaint.x, cpaint.y);
- cairo_paint(ct);
- cairo_destroy(ct);
-
- g_object_unref(pb);
- }
+ // part 2: from cm to c1
+ if (carea.width > 0) {
+ for (gint i = 0; i < 4; i++) {
+ c[i] = slider->cm[i] << 16;
+ dc[i] = ((slider->c1[i] << 16) - c[i]) / (carea.width/2);
}
+ guint wi = carea.width/2;
+ const guchar *b = sp_color_slider_render_gradient(carea.width/2, 0, wi, carea.height,
+ c, dc,
+ slider->b0, slider->b1, slider->bmask);
- // part 2: from cm to c1
- if ((cpaint.x - carea.x + cpaint.width) > carea.width/2) {
- for (i = 0; i < 4; i++) {
- c[i] = slider->cm[i] << 16;
- dc[i] = ((slider->c1[i] << 16) - c[i]) / (carea.width/2);
- if ((cpaint.x - carea.x) > carea.width/2)
- c[i] += (cpaint.x - carea.x - carea.width/2) * dc[i];
- }
- guint wi = cpaint.width - MAX(0, (carea.width/2 - (cpaint.x - carea.x)));
- b = sp_color_slider_render_gradient (MAX(cpaint.x - carea.x, carea.width/2), cpaint.y - carea.y, wi, cpaint.height,
- c, dc,
- slider->b0, slider->b1, slider->bmask);
-
- /* Draw pixelstore 2 */
- if (b != NULL && wi > 0) {
-
- GdkPixbuf *pb = gdk_pixbuf_new_from_data (b, GDK_COLORSPACE_RGB,
- 0, 8, wi, cpaint.height, wi * 3, NULL, NULL);
-
- cairo_t *ct = gdk_cairo_create(window);
- gdk_cairo_set_source_pixbuf (ct, pb, MAX(cpaint.x, carea.width/2 + carea.x), cpaint.y);
- cairo_paint(ct);
- cairo_destroy(ct);
-
- g_object_unref(pb);
- }
+ /* Draw pixelstore 2 */
+ if (b != NULL && wi > 0) {
+ GdkPixbuf *pb = gdk_pixbuf_new_from_data (b, GDK_COLORSPACE_RGB,
+ 0, 8, wi, carea.height, wi * 3, NULL, NULL);
+
+ gdk_cairo_set_source_pixbuf(cr, pb, carea.width/2 + carea.x, carea.y);
+ cairo_paint(cr);
+
+ g_object_unref(pb);
}
}
}
- /* Draw shadow */
+ /* Draw shadow */
if (!colorsOnTop) {
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_render_frame(context,
+ cr,
+ 0, 0,
+ allocation.width, allocation.height);
+#else
gtk_paint_shadow( style, window,
gtk_widget_get_state(widget), GTK_SHADOW_IN,
- area, widget, "colorslider",
+ NULL, widget, "colorslider",
0, 0,
- warea.width, warea.height);
+ allocation.width, allocation.height);
+#endif
}
-
- if (gdk_rectangle_intersect (area, &aarea, &apaint)) {
- /* Draw arrow */
- gdk_rectangle_intersect (&carea, &apaint, &apaint);
- cairo_t* cr = gdk_cairo_create(window);
- gdk_cairo_rectangle(cr, &apaint);
- cairo_clip(cr);
-
- x = aarea.x;
- y1 = carea.y;
- y2 = aarea.y + aarea.height - 1;
- w = aarea.width;
- cairo_set_line_width(cr, 1.0);
-
- while ( w > 0 )
- {
- gdk_cairo_set_source_color(cr, &style->white);
- cairo_move_to(cr, x - 0.5, y1 + 0.5);
- cairo_line_to(cr, x + w - 1 + 0.5, y1 + 0.5);
- cairo_move_to(cr, x - 0.5, y2 + 0.5);
- cairo_line_to(cr, x + w - 1 + 0.5, y2 + 0.5);
- cairo_stroke(cr);
- w -=2;
- x++;
- if ( w > 0 )
- {
- gdk_cairo_set_source_color(cr, &style->black);
- cairo_move_to(cr, x - 0.5, y1 + 0.5);
- cairo_line_to(cr, x + w - 1 + 0.5, y1 + 0.5);
- cairo_move_to(cr, x - 0.5, y2 + 0.5);
- cairo_line_to(cr, x + w - 1 + 0.5, y2 + 0.5);
- cairo_stroke(cr);
- }
- y1++;
- y2--;
- }
-
- cairo_destroy(cr);
- }
+ /* Draw arrow */
+ gint x = (int)(slider->value * (carea.width - 1) - ARROW_SIZE / 2 + carea.x);
+ gint y1 = carea.y;
+ gint y2 = carea.y + carea.height - 1;
+ cairo_set_line_width(cr, 1.0);
+
+ // Define top arrow
+ cairo_move_to(cr, x - 0.5, y1 + 0.5);
+ cairo_line_to(cr, x + ARROW_SIZE - 0.5, y1 + 0.5);
+ cairo_line_to(cr, x + (ARROW_SIZE-1)/2.0, y1 + ARROW_SIZE/2.0 + 0.5);
+ cairo_line_to(cr, x - 0.5, y1 + 0.5);
+
+ // Define bottom arrow
+ cairo_move_to(cr, x - 0.5, y2 + 0.5);
+ cairo_line_to(cr, x + ARROW_SIZE - 0.5, y2 + 0.5);
+ cairo_line_to(cr, x + (ARROW_SIZE-1)/2.0, y2 - ARROW_SIZE/2.0 + 0.5);
+ cairo_line_to(cr, x - 0.5, y2 + 0.5);
+
+ // Render both arrows
+ cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
+ cairo_stroke_preserve(cr);
+ cairo_set_source_rgb(cr, 0.0, 0.0, 0.0);
+ cairo_fill(cr);
+
+ return FALSE;
}
/* Colors are << 16 */
@@ -734,7 +729,7 @@ sp_color_slider_render_map (gint x0, gint y0, gint width, gint height,
{
static guchar *buf = NULL;
static gint bs = 0;
- guchar *dp, *sp;
+ guchar *dp;
gint x, y;
if (buf && (bs < width * height)) {
@@ -749,13 +744,12 @@ sp_color_slider_render_map (gint x0, gint y0, gint width, gint height,
dp = buf;
for (x = x0; x < x0 + width; x++) {
gint cr, cg, cb, ca;
- guchar *d;
- sp = map + 4 * (start >> 16);
+ guchar *d = dp;
+ guchar *sp = map + 4 * (start >> 16);
cr = *sp++;
cg = *sp++;
cb = *sp++;
ca = *sp++;
- d = dp;
for (y = y0; y < y0 + height; y++) {
guint bg, fc;
/* Background value */