gdouble line_width;
guint line_color;
glColorNode *line_color_node;
+ gboolean shadow_state;
+ gdouble shadow_x, shadow_y;
+ glColorNode *shadow_color_node;
+ gdouble shadow_opacity;
+ guint shadow_line_color;
gl_debug (DEBUG_PRINT, "START");
line_color = gl_color_node_expand (line_color_node, record);
gl_color_node_free (&line_color_node);
+ shadow_state = gl_label_object_get_shadow_state (GL_LABEL_OBJECT (object));
+ gl_label_object_get_shadow_offset (GL_LABEL_OBJECT (object), &shadow_x, &shadow_y);
+ shadow_color_node = gl_label_object_get_shadow_color (GL_LABEL_OBJECT (object));
+ if (shadow_color_node->field_flag)
+ {
+ shadow_color_node->color = GL_COLOR_SHADOW_MERGE_DEFAULT;
+ }
+ shadow_opacity = gl_label_object_get_shadow_opacity (GL_LABEL_OBJECT (object));
+ shadow_line_color = gl_color_shadow (shadow_color_node->color, shadow_opacity, line_color);
+ gl_color_node_free (&shadow_color_node);
+
+ if (shadow_state)
+ {
+ gnome_print_moveto (pi->pc, shadow_x, shadow_y);
+ gnome_print_lineto (pi->pc, shadow_x + w, shadow_y + h);
+ gnome_print_setrgbcolor (pi->pc,
+ GL_COLOR_F_RED (shadow_line_color),
+ GL_COLOR_F_GREEN (shadow_line_color),
+ GL_COLOR_F_BLUE (shadow_line_color));
+ gnome_print_setopacity (pi->pc, GL_COLOR_F_ALPHA (shadow_line_color));
+ gnome_print_setlinewidth (pi->pc, line_width);
+ gnome_print_stroke (pi->pc);
+ }
+
gnome_print_moveto (pi->pc, 0.0, 0.0);
gnome_print_lineto (pi->pc, w, h);
gnome_print_setrgbcolor (pi->pc,
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
/*
* (GLABELS) Label and Business Card Creation program for GNOME
*
* view_line.c: GLabels label line object widget
*
- * Copyright (C) 2001-2003 Jim Evins <evins@snaught.com>.
+ * Copyright (C) 2001-2006 Jim Evins <evins@snaught.com>.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
/*========================================================*/
struct _glViewLinePrivate {
- GnomeCanvasItem *item;
+ GnomeCanvasItem *object_item;
+ GnomeCanvasItem *shadow_item;
};
/*========================================================*/
glView *view)
{
glViewLine *view_line;
- gdouble line_width;
- glColorNode *line_color_node;
- gdouble w, h;
- GnomeCanvasPoints *points;
gl_debug (DEBUG_VIEW, "START");
+
g_return_if_fail (object && GL_IS_LABEL_LINE (object));
g_return_if_fail (view && GL_IS_VIEW (view));
GL_LABEL_OBJECT(object),
GL_VIEW_HIGHLIGHT_LINE_RESIZABLE);
- /* Query properties of object. */
- gl_label_object_get_size (GL_LABEL_OBJECT(object), &w, &h);
- line_width = gl_label_object_get_line_width(GL_LABEL_OBJECT(object));
- line_color_node = gl_label_object_get_line_color(GL_LABEL_OBJECT(object));
- if (line_color_node->field_flag)
- {
- line_color_node->color = GL_COLOR_MERGE_DEFAULT;
- }
-
/* Create analogous canvas item. */
- points = gnome_canvas_points_new (2);
- points->coords[0] = 0.0;
- points->coords[1] = 0.0;
- points->coords[2] = w;
- points->coords[3] = h;
- view_line->private->item =
+ view_line->private->shadow_item =
gl_view_object_item_new (GL_VIEW_OBJECT(view_line),
gnome_canvas_line_get_type (),
- "points", points,
- "width_units", line_width,
- "fill_color_rgba", line_color_node->color,
NULL);
- gl_color_node_free (&line_color_node);
- gnome_canvas_points_free (points);
+ view_line->private->object_item =
+ gl_view_object_item_new (GL_VIEW_OBJECT(view_line),
+ gnome_canvas_line_get_type (),
+ NULL);
+ update_canvas_item_from_object_cb (GL_LABEL_OBJECT(object), view_line);
g_signal_connect (G_OBJECT (object), "changed",
G_CALLBACK (update_canvas_item_from_object_cb), view_line);
GL_OBJECT_EDITOR_POSITION_PAGE,
GL_OBJECT_EDITOR_SIZE_LINE_PAGE,
GL_OBJECT_EDITOR_LINE_PAGE,
+ GL_OBJECT_EDITOR_SHADOW_PAGE,
0);
/* Update */
glColorNode *line_color_node;
gdouble w, h;
GnomeCanvasPoints *points;
+ gboolean shadow_state;
+ gdouble shadow_x, shadow_y;
+ glColorNode *shadow_color_node;
+ gdouble shadow_opacity;
+ guint shadow_line_color;
gl_debug (DEBUG_VIEW, "START");
{
line_color_node->color = GL_COLOR_MERGE_DEFAULT;
}
+ shadow_state = gl_label_object_get_shadow_state (GL_LABEL_OBJECT (object));
+ gl_label_object_get_shadow_offset (GL_LABEL_OBJECT (object), &shadow_x, &shadow_y);
+ shadow_color_node = gl_label_object_get_shadow_color (GL_LABEL_OBJECT (object));
+ if (shadow_color_node->field_flag)
+ {
+ shadow_color_node->color = GL_COLOR_SHADOW_MERGE_DEFAULT;
+ }
+ shadow_opacity = gl_label_object_get_shadow_opacity (GL_LABEL_OBJECT (object));
+ shadow_line_color = gl_color_shadow (shadow_color_node->color,
+ shadow_opacity,
+ line_color_node->color);
/* Adjust appearance of analogous canvas item. */
points = gnome_canvas_points_new (2);
+ points->coords[0] = shadow_x;
+ points->coords[1] = shadow_y;
+ points->coords[2] = shadow_x + w;
+ points->coords[3] = shadow_y + h;
+ gnome_canvas_item_set (view_line->private->shadow_item,
+ "points", points,
+ "width_units", line_width,
+ "fill_color_rgba", shadow_line_color,
+ NULL);
+
+ if (shadow_state)
+ {
+ gnome_canvas_item_show (view_line->private->shadow_item);
+ }
+ else
+ {
+ gnome_canvas_item_hide (view_line->private->shadow_item);
+ }
+
points->coords[0] = 0.0;
points->coords[1] = 0.0;
points->coords[2] = w;
points->coords[3] = h;
- gnome_canvas_item_set (view_line->private->item,
+ gnome_canvas_item_set (view_line->private->object_item,
"points", points,
"width_units", line_width,
"fill_color_rgba", line_color_node->color,
NULL);
- gl_color_node_free (&line_color_node);
+
gnome_canvas_points_free (points);
+ gl_color_node_free (&line_color_node);
+ gl_color_node_free (&shadow_color_node);
+
gl_debug (DEBUG_VIEW, "END");
}
gdouble x, y, w, h;
glColorNode *line_color_node;
gdouble line_width;
+ gboolean shadow_state;
+ gdouble shadow_x, shadow_y;
+ glColorNode *shadow_color_node;
+ gdouble shadow_opacity;
gl_debug (DEBUG_VIEW, "START");
line_width = gl_object_editor_get_line_width (editor);
gl_label_object_set_line_width (object, line_width);
+ shadow_state = gl_object_editor_get_shadow_state (editor);
+ gl_label_object_set_shadow_state (object, shadow_state);
+
+ gl_object_editor_get_shadow_offset (editor, &shadow_x, &shadow_y);
+ gl_label_object_set_shadow_offset (object, shadow_x, shadow_y);
+
+ shadow_color_node = gl_object_editor_get_shadow_color (editor);
+ gl_label_object_set_shadow_color (object, shadow_color_node);
+ gl_color_node_free (&shadow_color_node);
+
+ shadow_opacity = gl_object_editor_get_shadow_opacity (editor);
+ gl_label_object_set_shadow_opacity (object, shadow_opacity);
+
g_signal_handlers_unblock_by_func (G_OBJECT(object),
update_editor_from_object_cb,
gdouble w, h;
glColorNode *line_color_node;
gdouble line_width;
+ gboolean shadow_state;
+ gdouble shadow_x, shadow_y;
+ glColorNode *shadow_color_node;
+ gdouble shadow_opacity;
glMerge *merge;
gl_debug (DEBUG_VIEW, "START");
line_width = gl_label_object_get_line_width (GL_LABEL_OBJECT(object));
gl_object_editor_set_line_width (editor, line_width);
+ shadow_state = gl_label_object_get_shadow_state (object);
+ gl_object_editor_set_shadow_state (editor, shadow_state);
+
+ gl_label_object_get_shadow_offset (object, &shadow_x, &shadow_y);
+ gl_object_editor_set_shadow_offset (editor, shadow_x, shadow_y);
+
+ shadow_color_node = gl_label_object_get_shadow_color (object);
+ gl_object_editor_set_shadow_color (editor, (merge != NULL), shadow_color_node);
+ gl_color_node_free (&shadow_color_node);
+
+ shadow_opacity = gl_label_object_get_shadow_opacity (object);
+ gl_object_editor_set_shadow_opacity (editor, shadow_opacity);
+
gl_debug (DEBUG_VIEW, "END");
}
label_width, label_height);
gl_object_editor_set_max_lsize (GL_OBJECT_EDITOR (editor),
label_width, label_height);
+ gl_object_editor_set_max_shadow_offset (GL_OBJECT_EDITOR (editor),
+ label_width, label_height);
merge = gl_label_get_merge (label);
gl_object_editor_set_key_names (editor, merge);