diff --git a/src/zmapWindow/zmapWindowDraw.c b/src/zmapWindow/zmapWindowDraw.c index 690756218e7264f5a8ad62055f0c4f16c83a35ea..2135e38d5397ec46adb8376ce0607bda57cb415b 100755 --- a/src/zmapWindow/zmapWindowDraw.c +++ b/src/zmapWindow/zmapWindowDraw.c @@ -28,9 +28,9 @@ * * Exported functions: See zmapWindow_P.h * HISTORY: - * Last edited: Nov 7 08:55 2006 (rds) + * Last edited: Nov 7 09:49 2006 (rds) * Created: Thu Sep 8 10:34:49 2005 (edgrif) - * CVS info: $Id: zmapWindowDraw.c,v 1.35 2006-11-07 08:59:57 rds Exp $ + * CVS info: $Id: zmapWindowDraw.c,v 1.36 2006-11-07 09:51:09 rds Exp $ *------------------------------------------------------------------- */ @@ -424,6 +424,8 @@ void zmapWindowColumnBump(FooCanvasItem *column_item, ZMapStyleOverlapMode bump_ bump_data.pos_hash = g_hash_table_new_full(NULL, NULL, /* NULL => use direct hash */ NULL, hashDataDestroyCB) ; break ; + case ZMAPOVERLAP_ITEM_OVERLAP: + break; case ZMAPOVERLAP_COMPLEX: case ZMAPOVERLAP_NO_INTERLEAVE: { @@ -1117,6 +1119,26 @@ static void bumpColCB(gpointer data, gpointer user_data) break ; } + case ZMAPOVERLAP_ITEM_OVERLAP: + { + /* Bump features over if they overlap at all. */ + BumpColRange new_range ; + + new_range = g_new0(BumpColRangeStruct, 1) ; + new_range->y1 = y1 ; + new_range->y2 = y2 ; + new_range->offset = 0.0 ; + new_range->incr = x2 - x1 + 1.0;//bump_data->incr ; + + g_list_foreach(bump_data->pos_list, compareListOverlapCB, new_range) ; + + bump_data->pos_list = g_list_append(bump_data->pos_list, new_range) ; + + offset = new_range->offset ; + + break ; + } + break; default: zMapAssertNotReached() ; break ; @@ -1129,6 +1151,12 @@ static void bumpColCB(gpointer data, gpointer user_data) dx = (feature->style->width - (x2 - x1)) / 2 ; offset += dx ; + /* Not having something like this appears to be part of the cause of the oddness. Not all though */ + if(offset < 0.0) + offset = 0.0; + + /* This does a item_get_bounds... don't we already have them? + * Might be missing something though. Why doesn't the "Bump" bit calculate offsets? */ my_foo_canvas_item_goto(item, &(offset), NULL) ; return ;