- cairo_text_extents(cr, obj->text->data, &extents);
- cairo_move_to (cr, extents.x_bearing, -extents.y_bearing);
- cairo_show_text (cr, obj->text->data);
+ cairo_text_extents(cr, obj->text->data, &extents);
+ double x_bearing = extents.x_bearing;
+ double y_bearing = -extents.y_bearing;
+
+ attr = abc_obj_find_attr(obj, ABC_HTML_ATTR_TEXT_ALIGN);
+ if (attr) {
+ if (!__html_strcmp(attr->value->data, "right"))
+ x_bearing = w - extents.width - x_bearing;
+
+ else if (!__html_strcmp(attr->value->data, "center"))
+ x_bearing = (w - extents.width) / 2 - x_bearing;
+ }
+
+ attr = abc_obj_find_attr(obj, ABC_HTML_ATTR_VERTICAL_ALIGN);
+ if (attr) {
+ if (!__html_strcmp(attr->value->data, "bottom"))
+ y_bearing += h - extents.height;
+
+ else if (!__html_strcmp(attr->value->data, "center"))
+ y_bearing += (h - extents.height) / 2;
+ }
+
+ cairo_move_to (cr, x_bearing, y_bearing);
+ cairo_show_text(cr, obj->text->data);