From 524b64a66387dc96a734d3c275192abcf3d750fa Mon Sep 17 00:00:00 2001 From: rds <rds> Date: Thu, 30 Apr 2009 08:38:52 +0000 Subject: [PATCH] Remove style from the items... --- .../items/zmapWindowAlignmentFeature.c | 15 +-- src/zmapWindow/items/zmapWindowBasicFeature.c | 6 +- src/zmapWindow/items/zmapWindowCanvasItem.c | 94 ++++++++++++++----- src/zmapWindow/items/zmapWindowCanvasItem.h | 13 ++- src/zmapWindow/items/zmapWindowCanvasItem_I.h | 37 ++++---- .../items/zmapWindowCollectionFeature.c | 14 +-- .../items/zmapWindowCollectionFeature.h | 27 +++++- src/zmapWindow/items/zmapWindowGlyphItem.c | 60 ++++++++++-- src/zmapWindow/items/zmapWindowTextFeature.c | 10 +- .../items/zmapWindowTranscriptFeature.c | 8 +- 10 files changed, 208 insertions(+), 76 deletions(-) diff --git a/src/zmapWindow/items/zmapWindowAlignmentFeature.c b/src/zmapWindow/items/zmapWindowAlignmentFeature.c index 98c793768..d502ea056 100755 --- a/src/zmapWindow/items/zmapWindowAlignmentFeature.c +++ b/src/zmapWindow/items/zmapWindowAlignmentFeature.c @@ -27,9 +27,9 @@ * * Exported functions: See XXXXXXXXXXXXX.h * HISTORY: - * Last edited: Apr 16 15:09 2009 (rds) + * Last edited: Apr 29 19:47 2009 (rds) * Created: Wed Dec 3 10:02:22 2008 (rds) - * CVS info: $Id: zmapWindowAlignmentFeature.c,v 1.1 2009-04-23 09:12:46 rds Exp $ + * CVS info: $Id: zmapWindowAlignmentFeature.c,v 1.2 2009-04-30 08:38:52 rds Exp $ *------------------------------------------------------------------- */ @@ -128,18 +128,21 @@ GType zMapWindowAlignmentFeatureGetType(void) void zmap_window_alignment_feature_clear(ZMapWindowCanvasItem canvas_item) { ZMapWindowAlignmentFeature alignment; + ZMapFeatureTypeStyle style; unsigned int unused = 0; alignment = ZMAP_WINDOW_ALIGNMENT_FEATURE(canvas_item); + style = (ZMAP_CANVAS_ITEM_GET_CLASS(canvas_item)->get_style)(canvas_item); + if(alignment->flags.no_gaps_hidden == 0 && alignment->flags.no_gaps_display == 1 && - zMapStyleGetGappedAligns(canvas_item->style, &unused)) + zMapStyleGetGappedAligns(style, &unused)) { zMapWindowAlignmentFeatureGappedDisplay(alignment); } else if(alignment->flags.gapped_display == 1 && - zMapStyleGetGappedAligns(canvas_item->style, &unused) == 0) + zMapStyleGetGappedAligns(style, &unused) == 0) { /* remove all the gapped items... */ @@ -318,7 +321,7 @@ static void zmap_window_alignment_feature_set_colour(ZMapWindowCanvasItem align fill = outline = foreground = background = NULL; - style = alignment->style; + style = (ZMAP_CANVAS_ITEM_GET_CLASS(alignment)->get_style)(alignment); if((colour_type == ZMAPSTYLE_COLOURTYPE_SELECTED) || (zMapStyleGetColours(style, ZMAPSTYLE_COLOURTARGET_NORMAL, colour_type, @@ -378,7 +381,7 @@ static FooCanvasItem *zmap_window_alignment_feature_add_interval(ZMapWindowCanva g_return_val_if_fail(alignment != NULL, NULL); - style = alignment->style; + style = (ZMAP_CANVAS_ITEM_GET_CLASS(alignment)->get_style)(alignment); if(sub_feature_in) sub_feature = sub_feature_in; diff --git a/src/zmapWindow/items/zmapWindowBasicFeature.c b/src/zmapWindow/items/zmapWindowBasicFeature.c index f5377d93a..d8234d781 100755 --- a/src/zmapWindow/items/zmapWindowBasicFeature.c +++ b/src/zmapWindow/items/zmapWindowBasicFeature.c @@ -27,9 +27,9 @@ * * Exported functions: See XXXXXXXXXXXXX.h * HISTORY: - * Last edited: Apr 16 15:11 2009 (rds) + * Last edited: Apr 29 19:48 2009 (rds) * Created: Wed Dec 3 10:02:22 2008 (rds) - * CVS info: $Id: zmapWindowBasicFeature.c,v 1.1 2009-04-23 09:12:46 rds Exp $ + * CVS info: $Id: zmapWindowBasicFeature.c,v 1.2 2009-04-30 08:38:52 rds Exp $ *------------------------------------------------------------------- */ @@ -107,7 +107,7 @@ static FooCanvasItem *zmap_window_basic_feature_add_interval(ZMapWindowCanvasIte ZMapFeature feature; feature = basic->feature; - style = basic->style; + style = (ZMAP_CANVAS_ITEM_GET_CLASS(basic)->get_style)(basic); if(feature->strand == ZMAPSTRAND_REVERSE && zMapStyleColourByStrand(style)) status = zMapStyleGetColours(style, ZMAPSTYLE_COLOURTARGET_STRAND, diff --git a/src/zmapWindow/items/zmapWindowCanvasItem.c b/src/zmapWindow/items/zmapWindowCanvasItem.c index ed803a318..049de3153 100755 --- a/src/zmapWindow/items/zmapWindowCanvasItem.c +++ b/src/zmapWindow/items/zmapWindowCanvasItem.c @@ -27,9 +27,9 @@ * * Exported functions: See XXXXXXXXXXXXX.h * HISTORY: - * Last edited: Apr 16 15:37 2009 (rds) + * Last edited: Apr 29 19:43 2009 (rds) * Created: Wed Dec 3 09:00:20 2008 (rds) - * CVS info: $Id: zmapWindowCanvasItem.c,v 1.1 2009-04-23 09:12:46 rds Exp $ + * CVS info: $Id: zmapWindowCanvasItem.c,v 1.2 2009-04-30 08:38:52 rds Exp $ *------------------------------------------------------------------- */ @@ -80,6 +80,7 @@ static void zmap_window_canvas_item_set_colour(ZMapWindowCanvasItem canvas_item ZMapWindowItemFeature unused, ZMapStyleColourType colour_type, GdkColor *default_fill); +static ZMapFeatureTypeStyle zmap_window_canvas_item_get_style(ZMapWindowCanvasItem canvas_item); /* FooCanvasItem interface methods */ static void zmap_window_canvas_item_update (FooCanvasItem *item, @@ -146,8 +147,7 @@ static GQuark zmap_window_canvas_item_get_domain(void) * * Return value: The type ID of the &ZMapWindowCanvasItem class. **/ -GType -zMapWindowCanvasItemGetType (void) +GType zMapWindowCanvasItemGetType (void) { static GType group_type = 0; @@ -184,9 +184,14 @@ void zMapWindowCanvasItemCheckSize(ZMapWindowCanvasItem canvas_item) if(feature) { + ZMapFeatureTypeStyle style = NULL; + + style = (ZMAP_CANVAS_ITEM_GET_CLASS(canvas_item)->get_style)(canvas_item); + x1 = y1 = 0.0; -#warning FIX ME - x2 = 16.0; + + x2 = zMapStyleGetWidth(style) - 1.0; + y2 = (double)(feature->x2 - feature->x1 + 1.0); update_background_box_size(canvas_item, x1, 0.0, x2, 0.0); @@ -218,7 +223,6 @@ ZMapWindowCanvasItem zMapWindowCanvasItemCreate(FooCanvasGroup *parent, GObject *object; canvas_item = ZMAP_CANVAS_ITEM(item); canvas_item->feature = feature; - canvas_item->style = feature_style; if(ZMAP_CANVAS_ITEM_GET_CLASS(canvas_item)->post_create) (* ZMAP_CANVAS_ITEM_GET_CLASS(canvas_item)->post_create)(canvas_item); @@ -339,12 +343,15 @@ void zMapWindowCanvasItemGetBumpBounds(ZMapWindowCanvasItem canvas_item, if(x1_out && x2_out) { - double w; + ZMapFeatureTypeStyle style; + double width; - w = zMapStyleGetWidth(canvas_item->style); + style = (ZMAP_CANVAS_ITEM_GET_CLASS(canvas_item)->get_style)(canvas_item); - if(x1 + w > x2) - x2 += w; + width = zMapStyleGetWidth(style); + + if(x1 + width > x2) + x2 = x1 + width; if(x1_out) @@ -527,6 +534,12 @@ FooCanvasItem *zMapWindowCanvasItemGetInterval(ZMapWindowCanvasItem canvas_item, point_item = child; dist = 0.0; /* text point is broken. the x factor is _not_ good enough. */ } + else if(ZMAP_IS_WINDOW_GLYPH_ITEM(child)) + { + /* glyph items are quite complex and really need to check bounds rather than point. */ + point_item = child; + dist = 0.0; + } else /* enables groups to be included in the ZMapWindowCanvasItem tree */ dist = window_canvas_item_invoke_point (child, gx, gy, cx, cy, &point_item); @@ -760,7 +773,7 @@ void zMapWindowCanvasItemReparent(FooCanvasItem *item, FooCanvasGroup *new_group /* INTERNALS */ /* Class initialization function for ZMapWindowCanvasItemClass */ -static void zmap_window_canvas_item_class_init (ZMapWindowCanvasItemClass class) +static void zmap_window_canvas_item_class_init (ZMapWindowCanvasItemClass window_class) { GObjectClass *gobject_class; GtkObjectClass *object_class; @@ -776,9 +789,9 @@ static void zmap_window_canvas_item_class_init (ZMapWindowCanvasItemClass class) 0x00, 0x00 } ; - gobject_class = (GObjectClass *) class; - object_class = (GtkObjectClass *) class; - item_class = (FooCanvasItemClass *) class; + gobject_class = (GObjectClass *)window_class; + object_class = (GtkObjectClass *)window_class; + item_class = (FooCanvasItemClass *)window_class; canvas_item_type = g_type_from_name(ZMAP_WINDOW_CANVAS_ITEM_NAME); parent_type = g_type_parent(canvas_item_type); @@ -827,13 +840,16 @@ static void zmap_window_canvas_item_class_init (ZMapWindowCanvasItemClass class) item_class->translate = zmap_window_canvas_item_translate; item_class->bounds = zmap_window_canvas_item_bounds; - class->post_create = zmap_window_canvas_item_post_create; - class->check_data = zmap_window_canvas_item_check_data; - class->set_colour = zmap_window_canvas_item_set_colour; + window_class->post_create = zmap_window_canvas_item_post_create; + window_class->check_data = zmap_window_canvas_item_check_data; + window_class->set_colour = zmap_window_canvas_item_set_colour; + window_class->get_style = zmap_window_canvas_item_get_style; - class->fill_stipple = gdk_bitmap_create_from_data(NULL, &make_clickable_bmp_bits[0], - make_clickable_bmp_width, make_clickable_bmp_height) ; - + window_class->fill_stipple = gdk_bitmap_create_from_data(NULL, &make_clickable_bmp_bits[0], + make_clickable_bmp_width, + make_clickable_bmp_height) ; + + //window_class->long_items = zmapWindowLongItemCreate(); return ; } @@ -961,7 +977,6 @@ static void zmap_window_canvas_item_destroy (GObject *object) } canvas_item->feature = NULL; - canvas_item->style = NULL; if(GTK_OBJECT_CLASS (group_parent_class_G)->destroy) (GTK_OBJECT_CLASS (group_parent_class_G)->destroy)(GTK_OBJECT(object)); @@ -1041,6 +1056,31 @@ static void zmap_window_canvas_item_post_create(ZMapWindowCanvasItem canvas_item return ; } +static ZMapFeatureTypeStyle zmap_window_canvas_item_get_style(ZMapWindowCanvasItem canvas_item) +{ + ZMapFeatureTypeStyle style = NULL; + ZMapWindowItemFeatureSetData set_data; + FooCanvasItem *item; + FooCanvasItem *container_parent; + + g_return_val_if_fail(canvas_item != NULL, NULL); + g_return_val_if_fail(canvas_item->feature != NULL, NULL); + + item = FOO_CANVAS_ITEM(canvas_item); + + if(item->parent && item->parent->parent) + { + container_parent = item->parent->parent; + + set_data = g_object_get_data(G_OBJECT(container_parent), + ITEM_FEATURE_SET_DATA); + + style = zmapWindowStyleTableFind(set_data->style_table, + canvas_item->feature->style_id); + } + + return style; +} /* Update handler for canvas groups */ static void zmap_window_canvas_item_update (FooCanvasItem *item, double i2w_dx, double i2w_dy, int flags) @@ -1230,12 +1270,16 @@ static void zmap_window_canvas_item_draw (FooCanvasItem *item, GdkDrawable *draw canvas_item = ZMAP_CANVAS_ITEM(item); + for(i = (item->object.flags & FOO_CANVAS_ITEM_VISIBLE ? 0 : WINDOW_ITEM_COUNT); i < WINDOW_ITEM_COUNT; ++i) { if(i == WINDOW_ITEM_OVERLAY) - (* group_parent_class_G->draw) (item, drawable, expose); - + { + + (* group_parent_class_G->draw) (item, drawable, expose); + } + if(!(draw_me = canvas_item->items[i])) continue; else @@ -1385,7 +1429,7 @@ static void zmap_window_canvas_item_set_colour(ZMapWindowCanvasItem canvas_item g_return_if_fail(canvas_item != NULL); g_return_if_fail(interval != NULL); - if((style = canvas_item->style)) + if((style = (ZMAP_CANVAS_ITEM_GET_CLASS(canvas_item)->get_style)(canvas_item))) { zMapStyleGetColours(style, ZMAPSTYLE_COLOURTARGET_NORMAL, colour_type, &fill, NULL, &outline); diff --git a/src/zmapWindow/items/zmapWindowCanvasItem.h b/src/zmapWindow/items/zmapWindowCanvasItem.h index cec1b7c44..c3bc0e8a8 100755 --- a/src/zmapWindow/items/zmapWindowCanvasItem.h +++ b/src/zmapWindow/items/zmapWindowCanvasItem.h @@ -27,9 +27,9 @@ * * Exported functions: See XXXXXXXXXXXXX.h * HISTORY: - * Last edited: Apr 6 15:35 2009 (rds) + * Last edited: Apr 24 15:18 2009 (rds) * Created: Wed Dec 3 08:21:03 2008 (rds) - * CVS info: $Id: zmapWindowCanvasItem.h,v 1.1 2009-04-23 09:12:46 rds Exp $ + * CVS info: $Id: zmapWindowCanvasItem.h,v 1.2 2009-04-30 08:38:52 rds Exp $ *------------------------------------------------------------------- */ @@ -92,6 +92,9 @@ void zMapWindowCanvasItemGetBumpBounds(ZMapWindowCanvasItem canvas_item, gboolean zMapWindowCanvasItemCheckData(ZMapWindowCanvasItem canvas_item, GError **error); void zMapWindowCanvasItemClear(ZMapWindowCanvasItem canvas_item); +void zMapWindowCanvasItemClearOverlay(ZMapWindowCanvasItem canvas_item); +void zMapWindowCanvasItemClearUnderlay(ZMapWindowCanvasItem canvas_item); + FooCanvasItem *zMapWindowCanvasItemGetInterval(ZMapWindowCanvasItem canvas_item, double x, double y); @@ -101,9 +104,15 @@ ZMapWindowCanvasItem zMapWindowCanvasItemIntervalGetObject(FooCanvasItem *item); void zMapWindowCanvasItemSetIntervalColours(ZMapWindowCanvasItem canvas_item, ZMapStyleColourType colour_type, GdkColor *default_fill_colour); +void zMapWindowCanvasItemUnmark(ZMapWindowCanvasItem canvas_item); +void zMapWindowCanvasItemMark(ZMapWindowCanvasItem canvas_item, + GdkColor *colour, + GdkBitmap *bitmap); void zMapWindowCanvasItemReparent(FooCanvasItem *item, FooCanvasGroup *new_group); +ZMapWindowCanvasItem zMapWindowCanvasItemDestroy(ZMapWindowCanvasItem canvas_item); + #include <zmapWindowBasicFeature.h> #include <zmapWindowTranscriptFeature.h> diff --git a/src/zmapWindow/items/zmapWindowCanvasItem_I.h b/src/zmapWindow/items/zmapWindowCanvasItem_I.h index 780934bd1..d1ce2567d 100755 --- a/src/zmapWindow/items/zmapWindowCanvasItem_I.h +++ b/src/zmapWindow/items/zmapWindowCanvasItem_I.h @@ -27,9 +27,9 @@ * * Exported functions: See XXXXXXXXXXXXX.h * HISTORY: - * Last edited: Jan 29 11:45 2009 (rds) + * Last edited: Apr 29 19:44 2009 (rds) * Created: Wed Dec 3 08:38:10 2008 (rds) - * CVS info: $Id: zmapWindowCanvasItem_I.h,v 1.1 2009-04-23 09:12:46 rds Exp $ + * CVS info: $Id: zmapWindowCanvasItem_I.h,v 1.2 2009-04-30 08:38:52 rds Exp $ *------------------------------------------------------------------- */ @@ -61,31 +61,36 @@ typedef struct _zmapWindowCanvasItemClassStruct { FooCanvasGroupClass __parent__; + /* long items is really class level. */ + ZMapWindowLongItems long_items; + GdkBitmap *fill_stipple; /* Useful things that the interface provides... */ /* We want to use foo_canvas_item_new and have default items created. These * might not be the same for all our items... */ - void (* post_create) (ZMapWindowCanvasItem window_canvas_item); + void (* post_create) (ZMapWindowCanvasItem window_canvas_item); + + ZMapFeatureTypeStyle (* get_style)(ZMapWindowCanvasItem window_canvas_item); /* This might be a no-op for some... */ - FooCanvasItem * (* add_interval)(ZMapWindowCanvasItem window_canvas_item, - ZMapWindowItemFeature sub_feature, /* can be NULL */ - double top, double bottom, - double left, double right); + FooCanvasItem * (* add_interval)(ZMapWindowCanvasItem window_canvas_item, + ZMapWindowItemFeature sub_feature, /* can be NULL */ + double top, double bottom, + double left, double right); - void (* set_colour) (ZMapWindowCanvasItem window_canvas_item, - FooCanvasItem *interval, - ZMapWindowItemFeature sub_feature, - ZMapStyleColourType colour_type, - GdkColor *deafult_fill_gdk); + void (* set_colour) (ZMapWindowCanvasItem window_canvas_item, + FooCanvasItem *interval, + ZMapWindowItemFeature sub_feature, + ZMapStyleColourType colour_type, + GdkColor *default_fill_gdk); /* Ability to check all subitems... */ - gboolean (* check_data) (ZMapWindowCanvasItem window_canvas_item, GError **error); + gboolean (* check_data) (ZMapWindowCanvasItem window_canvas_item, GError **error); /* clear items... */ - void (* clear) (ZMapWindowCanvasItem window_canvas_item); + void (* clear) (ZMapWindowCanvasItem window_canvas_item); } zmapWindowCanvasItemClassStruct; typedef struct _zmapWindowCanvasItemStruct @@ -94,14 +99,12 @@ typedef struct _zmapWindowCanvasItemStruct ZMapFeature feature; - ZMapFeatureTypeStyle style; - /* These items are separate from the group and need to be mapped, * realized and drawn by us. */ FooCanvasItem *items[WINDOW_ITEM_COUNT]; FooCanvasItem *mark_item; - + unsigned int interval_type; unsigned int auto_resize_background : 1; diff --git a/src/zmapWindow/items/zmapWindowCollectionFeature.c b/src/zmapWindow/items/zmapWindowCollectionFeature.c index f64d0f15e..7ea44bc01 100755 --- a/src/zmapWindow/items/zmapWindowCollectionFeature.c +++ b/src/zmapWindow/items/zmapWindowCollectionFeature.c @@ -27,9 +27,9 @@ * * Exported functions: See XXXXXXXXXXXXX.h * HISTORY: - * Last edited: Apr 22 15:19 2009 (rds) + * Last edited: Apr 29 20:55 2009 (rds) * Created: Wed Dec 3 10:02:22 2008 (rds) - * CVS info: $Id: zmapWindowCollectionFeature.c,v 1.1 2009-04-23 09:12:46 rds Exp $ + * CVS info: $Id: zmapWindowCollectionFeature.c,v 1.2 2009-04-30 08:38:52 rds Exp $ *------------------------------------------------------------------- */ @@ -37,7 +37,6 @@ #include <zmapWindow_P.h> /* ITEM_FEATURE_DATA, ITEM_FEATURE_TYPE */ #include <math.h> -typedef int (*ZMapFeatureCompareFunc)(ZMapFeature feature_a, ZMapFeature feature_b, gpointer user_data); static void zmap_window_collection_feature_class_init (ZMapWindowCollectionFeatureClass collection_class); static void zmap_window_collection_feature_init (ZMapWindowCollectionFeature group); @@ -204,7 +203,6 @@ void zMapWindowCollectionFeatureStaticReparent(ZMapWindowCanvasItem reparentee, NULL); new_parent->feature = reparentee->feature; - new_parent->style = reparentee->style; return; } @@ -233,7 +231,7 @@ static void add_colinear_lines(gpointer data, gpointer user_data) GdkColor *draw_colour; FooCanvasPoints line_points; double coords[4], y1, y2; - int colinearity = 0; + ColinearityType colinearity = 0; enum {COLINEAR_INVALID, COLINEAR_NOT, COLINEAR_IMPERFECT, COLINEAR_PERFECT}; previous = colinear_data->previous; @@ -300,6 +298,7 @@ void zMapWindowCollectionFeatureAddColinearMarkers(ZMapWindowCanvasItem collec if(group->item_list) { + ZMapFeatureTypeStyle style; double x2; char *perfect_colour = ZMAP_WINDOW_MATCH_PERFECT ; char *colinear_colour = ZMAP_WINDOW_MATCH_COLINEAR ; @@ -311,7 +310,10 @@ void zMapWindowCollectionFeatureAddColinearMarkers(ZMapWindowCanvasItem collec colinear_data.compare_func = compare_func; colinear_data.compare_data = compare_data; - x2 = zMapStyleGetWidth(ZMAP_CANVAS_ITEM(colinear_data.previous)->style); + style = (ZMAP_CANVAS_ITEM_GET_CLASS(colinear_data.previous)->get_style)(colinear_data.parent); + + x2 = zMapStyleGetWidth(style); + colinear_data.x = (x2 * 0.5); gdk_color_parse(perfect_colour, &colinear_data.perfect) ; diff --git a/src/zmapWindow/items/zmapWindowCollectionFeature.h b/src/zmapWindow/items/zmapWindowCollectionFeature.h index c62f4e936..1ad9010c8 100755 --- a/src/zmapWindow/items/zmapWindowCollectionFeature.h +++ b/src/zmapWindow/items/zmapWindowCollectionFeature.h @@ -27,9 +27,9 @@ * * Exported functions: See XXXXXXXXXXXXX.h * HISTORY: - * Last edited: Jan 25 14:03 2009 (rds) + * Last edited: Apr 24 15:13 2009 (rds) * Created: Wed Dec 3 08:44:06 2008 (rds) - * CVS info: $Id: zmapWindowCollectionFeature.h,v 1.1 2009-04-23 09:12:46 rds Exp $ + * CVS info: $Id: zmapWindowCollectionFeature.h,v 1.2 2009-04-30 08:38:52 rds Exp $ *------------------------------------------------------------------- */ @@ -53,6 +53,13 @@ enum ZMAP_WINDOW_COLLECTION_GLYPH }; +typedef enum { + COLINEAR_INVALID, + COLINEAR_NOT, + COLINEAR_IMPERFECT, + COLINEAR_PERFECT +} ColinearityType ; + /* Instance */ typedef struct _zmapWindowCollectionFeatureStruct zmapWindowCollectionFeature, *ZMapWindowCollectionFeature ; @@ -62,7 +69,23 @@ typedef struct _zmapWindowCollectionFeatureStruct zmapWindowCollectionFeature, typedef struct _zmapWindowCollectionFeatureClassStruct zmapWindowCollectionFeatureClass, *ZMapWindowCollectionFeatureClass ; +typedef ColinearityType (*ZMapFeatureCompareFunc)(ZMapFeature feature_a, ZMapFeature feature_b, gpointer user_data); + /* Public funcs */ GType zMapWindowCollectionFeatureGetType(void); +ZMapWindowCanvasItem zMapWindowCollectionFeatureCreate(FooCanvasGroup *parent); +void zMapWindowCollectionFeatureRemoveSubFeatures(ZMapWindowCanvasItem collection, + gboolean keep_in_place_x, + gboolean keep_in_place_y); +void zMapWindowCollectionFeatureStaticReparent(ZMapWindowCanvasItem reparentee, + ZMapWindowCanvasItem new_parent); +void zMapWindowCollectionFeatureAddColinearMarkers(ZMapWindowCanvasItem collection, + ZMapFeatureCompareFunc compare_func, + gpointer compare_data); +void zMapWindowCollectionFeatureAddIncompleteMarkers(ZMapWindowCanvasItem collection, + gboolean revcomped_features); +void zMapWindowCollectionFeatureAddSpliceMarkers(ZMapWindowCanvasItem collection); + + #endif /* ZMAP_WINDOW_COLLECTION_FEATURE_H */ diff --git a/src/zmapWindow/items/zmapWindowGlyphItem.c b/src/zmapWindow/items/zmapWindowGlyphItem.c index 19de279d1..f3a532c86 100755 --- a/src/zmapWindow/items/zmapWindowGlyphItem.c +++ b/src/zmapWindow/items/zmapWindowGlyphItem.c @@ -27,9 +27,9 @@ * * Exported functions: See XXXXXXXXXXXXX.h * HISTORY: - * Last edited: Apr 6 14:44 2009 (rds) + * Last edited: Apr 23 14:55 2009 (rds) * Created: Fri Jan 16 11:20:07 2009 (rds) - * CVS info: $Id: zmapWindowGlyphItem.c,v 1.1 2009-04-23 09:12:46 rds Exp $ + * CVS info: $Id: zmapWindowGlyphItem.c,v 1.2 2009-04-30 08:38:52 rds Exp $ *------------------------------------------------------------------- */ @@ -850,10 +850,10 @@ static void zmap_window_glyph_item_draw (FooCanvasItem *item, { ZMapWindowGlyphItem glyph; GdkPoint static_points[ZMAP_MAX_POINTS]; - GdkPoint *points; + GdkPoint *points = NULL; int actual_num_points_drawn; double i2w_dx, i2w_dy; - char *alpha; + /* char *alpha; */ glyph = ZMAP_WINDOW_GLYPH_ITEM (item); @@ -911,7 +911,7 @@ static void zmap_window_glyph_item_draw (FooCanvasItem *item, break; } - if (points != static_points) + if (points && points != static_points) g_free (points); } break; @@ -951,7 +951,55 @@ static void zmap_window_glyph_item_draw (FooCanvasItem *item, static double zmap_window_glyph_item_point (FooCanvasItem *item, double x, double y, int cx, int cy, FooCanvasItem **actual_item) { - double dist = 1000000000.0; + ZMapWindowGlyphItem glyph; + GdkPoint static_points[ZMAP_MAX_POINTS]; + GdkPoint *points = NULL, *tmp_points; + double static_coords[ZMAP_MAX_POINTS * 2]; + double *coords, *tmp_coords, i2w_dx, i2w_dy; + double dist, best; + int i; + + dist = best = 1.0e36; + + g_return_val_if_fail(ZMAP_IS_WINDOW_GLYPH_ITEM(item), dist); + + glyph = ZMAP_WINDOW_GLYPH_ITEM(item); + + i2w_dx = 0.0; + i2w_dy = 0.0; + foo_canvas_item_i2w (item, &i2w_dx, &i2w_dy); + + /* Build array of canvas pixel coordinates */ + if (glyph->num_points <= ZMAP_MAX_POINTS) + { + points = static_points; + coords = static_coords; + } + else + { + points = g_new (GdkPoint, glyph->num_points); + coords = g_new (double, glyph->num_points * 2); + } + + item_to_canvas (item->canvas, glyph->coords, points, glyph->num_points, i2w_dx, i2w_dy); + + tmp_points = points; + tmp_coords = coords; + + for(i = 0; i < glyph->num_points; i++, tmp_coords+=2, tmp_points++) + { + tmp_coords[0] = tmp_points->x; + tmp_coords[1] = tmp_points->y; + } + + best = foo_canvas_polygon_to_point(coords, glyph->num_points, (double)cx, (double)cy); + + if(points && points != static_points) + g_free(points); + + dist = best; + + *actual_item = item; return dist; } diff --git a/src/zmapWindow/items/zmapWindowTextFeature.c b/src/zmapWindow/items/zmapWindowTextFeature.c index d570b2b7b..4ae2e25d3 100755 --- a/src/zmapWindow/items/zmapWindowTextFeature.c +++ b/src/zmapWindow/items/zmapWindowTextFeature.c @@ -27,9 +27,9 @@ * * Exported functions: See XXXXXXXXXXXXX.h * HISTORY: - * Last edited: Jan 26 14:55 2009 (rds) + * Last edited: Apr 29 19:54 2009 (rds) * Created: Tue Jan 13 13:41:57 2009 (rds) - * CVS info: $Id: zmapWindowTextFeature.c,v 1.1 2009-04-23 09:12:46 rds Exp $ + * CVS info: $Id: zmapWindowTextFeature.c,v 1.2 2009-04-30 08:38:52 rds Exp $ *------------------------------------------------------------------- */ #include <math.h> /* pow(), sqrt() */ @@ -219,7 +219,7 @@ static void window_text_feature_item_set_colour(ZMapWindowCanvasItem canvas_ite g_return_if_fail(canvas_item != NULL); g_return_if_fail(interval != NULL); - if((style = canvas_item->style)) + if((style = (ZMAP_CANVAS_ITEM_GET_CLASS(canvas_item)->get_style)(canvas_item))) { zMapStyleGetColours(style, ZMAPSTYLE_COLOURTARGET_NORMAL, colour_type, &fill, NULL, &outline); @@ -287,7 +287,7 @@ static void zmap_window_text_feature_set_colour(ZMapWindowCanvasItem text, gdk_color_parse("black", &black); gdk_color_parse("white", &white); - if((style = text->style)) + if((style = (ZMAP_CANVAS_ITEM_GET_CLASS(text)->get_style)(text))) { if(!zMapStyleGetColours(style, ZMAPSTYLE_COLOURTARGET_NORMAL, ZMAPSTYLE_COLOURTYPE_SELECTED, @@ -395,7 +395,7 @@ static FooCanvasItem *zmap_window_text_feature_add_interval(ZMapWindowCanvasItem char *font_name = "Lucida Console"; gboolean mark_real_extent = FALSE; - if((style = text->style)) + if((style = (ZMAP_CANVAS_ITEM_GET_CLASS(text)->get_style)(text))) { char *tmp_font; g_object_get(G_OBJECT(style), diff --git a/src/zmapWindow/items/zmapWindowTranscriptFeature.c b/src/zmapWindow/items/zmapWindowTranscriptFeature.c index 62a4d8b61..a1c257f85 100755 --- a/src/zmapWindow/items/zmapWindowTranscriptFeature.c +++ b/src/zmapWindow/items/zmapWindowTranscriptFeature.c @@ -27,9 +27,9 @@ * * Exported functions: See XXXXXXXXXXXXX.h * HISTORY: - * Last edited: Apr 2 14:13 2009 (rds) + * Last edited: Apr 29 20:07 2009 (rds) * Created: Wed Dec 3 10:02:22 2008 (rds) - * CVS info: $Id: zmapWindowTranscriptFeature.c,v 1.1 2009-04-23 09:12:46 rds Exp $ + * CVS info: $Id: zmapWindowTranscriptFeature.c,v 1.2 2009-04-30 08:38:52 rds Exp $ *------------------------------------------------------------------- */ @@ -235,7 +235,7 @@ static void zmap_window_transcript_feature_set_colour(ZMapWindowCanvasItem tran g_return_if_fail(sub_feature != NULL); g_return_if_fail(interval != NULL); - style = transcript->style; + style = (ZMAP_CANVAS_ITEM_GET_CLASS(transcript)->get_style)(transcript); switch(sub_feature->subpart) { @@ -422,7 +422,7 @@ static FooCanvasItem *zmap_window_transcript_feature_add_interval(ZMapWindowCanv g_return_val_if_fail(transcript != NULL, NULL); g_return_val_if_fail(sub_feature != NULL, NULL); - style = transcript->style; + style = (ZMAP_CANVAS_ITEM_GET_CLASS(transcript)->get_style)(transcript); switch(sub_feature->subpart) { -- GitLab