index b4dcd4bce07f4f460f367c2920ad5e2fd079b3c9..dc71de7c33006b297899efd9319e40e647500de4 100644 (file)
-#define __SP_TEXT_EDIT_C__
-
-/**
- * \brief Text editing dialog
- *
- * Author:
+/** @file
+ * @brief Text editing dialog
+ */
+/* Authors:
* Lauris Kaplinski <lauris@ximian.com>
* bulia byak <buliabyak@users.sf.net>
+ * Johan Engelen <goejendaagh@zonnet.nl>
*
- * Copyright (C) 1999-2002 Lauris Kaplinski
+ * Copyright (C) 1999-2007 Authors
* Copyright (C) 2000-2001 Ximian, Inc.
*
* Released under GNU GPL, read the file 'COPYING' for more information
#endif
#include <libnrtype/font-instance.h>
-
#include <gtk/gtk.h>
#ifdef WITH_GTKSPELL
#include "../sp-text.h"
#include "../sp-flowtext.h"
#include "../text-editing.h"
-#include "../inkscape-stock.h"
+#include "../ui/icon-names.h"
#include <libnrtype/font-style-to-pos.h>
#include "dialog-events.h"
-#include "../prefs-utils.h"
+#include "../preferences.h"
#include "../verbs.h"
#include "../interface.h"
#include "svg/css-ostringstream.h"
#include "widgets/icon.h"
#include <xml/repr.h>
-
#define VB_MARGIN 4
+#define MIN_ONSCREEN_DISTANCE 50
static void sp_text_edit_dialog_selection_modified (Inkscape::Application *inkscape, Inkscape::Selection *sel, guint flags, GtkWidget *dlg);
static void sp_text_edit_dialog_selection_changed (Inkscape::Application *inkscape, Inkscape::Selection *sel, GtkWidget *dlg);
@@ -78,14 +76,14 @@ static const gchar *spacings[] = {"50%", "80%", "90%", "100%", "110%", "120%", "
static GtkWidget *dlg = NULL;
static win_data wd;
// impossible original values to make sure they are read from prefs
-static gint x = -1000, y = -1000, w = 0, h = 0;
-static gchar const *prefs_path = "dialogs.textandfont";
+static gint x = -1000, y = -1000, w = 0, h = 0;
+static Glib::ustring const prefs_path = "/dialogs/textandfont/";
static void
-sp_text_edit_dialog_destroy (GtkObject *object, gpointer data)
+sp_text_edit_dialog_destroy( GtkObject */*object*/, gpointer /*data*/ )
{
sp_signal_disconnect_by_data (INKSCAPE, dlg);
wd.win = dlg = NULL;
static gboolean
-sp_text_edit_dialog_delete (GtkObject *object, GdkEvent *event, gpointer data)
+sp_text_edit_dialog_delete( GtkObject */*object*/, GdkEvent */*event*/, gpointer /*data*/ )
{
gtk_window_get_position ((GtkWindow *) dlg, &x, &y);
gtk_window_get_size ((GtkWindow *) dlg, &w, &h);
- prefs_set_int_attribute (prefs_path, "x", x);
- prefs_set_int_attribute (prefs_path, "y", y);
- prefs_set_int_attribute (prefs_path, "w", w);
- prefs_set_int_attribute (prefs_path, "h", h);
+ if (x<0) x=0;
+ if (y<0) y=0;
+
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setInt(prefs_path + "x", x);
+ prefs->setInt(prefs_path + "y", y);
+ prefs->setInt(prefs_path + "w", w);
+ prefs->setInt(prefs_path + "h", h);
return FALSE; // which means, go ahead and destroy it
}
can handle keys like Esc and Ctrl+Z itself.
*/
gboolean
-text_view_focus_in (GtkWidget *w, GdkEventKey *event, gpointer data)
+text_view_focus_in( GtkWidget */*w*/, GdkEventKey */*event*/, gpointer data )
{
GObject *dlg = (GObject *) data;
g_object_set_data (dlg, "eatkeys", GINT_TO_POINTER (TRUE));
}
gboolean
-text_view_focus_out (GtkWidget *w, GdkEventKey *event, gpointer data)
+text_view_focus_out (GtkWidget */*w*/, GdkEventKey */*event*/, gpointer data)
{
GObject *dlg = (GObject *) data;
g_object_set_data (dlg, "eatkeys", GINT_TO_POINTER (FALSE));
void
sp_text_edit_dialog (void)
{
-
if (!dlg) {
-
+
gchar title[500];
sp_ui_dialog_title_string (Inkscape::Verb::get(SP_VERB_DIALOG_TEXT), title);
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
dlg = sp_window_new (title, TRUE);
if (x == -1000 || y == -1000) {
- x = prefs_get_int_attribute (prefs_path, "x", 0);
- y = prefs_get_int_attribute (prefs_path, "y", 0);
+ x = prefs->getInt(prefs_path + "x", -1000);
+ y = prefs->getInt(prefs_path + "y", -1000);
}
-
if (w ==0 || h == 0) {
- w = prefs_get_int_attribute (prefs_path, "w", 0);
- h = prefs_get_int_attribute (prefs_path, "h", 0);
+ w = prefs->getInt(prefs_path + "w", 0);
+ h = prefs->getInt(prefs_path + "h", 0);
}
-
- if (x != 0 || y != 0) {
+
+// if (x<0) x=0;
+// if (y<0) y=0;
+
+ if (w && h)
+ gtk_window_resize ((GtkWindow *) dlg, w, h);
+ if (x >= 0 && y >= 0 && (x < (gdk_screen_width()-MIN_ONSCREEN_DISTANCE)) && (y < (gdk_screen_height()-MIN_ONSCREEN_DISTANCE))) {
gtk_window_move ((GtkWindow *) dlg, x, y);
} else {
gtk_window_set_position(GTK_WINDOW(dlg), GTK_WIN_POS_CENTER);
}
-
- if (w && h)
- gtk_window_resize ((GtkWindow *) dlg, w, h);
-
+
+
sp_transientize (dlg);
wd.win = dlg;
wd.stop = 0;
g_signal_connect ( G_OBJECT (INKSCAPE), "activate_desktop", G_CALLBACK (sp_transientize_callback), &wd );
-
+
gtk_signal_connect ( GTK_OBJECT (dlg), "event", GTK_SIGNAL_FUNC (sp_dialog_event_handler), dlg );
-
+
gtk_signal_connect ( GTK_OBJECT (dlg), "destroy", G_CALLBACK (sp_text_edit_dialog_destroy), dlg );
gtk_signal_connect ( GTK_OBJECT (dlg), "delete_event", G_CALLBACK (sp_text_edit_dialog_delete), dlg );
g_signal_connect ( G_OBJECT (INKSCAPE), "shut_down", G_CALLBACK (sp_text_edit_dialog_delete), dlg );
-
+
g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_hide", G_CALLBACK (sp_dialog_hide), dlg );
g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_unhide", G_CALLBACK (sp_dialog_unhide), dlg );
// font and style selector
GtkWidget *fontsel = sp_font_selector_new ();
g_signal_connect ( G_OBJECT (fontsel), "font_set", G_CALLBACK (sp_text_edit_dialog_font_changed), dlg );
+
+ g_signal_connect_swapped ( G_OBJECT (g_object_get_data (G_OBJECT(fontsel), "family-treeview")),
+ "row-activated",
+ G_CALLBACK (gtk_window_activate_default),
+ dlg);
+
gtk_box_pack_start (GTK_BOX (hb), fontsel, TRUE, TRUE, 0);
g_object_set_data (G_OBJECT (dlg), "fontsel", fontsel);
// align left
{
+ // TODO - replace with Inkscape-specific call
GtkWidget *px = gtk_image_new_from_stock ( GTK_STOCK_JUSTIFY_LEFT, GTK_ICON_SIZE_LARGE_TOOLBAR );
GtkWidget *b = group = gtk_radio_button_new (NULL);
gtk_tooltips_set_tip (tt, b, _("Align lines left"), NULL);
// align center
{
+ // TODO - replace with Inkscape-specific call
GtkWidget *px = gtk_image_new_from_stock ( GTK_STOCK_JUSTIFY_CENTER, GTK_ICON_SIZE_LARGE_TOOLBAR );
GtkWidget *b = gtk_radio_button_new (gtk_radio_button_group (GTK_RADIO_BUTTON (group)));
/* TRANSLATORS: `Center' here is a verb. */
// align right
{
+ // TODO - replace with Inkscape-specific call
GtkWidget *px = gtk_image_new_from_stock ( GTK_STOCK_JUSTIFY_RIGHT, GTK_ICON_SIZE_LARGE_TOOLBAR );
GtkWidget *b = gtk_radio_button_new (gtk_radio_button_group (GTK_RADIO_BUTTON (group)));
gtk_tooltips_set_tip (tt, b, _("Align lines right"), NULL);
g_object_set_data (G_OBJECT (dlg), "text_anchor_end", b);
}
+ // align justify
+ {
+ // TODO - replace with Inkscape-specific call
+ GtkWidget *px = gtk_image_new_from_stock ( GTK_STOCK_JUSTIFY_FILL, GTK_ICON_SIZE_LARGE_TOOLBAR );
+ GtkWidget *b = gtk_radio_button_new (gtk_radio_button_group (GTK_RADIO_BUTTON (group)));
+ gtk_tooltips_set_tip (tt, b, _("Justify lines"), NULL);
+ gtk_button_set_relief (GTK_BUTTON (b), GTK_RELIEF_NONE);
+ g_signal_connect ( G_OBJECT (b), "toggled", G_CALLBACK (sp_text_edit_dialog_any_toggled), dlg );
+ gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (b), FALSE);
+ gtk_container_add (GTK_CONTAINER (b), px);
+ gtk_box_pack_start (GTK_BOX (row), b, FALSE, FALSE, 0);
+ g_object_set_data (G_OBJECT (dlg), "text_anchor_justify", b);
+ }
+
gtk_box_pack_start (GTK_BOX (l_vb), row, FALSE, FALSE, 0);
}
// horizontal
{
- GtkWidget *px = sp_icon_new( GTK_ICON_SIZE_LARGE_TOOLBAR,
- INKSCAPE_STOCK_WRITING_MODE_LR );
+ GtkWidget *px = sp_icon_new( Inkscape::ICON_SIZE_LARGE_TOOLBAR,
+ INKSCAPE_ICON_FORMAT_TEXT_DIRECTION_HORIZONTAL );
GtkWidget *b = group = gtk_radio_button_new (NULL);
gtk_tooltips_set_tip (tt, b, _("Horizontal text"), NULL);
gtk_button_set_relief (GTK_BUTTON (b), GTK_RELIEF_NONE);
gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (b), FALSE);
gtk_container_add (GTK_CONTAINER (b), px);
gtk_box_pack_start (GTK_BOX (row), b, FALSE, FALSE, 0);
- g_object_set_data (G_OBJECT (dlg), INKSCAPE_STOCK_WRITING_MODE_LR, b);
+ g_object_set_data (G_OBJECT (dlg), INKSCAPE_ICON_FORMAT_TEXT_DIRECTION_HORIZONTAL, b);
}
// vertical
{
- GtkWidget *px = sp_icon_new( GTK_ICON_SIZE_LARGE_TOOLBAR,
- INKSCAPE_STOCK_WRITING_MODE_TB );
+ GtkWidget *px = sp_icon_new( Inkscape::ICON_SIZE_LARGE_TOOLBAR,
+ INKSCAPE_ICON_FORMAT_TEXT_DIRECTION_VERTICAL );
GtkWidget *b = gtk_radio_button_new (gtk_radio_button_group (GTK_RADIO_BUTTON (group)));
gtk_tooltips_set_tip (tt, b, _("Vertical text"), NULL);
gtk_button_set_relief (GTK_BUTTON (b), GTK_RELIEF_NONE);
gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (b), FALSE);
gtk_container_add (GTK_CONTAINER (b), px);
gtk_box_pack_start (GTK_BOX (row), b, FALSE, FALSE, 0);
- g_object_set_data (G_OBJECT (dlg), INKSCAPE_STOCK_WRITING_MODE_TB, b);
+ g_object_set_data (G_OBJECT (dlg), INKSCAPE_ICON_FORMAT_TEXT_DIRECTION_VERTICAL, b);
}
gtk_box_pack_start (GTK_BOX (l_vb), row, FALSE, FALSE, 0);
g_list_free (sl);
}
- g_signal_connect ( (GObject *) ((GtkCombo *) c)->entry,
- "changed",
+ g_signal_connect ( (GObject *) ((GtkCombo *) c)->entry,
+ "changed",
(GCallback) sp_text_edit_dialog_line_spacing_changed,
dlg );
gtk_box_pack_start (GTK_BOX (row), c, FALSE, FALSE, VB_MARGIN);
gtk_text_view_set_editable (GTK_TEXT_VIEW (txt), TRUE);
gtk_container_add (GTK_CONTAINER (scroller), txt);
gtk_box_pack_start (GTK_BOX (vb), scroller, TRUE, TRUE, 0);
- g_signal_connect ( G_OBJECT (tb), "changed",
+ g_signal_connect ( G_OBJECT (tb), "changed",
G_CALLBACK (sp_text_edit_dialog_text_changed), dlg );
g_signal_connect (G_OBJECT (txt), "focus-in-event", G_CALLBACK (text_view_focus_in), dlg);
g_signal_connect (G_OBJECT (txt), "focus-out-event", G_CALLBACK (text_view_focus_out), dlg);
{
GtkWidget *b = gtk_button_new_with_label (_("Set as default"));
- g_signal_connect ( G_OBJECT (b), "clicked",
- G_CALLBACK (sp_text_edit_dialog_set_default),
+ g_signal_connect ( G_OBJECT (b), "clicked",
+ G_CALLBACK (sp_text_edit_dialog_set_default),
dlg );
gtk_box_pack_start (GTK_BOX (hb), b, FALSE, FALSE, 0);
g_object_set_data (G_OBJECT (dlg), "default", b);
{
GtkWidget *b = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
- g_signal_connect ( G_OBJECT (b), "clicked",
+ g_signal_connect ( G_OBJECT (b), "clicked",
G_CALLBACK (sp_text_edit_dialog_close), dlg );
gtk_box_pack_end (GTK_BOX (hb), b, FALSE, FALSE, 0);
}
{
GtkWidget *b = gtk_button_new_from_stock (GTK_STOCK_APPLY);
- g_signal_connect ( G_OBJECT (b), "clicked",
+ GTK_WIDGET_SET_FLAGS (b, GTK_CAN_DEFAULT | GTK_HAS_DEFAULT);
+ g_signal_connect ( G_OBJECT (b), "clicked",
G_CALLBACK (sp_text_edit_dialog_apply), dlg );
gtk_box_pack_end ( GTK_BOX (hb), b, FALSE, FALSE, 0 );
g_object_set_data (G_OBJECT (dlg), "apply", b);
}
- g_signal_connect ( G_OBJECT (INKSCAPE), "modify_selection",
+ g_signal_connect ( G_OBJECT (INKSCAPE), "modify_selection",
G_CALLBACK (sp_text_edit_dialog_selection_modified), dlg);
- g_signal_connect ( G_OBJECT (INKSCAPE), "change_selection",
+ g_signal_connect ( G_OBJECT (INKSCAPE), "change_selection",
G_CALLBACK (sp_text_edit_dialog_selection_changed), dlg);
g_signal_connect (INKSCAPE, "change_subselection", G_CALLBACK (sp_text_edit_dialog_subselection_changed), dlg);
static void
-sp_text_edit_dialog_selection_modified ( Inkscape::Application *inkscape,
- Inkscape::Selection *sel,
- guint flags,
- GtkWidget *dlg )
+sp_text_edit_dialog_selection_modified( Inkscape::Application */*inkscape*/,
+ Inkscape::Selection */*sel*/,
+ guint flags,
+ GtkWidget *dlg )
{
gboolean style, content;
- style =
- ((flags & ( SP_OBJECT_CHILD_MODIFIED_FLAG |
+ style =
+ ((flags & ( SP_OBJECT_CHILD_MODIFIED_FLAG |
SP_OBJECT_STYLE_MODIFIED_FLAG )) != 0 );
-
- content =
- ((flags & ( SP_OBJECT_CHILD_MODIFIED_FLAG |
+
+ content =
+ ((flags & ( SP_OBJECT_CHILD_MODIFIED_FLAG |
SP_TEXT_CONTENT_MODIFIED_FLAG )) != 0 );
-
+
sp_text_edit_dialog_read_selection (dlg, style, content);
-}
+}
static void
-sp_text_edit_dialog_selection_changed ( Inkscape::Application *inkscape,
- Inkscape::Selection *sel,
+sp_text_edit_dialog_selection_changed( Inkscape::Application */*inkscape*/,
+ Inkscape::Selection */*sel*/,
GtkWidget *dlg )
{
sp_text_edit_dialog_read_selection (dlg, TRUE, TRUE);
}
-static void sp_text_edit_dialog_subselection_changed ( Inkscape::Application *inkscape, SPDesktop *desktop, GtkWidget *dlg )
+static void sp_text_edit_dialog_subselection_changed( Inkscape::Application */*inkscape*/, SPDesktop */*desktop*/, GtkWidget *dlg )
{
sp_text_edit_dialog_read_selection (dlg, TRUE, FALSE);
}
gtk_text_buffer_get_bounds (tb, &start, &end);
str = gtk_text_buffer_get_text (tb, &start, &end, TRUE);
sp_te_set_repr_text_multiline (text, str);
- g_free (str);
+ g_free (str);
gtk_text_buffer_set_modified (tb, FALSE);
}
}
/* font */
font_instance *font = sp_font_selector_get_font (SP_FONT_SELECTOR (fontsel));
- if ( font ) {
- 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));
- sp_repr_css_set_property (css, "font-size", os.str().c_str());
-
- font->Unref();
- font=NULL;
- }
-
+ 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 {
- b = (GtkWidget*)g_object_get_data ( G_OBJECT (dlg),
+ // 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 {
- sp_repr_css_set_property (css, "text-anchor", "end");
- sp_repr_css_set_property (css, "text-align", "end");
+ // 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 );
-
+
+ b = (GtkWidget*)g_object_get_data (G_OBJECT (dlg), INKSCAPE_ICON_FORMAT_TEXT_DIRECTION_HORIZONTAL );
+
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (b))) {
sp_repr_css_set_property (css, "writing-mode", "lr");
} else {
static void
-sp_text_edit_dialog_set_default (GtkButton *button, GtkWidget *dlg)
+sp_text_edit_dialog_set_default( GtkButton */*button*/, GtkWidget *dlg )
{
GtkWidget *def = (GtkWidget*)g_object_get_data (G_OBJECT (dlg), "default");
SPCSSAttr *css = sp_get_text_dialog_style ();
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
g_object_set_data (G_OBJECT (dlg), "blocked", GINT_TO_POINTER (TRUE));
- sp_repr_css_change (inkscape_get_repr (INKSCAPE, "tools.text"), css, "style");
+ prefs->mergeStyle("/tools/text/style", css);
g_object_set_data (G_OBJECT (dlg), "blocked", GINT_TO_POINTER (FALSE));
sp_repr_css_attr_unref (css);
static void
-sp_text_edit_dialog_apply (GtkButton *button, GtkWidget *dlg)
+sp_text_edit_dialog_apply( GtkButton */*button*/, GtkWidget *dlg )
{
g_object_set_data (G_OBJECT (dlg), "blocked", GINT_TO_POINTER (TRUE));
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
unsigned items = 0;
- const GSList *item_list = SP_DT_SELECTION(desktop)->itemList();
-
+ const GSList *item_list = sp_desktop_selection(desktop)->itemList();
SPCSSAttr *css = sp_get_text_dialog_style ();
-
sp_desktop_set_style(desktop, css, true);
- for (; item_list != NULL; item_list = item_list->next) {
+ for (; item_list != NULL; item_list = item_list->next) {
// apply style to the reprs of all text objects in the selection
if (SP_IS_TEXT (item_list->data)) {
// no need to set sodipodi:linespacing, because Inkscape never supported it on flowtext
++items;
}
-
- if (items == 0) {
+
+ if (items == 0) {
// no text objects; apply style to prefs for new objects
- sp_repr_css_change (inkscape_get_repr (INKSCAPE, "tools.text"), css, "style");
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->mergeStyle("/tools/text/style", css);
gtk_widget_set_sensitive (def, FALSE);
} else if (items == 1) {
/* exactly one text object; now set its text, too */
- SPItem *item = SP_DT_SELECTION(SP_ACTIVE_DESKTOP)->singleItem();
+ SPItem *item = sp_desktop_selection(SP_ACTIVE_DESKTOP)->singleItem();
if (SP_IS_TEXT (item) || SP_IS_FLOWTEXT(item)) {
sp_text_edit_dialog_update_object_text (item);
}
- }
+ }
// complete the transaction
- sp_document_done (SP_DT_DOCUMENT (SP_ACTIVE_DESKTOP));
-
+ sp_document_done (sp_desktop_document (SP_ACTIVE_DESKTOP), SP_VERB_CONTEXT_TEXT,
+ _("Set text style"));
gtk_widget_set_sensitive (apply, FALSE);
-
sp_repr_css_attr_unref (css);
-
g_object_set_data (G_OBJECT (dlg), "blocked", GINT_TO_POINTER (FALSE));
}
-
-
static void
-sp_text_edit_dialog_close (GtkButton *button, GtkWidget *dlg)
+sp_text_edit_dialog_close( GtkButton */*button*/, GtkWidget *dlg )
{
gtk_widget_destroy (GTK_WIDGET (dlg));
}
static void
-sp_text_edit_dialog_read_selection ( GtkWidget *dlg,
- gboolean dostyle,
+sp_text_edit_dialog_read_selection ( GtkWidget *dlg,
+ gboolean dostyle,
gboolean docontent )
{
- if (g_object_get_data (G_OBJECT (dlg), "blocked"))
+ if (g_object_get_data (G_OBJECT (dlg), "blocked"))
return;
-
+
g_object_set_data (G_OBJECT (dlg), "blocked", GINT_TO_POINTER (TRUE));
GtkWidget *notebook = (GtkWidget*)g_object_get_data (G_OBJECT (dlg), "notebook");
}
} // end of if (docontent)
repr = SP_OBJECT_REPR (text);
-
+
} else {
gtk_widget_set_sensitive (textw, FALSE);
gtk_widget_set_sensitive (apply, FALSE);
if (dostyle) {
// create temporary style
- SPStyle *query = sp_style_new ();
+ SPStyle *query = sp_style_new (SP_ACTIVE_DOCUMENT);
// query style from desktop into it. This returns a result flag and fills query with the style of subselection, if any, or selection
- 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_fontspec = sp_desktop_query_style (SP_ACTIVE_DESKTOP, query, QUERY_STYLE_PROPERTY_FONT_SPECIFICATION);
+ 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);
// If querying returned nothing, read the style from the text tool prefs (default style for new texts)
- if (result_family == QUERY_STYLE_NOTHING || result_style == QUERY_STYLE_NOTHING || result_numbers == QUERY_STYLE_NOTHING) {
- repr = inkscape_get_repr (INKSCAPE, "tools.text");
- if (repr) {
- gtk_widget_set_sensitive (notebook, TRUE);
- sp_style_read_from_repr (query, repr);
- } else {
- gtk_widget_set_sensitive (notebook, FALSE);
- }
+ // (Ok to not get a font specification - must just rely on the family and style in that case)
+ if (result_family == QUERY_STYLE_NOTHING || result_style == QUERY_STYLE_NOTHING
+ || result_numbers == QUERY_STYLE_NOTHING) {
+ sp_style_read_from_prefs(query, "/tools/text");
}
// FIXME: process result_family/style == QUERY_STYLE_MULTIPLE_DIFFERENT by showing "Many" in the lists
- font_instance *font = (font_factory::Default())->Face ( query->text->font_family.value, font_style_to_pos(*query) );
+
+ // Get a font_instance using the font-specification attribute stored in SPStyle if available
+ font_instance *font = font_factory::Default()->FaceFromStyle(query);
+
+
if (font) {
// the font is oversized, so we need to pass the true size separately
sp_font_selector_set_font (SP_FONT_SELECTOR (fontsel), font, query->font_size.computed);
sp_font_preview_set_font (SP_FONT_PREVIEW (preview), font, SP_FONT_SELECTOR(fontsel));
- font->Unref();
- font=NULL;
+ font->Unref();
+ font=NULL;
}
GtkWidget *b;
if (query->text_anchor.computed == SP_CSS_TEXT_ANCHOR_START) {
- b = (GtkWidget*)g_object_get_data ( G_OBJECT (dlg), "text_anchor_start" );
+ if (query->text_align.computed == SP_CSS_TEXT_ALIGN_JUSTIFY) {
+ b = (GtkWidget*)g_object_get_data ( G_OBJECT (dlg), "text_anchor_justify" );
+ } else {
+ b = (GtkWidget*)g_object_get_data ( G_OBJECT (dlg), "text_anchor_start" );
+ }
} else if (query->text_anchor.computed == SP_CSS_TEXT_ANCHOR_MIDDLE) {
b = (GtkWidget*)g_object_get_data ( G_OBJECT (dlg), "text_anchor_middle" );
} else {
b = (GtkWidget*)g_object_get_data ( G_OBJECT (dlg), "text_anchor_end" );
}
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b), TRUE);
-
+
if (query->writing_mode.computed == SP_CSS_WRITING_MODE_LR_TB) {
- b = (GtkWidget*)g_object_get_data ( G_OBJECT (dlg), INKSCAPE_STOCK_WRITING_MODE_LR );
+ b = (GtkWidget*)g_object_get_data ( G_OBJECT (dlg), INKSCAPE_ICON_FORMAT_TEXT_DIRECTION_HORIZONTAL );
} else {
- b = (GtkWidget*)g_object_get_data ( G_OBJECT (dlg), INKSCAPE_STOCK_WRITING_MODE_TB );
+ b = (GtkWidget*)g_object_get_data ( G_OBJECT (dlg), INKSCAPE_ICON_FORMAT_TEXT_DIRECTION_VERTICAL );
}
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b), TRUE);
gtk_entry_set_text ((GtkEntry *) ((GtkCombo *) (combo))->entry, sstr);
g_free(sstr);
- g_free (query);
+ sp_style_unref(query);
}
g_object_set_data (G_OBJECT (dlg), "blocked", NULL);
GtkTextIter start, end;
gchar *str;
- if (g_object_get_data (G_OBJECT (dlg), "blocked"))
+ if (g_object_get_data (G_OBJECT (dlg), "blocked"))
return;
SPItem *text = sp_ted_get_selected_text_item ();
} // end of sp_text_edit_dialog_text_changed()
-
+void
+sp_text_edit_dialog_default_set_insensitive ()
+{
+ if (!dlg) return;
+ gpointer data = g_object_get_data (G_OBJECT (dlg), "default");
+ if (!data) return;
+ gtk_widget_set_sensitive (GTK_WIDGET (data), FALSE);
+}
static void
-sp_text_edit_dialog_font_changed ( SPFontSelector *fsel,
- font_instance *font,
+sp_text_edit_dialog_font_changed ( SPFontSelector *fsel,
+ font_instance *font,
GtkWidget *dlg )
{
GtkWidget *preview, *apply, *def;
- if (g_object_get_data (G_OBJECT (dlg), "blocked"))
+ if (g_object_get_data (G_OBJECT (dlg), "blocked"))
return;
SPItem *text = sp_ted_get_selected_text_item ();
sp_font_preview_set_font (SP_FONT_PREVIEW (preview), font, SP_FONT_SELECTOR(fsel));
- if (text) {
+ if (text)
+ {
gtk_widget_set_sensitive (apply, TRUE);
}
gtk_widget_set_sensitive (def, TRUE);
static void
-sp_text_edit_dialog_any_toggled (GtkToggleButton *tb, GtkWidget *dlg)
+sp_text_edit_dialog_any_toggled( GtkToggleButton */*tb*/, GtkWidget *dlg )
{
GtkWidget *apply, *def;
static void
-sp_text_edit_dialog_line_spacing_changed (GtkEditable *editable, GtkWidget *dlg)
+sp_text_edit_dialog_line_spacing_changed( GtkEditable */*editable*/, GtkWidget *dlg )
{
GtkWidget *apply, *def;
- if (g_object_get_data ((GObject *) dlg, "blocked"))
+ if (g_object_get_data ((GObject *) dlg, "blocked"))
return;
SPItem *text = sp_ted_get_selected_text_item ();
if (!SP_ACTIVE_DESKTOP)
return NULL;
- for (const GSList *item = SP_DT_SELECTION(SP_ACTIVE_DESKTOP)->itemList();
+ for (const GSList *item = sp_desktop_selection(SP_ACTIVE_DESKTOP)->itemList();
item != NULL;
item = item->next)
{
static unsigned
sp_ted_get_selected_text_count (void)
{
- if (!SP_ACTIVE_DESKTOP)
+ if (!SP_ACTIVE_DESKTOP)
return 0;
unsigned int items = 0;
- for (const GSList *item = SP_DT_SELECTION(SP_ACTIVE_DESKTOP)->itemList();
+ for (const GSList *item = sp_desktop_selection(SP_ACTIVE_DESKTOP)->itemList();
item != NULL;
item = item->next)
{