static void ctree_detach_styles (GtkCMCTree *ctree,
GtkCMCTreeNode *node,
gpointer data);
-static void draw_drag_highlight (GtkCMCList *clist,
- GtkCMCListRow *dest_row,
- gint dest_row_number,
- GtkCMCListDragPos drag_pos);
static void set_cell_contents (GtkCMCList *clist,
GtkCMCListRow *clist_row,
gint column,
cairo_fill(cr);
cairo_new_path(cr);
- gdk_cairo_set_source_color(cr, >k_widget_get_style(ctree)->fg[GTK_STATE_NORMAL]);
+ gdk_cairo_set_source_color(cr, >k_widget_get_style(GTK_WIDGET(ctree))->fg[GTK_STATE_NORMAL]);
cairo_set_line_width(cr, 1);
cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE);
cairo_move_to(cr, points[0].x, points[0].y);
GtkWidget *widget;
GtkStyle *style;
GtkCMCTree *ctree;
- GdkRectangle *rect;
GdkRectangle *crect;
GdkRectangle row_rectangle;
GdkRectangle cell_rectangle;
GdkRectangle clip_rectangle;
GdkRectangle intersect_rectangle;
gint last_column;
- gint column_left = 0;
- gint column_right = 0;
gint offset = 0;
gint state;
gint i;
static GdkColor greybg={0, 0, 0, 0};
static gboolean color_change = TRUE;
cairo_t *cr;
- GdkColor *fgcolor, *bgcolor, *focuscolor;
+ GdkColor *fgcolor, *bgcolor;
cm_return_if_fail (clist != NULL);
widget = GTK_WIDGET (clist);
- style = gtk_widget_get_style (widget);
+ style = clist_row->style ? clist_row->style : gtk_widget_get_style (widget);
if (greybg.pixel == 0 &&
greybg.red == 0 &&
if (prefs_common.use_stripes_everywhere && GTK_SCTREE(ctree)->show_stripes
&& color_change && row % 2) {
bgcolor = &greybg;
- focuscolor = &greybg;
} else {
bgcolor = &style->base[GTK_STATE_NORMAL];
- focuscolor = &style->base[GTK_STATE_NORMAL];
}
state = clist_row->state;
cr = gdk_cairo_create(clist->clist_window);
- fgcolor = &style->fg[clist_row->state];
+
+ if (clist_row->fg_set && state != GTK_STATE_SELECTED)
+ fgcolor = &clist_row->foreground;
+ else
+ fgcolor = &style->fg[clist_row->state];
/* draw the cell borders */
if (area)
{
- rect = &intersect_rectangle;
crect = &intersect_rectangle;
if (gdk_rectangle_intersect (area, &cell_rectangle, crect)) {
- gdk_cairo_rectangle(cr, crect);
+ gdk_cairo_rectangle(cr, &cell_rectangle);
gdk_cairo_set_source_color(cr, &style->base[GTK_STATE_NORMAL]);
cairo_fill(cr);
}
}
else
{
- rect = &clip_rectangle;
crect = &cell_rectangle;
- gdk_cairo_rectangle(cr, crect);
+ gdk_cairo_rectangle(cr, &cell_rectangle);
gdk_cairo_set_source_color(cr, &style->base[GTK_STATE_NORMAL]);
cairo_fill(cr);
}
pixbuf_width = 0;
height = 0;
- gdk_cairo_rectangle(cr, &cell_rectangle);
- if (state == GTK_STATE_NORMAL)
- gdk_cairo_set_source_color(cr, bgcolor);
- else
- gdk_cairo_set_source_color(cr, &style->base[state]);
- cairo_fill(cr);
if (area && !gdk_rectangle_intersect (area, &cell_rectangle,
&intersect_rectangle))
{
}
else
{
+ gdk_cairo_rectangle(cr, &cell_rectangle);
+ if (state == GTK_STATE_NORMAL)
+ gdk_cairo_set_source_color(cr, bgcolor);
+ else
+ gdk_cairo_set_source_color(cr, &style->base[state]);
+ cairo_fill(cr);
+
layout = create_cell_layout (clist, clist_row, i);
if (layout)
{
g_object_unref (G_OBJECT (layout));
}
}
+ /* draw focus rectangle */
+ if (clist->focus_row == row &&
+ gtk_widget_get_can_focus (widget) && gtk_widget_has_focus (widget))
+ {
+ if (!area || gdk_rectangle_intersect (area, &row_rectangle,
+ &intersect_rectangle))
+ {
+ cairo_set_line_width(cr, 1.0);
+ cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE);
+ gdk_cairo_set_source_color(cr, &style->fg[GTK_STATE_NORMAL]);
+ cairo_rectangle(cr, row_rectangle.x, row_rectangle.y,
+ row_rectangle.width + 1,
+ row_rectangle.height);
+ cairo_stroke(cr);
+ }
+ }
cairo_destroy(cr);
}
clist_class->selection_find = selection_find;
clist_class->click_column = NULL;
clist_class->draw_row = draw_row;
- clist_class->draw_drag_highlight = draw_drag_highlight;
clist_class->clear = real_clear;
clist_class->select_all = real_select_all;
clist_class->unselect_all = real_unselect_all;
GtkCMCList *clist;
GtkCMCTreeNode *node;
GtkCMCTreeNode *child;
- GtkStyle *style;
gint i;
cm_return_if_fail (GTK_IS_CMCTREE (widget));
gtk_cmctree_pre_recursive (ctree, child, ctree_attach_styles, NULL);
node = GTK_CMCTREE_NODE_NEXT (node);
}
-
- style = gtk_widget_get_style(widget);
}
static void
return GTK_WIDGET_CLASS (parent_class)->button_press_event (widget, event);
}
-static void
-draw_drag_highlight (GtkCMCList *clist,
- GtkCMCListRow *dest_row,
- gint dest_row_number,
- GtkCMCListDragPos drag_pos)
-{
- GtkAllocation allocation;
- GtkCMCTree *ctree;
- GdkPoint points[4];
- gint level;
- gint i;
- gint y = 0;
-
- cm_return_if_fail (GTK_IS_CMCTREE (clist));
-
- ctree = GTK_CMCTREE (clist);
- gtk_widget_get_allocation(GTK_WIDGET(ctree), &allocation);
-
- level = ((GtkCMCTreeRow *)(dest_row))->level;
-
- y = ROW_TOP_YPIXEL (clist, dest_row_number) - 1;
-
- switch (drag_pos)
- {
- case GTK_CMCLIST_DRAG_NONE:
- break;
- case GTK_CMCLIST_DRAG_AFTER:
- y += clist->row_height + 1;
- case GTK_CMCLIST_DRAG_BEFORE:
-
- if (clist->column[ctree->tree_column].visible)
- switch (clist->column[ctree->tree_column].justification)
- {
- case GTK_JUSTIFY_CENTER:
- case GTK_JUSTIFY_FILL:
- case GTK_JUSTIFY_LEFT:
- if (ctree->tree_column > 0)
- gdk_draw_line (clist->clist_window, clist->xor_gc,
- COLUMN_LEFT_XPIXEL(clist, 0), y,
- COLUMN_LEFT_XPIXEL(clist, ctree->tree_column - 1)+
- clist->column[ctree->tree_column - 1].area.width,
- y);
-
- gdk_draw_line (clist->clist_window, clist->xor_gc,
- COLUMN_LEFT_XPIXEL(clist, ctree->tree_column) +
- ctree->tree_indent * level -
- (ctree->tree_indent - PM_SIZE) / 2, y,
- allocation.width, y);
- break;
- case GTK_JUSTIFY_RIGHT:
- if (ctree->tree_column < clist->columns - 1)
- gdk_draw_line (clist->clist_window, clist->xor_gc,
- COLUMN_LEFT_XPIXEL(clist, ctree->tree_column + 1),
- y,
- COLUMN_LEFT_XPIXEL(clist, clist->columns - 1) +
- clist->column[clist->columns - 1].area.width, y);
-
- gdk_draw_line (clist->clist_window, clist->xor_gc,
- 0, y, COLUMN_LEFT_XPIXEL(clist, ctree->tree_column)
- + clist->column[ctree->tree_column].area.width -
- ctree->tree_indent * level +
- (ctree->tree_indent - PM_SIZE) / 2, y);
- break;
- }
- else
- gdk_draw_line (clist->clist_window, clist->xor_gc,
- 0, y, clist->clist_window_width, y);
- break;
- case GTK_CMCLIST_DRAG_INTO:
- y = ROW_TOP_YPIXEL (clist, dest_row_number) + clist->row_height;
-
- if (clist->column[ctree->tree_column].visible)
- switch (clist->column[ctree->tree_column].justification)
- {
- case GTK_JUSTIFY_CENTER:
- case GTK_JUSTIFY_FILL:
- case GTK_JUSTIFY_LEFT:
- points[0].x = COLUMN_LEFT_XPIXEL(clist, ctree->tree_column) +
- ctree->tree_indent * level - (ctree->tree_indent - PM_SIZE) / 2;
- points[0].y = y;
- points[3].x = points[0].x;
- points[3].y = y - clist->row_height - 1;
- points[1].x = clist->clist_window_width - 1;
- points[1].y = points[0].y;
- points[2].x = points[1].x;
- points[2].y = points[3].y;
-
- for (i = 0; i < 3; i++)
- gdk_draw_line (clist->clist_window, clist->xor_gc,
- points[i].x, points[i].y,
- points[i+1].x, points[i+1].y);
-
- if (ctree->tree_column > 0)
- {
- points[0].x = COLUMN_LEFT_XPIXEL(clist,
- ctree->tree_column - 1) +
- clist->column[ctree->tree_column - 1].area.width ;
- points[0].y = y;
- points[3].x = points[0].x;
- points[3].y = y - clist->row_height - 1;
- points[1].x = 0;
- points[1].y = points[0].y;
- points[2].x = 0;
- points[2].y = points[3].y;
-
- for (i = 0; i < 3; i++)
- gdk_draw_line (clist->clist_window, clist->xor_gc,
- points[i].x, points[i].y, points[i+1].x,
- points[i+1].y);
- }
- break;
- case GTK_JUSTIFY_RIGHT:
- points[0].x = COLUMN_LEFT_XPIXEL(clist, ctree->tree_column) -
- ctree->tree_indent * level + (ctree->tree_indent - PM_SIZE) / 2 +
- clist->column[ctree->tree_column].area.width;
- points[0].y = y;
- points[3].x = points[0].x;
- points[3].y = y - clist->row_height - 1;
- points[1].x = 0;
- points[1].y = points[0].y;
- points[2].x = 0;
- points[2].y = points[3].y;
-
- for (i = 0; i < 3; i++)
- gdk_draw_line (clist->clist_window, clist->xor_gc,
- points[i].x, points[i].y,
- points[i+1].x, points[i+1].y);
-
- if (ctree->tree_column < clist->columns - 1)
- {
- points[0].x = COLUMN_LEFT_XPIXEL(clist, ctree->tree_column +1);
- points[0].y = y;
- points[3].x = points[0].x;
- points[3].y = y - clist->row_height - 1;
- points[1].x = clist->clist_window_width - 1;
- points[1].y = points[0].y;
- points[2].x = points[1].x;
- points[2].y = points[3].y;
-
- for (i = 0; i < 3; i++)
- gdk_draw_line (clist->clist_window, clist->xor_gc,
- points[i].x, points[i].y,
- points[i+1].x, points[i+1].y);
- }
- break;
- }
- else
- gdk_draw_rectangle (clist->clist_window, clist->xor_gc, FALSE,
- 0, y - clist->row_height,
- clist->clist_window_width - 1, clist->row_height);
- break;
- }
-}
-
static gint
gtk_cmctree_get_offset(GtkCMCTree *ctree,
GtkCMCTreeRow *ctree_row,
GdkDragContext *context)
{
GtkCMCList *clist;
- GtkCMCTree *ctree;
gboolean use_icons;
cm_return_if_fail (GTK_IS_CMCTREE (widget));
cm_return_if_fail (context != NULL);
clist = GTK_CMCLIST (widget);
- ctree = GTK_CMCTREE (widget);
use_icons = GTK_CMCLIST_USE_DRAG_ICONS (clist);
GTK_CMCLIST_UNSET_FLAG (clist, CMCLIST_USE_DRAG_ICONS);
if (use_icons)
{
- GtkCMCTreeNode *node;
-
GTK_CMCLIST_SET_FLAG (clist, CMCLIST_USE_DRAG_ICONS);
- node = GTK_CMCTREE_NODE (g_list_nth (clist->row_list,
- clist->click_cell.row));
gtk_drag_set_icon_default (context);
}
}
(new_info.cell.row == dest_info->cell.row &&
dest_info->insert_pos != new_info.insert_pos))
{
- if (dest_info->cell.row >= 0)
- GTK_CMCLIST_GET_CLASS (clist)->draw_drag_highlight
- (clist,
- g_list_nth (clist->row_list, dest_info->cell.row)->data,
- dest_info->cell.row, dest_info->insert_pos);
-
dest_info->insert_pos = new_info.insert_pos;
dest_info->cell.row = new_info.cell.row;
dest_info->cell.column = new_info.cell.column;
- GTK_CMCLIST_GET_CLASS (clist)->draw_drag_highlight
- (clist,
- g_list_nth (clist->row_list, dest_info->cell.row)->data,
- dest_info->cell.row, dest_info->insert_pos);
-
clist->drag_highlight_row = dest_info->cell.row;
clist->drag_highlight_pos = dest_info->insert_pos;