aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/e-table/e-cell-toggle.c
diff options
context:
space:
mode:
Diffstat (limited to 'widgets/e-table/e-cell-toggle.c')
-rw-r--r--widgets/e-table/e-cell-toggle.c47
1 files changed, 38 insertions, 9 deletions
diff --git a/widgets/e-table/e-cell-toggle.c b/widgets/e-table/e-cell-toggle.c
index 33e4d283ee..b12db945b3 100644
--- a/widgets/e-table/e-cell-toggle.c
+++ b/widgets/e-table/e-cell-toggle.c
@@ -19,7 +19,7 @@
#define PARENT_TYPE e_cell_get_type()
-Typedef struct {
+typedef struct {
ECellView cell_view;
GdkGC *gc;
GnomeCanvas *canvas;
@@ -71,10 +71,13 @@ etog_draw (ECellView *ecell_view, GdkDrawable *drawable,
int col, int row, gboolean selected,
int x1, int y1, int x2, int y2)
{
- ECellToggle *toggle = E_CELL_TOGGLE (e_cell_view->ecell);
+ ECellToggle *toggle = E_CELL_TOGGLE (ecell_view->ecell);
ECellToggleView *toggle_view = (ECellToggleView *) ecell_view;
GdkPixbuf *image;
- const int value = e_table_model_value_at (ecell_view->ecell->table_model, col, row);
+ ArtPixBuf *art;
+ int x, y, width, height;
+ const int value = GPOINTER_TO_INT (
+ e_table_model_value_at (ecell_view->ecell->table_model, col, row));
if (value >= toggle->n_states){
g_warning ("Value from the table model is %d, the states we support are [0..%d)\n",
@@ -83,19 +86,43 @@ etog_draw (ECellView *ecell_view, GdkDrawable *drawable,
}
image = toggle->images [value];
+ art = image->art_pixbuf;
+
+ if ((x2 - x1) < art->width){
+ x = x1;
+ width = x2 - x1;
+ } else {
+ x = x1 + ((x2 - x1) - art->width) / 2;
+ width = art->width;
+ }
+
+ if ((y2 - y1) < art->height){
+ y = y1;
+ height = y2 - y1;
+ } else {
+ y = y1 + ((y2 - y1) - art->height) / 2;
+ height = art->height;
+ }
+ width = y2 - y1;
+ gdk_pixbuf_render_to_drawable_alpha (
+ image, drawable, 0, 0, x, y,
+ width, height,
+ GDK_PIXBUF_ALPHA_FULL, 0,
+ GDK_RGB_DITHER_NORMAL,
+ 0, 0);
}
static void
etog_set_value (ECellToggleView *toggle_view, int col, int row, int value)
{
- ECell *ecell = toggle_view->cell_view.ecell
+ ECell *ecell = toggle_view->cell_view.ecell;
ECellToggle *toggle = E_CELL_TOGGLE (ecell);
- if (value >= toggle->n_vals)
+ if (value >= toggle->n_states)
value = 0;
- e_table_model_set_value_at (ecell->table_model, col, row, value);
+ e_table_model_set_value_at (ecell->table_model, col, row, GINT_TO_POINTER (value));
etog_queue_redraw (toggle_view, col, row);
}
@@ -105,9 +132,10 @@ etog_set_value (ECellToggleView *toggle_view, int col, int row, int value)
static gint
etog_event (ECellView *ecell_view, GdkEvent *event, int col, int row)
{
- ECellToggle *toggle = E_CELL_TOGGLE (e_cell_view->ecell);
+ ECellToggle *toggle = E_CELL_TOGGLE (ecell_view->ecell);
ECellToggleView *toggle_view = (ECellToggleView *) ecell_view;
- int value = e_table_model_value_at (e_cell_view->ecell->table_model, col, row);
+ void *_value = e_table_model_value_at (ecell_view->ecell->table_model, col, row);
+ const int value = GPOINTER_TO_INT (_value);
switch (event->type){
case GDK_BUTTON_RELEASE:
@@ -133,7 +161,7 @@ etog_event (ECellView *ecell_view, GdkEvent *event, int col, int row)
static int
etog_height (ECellView *ecell_view, int col, int row)
{
- ECellToggle *toggle = E_CELL_TOGGLE (e_cell_view->ecell);
+ ECellToggle *toggle = E_CELL_TOGGLE (ecell_view->ecell);
return toggle->height;
}
@@ -174,6 +202,7 @@ void
e_cell_toggle_construct (ECellToggle *etog, ETableModel *etm, int border, int n_states, GdkPixbuf **images)
{
int max_height = 0;
+ int i;
E_CELL (etog)->table_model = etm;