diff options
Diffstat (limited to 'src/nautilus-selection-canvas-item.c')
-rw-r--r-- | src/nautilus-selection-canvas-item.c | 1179 |
1 files changed, 645 insertions, 534 deletions
diff --git a/src/nautilus-selection-canvas-item.c b/src/nautilus-selection-canvas-item.c index c1619ca8d..c62b99b7e 100644 --- a/src/nautilus-selection-canvas-item.c +++ b/src/nautilus-selection-canvas-item.c @@ -1,4 +1,3 @@ - /* Nautilus - Canvas item for floating selection. * * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation @@ -27,50 +26,53 @@ #include <math.h> -enum { - PROP_X1 = 1, - PROP_Y1, - PROP_X2, - PROP_Y2, - PROP_FILL_COLOR_RGBA, - PROP_OUTLINE_COLOR_RGBA, - PROP_OUTLINE_STIPPLING, - PROP_WIDTH_PIXELS, - NUM_PROPERTIES +enum +{ + PROP_X1 = 1, + PROP_Y1, + PROP_X2, + PROP_Y2, + PROP_FILL_COLOR_RGBA, + PROP_OUTLINE_COLOR_RGBA, + PROP_OUTLINE_STIPPLING, + PROP_WIDTH_PIXELS, + NUM_PROPERTIES }; static GParamSpec *properties[NUM_PROPERTIES] = { NULL }; -typedef struct { - /*< public >*/ - int x0, y0, x1, y1; +typedef struct +{ + /*< public >*/ + int x0, y0, x1, y1; } Rect; -struct _NautilusSelectionCanvasItemDetails { - Rect last_update_rect; - Rect last_outline_update_rect; - int last_outline_update_width; +struct _NautilusSelectionCanvasItemDetails +{ + Rect last_update_rect; + Rect last_outline_update_rect; + int last_outline_update_width; - double x1, y1, x2, y2; /* Corners of item */ - double width; /* Outline width */ + double x1, y1, x2, y2; /* Corners of item */ + double width; /* Outline width */ - GdkRGBA fill_color; - GdkRGBA outline_color; + GdkRGBA fill_color; + GdkRGBA outline_color; - gboolean outline_stippling; + gboolean outline_stippling; - /* Configuration flags */ + /* Configuration flags */ - unsigned int fill_set : 1; /* Is fill color set? */ - unsigned int outline_set : 1; /* Is outline color set? */ + unsigned int fill_set : 1; /* Is fill color set? */ + unsigned int outline_set : 1; /* Is outline color set? */ - double fade_out_fill_alpha; - double fade_out_outline_alpha; + double fade_out_fill_alpha; + double fade_out_outline_alpha; - gint64 fade_out_start_time; - gint64 fade_out_end_time; + gint64 fade_out_start_time; + gint64 fade_out_end_time; - guint fade_out_tick_id; + guint fade_out_tick_id; }; G_DEFINE_TYPE (NautilusSelectionCanvasItem, nautilus_selection_canvas_item, EEL_TYPE_CANVAS_ITEM); @@ -78,635 +80,744 @@ G_DEFINE_TYPE (NautilusSelectionCanvasItem, nautilus_selection_canvas_item, EEL_ #define DASH_ON 0.8 #define DASH_OFF 1.7 static void -nautilus_selection_canvas_item_draw (EelCanvasItem *item, - cairo_t *cr, - cairo_region_t *region) +nautilus_selection_canvas_item_draw (EelCanvasItem *item, + cairo_t *cr, + cairo_region_t *region) { - NautilusSelectionCanvasItem *self; - double x1, y1, x2, y2; - int cx1, cy1, cx2, cy2; - double i2w_dx, i2w_dy; - - self = NAUTILUS_SELECTION_CANVAS_ITEM (item); - - /* Get canvas pixel coordinates */ - i2w_dx = 0.0; - i2w_dy = 0.0; - eel_canvas_item_i2w (item, &i2w_dx, &i2w_dy); - - x1 = self->priv->x1 + i2w_dx; - y1 = self->priv->y1 + i2w_dy; - x2 = self->priv->x2 + i2w_dx; - y2 = self->priv->y2 + i2w_dy; - - eel_canvas_w2c (item->canvas, x1, y1, &cx1, &cy1); - eel_canvas_w2c (item->canvas, x2, y2, &cx2, &cy2); - - if (cx2 <= cx1 || cy2 <= cy1 ) { - return; - } - - cairo_save (cr); - - if (self->priv->fill_set) { - GdkRGBA actual_fill; - - actual_fill = self->priv->fill_color; - - if (self->priv->fade_out_tick_id != 0) { - actual_fill.alpha = self->priv->fade_out_fill_alpha; - } - - gdk_cairo_set_source_rgba (cr, &actual_fill); - cairo_rectangle (cr, - cx1, cy1, - cx2 - cx1 + 1, - cy2 - cy1 + 1); - cairo_fill (cr); - } - - if (self->priv->outline_set) { - GdkRGBA actual_outline; - - actual_outline = self->priv->outline_color; - - if (self->priv->fade_out_tick_id != 0) { - actual_outline.alpha = self->priv->fade_out_outline_alpha; - } - - gdk_cairo_set_source_rgba (cr, &actual_outline); - cairo_set_line_width (cr, (int) self->priv->width); - - if (self->priv->outline_stippling) { - double dash[2] = { DASH_ON, DASH_OFF }; - - cairo_set_dash (cr, dash, G_N_ELEMENTS (dash), 0); - } - - cairo_rectangle (cr, - cx1 + 0.5, cy1 + 0.5, - cx2 - cx1, - cy2 - cy1); - cairo_stroke (cr); - } - - cairo_restore (cr); + NautilusSelectionCanvasItem *self; + double x1, y1, x2, y2; + int cx1, cy1, cx2, cy2; + double i2w_dx, i2w_dy; + + self = NAUTILUS_SELECTION_CANVAS_ITEM (item); + + /* Get canvas pixel coordinates */ + i2w_dx = 0.0; + i2w_dy = 0.0; + eel_canvas_item_i2w (item, &i2w_dx, &i2w_dy); + + x1 = self->priv->x1 + i2w_dx; + y1 = self->priv->y1 + i2w_dy; + x2 = self->priv->x2 + i2w_dx; + y2 = self->priv->y2 + i2w_dy; + + eel_canvas_w2c (item->canvas, x1, y1, &cx1, &cy1); + eel_canvas_w2c (item->canvas, x2, y2, &cx2, &cy2); + + if (cx2 <= cx1 || cy2 <= cy1) + { + return; + } + + cairo_save (cr); + + if (self->priv->fill_set) + { + GdkRGBA actual_fill; + + actual_fill = self->priv->fill_color; + + if (self->priv->fade_out_tick_id != 0) + { + actual_fill.alpha = self->priv->fade_out_fill_alpha; + } + + gdk_cairo_set_source_rgba (cr, &actual_fill); + cairo_rectangle (cr, + cx1, cy1, + cx2 - cx1 + 1, + cy2 - cy1 + 1); + cairo_fill (cr); + } + + if (self->priv->outline_set) + { + GdkRGBA actual_outline; + + actual_outline = self->priv->outline_color; + + if (self->priv->fade_out_tick_id != 0) + { + actual_outline.alpha = self->priv->fade_out_outline_alpha; + } + + gdk_cairo_set_source_rgba (cr, &actual_outline); + cairo_set_line_width (cr, (int) self->priv->width); + + if (self->priv->outline_stippling) + { + double dash[2] = { DASH_ON, DASH_OFF }; + + cairo_set_dash (cr, dash, G_N_ELEMENTS (dash), 0); + } + + cairo_rectangle (cr, + cx1 + 0.5, cy1 + 0.5, + cx2 - cx1, + cy2 - cy1); + cairo_stroke (cr); + } + + cairo_restore (cr); } static double -nautilus_selection_canvas_item_point (EelCanvasItem *item, - double x, - double y, - int cx, - int cy, - EelCanvasItem **actual_item) +nautilus_selection_canvas_item_point (EelCanvasItem *item, + double x, + double y, + int cx, + int cy, + EelCanvasItem **actual_item) { - NautilusSelectionCanvasItem *self; - double x1, y1, x2, y2; - double hwidth; - double dx, dy; - double tmp; - - self = NAUTILUS_SELECTION_CANVAS_ITEM (item); - *actual_item = item; - - /* Find the bounds for the rectangle plus its outline width */ - - x1 = self->priv->x1; - y1 = self->priv->y1; - x2 = self->priv->x2; - y2 = self->priv->y2; - - if (self->priv->outline_set) { - hwidth = (self->priv->width / item->canvas->pixels_per_unit) / 2.0; - - x1 -= hwidth; - y1 -= hwidth; - x2 += hwidth; - y2 += hwidth; - } else - hwidth = 0.0; - - /* Is point inside rectangle (which can be hollow if it has no fill set)? */ - - if ((x >= x1) && (y >= y1) && (x <= x2) && (y <= y2)) { - if (self->priv->fill_set || !self->priv->outline_set) - return 0.0; - - dx = x - x1; - tmp = x2 - x; - if (tmp < dx) - dx = tmp; - - dy = y - y1; - tmp = y2 - y; - if (tmp < dy) - dy = tmp; - - if (dy < dx) - dx = dy; - - dx -= 2.0 * hwidth; - - if (dx < 0.0) - return 0.0; - else - return dx; - } - - /* Point is outside rectangle */ - - if (x < x1) - dx = x1 - x; - else if (x > x2) - dx = x - x2; - else - dx = 0.0; - - if (y < y1) - dy = y1 - y; - else if (y > y2) - dy = y - y2; - else - dy = 0.0; - - return sqrt (dx * dx + dy * dy); + NautilusSelectionCanvasItem *self; + double x1, y1, x2, y2; + double hwidth; + double dx, dy; + double tmp; + + self = NAUTILUS_SELECTION_CANVAS_ITEM (item); + *actual_item = item; + + /* Find the bounds for the rectangle plus its outline width */ + + x1 = self->priv->x1; + y1 = self->priv->y1; + x2 = self->priv->x2; + y2 = self->priv->y2; + + if (self->priv->outline_set) + { + hwidth = (self->priv->width / item->canvas->pixels_per_unit) / 2.0; + + x1 -= hwidth; + y1 -= hwidth; + x2 += hwidth; + y2 += hwidth; + } + else + { + hwidth = 0.0; + } + + /* Is point inside rectangle (which can be hollow if it has no fill set)? */ + + if ((x >= x1) && (y >= y1) && (x <= x2) && (y <= y2)) + { + if (self->priv->fill_set || !self->priv->outline_set) + { + return 0.0; + } + + dx = x - x1; + tmp = x2 - x; + if (tmp < dx) + { + dx = tmp; + } + + dy = y - y1; + tmp = y2 - y; + if (tmp < dy) + { + dy = tmp; + } + + if (dy < dx) + { + dx = dy; + } + + dx -= 2.0 * hwidth; + + if (dx < 0.0) + { + return 0.0; + } + else + { + return dx; + } + } + + /* Point is outside rectangle */ + + if (x < x1) + { + dx = x1 - x; + } + else if (x > x2) + { + dx = x - x2; + } + else + { + dx = 0.0; + } + + if (y < y1) + { + dy = y1 - y; + } + else if (y > y2) + { + dy = y - y2; + } + else + { + dy = 0.0; + } + + return sqrt (dx * dx + dy * dy); } static void request_redraw_borders (EelCanvas *canvas, - Rect *update_rect, - int width) + Rect *update_rect, + int width) { - eel_canvas_request_redraw (canvas, - update_rect->x0, update_rect->y0, - update_rect->x1, update_rect->y0 + width); - eel_canvas_request_redraw (canvas, - update_rect->x0, update_rect->y1-width, - update_rect->x1, update_rect->y1); - eel_canvas_request_redraw (canvas, - update_rect->x0, update_rect->y0, - update_rect->x0+width, update_rect->y1); - eel_canvas_request_redraw (canvas, - update_rect->x1-width, update_rect->y0, - update_rect->x1, update_rect->y1); + eel_canvas_request_redraw (canvas, + update_rect->x0, update_rect->y0, + update_rect->x1, update_rect->y0 + width); + eel_canvas_request_redraw (canvas, + update_rect->x0, update_rect->y1 - width, + update_rect->x1, update_rect->y1); + eel_canvas_request_redraw (canvas, + update_rect->x0, update_rect->y0, + update_rect->x0 + width, update_rect->y1); + eel_canvas_request_redraw (canvas, + update_rect->x1 - width, update_rect->y0, + update_rect->x1, update_rect->y1); } -static Rect make_rect (int x0, int y0, int x1, int y1); +static Rect make_rect (int x0, + int y0, + int x1, + int y1); static int -rect_empty (const Rect *src) { - return (src->x1 <= src->x0 || src->y1 <= src->y0); +rect_empty (const Rect *src) +{ + return (src->x1 <= src->x0 || src->y1 <= src->y0); } static gboolean -rects_intersect (Rect r1, Rect r2) +rects_intersect (Rect r1, + Rect r2) { - if (r1.x0 >= r2.x1) { - return FALSE; - } - if (r2.x0 >= r1.x1) { - return FALSE; - } - if (r1.y0 >= r2.y1) { - return FALSE; - } - if (r2.y0 >= r1.y1) { - return FALSE; - } - return TRUE; + if (r1.x0 >= r2.x1) + { + return FALSE; + } + if (r2.x0 >= r1.x1) + { + return FALSE; + } + if (r1.y0 >= r2.y1) + { + return FALSE; + } + if (r2.y0 >= r1.y1) + { + return FALSE; + } + return TRUE; } static void -diff_rects_guts (Rect ra, Rect rb, int *count, Rect result[4]) +diff_rects_guts (Rect ra, + Rect rb, + int *count, + Rect result[4]) { - if (ra.x0 < rb.x0) { - result[(*count)++] = make_rect (ra.x0, ra.y0, rb.x0, ra.y1); - } - if (ra.y0 < rb.y0) { - result[(*count)++] = make_rect (ra.x0, ra.y0, ra.x1, rb.y0); - } - if (ra.x1 < rb.x1) { - result[(*count)++] = make_rect (ra.x1, rb.y0, rb.x1, rb.y1); - } - if (ra.y1 < rb.y1) { - result[(*count)++] = make_rect (rb.x0, ra.y1, rb.x1, rb.y1); - } + if (ra.x0 < rb.x0) + { + result[(*count)++] = make_rect (ra.x0, ra.y0, rb.x0, ra.y1); + } + if (ra.y0 < rb.y0) + { + result[(*count)++] = make_rect (ra.x0, ra.y0, ra.x1, rb.y0); + } + if (ra.x1 < rb.x1) + { + result[(*count)++] = make_rect (ra.x1, rb.y0, rb.x1, rb.y1); + } + if (ra.y1 < rb.y1) + { + result[(*count)++] = make_rect (rb.x0, ra.y1, rb.x1, rb.y1); + } } static void -diff_rects (Rect r1, Rect r2, int *count, Rect result[4]) +diff_rects (Rect r1, + Rect r2, + int *count, + Rect result[4]) { - g_assert (count != NULL); - g_assert (result != NULL); - - *count = 0; - - if (rects_intersect (r1, r2)) { - diff_rects_guts (r1, r2, count, result); - diff_rects_guts (r2, r1, count, result); - } else { - if (!rect_empty (&r1)) { - result[(*count)++] = r1; - } - if (!rect_empty (&r2)) { - result[(*count)++] = r2; - } - } + g_assert (count != NULL); + g_assert (result != NULL); + + *count = 0; + + if (rects_intersect (r1, r2)) + { + diff_rects_guts (r1, r2, count, result); + diff_rects_guts (r2, r1, count, result); + } + else + { + if (!rect_empty (&r1)) + { + result[(*count)++] = r1; + } + if (!rect_empty (&r2)) + { + result[(*count)++] = r2; + } + } } static Rect -make_rect (int x0, int y0, int x1, int y1) +make_rect (int x0, + int y0, + int x1, + int y1) { - Rect r; + Rect r; - r.x0 = x0; - r.y0 = y0; - r.x1 = x1; - r.y1 = y1; - return r; + r.x0 = x0; + r.y0 = y0; + r.x1 = x1; + r.y1 = y1; + return r; } static void nautilus_selection_canvas_item_update (EelCanvasItem *item, - double i2w_dx, - double i2w_dy, - gint flags) + double i2w_dx, + double i2w_dy, + gint flags) { - NautilusSelectionCanvasItem *self; - NautilusSelectionCanvasItemDetails *priv; - double x1, y1, x2, y2; - int cx1, cy1, cx2, cy2; - int repaint_rects_count, i; - int width_pixels; - int width_lt, width_rb; - Rect update_rect, repaint_rects[4]; - - if (EEL_CANVAS_ITEM_CLASS (nautilus_selection_canvas_item_parent_class)->update) - (* EEL_CANVAS_ITEM_CLASS (nautilus_selection_canvas_item_parent_class)->update) (item, i2w_dx, i2w_dy, flags); - - self = NAUTILUS_SELECTION_CANVAS_ITEM (item); - priv = self->priv; - - x1 = priv->x1 + i2w_dx; - y1 = priv->y1 + i2w_dy; - x2 = priv->x2 + i2w_dx; - y2 = priv->y2 + i2w_dy; - - eel_canvas_w2c (item->canvas, x1, y1, &cx1, &cy1); - eel_canvas_w2c (item->canvas, x2, y2, &cx2, &cy2); - - update_rect = make_rect (cx1, cy1, cx2+1, cy2+1); - diff_rects (update_rect, priv->last_update_rect, - &repaint_rects_count, repaint_rects); - for (i = 0; i < repaint_rects_count; i++) { - eel_canvas_request_redraw (item->canvas, - repaint_rects[i].x0, repaint_rects[i].y0, - repaint_rects[i].x1, repaint_rects[i].y1); - } - - priv->last_update_rect = update_rect; - - if (priv->outline_set) { - /* Outline and bounding box */ - width_pixels = (int) priv->width; - width_lt = width_pixels / 2; - width_rb = (width_pixels + 1) / 2; - - cx1 -= width_lt; - cy1 -= width_lt; - cx2 += width_rb; - cy2 += width_rb; - - update_rect = make_rect (cx1, cy1, cx2, cy2); - request_redraw_borders (item->canvas, &update_rect, - (width_lt + width_rb)); - request_redraw_borders (item->canvas, &priv->last_outline_update_rect, - priv->last_outline_update_width); - priv->last_outline_update_rect = update_rect; - priv->last_outline_update_width = width_lt + width_rb; - - item->x1 = cx1; - item->y1 = cy1; - item->x2 = cx2+1; - item->y2 = cy2+1; - } else { - item->x1 = cx1; - item->y1 = cy1; - item->x2 = cx2+1; - item->y2 = cy2+1; - } + NautilusSelectionCanvasItem *self; + NautilusSelectionCanvasItemDetails *priv; + double x1, y1, x2, y2; + int cx1, cy1, cx2, cy2; + int repaint_rects_count, i; + int width_pixels; + int width_lt, width_rb; + Rect update_rect, repaint_rects[4]; + + if (EEL_CANVAS_ITEM_CLASS (nautilus_selection_canvas_item_parent_class)->update) + { + (*EEL_CANVAS_ITEM_CLASS (nautilus_selection_canvas_item_parent_class)->update)(item, i2w_dx, i2w_dy, flags); + } + + self = NAUTILUS_SELECTION_CANVAS_ITEM (item); + priv = self->priv; + + x1 = priv->x1 + i2w_dx; + y1 = priv->y1 + i2w_dy; + x2 = priv->x2 + i2w_dx; + y2 = priv->y2 + i2w_dy; + + eel_canvas_w2c (item->canvas, x1, y1, &cx1, &cy1); + eel_canvas_w2c (item->canvas, x2, y2, &cx2, &cy2); + + update_rect = make_rect (cx1, cy1, cx2 + 1, cy2 + 1); + diff_rects (update_rect, priv->last_update_rect, + &repaint_rects_count, repaint_rects); + for (i = 0; i < repaint_rects_count; i++) + { + eel_canvas_request_redraw (item->canvas, + repaint_rects[i].x0, repaint_rects[i].y0, + repaint_rects[i].x1, repaint_rects[i].y1); + } + + priv->last_update_rect = update_rect; + + if (priv->outline_set) + { + /* Outline and bounding box */ + width_pixels = (int) priv->width; + width_lt = width_pixels / 2; + width_rb = (width_pixels + 1) / 2; + + cx1 -= width_lt; + cy1 -= width_lt; + cx2 += width_rb; + cy2 += width_rb; + + update_rect = make_rect (cx1, cy1, cx2, cy2); + request_redraw_borders (item->canvas, &update_rect, + (width_lt + width_rb)); + request_redraw_borders (item->canvas, &priv->last_outline_update_rect, + priv->last_outline_update_width); + priv->last_outline_update_rect = update_rect; + priv->last_outline_update_width = width_lt + width_rb; + + item->x1 = cx1; + item->y1 = cy1; + item->x2 = cx2 + 1; + item->y2 = cy2 + 1; + } + else + { + item->x1 = cx1; + item->y1 = cy1; + item->x2 = cx2 + 1; + item->y2 = cy2 + 1; + } } static void nautilus_selection_canvas_item_translate (EelCanvasItem *item, - double dx, - double dy) + double dx, + double dy) { - NautilusSelectionCanvasItem *self; + NautilusSelectionCanvasItem *self; - self = NAUTILUS_SELECTION_CANVAS_ITEM (item); + self = NAUTILUS_SELECTION_CANVAS_ITEM (item); - self->priv->x1 += dx; - self->priv->y1 += dy; - self->priv->x2 += dx; - self->priv->y2 += dy; + self->priv->x1 += dx; + self->priv->y1 += dy; + self->priv->x2 += dx; + self->priv->y2 += dy; } static void nautilus_selection_canvas_item_bounds (EelCanvasItem *item, - double *x1, - double *y1, - double *x2, - double *y2) + double *x1, + double *y1, + double *x2, + double *y2) { - NautilusSelectionCanvasItem *self; - double hwidth; + NautilusSelectionCanvasItem *self; + double hwidth; - self = NAUTILUS_SELECTION_CANVAS_ITEM (item); + self = NAUTILUS_SELECTION_CANVAS_ITEM (item); - hwidth = (self->priv->width / item->canvas->pixels_per_unit) / 2.0; + hwidth = (self->priv->width / item->canvas->pixels_per_unit) / 2.0; - *x1 = self->priv->x1 - hwidth; - *y1 = self->priv->y1 - hwidth; - *x2 = self->priv->x2 + hwidth; - *y2 = self->priv->y2 + hwidth; + *x1 = self->priv->x1 - hwidth; + *y1 = self->priv->y1 - hwidth; + *x2 = self->priv->x2 + hwidth; + *y2 = self->priv->y2 + hwidth; } static gboolean -fade_and_request_redraw (GtkWidget *canvas, - GdkFrameClock *frame_clock, - gpointer user_data) +fade_and_request_redraw (GtkWidget *canvas, + GdkFrameClock *frame_clock, + gpointer user_data) { - NautilusSelectionCanvasItem *self = user_data; - gint64 frame_time; - gdouble percentage; + NautilusSelectionCanvasItem *self = user_data; + gint64 frame_time; + gdouble percentage; - frame_time = gdk_frame_clock_get_frame_time (frame_clock); - if (frame_time >= self->priv->fade_out_end_time) { - self->priv->fade_out_tick_id = 0; - eel_canvas_item_destroy (EEL_CANVAS_ITEM (self)); + frame_time = gdk_frame_clock_get_frame_time (frame_clock); + if (frame_time >= self->priv->fade_out_end_time) + { + self->priv->fade_out_tick_id = 0; + eel_canvas_item_destroy (EEL_CANVAS_ITEM (self)); - return G_SOURCE_REMOVE; - } + return G_SOURCE_REMOVE; + } - percentage = 1.0 - (gdouble) (frame_time - self->priv->fade_out_start_time) / - (gdouble) (self->priv->fade_out_end_time - self->priv->fade_out_start_time); + percentage = 1.0 - (gdouble) (frame_time - self->priv->fade_out_start_time) / + (gdouble) (self->priv->fade_out_end_time - self->priv->fade_out_start_time); - self->priv->fade_out_fill_alpha = self->priv->fill_color.alpha * percentage; - self->priv->fade_out_outline_alpha = self->priv->outline_color.alpha * percentage; + self->priv->fade_out_fill_alpha = self->priv->fill_color.alpha * percentage; + self->priv->fade_out_outline_alpha = self->priv->outline_color.alpha * percentage; - eel_canvas_item_request_redraw (EEL_CANVAS_ITEM (self)); + eel_canvas_item_request_redraw (EEL_CANVAS_ITEM (self)); - return G_SOURCE_CONTINUE; + return G_SOURCE_CONTINUE; } void nautilus_selection_canvas_item_fade_out (NautilusSelectionCanvasItem *self, - guint transition_time) + guint transition_time) { - EelCanvasItem *item = EEL_CANVAS_ITEM (self); - GtkWidget *widget; - GdkFrameClock *clock; + EelCanvasItem *item = EEL_CANVAS_ITEM (self); + GtkWidget *widget; + GdkFrameClock *clock; - self->priv->fade_out_fill_alpha = self->priv->fill_color.alpha; - self->priv->fade_out_outline_alpha = self->priv->outline_color.alpha; + self->priv->fade_out_fill_alpha = self->priv->fill_color.alpha; + self->priv->fade_out_outline_alpha = self->priv->outline_color.alpha; - widget = GTK_WIDGET (item->canvas); - clock = gtk_widget_get_frame_clock (widget); - self->priv->fade_out_start_time = gdk_frame_clock_get_frame_time (clock); - self->priv->fade_out_end_time = self->priv->fade_out_start_time + 1000 * transition_time; + widget = GTK_WIDGET (item->canvas); + clock = gtk_widget_get_frame_clock (widget); + self->priv->fade_out_start_time = gdk_frame_clock_get_frame_time (clock); + self->priv->fade_out_end_time = self->priv->fade_out_start_time + 1000 * transition_time; - self->priv->fade_out_tick_id = - gtk_widget_add_tick_callback (GTK_WIDGET (item->canvas), fade_and_request_redraw, self, NULL); + self->priv->fade_out_tick_id = + gtk_widget_add_tick_callback (GTK_WIDGET (item->canvas), fade_and_request_redraw, self, NULL); } static void nautilus_selection_canvas_item_dispose (GObject *obj) { - NautilusSelectionCanvasItem *self = NAUTILUS_SELECTION_CANVAS_ITEM (obj); + NautilusSelectionCanvasItem *self = NAUTILUS_SELECTION_CANVAS_ITEM (obj); - if (self->priv->fade_out_tick_id != 0) { - gtk_widget_remove_tick_callback (GTK_WIDGET (EEL_CANVAS_ITEM (self)->canvas), self->priv->fade_out_tick_id); - self->priv->fade_out_tick_id = 0; - } + if (self->priv->fade_out_tick_id != 0) + { + gtk_widget_remove_tick_callback (GTK_WIDGET (EEL_CANVAS_ITEM (self)->canvas), self->priv->fade_out_tick_id); + self->priv->fade_out_tick_id = 0; + } - G_OBJECT_CLASS (nautilus_selection_canvas_item_parent_class)->dispose (obj); + G_OBJECT_CLASS (nautilus_selection_canvas_item_parent_class)->dispose (obj); } static void do_set_fill (NautilusSelectionCanvasItem *self, - gboolean fill_set) + gboolean fill_set) { - if (self->priv->fill_set != fill_set) { - self->priv->fill_set = fill_set; - eel_canvas_item_request_update (EEL_CANVAS_ITEM (self)); - } + if (self->priv->fill_set != fill_set) + { + self->priv->fill_set = fill_set; + eel_canvas_item_request_update (EEL_CANVAS_ITEM (self)); + } } static void do_set_outline (NautilusSelectionCanvasItem *self, - gboolean outline_set) + gboolean outline_set) { - if (self->priv->outline_set != outline_set) { - self->priv->outline_set = outline_set; - eel_canvas_item_request_update (EEL_CANVAS_ITEM (self)); - } + if (self->priv->outline_set != outline_set) + { + self->priv->outline_set = outline_set; + eel_canvas_item_request_update (EEL_CANVAS_ITEM (self)); + } } static void -nautilus_selection_canvas_item_set_property (GObject *object, - guint param_id, - const GValue *value, - GParamSpec *pspec) +nautilus_selection_canvas_item_set_property (GObject *object, + guint param_id, + const GValue *value, + GParamSpec *pspec) { - EelCanvasItem *item; - NautilusSelectionCanvasItem *self; + EelCanvasItem *item; + NautilusSelectionCanvasItem *self; - self = NAUTILUS_SELECTION_CANVAS_ITEM (object); - item = EEL_CANVAS_ITEM (object); + self = NAUTILUS_SELECTION_CANVAS_ITEM (object); + item = EEL_CANVAS_ITEM (object); - switch (param_id) { - case PROP_X1: - self->priv->x1 = g_value_get_double (value); + switch (param_id) + { + case PROP_X1: + { + self->priv->x1 = g_value_get_double (value); - eel_canvas_item_request_update (item); - break; + eel_canvas_item_request_update (item); + } + break; - case PROP_Y1: - self->priv->y1 = g_value_get_double (value); + case PROP_Y1: + { + self->priv->y1 = g_value_get_double (value); - eel_canvas_item_request_update (item); - break; + eel_canvas_item_request_update (item); + } + break; - case PROP_X2: - self->priv->x2 = g_value_get_double (value); + case PROP_X2: + { + self->priv->x2 = g_value_get_double (value); - eel_canvas_item_request_update (item); - break; + eel_canvas_item_request_update (item); + } + break; - case PROP_Y2: - self->priv->y2 = g_value_get_double (value); + case PROP_Y2: + { + self->priv->y2 = g_value_get_double (value); - eel_canvas_item_request_update (item); - break; + eel_canvas_item_request_update (item); + } + break; - case PROP_FILL_COLOR_RGBA: { - GdkRGBA *color; + case PROP_FILL_COLOR_RGBA: + { + GdkRGBA *color; - color = g_value_get_boxed (value); + color = g_value_get_boxed (value); - do_set_fill (self, color != NULL); + do_set_fill (self, color != NULL); - if (color != NULL) { - self->priv->fill_color = *color; - } + if (color != NULL) + { + self->priv->fill_color = *color; + } - eel_canvas_item_request_redraw (item); - break; - } + eel_canvas_item_request_redraw (item); + break; + } - case PROP_OUTLINE_COLOR_RGBA: { - GdkRGBA *color; + case PROP_OUTLINE_COLOR_RGBA: + { + GdkRGBA *color; - color = g_value_get_boxed (value); + color = g_value_get_boxed (value); - do_set_outline (self, color != NULL); + do_set_outline (self, color != NULL); - if (color != NULL) { - self->priv->outline_color = *color; - } + if (color != NULL) + { + self->priv->outline_color = *color; + } - eel_canvas_item_request_redraw (item); - break; - } + eel_canvas_item_request_redraw (item); + break; + } - case PROP_OUTLINE_STIPPLING: - self->priv->outline_stippling = g_value_get_boolean (value); + case PROP_OUTLINE_STIPPLING: + { + self->priv->outline_stippling = g_value_get_boolean (value); - eel_canvas_item_request_redraw (item); - break; + eel_canvas_item_request_redraw (item); + } + break; - case PROP_WIDTH_PIXELS: - self->priv->width = g_value_get_uint (value); + case PROP_WIDTH_PIXELS: + { + self->priv->width = g_value_get_uint (value); - eel_canvas_item_request_update (item); - break; + eel_canvas_item_request_update (item); + } + break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); - break; - } + default: + { + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); + } + break; + } } static void -nautilus_selection_canvas_item_get_property (GObject *object, - guint param_id, - GValue *value, - GParamSpec *pspec) +nautilus_selection_canvas_item_get_property (GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec) { - NautilusSelectionCanvasItem *self; - - self = NAUTILUS_SELECTION_CANVAS_ITEM (object); - - switch (param_id) { - case PROP_X1: - g_value_set_double (value, self->priv->x1); - break; - - case PROP_Y1: - g_value_set_double (value, self->priv->y1); - break; - - case PROP_X2: - g_value_set_double (value, self->priv->x2); - break; - - case PROP_Y2: - g_value_set_double (value, self->priv->y2); - break; - - case PROP_FILL_COLOR_RGBA: - g_value_set_boxed (value, &self->priv->fill_color); - break; - - case PROP_OUTLINE_COLOR_RGBA: - g_value_set_boxed (value, &self->priv->outline_color); - break; - - case PROP_OUTLINE_STIPPLING: - g_value_set_boolean (value, self->priv->outline_stippling); - break; - case PROP_WIDTH_PIXELS: - g_value_set_uint (value, self->priv->width); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); - break; - } + NautilusSelectionCanvasItem *self; + + self = NAUTILUS_SELECTION_CANVAS_ITEM (object); + + switch (param_id) + { + case PROP_X1: + { + g_value_set_double (value, self->priv->x1); + } + break; + + case PROP_Y1: + { + g_value_set_double (value, self->priv->y1); + } + break; + + case PROP_X2: + { + g_value_set_double (value, self->priv->x2); + } + break; + + case PROP_Y2: + { + g_value_set_double (value, self->priv->y2); + } + break; + + case PROP_FILL_COLOR_RGBA: + { + g_value_set_boxed (value, &self->priv->fill_color); + } + break; + + case PROP_OUTLINE_COLOR_RGBA: + { + g_value_set_boxed (value, &self->priv->outline_color); + } + break; + + case PROP_OUTLINE_STIPPLING: + { + g_value_set_boolean (value, self->priv->outline_stippling); + } + break; + + case PROP_WIDTH_PIXELS: + { + g_value_set_uint (value, self->priv->width); + } + break; + + default: + { + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); + } + break; + } } static void nautilus_selection_canvas_item_class_init (NautilusSelectionCanvasItemClass *klass) { - EelCanvasItemClass *item_class; - GObjectClass *gobject_class; - - gobject_class = G_OBJECT_CLASS (klass); - item_class = EEL_CANVAS_ITEM_CLASS (klass); - - gobject_class->set_property = nautilus_selection_canvas_item_set_property; - gobject_class->get_property = nautilus_selection_canvas_item_get_property; - gobject_class->dispose = nautilus_selection_canvas_item_dispose; - - item_class->draw = nautilus_selection_canvas_item_draw; - item_class->point = nautilus_selection_canvas_item_point; - item_class->update = nautilus_selection_canvas_item_update; - item_class->bounds = nautilus_selection_canvas_item_bounds; - item_class->translate = nautilus_selection_canvas_item_translate; - - properties[PROP_X1] = - g_param_spec_double ("x1", NULL, NULL, - -G_MAXDOUBLE, G_MAXDOUBLE, 0, - G_PARAM_READWRITE); - properties[PROP_Y1] = - g_param_spec_double ("y1", NULL, NULL, - -G_MAXDOUBLE, G_MAXDOUBLE, 0, - G_PARAM_READWRITE); - properties[PROP_X2] = - g_param_spec_double ("x2", NULL, NULL, - -G_MAXDOUBLE, G_MAXDOUBLE, 0, - G_PARAM_READWRITE); - properties[PROP_Y2] = - g_param_spec_double ("y2", NULL, NULL, - -G_MAXDOUBLE, G_MAXDOUBLE, 0, - G_PARAM_READWRITE); - properties[PROP_FILL_COLOR_RGBA] = - g_param_spec_boxed ("fill-color-rgba", NULL, NULL, - GDK_TYPE_RGBA, - G_PARAM_READWRITE); - properties[PROP_OUTLINE_COLOR_RGBA] = - g_param_spec_boxed ("outline-color-rgba", NULL, NULL, - GDK_TYPE_RGBA, - G_PARAM_READWRITE); - properties[PROP_OUTLINE_STIPPLING] = - g_param_spec_boolean ("outline-stippling", NULL, NULL, - FALSE, G_PARAM_READWRITE); - properties[PROP_WIDTH_PIXELS] = - g_param_spec_uint ("width-pixels", NULL, NULL, - 0, G_MAXUINT, 0, - G_PARAM_READWRITE); - - g_object_class_install_properties (gobject_class, NUM_PROPERTIES, properties); - g_type_class_add_private (klass, sizeof (NautilusSelectionCanvasItemDetails)); + EelCanvasItemClass *item_class; + GObjectClass *gobject_class; + + gobject_class = G_OBJECT_CLASS (klass); + item_class = EEL_CANVAS_ITEM_CLASS (klass); + + gobject_class->set_property = nautilus_selection_canvas_item_set_property; + gobject_class->get_property = nautilus_selection_canvas_item_get_property; + gobject_class->dispose = nautilus_selection_canvas_item_dispose; + + item_class->draw = nautilus_selection_canvas_item_draw; + item_class->point = nautilus_selection_canvas_item_point; + item_class->update = nautilus_selection_canvas_item_update; + item_class->bounds = nautilus_selection_canvas_item_bounds; + item_class->translate = nautilus_selection_canvas_item_translate; + + properties[PROP_X1] = + g_param_spec_double ("x1", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + G_PARAM_READWRITE); + properties[PROP_Y1] = + g_param_spec_double ("y1", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + G_PARAM_READWRITE); + properties[PROP_X2] = + g_param_spec_double ("x2", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + G_PARAM_READWRITE); + properties[PROP_Y2] = + g_param_spec_double ("y2", NULL, NULL, + -G_MAXDOUBLE, G_MAXDOUBLE, 0, + G_PARAM_READWRITE); + properties[PROP_FILL_COLOR_RGBA] = + g_param_spec_boxed ("fill-color-rgba", NULL, NULL, + GDK_TYPE_RGBA, + G_PARAM_READWRITE); + properties[PROP_OUTLINE_COLOR_RGBA] = + g_param_spec_boxed ("outline-color-rgba", NULL, NULL, + GDK_TYPE_RGBA, + G_PARAM_READWRITE); + properties[PROP_OUTLINE_STIPPLING] = + g_param_spec_boolean ("outline-stippling", NULL, NULL, + FALSE, G_PARAM_READWRITE); + properties[PROP_WIDTH_PIXELS] = + g_param_spec_uint ("width-pixels", NULL, NULL, + 0, G_MAXUINT, 0, + G_PARAM_READWRITE); + + g_object_class_install_properties (gobject_class, NUM_PROPERTIES, properties); + g_type_class_add_private (klass, sizeof (NautilusSelectionCanvasItemDetails)); } static void nautilus_selection_canvas_item_init (NautilusSelectionCanvasItem *self) { - self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, NAUTILUS_TYPE_SELECTION_CANVAS_ITEM, - NautilusSelectionCanvasItemDetails); + self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, NAUTILUS_TYPE_SELECTION_CANVAS_ITEM, + NautilusSelectionCanvasItemDetails); } - - - |