padding-left CDATA #IMPLIED
ellipsize (none | start | middle | end)
letter-spacing CDATA #IMPLIED
+ fill-with CDATA #IMPLIED
>
<!ELEMENT line EMPTY>
padding-left CDATA #IMPLIED
ellipsize (none | start | middle | end)
letter-spacing CDATA #IMPLIED
+ fill-with CDATA #IMPLIED
>
<!ELEMENT line EMPTY>
PROP_PADDING_BOTTOM,
PROP_PADDING_LEFT,
PROP_ELLIPSIZE,
- PROP_LETTER_SPACING
+ PROP_LETTER_SPACING,
+ PROP_FILL_WITH
};
static void rpt_obj_text_class_init (RptObjTextClass *klass);
gdouble padding_left;
eRptEllipsize ellipsize;
guint letter_spacing;
+ gchar *fill_with;
};
G_DEFINE_TYPE (RptObjText, rpt_obj_text, TYPE_RPT_OBJECT)
"Padding Top",
"Padding Top",
0, G_MAXDOUBLE, 0,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
g_object_class_install_property (object_class, PROP_PADDING_RIGHT,
g_param_spec_double ("padding-right",
"Padding Right",
"Padding Right",
0, G_MAXDOUBLE, 0,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
g_object_class_install_property (object_class, PROP_PADDING_BOTTOM,
g_param_spec_double ("padding-bottom",
"Padding Bottom",
"Padding Bottom",
0, G_MAXDOUBLE, 0,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
g_object_class_install_property (object_class, PROP_PADDING_LEFT,
g_param_spec_double ("padding-left",
"Padding Left",
"Padding Left",
0, G_MAXDOUBLE, 0,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
g_object_class_install_property (object_class, PROP_ELLIPSIZE,
g_param_spec_uint ("ellipsize",
"Ellipsize",
"Ellipsize",
RPT_ELLIPSIZE_NONE, RPT_ELLIPSIZE_END, RPT_ELLIPSIZE_NONE,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
g_object_class_install_property (object_class, PROP_LETTER_SPACING,
g_param_spec_uint ("letter-spacing",
"Letter spacing",
"Amount of extra space to add between graphemes of the text.",
0, G_MAXUINT, 0,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class, PROP_FILL_WITH,
+ g_param_spec_string ("fill-with",
+ "Fill with",
+ "Fill the box with the specified string.",
+ "",
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
}
static void
priv->font = font;
priv->align = NULL;
priv->background_color = NULL;
-
- priv->ellipsize = RPT_ELLIPSIZE_NONE;
-
- priv->letter_spacing = 0;
}
/**
g_object_set (rpt_obj_text, "letter-spacing", strtol (prop, NULL, 10), NULL);
xmlFree (prop);
}
+ prop = (gchar *)xmlGetProp (xnode, "fill-with");
+ if (prop != NULL)
+ {
+ g_object_set (rpt_obj_text, "fill-with", prop, NULL);
+ xmlFree (prop);
+ }
}
}
{
xmlSetProp (xnode, "letter-spacing", g_strdup_printf ("%d", priv->letter_spacing));
}
+ if (priv->fill_with != NULL
+ && g_strcmp0 (priv->fill_with, "") != 0)
+ {
+ xmlSetProp (xnode, "fill-with", priv->fill_with);
+ }
}
static void
priv->letter_spacing = g_value_get_uint (value);
break;
+ case PROP_FILL_WITH:
+ priv->fill_with = g_strstrip (g_strdup (g_value_get_string (value)));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
g_value_set_uint (value, priv->letter_spacing);
break;
+ case PROP_FILL_WITH:
+ g_value_set_string (value, priv->fill_with);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
PangoAttribute *pattr;
PangoAttrList *lpattr = NULL;
- gchar *text = (gchar *)xmlNodeGetContent (xnode);
+ GString *text;
gchar *prop;
gdouble padding_top = 0.0;
gdouble padding_bottom = 0.0;
gdouble padding_left = 0.0;
+ gdouble layout_width;
+
position = rpt_common_get_position (xnode);
size = rpt_common_get_size (xnode);
rotation = rpt_common_get_rotation (xnode);
return;
}
+ text = g_string_new ((gchar *)xmlNodeGetContent (xnode));
+
/* padding */
prop = xmlGetProp (xnode, (const xmlChar *)"padding-top");
if (prop != NULL)
xmlFree (prop);
}
+ layout_width = rpt_common_value_to_points (priv->unit, size->width) - padding_left - padding_right;
+
/* creating pango layout */
/*if (priv->output_type == RPTP_OUTPUT_GTK)
{
/*}*/
if (size != NULL)
{
- pango_layout_set_width (playout, (rpt_common_value_to_points (priv->unit, size->width) - padding_left - padding_right) * PANGO_SCALE);
+ pango_layout_set_width (playout, layout_width * PANGO_SCALE);
}
/* creating pango font description */
pattr = pango_attr_underline_new (font->underline);
pattr->start_index = 0;
- pattr->end_index = strlen (text) + 1;
+ pattr->end_index = text->len + 1;
if (lpattr == NULL)
{
pattr = pango_attr_strikethrough_new (TRUE);
pattr->start_index = 0;
- pattr->end_index = strlen (text) + 1;
+ pattr->end_index = text->len + 1;
if (lpattr == NULL)
{
pattr = pango_attr_letter_spacing_new (spacing * PANGO_SCALE);
pattr->start_index = 0;
- pattr->end_index = strlen (text) + 1;
+ pattr->end_index = text->len + 1;
if (lpattr == NULL)
{
cairo_move_to (priv->cr, rpt_common_value_to_points (priv->unit, position->x) + padding_left,
rpt_common_value_to_points (priv->unit, position->y) + padding_top);
- pango_layout_set_text (playout, text, -1);
+ pango_layout_set_text (playout, text->str, -1);
+
+ /* fill-with */
+ prop = xmlGetProp (xnode, (const xmlChar *)"fill-with");
+ if (prop != NULL
+ && g_strcmp0 (g_strstrip (prop), "") != 0)
+ {
+ gint lines;
+
+ GString *text_tmp;
+
+ lines = pango_layout_get_line_count (playout);
+
+ text_tmp = g_string_new (text->str);
+
+ g_string_append (text_tmp, prop);
+ pango_layout_set_text (playout, text_tmp->str, -1);
+ while (lines == pango_layout_get_line_count (playout))
+ {
+ g_string_append (text, prop);
+
+ g_string_append (text_tmp, prop);
+ pango_layout_set_text (playout, text_tmp->str, -1);
+ }
+
+ g_string_free (text_tmp, TRUE);
+ }
+
+ pango_layout_set_text (playout, text->str, -1);
+
pango_cairo_show_layout (priv->cr, playout);
if (position != NULL && size != NULL)
g_free (align);
g_free (border);
g_free (font);
+ g_string_free (text, TRUE);
}
static void