From b2ed703581950a25af4351a36002e4a610320999 Mon Sep 17 00:00:00 2001 From: rds <rds> Date: Wed, 18 Oct 2006 15:12:46 +0000 Subject: [PATCH] starting to fix up text items and text highlighting. --- src/zmapDraw/zmapDraw.c | 83 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 73 insertions(+), 10 deletions(-) diff --git a/src/zmapDraw/zmapDraw.c b/src/zmapDraw/zmapDraw.c index 8ad5756b0..af7f9666f 100755 --- a/src/zmapDraw/zmapDraw.c +++ b/src/zmapDraw/zmapDraw.c @@ -28,9 +28,9 @@ * Exported functions: See ZMap/zmapDraw.h * * HISTORY: - * Last edited: Oct 3 14:55 2006 (edgrif) + * Last edited: Oct 18 14:26 2006 (rds) * Created: Wed Oct 20 09:19:16 2004 (edgrif) - * CVS info: $Id: zmapDraw.c,v 1.52 2006-10-10 08:54:30 edgrif Exp $ + * CVS info: $Id: zmapDraw.c,v 1.53 2006-10-18 15:12:46 rds Exp $ *------------------------------------------------------------------- */ @@ -80,11 +80,61 @@ FooCanvasItem *zMapDisplayText(FooCanvasGroup *group, char *text, char *colour, "text", text, "font", "Lucida Console", "fill_color", colour, + "anchor", GTK_ANCHOR_NW, NULL); + if(0) + { + PangoLayout *layout = NULL; + PangoContext *context = NULL; + const PangoMatrix matrix = PANGO_MATRIX_INIT; + + layout = FOO_CANVAS_TEXT(item)->layout; + + context = pango_layout_get_context(layout); + + pango_matrix_rotate(&matrix, 90.0); + + pango_context_set_matrix(context, &matrix); + pango_layout_context_changed(layout); + } return item ; } +FooCanvasItem *zMapDrawHighlightableText(FooCanvasGroup *group, + char *text_string, + double x, double y, + GdkColor *foreground, + GdkColor *highlight, + FooCanvasItem **highlight_item_out) +{ + FooCanvasItem *text = NULL, *highlight_item = NULL; + + text = foo_canvas_item_new(group, + foo_canvas_text_get_type(), + "x", x, + "y", y, + "text", text_string, + "font", "Lucida Console", + "fill_color", foreground, + "anchor", GTK_ANCHOR_NW, + NULL); + if(text) + { + double x1 = 0.0, y1 = 0.0, x2 = 0.0, y2 = 0.0; + foo_canvas_item_get_bounds(text, &x1, &y1, &x2, &y2); + if((highlight_item = zMapDrawSolidBox(group, x1, y1, x2, y2, highlight))) + { + foo_canvas_item_lower(highlight_item, 1); + foo_canvas_item_hide(highlight_item); + } + } + + if(highlight_item_out) + *highlight_item_out = highlight_item; + + return text; +} /* Note that we don't specify "width_units" or "width_pixels" for the outline @@ -882,7 +932,7 @@ FooCanvasGroup *zMapDrawToolTipCreate(FooCanvas *canvas) g_object_set_data(G_OBJECT(tooltip), "tooltip_box", box); /* Create the item for the text of the tip */ tip = foo_canvas_item_new(tooltip, - FOO_TYPE_CANVAS_TEXT, + foo_canvas_text_get_type(), "x", 0.0, "y", 0.0, "text", "", "font", "Lucida Console", @@ -992,7 +1042,7 @@ void zMapDrawHighlightTextRegion(FooCanvasGroup *grp, firstX, firstY, lastX, lastY, minX, maxX, - trd->row_height); + trd->char_height); } else if(trd->highlight_style == ZMAP_TEXT_HIGHLIGHT_MARQUEE) { @@ -1052,11 +1102,15 @@ static void drawHighlightBackgroundInGroup(FooCanvasGroup *parent, int i; double x1, y1, x2, y2; + double ydiff = offsetY2 - offsetY1 + 1.0; + rects = parent->item_list; points = foo_canvas_points_new(2); color = *background; - +#ifdef RDS_DEBUG + printf("drawHighlightBackgroundInGroup (%x): y1=%f, y2=%f, y2-y1=%f, dlength=%f\n", parent, offsetY1, offsetY2, ydiff, dlength); +#endif for(i = 0; i < 3; i++) { switch(i) @@ -1064,7 +1118,7 @@ static void drawHighlightBackgroundInGroup(FooCanvasGroup *parent, case 0: /* FIRST ROW */ x1 = points->coords[0] = MIN(offsetX1, maxX); y1 = points->coords[1] = offsetY1; - x2 = points->coords[2] = (offsetY2 - offsetY1 >= dlength ? maxX : offsetX2); + x2 = points->coords[2] = (ydiff >= dlength ? maxX : offsetX2); //x2 = points->coords[2] = (offsetY2 - offsetY1 >= dlength ? maxX : MIN(offsetX2, maxX)); // 20060329 y2 = points->coords[3] = offsetY1 + dlength; #ifdef ZMAP_DRAW_HIGHLIGHT_MULTICOLOR @@ -1076,16 +1130,16 @@ static void drawHighlightBackgroundInGroup(FooCanvasGroup *parent, * Without the MIN/MAX on calculating y1 and y2 the foocanvas doesn't invalidate * the area correctly. Therefore we need to keep the sense of the y coords correct. */ - x1 = points->coords[0] = (offsetY2 - offsetY1 >= dlength ? minX : offsetX1); + x1 = points->coords[0] = (ydiff >= dlength ? minX : offsetX1); y1 = points->coords[1] = MIN((offsetY1 + dlength), offsetY2); - x2 = points->coords[2] = (offsetY2 - offsetY1 >= dlength ? maxX : MIN(offsetX2, maxX)); + x2 = points->coords[2] = (ydiff >= dlength ? maxX : MIN(offsetX2, maxX)); y2 = points->coords[3] = MAX((offsetY1 + dlength), offsetY2); #ifdef ZMAP_DRAW_HIGHLIGHT_MULTICOLOR gdk_color_parse("red", &color); #endif break; case 2: /* LAST ROW */ - x1 = points->coords[0] = (offsetY2 - offsetY1 >= dlength ? minX : offsetX1); + x1 = points->coords[0] = (ydiff >= dlength ? minX : offsetX1); y1 = points->coords[1] = offsetY2; x2 = points->coords[2] = MIN(offsetX2, maxX); y2 = points->coords[3] = offsetY2 + dlength; @@ -1100,6 +1154,14 @@ static void drawHighlightBackgroundInGroup(FooCanvasGroup *parent, // printf("drawHighlightBackgroundInGroup (%x): %d %f %f %f %f\n", // parent, i, x1, y1, x2, y2); +#ifdef RDS_DEBUG + printf("drawHighlightBackgroundInGroup (%x): %d %f %f %f %f\n", + parent, i, + points->coords[0], + points->coords[1], + points->coords[2], + points->coords[3]); +#endif if(!rects) foo_canvas_item_new(parent, @@ -1359,13 +1421,14 @@ FooCanvasItem *zMapDrawRowOfText(FooCanvasGroup *group, ZMAP_DRAW_TEXT_ROW_DATA_KEY, curr_data, NULL); /* this needs setting, but this is an element of an array??? */ - +#ifdef RDS_DONT_INCLUDE_UNUSED foo_canvas_item_set(item, "clip", TRUE, "clip_width", iterator->x2 - iterator->x1, "clip_height", iterator->y2 - iterator->y1, NULL ); +#endif foo_canvas_item_raise_to_top(item); } -- GitLab