aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--widgets/text/e-text.c71
-rw-r--r--widgets/text/e-text.h24
2 files changed, 58 insertions, 37 deletions
diff --git a/widgets/text/e-text.c b/widgets/text/e-text.c
index a8bae6a1f0..76fb2f4714 100644
--- a/widgets/text/e-text.c
+++ b/widgets/text/e-text.c
@@ -72,6 +72,7 @@ enum {
ARG_FONTSET,
ARG_FONT_GDK,
ARG_FONT_E,
+ ARG_BOLD,
ARG_ANCHOR,
ARG_JUSTIFICATION,
ARG_CLIP_WIDTH,
@@ -268,6 +269,8 @@ e_text_class_init (ETextClass *klass)
GTK_TYPE_GDK_FONT, GTK_ARG_WRITABLE, ARG_FONT_GDK);
gtk_object_add_arg_type ("EText::font_e",
GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_FONT_E);
+ gtk_object_add_arg_type ("EText::bold",
+ GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_BOLD);
gtk_object_add_arg_type ("EText::anchor",
GTK_TYPE_ANCHOR_TYPE, GTK_ARG_READWRITE, ARG_ANCHOR);
gtk_object_add_arg_type ("EText::justification",
@@ -420,6 +423,10 @@ e_text_init (EText *text)
text->tpl_timeout = 0;
text->draw_background = FALSE;
+
+ text->bold = FALSE;
+
+ text->style = E_FONT_PLAIN;
e_canvas_item_set_reflow_callback(GNOME_CANVAS_ITEM(text), e_text_reflow);
}
@@ -759,7 +766,7 @@ calc_ellipsis (EText *text)
{
if (text->font)
text->ellipsis_width =
- e_font_utf8_text_width (text->font, E_FONT_PLAIN,
+ e_font_utf8_text_width (text->font, text->style,
text->ellipsis ? text->ellipsis : "...",
text->ellipsis ? strlen (text->ellipsis) : 3);
}
@@ -795,7 +802,7 @@ calc_line_widths (EText *text)
if (lines->length != 0) {
if (text->font) {
lines->width = text_width_with_objects (text->model,
- text->font, E_FONT_PLAIN,
+ text->font, text->style,
lines->text, lines->length);
lines->ellipsis_length = 0;
} else {
@@ -811,7 +818,7 @@ calc_line_widths (EText *text)
lines->ellipsis_length = 0;
for (p = lines->text; p && *p && (p - lines->text) < lines->length; p = unicode_next_utf8 (p)) {
gint text_width = text_width_with_objects (text->model,
- text->font, E_FONT_PLAIN,
+ text->font, text->style,
lines->text, p - lines->text);
if (clip_width >= text_width + text->ellipsis_width)
lines->ellipsis_length = p - lines->text;
@@ -822,7 +829,7 @@ calc_line_widths (EText *text)
else
lines->ellipsis_length = 0;
lines->width = text_width_with_objects (text->model,
- text->font, E_FONT_PLAIN,
+ text->font, text->style,
lines->text, lines->ellipsis_length) +
text->ellipsis_width;
}
@@ -944,7 +951,7 @@ split_into_lines (EText *text)
&& e_text_model_get_object_at_pointer (text->model, cp) == -1) { /* don't break mid-object */
if (laststart != lastend
&& clip_width < text_width_with_objects (text->model,
- text->font, E_FONT_PLAIN,
+ text->font, text->style,
linestart, cp - linestart)) {
text->num_lines ++;
@@ -961,7 +968,7 @@ split_into_lines (EText *text)
if (laststart != lastend
&& unicode_index_to_offset (linestart, cp - linestart) != 1
&& clip_width < text_width_with_objects (text->model,
- text->font, E_FONT_PLAIN,
+ text->font, text->style,
linestart, p - linestart)) {
text->num_lines ++;
@@ -987,7 +994,7 @@ split_into_lines (EText *text)
&& p
&& laststart != lastend
&& clip_width < text_width_with_objects (text->model,
- text->font, E_FONT_PLAIN,
+ text->font, text->style,
linestart, cp - linestart)) {
text->num_lines ++;
}
@@ -1017,7 +1024,7 @@ split_into_lines (EText *text)
&& (unicode_isspace (unival) || unival == '\n')
&& e_text_model_get_object_at_pointer (text->model, cp) == -1) { /* don't break mid-object */
if (clip_width < text_width_with_objects (text->model,
- text->font, E_FONT_PLAIN,
+ text->font, text->style,
lines->text, cp - lines->text)
&& laststart != lastend) {
@@ -1041,7 +1048,7 @@ split_into_lines (EText *text)
if (laststart != lastend
&& unicode_index_to_offset (lines->text, cp - lines->text) != 1
&& clip_width < text_width_with_objects (text->model,
- text->font, E_FONT_PLAIN,
+ text->font, text->style,
lines->text, p - lines->text)) {
lines->length = lastend - lines->text;
@@ -1077,7 +1084,7 @@ split_into_lines (EText *text)
if ( line_num < text->num_lines && text->line_wrap ) {
if (clip_width < text_width_with_objects (text->model,
- text->font, E_FONT_PLAIN,
+ text->font, text->style,
lines->text, cp - lines->text)
&& laststart != lastend ) {
@@ -1287,6 +1294,10 @@ e_text_set_arg (GtkObject *object, GtkArg *arg, guint arg_id)
text->needs_calc_line_widths = 1;
needs_reflow = 1;
break;
+ case ARG_BOLD:
+ text->bold = GTK_VALUE_BOOL (*arg);
+ text->style = text->bold ? E_FONT_BOLD : E_FONT_PLAIN;
+ break;
case ARG_ANCHOR:
text->anchor = GTK_VALUE_ENUM (*arg);
text->needs_recalc_bounds = 1;
@@ -1521,6 +1532,10 @@ e_text_get_arg (GtkObject *object, GtkArg *arg, guint arg_id)
GTK_VALUE_BOXED (*arg) = text->font;
break;
+ case ARG_BOLD:
+ GTK_VALUE_BOOL (*arg) = text->bold;
+ break;
+
case ARG_ANCHOR:
GTK_VALUE_ENUM (*arg) = text->anchor;
break;
@@ -1671,7 +1686,7 @@ e_text_reflow (GnomeCanvasItem *item, int flags)
lines --;
i--;
x = text_width_with_objects (text->model,
- text->font, E_FONT_PLAIN,
+ text->font, text->style,
lines->text,
text->selection_end - (lines->text - text->text));
@@ -2050,12 +2065,12 @@ e_text_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
sel_end = end_char;
if ( sel_start < sel_end ) {
sel_rect.x = xpos - x + text_width_with_objects (text->model,
- text->font, E_FONT_PLAIN,
+ text->font, text->style,
lines->text,
sel_start - start_char);
sel_rect.y = ypos - y - e_font_ascent (text->font);
sel_rect.width = text_width_with_objects (text->model,
- text->font, E_FONT_PLAIN,
+ text->font, text->style,
lines->text + sel_start - start_char,
sel_end - sel_start);
sel_rect.height = e_font_height (text->font);
@@ -2074,7 +2089,7 @@ e_text_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
sel_rect.height);
text_draw_with_objects (text->model,
drawable,
- text->font, E_FONT_PLAIN,
+ text->font, text->style,
text->gc,
xpos - x,
ypos - y,
@@ -2082,10 +2097,10 @@ e_text_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
sel_start - start_char);
text_draw_with_objects (text->model,
drawable,
- text->font, E_FONT_PLAIN,
+ text->font, text->style,
fg_gc,
xpos - x + text_width_with_objects (text->model,
- text->font, E_FONT_PLAIN,
+ text->font, text->style,
lines->text,
sel_start - start_char),
ypos - y,
@@ -2093,10 +2108,10 @@ e_text_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
sel_end - sel_start);
text_draw_with_objects (text->model,
drawable,
- text->font, E_FONT_PLAIN,
+ text->font, text->style,
text->gc,
xpos - x + text_width_with_objects (text->model,
- text->font, E_FONT_PLAIN,
+ text->font, text->style,
lines->text,
sel_end - start_char),
ypos - y,
@@ -2105,7 +2120,7 @@ e_text_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
} else {
text_draw_with_objects (text->model,
drawable,
- text->font, E_FONT_PLAIN,
+ text->font, text->style,
text->gc,
xpos - x,
ypos - y,
@@ -2120,7 +2135,7 @@ e_text_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
text->gc,
TRUE,
xpos - x + text_width_with_objects (text->model,
- text->font, E_FONT_PLAIN,
+ text->font, text->style,
lines->text,
sel_start - start_char),
ypos - y - e_font_ascent (text->font),
@@ -2131,14 +2146,14 @@ e_text_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
if (text->clip && text->use_ellipsis && lines->ellipsis_length < lines->length) {
text_draw_with_objects (text->model,
drawable,
- text->font, E_FONT_PLAIN,
+ text->font, text->style,
text->gc,
xpos - x,
ypos - y,
lines->text,
lines->ellipsis_length);
e_font_draw_utf8_text (drawable,
- text->font, E_FONT_PLAIN,
+ text->font, text->style,
text->gc,
xpos - x + lines->width - text->ellipsis_width,
ypos - y,
@@ -2147,7 +2162,7 @@ e_text_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
} else
text_draw_with_objects (text->model,
drawable,
- text->font, E_FONT_PLAIN,
+ text->font, text->style,
text->gc,
xpos - x,
ypos - y,
@@ -2450,7 +2465,7 @@ _get_xy_from_position (EText *text, gint position, gint *xp, gint *yp)
y -= e_font_descent (text->font);
x += text_width_with_objects (text->model,
- text->font, E_FONT_PLAIN,
+ text->font, text->style,
lines->text,
position - (lines->text - text->text));
x -= text->xofs_edit;
@@ -2532,7 +2547,7 @@ _get_position_from_xy (EText *text, gint x, gint y)
#if 0
if (unival == '\1') {
const gchar *obj_str = NULL; /*e_text_model_get_nth_object (text->model, object_num);*/
- charwidth = e_font_utf8_text_width (text->font, E_FONT_PLAIN, obj_str, strlen (obj_str));
+ charwidth = e_font_utf8_text_width (text->font, text->style, obj_str, strlen (obj_str));
++object_num;
step1 = charwidth;
@@ -2541,7 +2556,7 @@ _get_position_from_xy (EText *text, gint x, gint y)
} else {
#endif
- charwidth = e_font_utf8_char_width (text->font, E_FONT_PLAIN, (gchar *) p);
+ charwidth = e_font_utf8_char_width (text->font, text->style, (gchar *) p);
step1 = charwidth / 2;
step2 = (charwidth + 1) / 2;
@@ -2736,7 +2751,7 @@ _do_tooltip (gpointer data)
for (lines = text->lines, i = 0; i < text->num_lines; lines++, i++) {
gdouble line_width;
- line_width = text_width_with_objects (text->model, text->font, E_FONT_PLAIN, lines->text, lines->length);
+ line_width = text_width_with_objects (text->model, text->font, text->style, lines->text, lines->length);
max_width = MAX (max_width, line_width);
}
@@ -3505,7 +3520,7 @@ e_text_command(ETextEventProcessor *tep, ETextEventProcessorCommand *command, gp
lines --;
i --;
x = text_width_with_objects (text->model,
- text->font, E_FONT_PLAIN,
+ text->font, text->style,
lines->text,
text->selection_end - (lines->text - text->text));
diff --git a/widgets/text/e-text.h b/widgets/text/e-text.h
index 185734d1df..e769818e74 100644
--- a/widgets/text/e-text.h
+++ b/widgets/text/e-text.h
@@ -49,6 +49,7 @@ BEGIN_GNOME_DECLS
* font string W X logical font descriptor
* fontset string W X logical fontset descriptor
* font_gdk GdkFont* RW Pointer to a GdkFont
+ * bold boolean RW Bold?
* anchor GtkAnchorType RW Anchor side for the text
* justification GtkJustification RW Justification for multiline text
* fill_color string W X color specification for text
@@ -143,9 +144,6 @@ struct _EText {
int width; /* Rendered text width in pixels */
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 */
#if 0
ETextSuckFont *suckfont; /* Sucked font */
@@ -189,12 +187,26 @@ struct _EText {
gchar *clipboard_selection; /* Clipboard selection text */
gint clipboard_length; /* Clipboard selection text length*/
+ guint clip : 1; /* Use clip rectangle? */
+ guint fill_clip_rectangle : 1; /* Fill the clipping rectangle. */
+
guint pointer_in : 1; /* Is the pointer currently over us? */
guint default_cursor_shown : 1; /* Is the default cursor currently shown? */
guint draw_borders : 1; /* Draw borders? */
guint draw_background : 1; /* Draw background? */
guint line_wrap : 1; /* Do line wrap */
+
+ guint needs_redraw : 1; /* Needs redraw */
+ guint needs_recalc_bounds : 1; /* Need recalc_bounds */
+ guint needs_calc_height : 1; /* Need calc_height */
+ guint needs_calc_line_widths : 1; /* Needs calc_line_widths */
+ guint needs_split_into_lines : 1; /* Needs split_into_lines */
+
+ guint bold : 1;
+
+ EFontStyle style;
+
gchar *break_characters; /* Characters to optionally break after */
gint max_lines; /* Max number of lines (-1 = infinite) */
@@ -206,12 +218,6 @@ struct _EText {
GtkWidget *tooltip_window; /* GtkWindow for displaying the tooltip */
gint tooltip_count; /* GDK_ENTER_NOTIFY count. */
- guint needs_redraw : 1; /* Needs redraw */
- guint needs_recalc_bounds : 1; /* Need recalc_bounds */
- guint needs_calc_height : 1; /* Need calc_height */
- guint needs_calc_line_widths : 1; /* Needs calc_line_widths */
- guint needs_split_into_lines : 1; /* Needs split_into_lines */
-
gint dbl_timeout; /* Double click timeout */
gint tpl_timeout; /* Triple click timeout */
};