diff options
Diffstat (limited to 'widgets/text')
-rw-r--r-- | widgets/text/e-entry.c | 2 | ||||
-rw-r--r-- | widgets/text/e-text.c | 41 | ||||
-rw-r--r-- | widgets/text/e-text.h | 2 |
3 files changed, 45 insertions, 0 deletions
diff --git a/widgets/text/e-entry.c b/widgets/text/e-entry.c index 9e089a635a..588d5358d7 100644 --- a/widgets/text/e-entry.c +++ b/widgets/text/e-entry.c @@ -108,6 +108,8 @@ e_entry_init (GtkObject *object) e_entry->item = E_TEXT(gnome_canvas_item_new(gnome_canvas_root(e_entry->canvas), e_text_get_type(), "clip", TRUE, + "fill_clip_rectangle", TRUE, + "anchor", GTK_ANCHOR_NW, NULL)); e_canvas_item_move_absolute(GNOME_CANVAS_ITEM(e_entry->item), INNER_BORDER, diff --git a/widgets/text/e-text.c b/widgets/text/e-text.c index 41e8a1eeb1..e87cec59c8 100644 --- a/widgets/text/e-text.c +++ b/widgets/text/e-text.c @@ -64,6 +64,7 @@ enum { ARG_CLIP_WIDTH, ARG_CLIP_HEIGHT, ARG_CLIP, + ARG_FILL_CLIP_RECTANGLE, ARG_X_OFFSET, ARG_Y_OFFSET, ARG_FILL_COLOR, @@ -234,6 +235,8 @@ e_text_class_init (ETextClass *klass) GTK_TYPE_DOUBLE, GTK_ARG_READWRITE, ARG_CLIP_HEIGHT); gtk_object_add_arg_type ("EText::clip", GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_CLIP); + gtk_object_add_arg_type ("EText::fill_clip_rectangle", + GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_FILL_CLIP_RECTANGLE); gtk_object_add_arg_type ("EText::x_offset", GTK_TYPE_DOUBLE, GTK_ARG_READWRITE, ARG_X_OFFSET); gtk_object_add_arg_type ("EText::y_offset", @@ -1095,6 +1098,11 @@ e_text_set_arg (GtkObject *object, GtkArg *arg, guint arg_id) needs_reflow = 1; break; + case ARG_FILL_CLIP_RECTANGLE: + text->fill_clip_rectangle = GTK_VALUE_BOOL (*arg); + needs_update = 1; + break; + case ARG_X_OFFSET: text->xofs = GTK_VALUE_DOUBLE (*arg); text->needs_recalc_bounds = 1; @@ -1273,6 +1281,10 @@ e_text_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) GTK_VALUE_BOOL (*arg) = text->clip; break; + case ARG_FILL_CLIP_RECTANGLE: + GTK_VALUE_BOOL (*arg) = text->fill_clip_rectangle; + break; + case ARG_X_OFFSET: GTK_VALUE_DOUBLE (*arg) = text->xofs; break; @@ -1885,6 +1897,35 @@ e_text_point (GnomeCanvasItem *item, double x, double y, lines = text->lines; + if (text->fill_clip_rectangle) { + double clip_width; + double clip_height; + + /* Calculate the width and heights */ + calc_height (text); + calc_line_widths (text); + + if (text->clip_width < 0) + clip_width = text->max_width; + else + clip_width = text->clip_width; + + /* Get canvas pixel coordinates for clip rectangle position */ + clip_width = clip_width * item->canvas->pixels_per_unit; + if ( text->clip_height >= 0 ) + clip_height = text->clip_height * item->canvas->pixels_per_unit; + else + clip_height = text->height * item->canvas->pixels_per_unit; + + if (cx >= text->clip_cx && + cx <= text->clip_cx + clip_width && + cy >= text->clip_cy && + cy <= text->clip_cy + clip_height) + return 0; + else + return 1; + } + for (i = 0; i < text->num_lines; i++) { /* Compute the coordinates of rectangle for the current line, * clipping if appropriate. diff --git a/widgets/text/e-text.h b/widgets/text/e-text.h index cde023fb08..a233501293 100644 --- a/widgets/text/e-text.h +++ b/widgets/text/e-text.h @@ -53,6 +53,7 @@ BEGIN_GNOME_DECLS * clip_width double RW Width of clip rectangle * clip_height double RW Height of clip rectangle * clip boolean RW Use clipping rectangle? + * fill_clip_rect boolean RW Whether the text item represents itself as being the size of the clipping rectangle. * x_offset double RW Horizontal offset distance from anchor position * y_offset double RW Vertical offset distance from anchor position * text_width double R Used to query the width of the rendered text @@ -129,6 +130,7 @@ struct _EText { int height; /* Rendered text height in pixels */ guint clip : 1; /* Use clip rectangle? */ + guint fill_clip_rectangle : 1; /* Fill the clipping rectangle. */ /* Antialiased specific stuff follows */ ETextSuckFont *suckfont; /* Sucked font */ |