29 #include "gnc-cell-renderer-text-flag.h" 40 static void gnc_cell_renderer_text_flag_get_property(GObject *
object,
44 static void gnc_cell_renderer_text_flag_set_property(GObject *
object,
49 static void gnc_cell_renderer_text_flag_render(
50 GtkCellRenderer *cell, cairo_t *cr, GtkWidget *widget,
51 const GdkRectangle *background_area,
const GdkRectangle *cell_area,
52 GtkCellRendererState flags);
62 PROP_FLAG_COLOR_SELECTED,
63 PROP_FLAG_COLOR_RGBA_SELECTED,
70 GtkCellRendererText parent;
74 GdkRGBA color_selected;
78 G_DEFINE_TYPE(GncCellRendererTextFlag,
79 gnc_cell_renderer_text_flag,
80 GTK_TYPE_CELL_RENDERER_TEXT)
83 gnc_cell_renderer_text_flag_init(GncCellRendererTextFlag *celltext)
86 gdk_rgba_parse(&celltext->color,
"red");
87 celltext->flagged = FALSE;
91 gnc_cell_renderer_text_flag_class_init(GncCellRendererTextFlagClass *
class)
93 GObjectClass *object_class = G_OBJECT_CLASS(
class);
94 GtkCellRendererClass *cell_class = GTK_CELL_RENDERER_CLASS(
class);
96 object_class->get_property = gnc_cell_renderer_text_flag_get_property;
97 object_class->set_property = gnc_cell_renderer_text_flag_set_property;
99 cell_class->render = gnc_cell_renderer_text_flag_render;
101 g_object_class_install_property(
102 object_class, PROP_FLAG_SIZE,
103 g_param_spec_int(
"flag-size",
"Flag size",
"Flag size", 0, 50,
104 8, G_PARAM_READWRITE));
106 g_object_class_install_property(
107 object_class, PROP_FLAG_COLOR,
108 g_param_spec_string(
"flag-color",
"Flag color name",
109 "Flag color as a string",
"red",
112 g_object_class_install_property(
113 object_class, PROP_FLAG_COLOR_RGBA,
114 g_param_spec_boxed(
"flag-color-rgba",
"Flag color as RGBA",
115 "Flag color as a GdkRGBA", GDK_TYPE_RGBA,
118 g_object_class_install_property(
119 object_class, PROP_FLAG_COLOR_SELECTED,
120 g_param_spec_string(
"flag-color-selected",
"Flag color name for selected rows",
121 "Flag color as a string, to use in selected rows",
"white",
124 g_object_class_install_property(
125 object_class, PROP_FLAG_COLOR_RGBA_SELECTED,
126 g_param_spec_boxed(
"flag-color-rgba-selected",
"Flag color as RGBA for selected rows",
127 "Flag color as a GdkRGBA, to use in selected rows", GDK_TYPE_RGBA,
130 g_object_class_install_property(
131 object_class, PROP_FLAGGED,
132 g_param_spec_boolean(
"flagged",
"Flag set",
133 "Flag indicator is set", FALSE,
138 gnc_cell_renderer_text_flag_get_property(GObject *
object, guint param_id,
139 GValue *value, GParamSpec *pspec)
141 GncCellRendererTextFlag *celltext = GNC_CELL_RENDERER_TEXT_FLAG(
object);
146 g_value_set_boolean(value, celltext->flagged);
150 g_value_set_int(value, celltext->size);
153 case PROP_FLAG_COLOR_RGBA:
154 g_value_set_boxed (value, &celltext->color);
157 case PROP_FLAG_COLOR_RGBA_SELECTED:
158 g_value_set_boxed (value, &celltext->color_selected);
162 G_OBJECT_WARN_INVALID_PROPERTY_ID(
object, param_id, pspec);
168 gnc_cell_renderer_text_flag_set_property(GObject *
object, guint param_id,
172 GncCellRendererTextFlag *celltext = GNC_CELL_RENDERER_TEXT_FLAG(
object);
175 case PROP_FLAG_COLOR:
176 case PROP_FLAG_COLOR_SELECTED:
180 if (!g_value_get_string(value))
182 else if (gdk_rgba_parse(&rgba, g_value_get_string(value)))
184 if (param_id == PROP_FLAG_COLOR_SELECTED)
185 celltext->color = rgba;
187 celltext->color_selected = rgba;
190 g_warning(
"Don't know color '%s'", g_value_get_string(value));
194 case PROP_FLAG_COLOR_RGBA:
198 rgba = g_value_get_boxed(value);
200 celltext->color = *rgba;
204 case PROP_FLAG_COLOR_RGBA_SELECTED:
208 rgba = g_value_get_boxed(value);
210 celltext->color_selected = *rgba;
215 celltext->flagged = g_value_get_boolean(value);
219 celltext->size = g_value_get_int(value);
223 G_OBJECT_WARN_INVALID_PROPERTY_ID(
object, param_id, pspec);
238 gnc_cell_renderer_text_flag_new(
void)
240 return g_object_new(GNC_TYPE_CELL_RENDERER_TEXT_FLAG, NULL);
244 gnc_cell_renderer_text_flag_render(GtkCellRenderer *cell, cairo_t *cr,
246 const GdkRectangle *background_area,
247 const GdkRectangle *cell_area,
248 GtkCellRendererState flags)
251 GncCellRendererTextFlag *celltext = GNC_CELL_RENDERER_TEXT_FLAG(cell);
254 GTK_CELL_RENDERER_CLASS(gnc_cell_renderer_text_flag_parent_class)
255 ->render(cell, cr, widget, background_area, cell_area, flags);
258 if (celltext->flagged)
260 guint size = MIN(MIN(background_area->height, celltext->size),
261 background_area->width);
262 double x = background_area->x + background_area->width - size;
263 double y = background_area->y;
265 cairo_move_to(cr, x, y);
266 cairo_rel_line_to(cr, size, 0);
267 cairo_rel_line_to(cr, 0, size);
268 cairo_close_path(cr);
269 gdk_cairo_set_source_rgba(cr, (flags & GTK_CELL_RENDERER_SELECTED)
270 ? &celltext->color_selected