summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
authorJabiertxof <jtx@jtx>2016-12-16 22:49:53 +0000
committerJabiertxof <jtx@jtx>2016-12-16 22:49:53 +0000
commit5927b3bf5d9d8dcc9f519b4b9060669bd2599a28 (patch)
tree3b51f70f9b467bb016c678afcaae650e3afd395b /src/widgets
parentworking with mirrors (diff)
downloadinkscape-5927b3bf5d9d8dcc9f519b4b9060669bd2599a28.tar.gz
inkscape-5927b3bf5d9d8dcc9f519b4b9060669bd2599a28.zip
Rollback 15315
(bzr r15295.1.25)
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/mesh-toolbar.cpp165
-rw-r--r--src/widgets/text-toolbar.cpp166
-rw-r--r--src/widgets/toolbox.cpp11
3 files changed, 116 insertions, 226 deletions
diff --git a/src/widgets/mesh-toolbar.cpp b/src/widgets/mesh-toolbar.cpp
index ea0faf1df..f7b7a6ec9 100644
--- a/src/widgets/mesh-toolbar.cpp
+++ b/src/widgets/mesh-toolbar.cpp
@@ -67,79 +67,76 @@ static bool blocked = false;
//## Mesh ##
//########################
-
-// Get a list of selected meshes taking into account fill/stroke toggles
-std::vector<SPMeshGradient *> ms_get_dt_selected_gradients(Inkscape::Selection *selection)
+/*
+ * Get the current selection and dragger status from the desktop
+ */
+void ms_read_selection( Inkscape::Selection *selection,
+ SPMeshGradient *&ms_selected,
+ bool &ms_selected_multi,
+ SPMeshType &ms_type,
+ bool &ms_type_multi )
{
- std::vector<SPMeshGradient *> ms_selected;
-
- Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- bool edit_fill = prefs->getBool("/tools/mesh/edit_fill", true);
- bool edit_stroke = prefs->getBool("/tools/mesh/edit_stroke", true);
+ // Read desktop selection
+ bool first = true;
+ ms_type = SP_MESH_TYPE_COONS;
+
auto itemlist= selection->items();
for(auto i=itemlist.begin();i!=itemlist.end();++i){
- SPItem *item = *i;// get the items gradient, not the getVector() version
+ SPItem *item = *i;
SPStyle *style = item->style;
- if (style) {
+ if (style && (style->fill.isPaintserver())) {
+ SPPaintServer *server = item->style->getFillPaintServer();
+ if ( SP_IS_MESHGRADIENT(server) ) {
-
- if (edit_fill && style->fill.isPaintserver()) {
- SPPaintServer *server = item->style->getFillPaintServer();
- SPMeshGradient *mesh = dynamic_cast<SPMeshGradient *>(server);
- if (mesh) {
- ms_selected.push_back(mesh);
- }
- }
+ SPMeshGradient *gradient = SP_MESHGRADIENT(server); // ->getVector();
+ SPMeshType type = gradient->type;
- if (edit_stroke && style->stroke.isPaintserver()) {
- SPPaintServer *server = item->style->getStrokePaintServer();
- SPMeshGradient *mesh = dynamic_cast<SPMeshGradient *>(server);
- if (mesh) {
- ms_selected.push_back(mesh);
+ if (gradient != ms_selected) {
+ if (ms_selected) {
+ ms_selected_multi = true;
+ } else {
+ ms_selected = gradient;
+ }
}
+ if( type != ms_type ) {
+ if (ms_type != SP_MESH_TYPE_COONS && !first) {
+ ms_type_multi = true;
+ } else {
+ ms_type = type;
+ }
+ }
+ first = false;
}
}
- }
- return ms_selected;
-}
+ if (style && (style->stroke.isPaintserver())) {
+ SPPaintServer *server = item->style->getStrokePaintServer();
+ if ( SP_IS_MESHGRADIENT(server) ) {
+ SPMeshGradient *gradient = SP_MESHGRADIENT(server); // ->getVector();
+ SPMeshType type = gradient->type;
-/*
- * Get the current selection status from the desktop
- */
-void ms_read_selection( Inkscape::Selection *selection,
- SPMeshGradient *&ms_selected,
- bool &ms_selected_multi,
- SPMeshType &ms_type,
- bool &ms_type_multi )
-{
- ms_selected = NULL;
- ms_selected_multi = false;
- ms_type = SP_MESH_TYPE_COONS;
- ms_type_multi = false;
-
- bool first = true;
-
- // Read desktop selection, taking into account fill/stroke toggles
- std::vector<SPMeshGradient *> meshes = ms_get_dt_selected_gradients( selection );
- for (auto i = meshes.begin(); i != meshes.end(); ++i) {
- if (first) {
- ms_selected = (*i);
- ms_type = (*i)->type;
- first = false;
- } else {
- if (ms_selected != (*i)) {
- ms_selected_multi = true;
- }
- if (ms_type != (*i)->type) {
- ms_type_multi = true;
+ if (gradient != ms_selected) {
+ if (ms_selected) {
+ ms_selected_multi = true;
+ } else {
+ ms_selected = gradient;
+ }
+ }
+ if( type != ms_type ) {
+ if (ms_type != SP_MESH_TYPE_COONS && !first) {
+ ms_type_multi = true;
+ } else {
+ ms_type = type;
+ }
+ }
+ first = false;
}
}
}
-}
+ }
/*
* Core function, setup all the widgets whenever something changes on the desktop
@@ -176,7 +173,7 @@ static void ms_tb_selection_changed(Inkscape::Selection * /*selection*/, gpointe
// std::cout << " type: " << ms_type << std::endl;
EgeSelectOneAction* type = (EgeSelectOneAction *) g_object_get_data(G_OBJECT(widget), "mesh_select_type_action");
- gtk_action_set_sensitive( GTK_ACTION(type), (ms_selected && !ms_type_multi) );
+ gtk_action_set_sensitive( GTK_ACTION(type), (ms_selected && !ms_selected_multi) );
if (ms_selected) {
blocked = TRUE;
ege_select_one_action_set_active( type, ms_type );
@@ -207,6 +204,34 @@ static void ms_defs_modified(SPObject * /*defs*/, guint /*flags*/, GObject *widg
ms_tb_selection_changed(NULL, widget);
}
+void ms_get_dt_selected_gradient(Inkscape::Selection *selection, SPMeshGradient *&ms_selected)
+{
+ SPMeshGradient *gradient = 0;
+
+ auto itemlist= selection->items();
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
+ SPItem *item = *i;// get the items gradient, not the getVector() version
+ SPStyle *style = item->style;
+ SPPaintServer *server = 0;
+
+ if (style && (style->fill.isPaintserver())) {
+ server = item->style->getFillPaintServer();
+ }
+ if (style && (style->stroke.isPaintserver())) {
+ server = item->style->getStrokePaintServer();
+ }
+
+ if ( SP_IS_MESHGRADIENT(server) ) {
+ gradient = SP_MESHGRADIENT(server);
+ }
+ }
+
+ if (gradient) {
+ ms_selected = gradient;
+ }
+}
+
+
/*
* Callback functions for user actions
*/
@@ -271,17 +296,18 @@ static void ms_type_changed(EgeSelectOneAction *act, GtkWidget *widget)
SPDesktop *desktop = static_cast<SPDesktop *>(g_object_get_data(G_OBJECT(widget), "desktop"));
Inkscape::Selection *selection = desktop->getSelection();
- std::vector<SPMeshGradient *> meshes = ms_get_dt_selected_gradients(selection);
+ SPMeshGradient *gradient = 0;
+ ms_get_dt_selected_gradient(selection, gradient);
- SPMeshType type = (SPMeshType) ege_select_one_action_get_active(act);
- for (auto i = meshes.begin(); i != meshes.end(); ++i) {
+ if (gradient) {
+ SPMeshType type = (SPMeshType) ege_select_one_action_get_active(act);
// std::cout << " type: " << type << std::endl;
- (*i)->type = type;
- (*i)->type_set = true;
- (*i)->updateRepr();
- }
- if (!meshes.empty() ) {
- DocumentUndo::done(desktop->getDocument(), SP_VERB_CONTEXT_MESH,_("Set mesh type"));
+ gradient->type = type;
+ gradient->type_set = true;
+ gradient->updateRepr();
+
+ DocumentUndo::done(desktop->getDocument(), SP_VERB_CONTEXT_MESH,
+ _("Set mesh type"));
}
}
@@ -340,7 +366,7 @@ static void ms_toggle_handles(void)
}
}
-static void ms_toggle_fill_stroke(InkToggleAction * /*act*/, gpointer data)
+static void ms_toggle_fill_stroke(void)
{
MeshTool *mt = get_mesh_tool();
if (mt) {
@@ -348,7 +374,6 @@ static void ms_toggle_fill_stroke(InkToggleAction * /*act*/, gpointer data)
drag->updateDraggers();
drag->updateLines();
drag->updateLevels();
- ms_tb_selection_changed(NULL, data); // Need to update Type widget
}
}
@@ -482,7 +507,7 @@ void sp_mesh_toolbox_prep(SPDesktop * desktop, GtkActionGroup* mainActions, GObj
gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
PrefPusher *pusher = new PrefPusher(GTK_TOGGLE_ACTION(act), "/tools/mesh/edit_fill");
g_signal_connect( holder, "destroy", G_CALLBACK(delete_prefspusher), pusher);
- g_signal_connect_after( G_OBJECT(act), "activate", G_CALLBACK(ms_toggle_fill_stroke), holder);
+ g_signal_connect_after( G_OBJECT(act), "activate", G_CALLBACK(ms_toggle_fill_stroke), 0);
}
/* Edit stroke mesh */
@@ -495,7 +520,7 @@ void sp_mesh_toolbox_prep(SPDesktop * desktop, GtkActionGroup* mainActions, GObj
gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
PrefPusher *pusher = new PrefPusher(GTK_TOGGLE_ACTION(act), "/tools/mesh/edit_stroke");
g_signal_connect( holder, "destroy", G_CALLBACK(delete_prefspusher), pusher);
- g_signal_connect_after( G_OBJECT(act), "activate", G_CALLBACK(ms_toggle_fill_stroke), holder);
+ g_signal_connect_after( G_OBJECT(act), "activate", G_CALLBACK(ms_toggle_fill_stroke), 0);
}
/* Show/hide side and tensor handles */
diff --git a/src/widgets/text-toolbar.cpp b/src/widgets/text-toolbar.cpp
index 784c467f1..114d946bb 100644
--- a/src/widgets/text-toolbar.cpp
+++ b/src/widgets/text-toolbar.cpp
@@ -117,8 +117,6 @@ static void sp_print_fontstyle( SPStyle *query ) {
}
#endif
-static void sp_text_toolbox_selection_changed(Inkscape::Selection */*selection*/, GObject *tbl, bool subselection = false);
-
// Font family
static void sp_text_fontfamily_value_changed( Ink_ComboBoxEntry_Action *act, GObject *tbl )
{
@@ -227,35 +225,8 @@ static void sp_text_fontsize_value_changed( Ink_ComboBoxEntry_Action *act, GObje
sp_repr_css_set_property (css, "font-size", osfs.str().c_str());
// Apply font size to selected objects.
- // Calling sp_desktop_set_style will result in a call to TextTool::_styleSet() which
- // will set the style on selected text inside the <text> element. If we want to set
- // the style on the outer <text> objects we need to bypass this call.
- bool outer = prefs->getInt("/tools/text/outer_style", false);
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
- if (outer) {
- Inkscape::Selection *selection = desktop->getSelection();
- auto itemlist= selection->items();
- for(auto i=itemlist.begin();i!=itemlist.end(); ++i){
- if (dynamic_cast<SPText *>(*i) || dynamic_cast<SPFlowtext *>(*i)) {
- SPItem *item = *i;
-
- // Scale by inverse of accumulated parent transform
- SPCSSAttr *css_set = sp_repr_css_attr_new();
- sp_repr_css_merge(css_set, css);
- Geom::Affine const local(item->i2doc_affine());
- double const ex(local.descrim());
- if ( (ex != 0.0) && (ex != 1.0) ) {
- sp_css_attr_scale(css_set, 1/ex);
- }
-
- item->changeCSS(css_set,"style");
-
- sp_repr_css_attr_unref(css_set);
- }
- }
- } else {
- sp_desktop_set_style (desktop, css, true, true);
- }
+ sp_desktop_set_style (desktop, css, true, true);
// If no selected objects, set default.
SPStyle query(SP_ACTIVE_DOCUMENT);
@@ -310,40 +281,6 @@ static void sp_text_fontstyle_value_changed( Ink_ComboBoxEntry_Action *act, GObj
g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
}
-// Changes selection to only text outer elements.
-static void sp_text_outer_style_changed( InkToggleAction*act, GObject *tbl )
-{
- bool outer = gtk_toggle_action_get_active( GTK_TOGGLE_ACTION(act) );
- Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- prefs->setInt("/tools/text/outer_style", outer);
-
- // Update widgets to reflect new state of Text Outer Style button.
- sp_text_toolbox_selection_changed( NULL, tbl );
-}
-
-// Unset line height on selection's inner text objects (tspan, etc.).
-static void sp_text_lineheight_unset_changed( InkToggleAction*act, GObject *tbl )
-{
- // quit if run by the _changed callbacks
- if (g_object_get_data(G_OBJECT(tbl), "freeze")) {
- return;
- }
- g_object_set_data( tbl, "freeze", GINT_TO_POINTER(TRUE) );
-
- SPCSSAttr *css = sp_repr_css_attr_new();
- sp_repr_css_unset_property(css, "line-height");
-
- SPDesktop *desktop = SP_ACTIVE_DESKTOP;
- sp_desktop_set_style (desktop, css);
-
- sp_repr_css_attr_unref(css);
-
- DocumentUndo::done(desktop->getDocument(), SP_VERB_CONTEXT_TEXT,
- _("Text: Unset line height."));
-
- g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
-}
-
// Handles both Superscripts and Subscripts
static void sp_text_script_changed( InkToggleAction* act, GObject *tbl )
{
@@ -612,34 +549,9 @@ static void sp_text_lineheight_value_changed( GtkAdjustment *adj, GObject *tbl )
sp_repr_css_set_property (css, "line-height", osfs.str().c_str());
- // Apply line-height to selected objects. See comment in font size function.
- bool outer = prefs->getInt("/tools/text/outer_style", false);
+ // Apply line-height to selected objects.
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
- if (outer) {
- Inkscape::Selection *selection = desktop->getSelection();
- auto itemlist= selection->items();
- for(auto i=itemlist.begin();i!=itemlist.end(); ++i){
- if (dynamic_cast<SPText *>(*i) || dynamic_cast<SPFlowtext *>(*i)) {
- SPItem *item = *i;
-
- // Scale by inverse of accumulated parent transform
- SPCSSAttr *css_set = sp_repr_css_attr_new();
- sp_repr_css_merge(css_set, css);
- Geom::Affine const local(item->i2doc_affine());
- double const ex(local.descrim());
- if ( (ex != 0.0) && (ex != 1.0) ) {
- sp_css_attr_scale(css_set, 1/ex);
- }
-
- item->changeCSS(css_set,"style");
-
- sp_repr_css_attr_unref(css_set);
- }
- }
- } else {
- sp_desktop_set_style (desktop, css, true, true);
- }
-
+ sp_desktop_set_style (desktop, css, true, false);
// Only need to save for undo if a text item has been changed.
@@ -740,7 +652,7 @@ static void sp_text_lineheight_unit_changed( gpointer /* */, GObject *tbl )
double font_size = 0;
int count = 0;
for(auto i=itemlist.begin();i!=itemlist.end(); ++i){
- if (SP_IS_TEXT (*i) || SP_IS_FLOWTEXT(*i)) {
+ if (SP_IS_TEXT (*i)) {
double doc_scale = Geom::Affine((*i)->i2dt_affine()).descrim();
font_size += (*i)->style->font_size.computed * doc_scale;
++count;
@@ -769,7 +681,7 @@ static void sp_text_lineheight_unit_changed( gpointer /* */, GObject *tbl )
double font_size = 0;
int count = 0;
for(auto i=itemlist.begin();i!=itemlist.end(); ++i){
- if (SP_IS_TEXT (*i) || SP_IS_FLOWTEXT (*i)) {
+ if (SP_IS_TEXT (*i)) {
double doc_scale = Geom::Affine((*i)->i2dt_affine()).descrim();
font_size += (*i)->style->font_size.computed * doc_scale;
++count;
@@ -1161,7 +1073,7 @@ static void sp_text_set_sizes(GtkListStore* model_size, int unit)
* It is called whenever a text selection is changed, including stepping cursor
* through text, or setting focus to text.
*/
-static void sp_text_toolbox_selection_changed(Inkscape::Selection */*selection*/, GObject *tbl, bool subselection) // don't bother to update font list if subsel changed
+static void sp_text_toolbox_selection_changed(Inkscape::Selection */*selection*/, GObject *tbl, bool subselection = false) // don't bother to update font list if subsel changed
{
#ifdef DEBUG_TEXT
static int count = 0;
@@ -1170,11 +1082,12 @@ static void sp_text_toolbox_selection_changed(Inkscape::Selection */*selection*/
std::cout << "&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&" << std::endl;
std::cout << "sp_text_toolbox_selection_changed: start " << count << std::endl;
- SPDesktop *desktop = SP_ACTIVE_DESKTOP;
- Inkscape::Selection *selection = desktop->getSelection();
- auto itemlist0= selection->items();
- for(auto i=itemlist0.begin();i!=itemlist0.end(); ++i) {
- const gchar* id = (*i)->getId();
+ std::cout << " Selected items:" << std::endl;
+ for (GSList const *items = SP_ACTIVE_DESKTOP->getSelection()->itemList();
+ items != NULL;
+ items = items->next)
+ {
+ const gchar* id = reinterpret_cast<SPItem *>(items->data)->getId();
std::cout << " " << id << std::endl;
}
Glib::ustring selected_text = sp_text_get_selected_text((SP_ACTIVE_DESKTOP)->event_context);
@@ -1216,7 +1129,8 @@ static void sp_text_toolbox_selection_changed(Inkscape::Selection */*selection*/
gboolean isFlow = false;
auto itemlist= SP_ACTIVE_DESKTOP->getSelection()->items();
for(auto i=itemlist.begin();i!=itemlist.end(); ++i){
- // std::cout << " " << ((*i)->getId()?(*i)->getId():"null") << std::endl;
+ // const gchar* id = reinterpret_cast<SPItem *>(items->data)->getId();
+ // std::cout << " " << id << std::endl;
if( SP_IS_FLOWTEXT(*i)) {
isFlow = true;
// std::cout << " Found flowed text" << std::endl;
@@ -1234,26 +1148,10 @@ static void sp_text_toolbox_selection_changed(Inkscape::Selection */*selection*/
SPStyle query(SP_ACTIVE_DOCUMENT);
int result_family = sp_desktop_query_style (SP_ACTIVE_DESKTOP, &query, QUERY_STYLE_PROPERTY_FONTFAMILY);
int result_style = sp_desktop_query_style (SP_ACTIVE_DESKTOP, &query, QUERY_STYLE_PROPERTY_FONTSTYLE);
+ int result_numbers = sp_desktop_query_style (SP_ACTIVE_DESKTOP, &query, QUERY_STYLE_PROPERTY_FONTNUMBERS);
int result_baseline = sp_desktop_query_style (SP_ACTIVE_DESKTOP, &query, QUERY_STYLE_PROPERTY_BASELINES);
int result_wmode = sp_desktop_query_style (SP_ACTIVE_DESKTOP, &query, QUERY_STYLE_PROPERTY_WRITINGMODES);
- // Calling sp_desktop_query_style will result in a call to TextTool::_styleQueried().
- // This returns the style of the selected text inside the <text> element... which
- // is often the style of one or more <tspan>s. If we want the style of the outer
- // <text> objects then we need to bypass the call to TextTool::_styleQueried().
- // The desktop selection never includes the elements inside the <text> element.
- int result_numbers = 0;
- Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- SPDesktop *desktop = SP_ACTIVE_DESKTOP;
- bool outer = prefs->getInt("/tools/text/outer_style", false);
- if (outer) {
- Inkscape::Selection *selection = desktop->getSelection();
- std::vector<SPItem *> vec(selection->items().begin(), selection->items().end());
- result_numbers = sp_desktop_query_style_from_list (vec, &query, QUERY_STYLE_PROPERTY_FONTNUMBERS);
- } else {
- result_numbers = sp_desktop_query_style (SP_ACTIVE_DESKTOP, &query, QUERY_STYLE_PROPERTY_FONTNUMBERS);
- }
-
/*
* If no text in selection (querying returned nothing), read the style from
* the /tools/text preferencess (default style for new texts). Return if
@@ -1428,13 +1326,7 @@ static void sp_text_toolbox_selection_changed(Inkscape::Selection */*selection*/
}
// Save unit so we can do convertions between new/old units.
g_object_set_data( tbl, "lineheight_unit", GINT_TO_POINTER(line_height_unit));
-
- // Enable and turn on only if selection includes an object with line height set.
- InkToggleAction* lineHeightUnset =
- INK_TOGGLE_ACTION( g_object_get_data( tbl, "TextLineHeightUnsetAction"));
- gtk_action_set_sensitive(GTK_ACTION(lineHeightUnset), query.line_height.set );
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(lineHeightUnset), query.line_height.set );
-
+
// Word spacing
double wordSpacing;
if (query.word_spacing.normal) wordSpacing = 0.0;
@@ -2129,32 +2021,6 @@ void sp_text_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObje
g_object_set( G_OBJECT(eact), "iconId", "text_rotation", NULL );
}
- /* Text line height unset */
- {
- InkToggleAction* act = ink_toggle_action_new( "TextLineHeightUnsetAction", // Name
- _("Unset line height"), // Label
- _("If enabled, line height is set on part of selection. Click to unset."),
- INKSCAPE_ICON("paint-unknown"),
- secondarySize ); // Icon size
- gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
- g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_text_lineheight_unset_changed), holder );
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/text/line_height_unset", false) );
- g_object_set_data( holder, "TextLineHeightUnsetAction", act );
- }
-
- /* Text outer style */
- {
- InkToggleAction* act = ink_toggle_action_new( "TextOuterStyleAction", // Name
- _("Show outer style"), // Label
- _("Show style of outermost text element. The 'font-size' and 'line-height' values of the outermost text element determine the minimum line spacing in the block."),
- INKSCAPE_ICON("text_outer_style"),
- secondarySize ); // Icon size
- gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
- g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_text_outer_style_changed), holder );
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/text/outer_style", false) );
- g_object_set_data( holder, "TextOuterStyleAction", act );
- }
-
// Is this necessary to call? Shouldn't hurt.
sp_text_toolbox_selection_changed(desktop->getSelection(), holder);
diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp
index a3db3c33d..53de2d342 100644
--- a/src/widgets/toolbox.cpp
+++ b/src/widgets/toolbox.cpp
@@ -508,19 +508,18 @@ static gchar const * ui_descr =
" <toolbar name='TextToolbar'>"
" <toolitem action='TextFontFamilyAction' />"
- " <toolitem action='TextFontStyleAction' />"
- " <separator />"
- " <toolitem action='TextOuterStyleAction' />"
" <toolitem action='TextFontSizeAction' />"
- " <toolitem action='TextLineHeightAction' />"
- " <toolitem action='TextLineHeightUnitsAction' />"
- " <toolitem action='TextLineHeightUnsetAction' />"
+ " <toolitem action='TextFontStyleAction' />"
+// " <toolitem action='TextBoldAction' />"
+// " <toolitem action='TextItalicAction' />"
" <separator />"
" <toolitem action='TextAlignAction' />"
" <separator />"
" <toolitem action='TextSuperscriptAction' />"
" <toolitem action='TextSubscriptAction' />"
" <separator />"
+ " <toolitem action='TextLineHeightAction' />"
+ " <toolitem action='TextLineHeightUnitsAction' />"
" <toolitem action='TextLetterSpacingAction' />"
" <toolitem action='TextWordSpacingAction' />"
" <toolitem action='TextDxAction' />"