static void sp_text_edit_dialog_update_object (SPText *text, SPRepr *repr) { g_object_set_data (G_OBJECT (dlg), "blocked", GINT_TO_POINTER (TRUE)); if (text) { GtkTextBuffer *tb; GtkTextIter start, end; gchar *str; tb = (GtkTextBuffer*)g_object_get_data (G_OBJECT (dlg), "text"); /* Content */ gtk_text_buffer_get_bounds (tb, &start, &end); str = gtk_text_buffer_get_text (tb, &start, &end, TRUE); sp_text_set_repr_text_multiline (text, str); g_free (str); } if (repr) { GtkWidget *fontsel, *preview, *b, *combo; SPCSSAttr *css; NRFont *font; gchar c[256]; const char *sstr; fontsel = (GtkWidget*)g_object_get_data (G_OBJECT (dlg), "fontsel"); preview = (GtkWidget*)g_object_get_data (G_OBJECT (dlg), "preview"); css = sp_repr_css_attr_new (); /* font */ font = sp_font_selector_get_font (SP_FONT_SELECTOR (fontsel)); nr_typeface_family_name_get (NR_FONT_TYPEFACE (font), c, 256); sp_repr_css_set_property (css, "font-family", c); nr_typeface_attribute_get (NR_FONT_TYPEFACE (font), "weight", c, 256); g_strdown (c); sp_repr_css_set_property (css, "font-weight", c); nr_typeface_attribute_get (NR_FONT_TYPEFACE (font), "style", c, 256); g_strdown (c); sp_repr_css_set_property (css, "font-style", c); g_snprintf (c, 64, "%g", NR_FONT_SIZE (font)); sp_repr_css_set_property (css, "font-size", c); nr_font_unref (font); /* Layout */ b = (GtkWidget*)g_object_get_data (G_OBJECT (dlg), "text_anchor_start"); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (b))) { sp_repr_css_set_property (css, "text-anchor", "start"); } else { b = (GtkWidget*)g_object_get_data (G_OBJECT (dlg), "text_anchor_middle"); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (b))) { sp_repr_css_set_property (css, "text-anchor", "middle"); } else { sp_repr_css_set_property (css, "text-anchor", "end"); } } b = (GtkWidget*)g_object_get_data (G_OBJECT (dlg), "writing_mode_lr"); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (b))) { sp_repr_css_set_property (css, "writing-mode", "lr"); } else { sp_repr_css_set_property (css, "writing-mode", "tb"); } combo = (GtkWidget*)g_object_get_data ((GObject *) dlg, "line_spacing"); sstr = gtk_entry_get_text ((GtkEntry *) ((GtkCombo *) (combo))->entry); sp_repr_set_attr (repr, "sodipodi:linespacing", sstr); sp_repr_css_change (repr, css, "style"); sp_repr_css_attr_unref (css); } if (text) { sp_document_done (SP_DT_DOCUMENT (SP_ACTIVE_DESKTOP)); sp_document_ensure_up_to_date (SP_OBJECT_DOCUMENT (text)); } g_object_set_data (G_OBJECT (dlg), "blocked", NULL); }
SPCSSAttr * sp_get_text_dialog_style () { GtkWidget *fontsel = (GtkWidget*)g_object_get_data (G_OBJECT (dlg), "fontsel"); SPCSSAttr *css = sp_repr_css_attr_new (); /* font */ font_instance *font = sp_font_selector_get_font (SP_FONT_SELECTOR (fontsel)); if ( font ) { Glib::ustring fontName = font_factory::Default()->ConstructFontSpecification(font); sp_repr_css_set_property (css, "-inkscape-font-specification", fontName.c_str()); gchar c[256]; font->Family(c, 256); sp_repr_css_set_property (css, "font-family", c); font->Attribute( "weight", c, 256); sp_repr_css_set_property (css, "font-weight", c); font->Attribute("style", c, 256); sp_repr_css_set_property (css, "font-style", c); font->Attribute("stretch", c, 256); sp_repr_css_set_property (css, "font-stretch", c); font->Attribute("variant", c, 256); sp_repr_css_set_property (css, "font-variant", c); Inkscape::CSSOStringStream os; os << sp_font_selector_get_size (SP_FONT_SELECTOR (fontsel)) << "px"; // must specify px, see inkscape bug 1221626 and 1610103 sp_repr_css_set_property (css, "font-size", os.str().c_str()); font->Unref(); font=NULL; } /* Layout */ GtkWidget *b = (GtkWidget*)g_object_get_data (G_OBJECT (dlg), "text_anchor_start"); // Align Left if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (b))) { sp_repr_css_set_property (css, "text-anchor", "start"); sp_repr_css_set_property (css, "text-align", "start"); } else { // Align Center b = (GtkWidget*)g_object_get_data ( G_OBJECT (dlg), "text_anchor_middle"); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (b))) { sp_repr_css_set_property (css, "text-anchor", "middle"); sp_repr_css_set_property (css, "text-align", "center"); } else { // Align Right b = (GtkWidget*)g_object_get_data ( G_OBJECT (dlg), "text_anchor_end"); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (b))) { sp_repr_css_set_property (css, "text-anchor", "end"); sp_repr_css_set_property (css, "text-align", "end"); } else { // Align Justify sp_repr_css_set_property (css, "text-anchor", "start"); sp_repr_css_set_property (css, "text-align", "justify"); } } } b = (GtkWidget*)g_object_get_data (G_OBJECT (dlg), INKSCAPE_STOCK_WRITING_MODE_LR ); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (b))) { sp_repr_css_set_property (css, "writing-mode", "lr"); } else { sp_repr_css_set_property (css, "writing-mode", "tb"); } // Note that CSS 1.1 does not support line-height; we set it for consistency, but also set // sodipodi:linespacing for backwards compatibility; in 1.2 we use line-height for flowtext GtkWidget *combo = (GtkWidget*)g_object_get_data ((GObject *) dlg, "line_spacing"); const char *sstr = gtk_entry_get_text ((GtkEntry *) ((GtkCombo *) (combo))->entry); sp_repr_css_set_property (css, "line-height", sstr); return css; }