From 31bb8269c26a781036448ed8f8cd93cc84fb2118 Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Sun, 29 Nov 2009 16:33:18 +0100 Subject: First GSoC node tool commit to Bazaar (bzr r8846.1.1) --- src/widgets/toolbox.cpp | 234 +++++++++++++++++++----------------------------- 1 file changed, 91 insertions(+), 143 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index e0fe9bfd1..ee45665f3 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -9,7 +9,7 @@ * Frank Felfe * John Cliff * David Turner - * Josh Andler + * Josh Andler * Jon A. Cruz * Maximilian Albert * @@ -65,7 +65,6 @@ #include "../live_effects/lpe-line_segment.h" #include "../lpe-tool-context.h" #include "../mod360.h" -#include "../node-context.h" #include "../pen-context.h" #include "../preferences.h" #include "../selection-chemistry.h" @@ -88,6 +87,9 @@ #include "../tweak-context.h" #include "../ui/dialog/calligraphic-profile-rename.h" #include "../ui/icon-names.h" +#include "../ui/tool/control-point-selection.h" +#include "../ui/tool/node-tool.h" +#include "../ui/tool/multi-path-manipulator.h" #include "../ui/widget/style-swatch.h" #include "../verbs.h" #include "../widgets/button.h" @@ -144,7 +146,7 @@ static struct { sp_verb_t doubleclick_verb; } const tools[] = { { "SPSelectContext", "select_tool", SP_VERB_CONTEXT_SELECT, SP_VERB_CONTEXT_SELECT_PREFS}, - { "SPNodeContext", "node_tool", SP_VERB_CONTEXT_NODE, SP_VERB_CONTEXT_NODE_PREFS }, + { "InkNodeTool", "node_tool", SP_VERB_CONTEXT_NODE, SP_VERB_CONTEXT_NODE_PREFS }, { "SPTweakContext", "tweak_tool", SP_VERB_CONTEXT_TWEAK, SP_VERB_CONTEXT_TWEAK_PREFS }, { "SPZoomContext", "zoom_tool", SP_VERB_CONTEXT_ZOOM, SP_VERB_CONTEXT_ZOOM_PREFS }, { "SPRectContext", "rect_tool", SP_VERB_CONTEXT_RECT, SP_VERB_CONTEXT_RECT_PREFS }, @@ -177,7 +179,7 @@ static struct { } const aux_toolboxes[] = { { "SPSelectContext", "select_toolbox", 0, sp_select_toolbox_prep, "SelectToolbar", SP_VERB_INVALID, 0, 0}, - { "SPNodeContext", "node_toolbox", 0, sp_node_toolbox_prep, "NodeToolbar", + { "InkNodeTool", "node_toolbox", 0, sp_node_toolbox_prep, "NodeToolbar", SP_VERB_INVALID, 0, 0}, { "SPTweakContext", "tweak_toolbox", 0, sp_tweak_toolbox_prep, "TweakToolbar", SP_VERB_CONTEXT_TWEAK_PREFS, "/tools/tweak", N_("Color/opacity used for color tweaking")}, @@ -981,135 +983,127 @@ static EgeAdjustmentAction * create_adjustment_action( gchar const *name, //# node editing callbacks //#################################### -/** - * FIXME: Returns current shape_editor in context. // later eliminate this function at all! - */ -static ShapeEditor *get_current_shape_editor() +/** Temporary hack: Returns the node tool in the active desktop. + * Will go away during tool refactoring. */ +static InkNodeTool *get_node_tool() { - if (!SP_ACTIVE_DESKTOP) { - return NULL; - } - - SPEventContext *event_context = (SP_ACTIVE_DESKTOP)->event_context; - - if (!SP_IS_NODE_CONTEXT(event_context)) { - return NULL; - } - - return event_context->shape_editor; + if (!SP_ACTIVE_DESKTOP) return NULL; + SPEventContext *ec = SP_ACTIVE_DESKTOP->event_context; + if (!INK_IS_NODE_TOOL(ec)) return NULL; + return static_cast(ec); } void sp_node_path_edit_add(void) { - ShapeEditor *shape_editor = get_current_shape_editor(); - if (shape_editor) shape_editor->add_node(); + InkNodeTool *nt = get_node_tool(); + if (nt) nt->_multipath->insertNodes(); } void sp_node_path_edit_delete(void) { - ShapeEditor *shape_editor = get_current_shape_editor(); - if (shape_editor) shape_editor->delete_nodes_preserving_shape(); + InkNodeTool *nt = get_node_tool(); + if (nt) nt->_multipath->deleteNodes(); } void sp_node_path_edit_delete_segment(void) { - ShapeEditor *shape_editor = get_current_shape_editor(); - if (shape_editor) shape_editor->delete_segment(); + InkNodeTool *nt = get_node_tool(); + if (nt) nt->_multipath->deleteSegments(); } void sp_node_path_edit_break(void) { - ShapeEditor *shape_editor = get_current_shape_editor(); - if (shape_editor) shape_editor->break_at_nodes(); + InkNodeTool *nt = get_node_tool(); + if (nt) nt->_multipath->breakNodes(); } void sp_node_path_edit_join(void) { - ShapeEditor *shape_editor = get_current_shape_editor(); - if (shape_editor) shape_editor->join_nodes(); + InkNodeTool *nt = get_node_tool(); + if (nt) nt->_multipath->joinNodes(); } void sp_node_path_edit_join_segment(void) { - ShapeEditor *shape_editor = get_current_shape_editor(); - if (shape_editor) shape_editor->join_segments(); + InkNodeTool *nt = get_node_tool(); + if (nt) nt->_multipath->joinSegment(); } void sp_node_path_edit_toline(void) { - ShapeEditor *shape_editor = get_current_shape_editor(); - if (shape_editor) shape_editor->set_type_of_segments(NR_LINETO); + InkNodeTool *nt = get_node_tool(); + if (nt) nt->_multipath->setSegmentType(Inkscape::UI::SEGMENT_STRAIGHT); } void sp_node_path_edit_tocurve(void) { - ShapeEditor *shape_editor = get_current_shape_editor(); - if (shape_editor) shape_editor->set_type_of_segments(NR_CURVETO); + InkNodeTool *nt = get_node_tool(); + if (nt) nt->_multipath->setSegmentType(Inkscape::UI::SEGMENT_CUBIC_BEZIER); } void sp_node_path_edit_cusp(void) { - ShapeEditor *shape_editor = get_current_shape_editor(); - if (shape_editor) shape_editor->set_node_type(Inkscape::NodePath::NODE_CUSP); + InkNodeTool *nt = get_node_tool(); + if (nt) nt->_multipath->setNodeType(Inkscape::UI::NODE_CUSP); } void sp_node_path_edit_smooth(void) { - ShapeEditor *shape_editor = get_current_shape_editor(); - if (shape_editor) shape_editor->set_node_type(Inkscape::NodePath::NODE_SMOOTH); + InkNodeTool *nt = get_node_tool(); + if (nt) nt->_multipath->setNodeType(Inkscape::UI::NODE_SMOOTH); } void sp_node_path_edit_symmetrical(void) { - ShapeEditor *shape_editor = get_current_shape_editor(); - if (shape_editor) shape_editor->set_node_type(Inkscape::NodePath::NODE_SYMM); + InkNodeTool *nt = get_node_tool(); + if (nt) nt->_multipath->setNodeType(Inkscape::UI::NODE_SYMMETRIC); } void sp_node_path_edit_auto(void) { - ShapeEditor *shape_editor = get_current_shape_editor(); - if (shape_editor) shape_editor->set_node_type(Inkscape::NodePath::NODE_AUTO); + InkNodeTool *nt = get_node_tool(); + if (nt) nt->_multipath->setNodeType(Inkscape::UI::NODE_AUTO); } static void toggle_show_handles (GtkToggleAction *act, gpointer /*data*/) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); bool show = gtk_toggle_action_get_active( act ); prefs->setBool("/tools/nodes/show_handles", show); - ShapeEditor *shape_editor = get_current_shape_editor(); - if (shape_editor) shape_editor->show_handles(show); } static void toggle_show_helperpath (GtkToggleAction *act, gpointer /*data*/) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); bool show = gtk_toggle_action_get_active( act ); - prefs->setBool("/tools/nodes/show_helperpath", show); - ShapeEditor *shape_editor = get_current_shape_editor(); - if (shape_editor) shape_editor->show_helperpath(show); + prefs->setBool("/tools/nodes/show_outline", show); } void sp_node_path_edit_nextLPEparam (GtkAction */*act*/, gpointer data) { sp_selection_next_patheffect_param( reinterpret_cast(data) ); } -void sp_node_path_edit_clippath (GtkAction */*act*/, gpointer data) { - sp_selection_edit_clip_or_mask( reinterpret_cast(data), true); +void toggle_edit_clip (GtkToggleAction *act, gpointer data) { + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + bool edit = gtk_toggle_action_get_active( act ); + prefs->setBool("/tools/nodes/edit_clipping_paths", edit); } -void sp_node_path_edit_maskpath (GtkAction */*act*/, gpointer data) { - sp_selection_edit_clip_or_mask( reinterpret_cast(data), false); +void toggle_edit_mask (GtkToggleAction *act, gpointer data) { + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + bool edit = gtk_toggle_action_get_active( act ); + prefs->setBool("/tools/nodes/edit_masks", edit); } /* is called when the node selection is modified */ @@ -1132,54 +1126,29 @@ sp_node_toolbox_coord_changed(gpointer /*shape_editor*/, GObject *tbl) UnitTracker* tracker = reinterpret_cast( g_object_get_data( tbl, "tracker" ) ); SPUnit const *unit = tracker->getActiveUnit(); - ShapeEditor *shape_editor = get_current_shape_editor(); - if (shape_editor && shape_editor->has_nodepath()) { - Inkscape::NodePath::Path *nodepath = shape_editor->get_nodepath(); - int n_selected = 0; - if (nodepath) { - n_selected = nodepath->numSelected(); - } - - if (n_selected == 0) { - gtk_action_set_sensitive(xact, FALSE); - gtk_action_set_sensitive(yact, FALSE); - } else { - gtk_action_set_sensitive(xact, TRUE); - gtk_action_set_sensitive(yact, TRUE); - Geom::Coord oldx = sp_units_get_pixels(gtk_adjustment_get_value(xadj), *unit); - Geom::Coord oldy = sp_units_get_pixels(gtk_adjustment_get_value(xadj), *unit); - - if (n_selected == 1) { - Geom::Point sel_node = nodepath->singleSelectedCoords(); - if (oldx != sel_node[Geom::X] || oldy != sel_node[Geom::Y]) { - gtk_adjustment_set_value(xadj, sp_pixels_get_units(sel_node[Geom::X], *unit)); - gtk_adjustment_set_value(yadj, sp_pixels_get_units(sel_node[Geom::Y], *unit)); - } - } else { - boost::optional x = sp_node_selected_common_coord(nodepath, Geom::X); - boost::optional y = sp_node_selected_common_coord(nodepath, Geom::Y); - if ((x && ((*x) != oldx)) || (y && ((*y) != oldy))) { - /* Note: Currently x and y will always have a value, even if the coordinates of the - selected nodes don't coincide (in this case we use the coordinates of the center - of the bounding box). So the entries are never set to zero. */ - // FIXME: Maybe we should clear the entry if several nodes are selected - // instead of providing a kind of average value - gtk_adjustment_set_value(xadj, sp_pixels_get_units(x ? (*x) : 0.0, *unit)); - gtk_adjustment_set_value(yadj, sp_pixels_get_units(y ? (*y) : 0.0, *unit)); - } - } - } - } else { - // no shape-editor or nodepath yet (when we just switched to the tool); coord entries must be inactive + InkNodeTool *nt = get_node_tool(); + if (!nt || nt->_selected_nodes->empty()) { + // no path selected gtk_action_set_sensitive(xact, FALSE); gtk_action_set_sensitive(yact, FALSE); + } else { + gtk_action_set_sensitive(xact, TRUE); + gtk_action_set_sensitive(yact, TRUE); + Geom::Coord oldx = sp_units_get_pixels(gtk_adjustment_get_value(xadj), *unit); + Geom::Coord oldy = sp_units_get_pixels(gtk_adjustment_get_value(xadj), *unit); + Geom::Point mid = nt->_selected_nodes->pointwiseBounds()->midpoint(); + + if (oldx != mid[Geom::X]) + gtk_adjustment_set_value(xadj, sp_pixels_get_units(mid[Geom::X], *unit)); + if (oldy != mid[Geom::Y]) + gtk_adjustment_set_value(yadj, sp_pixels_get_units(mid[Geom::Y], *unit)); } g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) ); } static void -sp_node_path_value_changed(GtkAdjustment *adj, GObject *tbl, gchar const *value_name) +sp_node_path_value_changed(GtkAdjustment *adj, GObject *tbl, Geom::Dim2 d) { SPDesktop *desktop = (SPDesktop *) g_object_get_data( tbl, "desktop" ); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); @@ -1188,7 +1157,8 @@ sp_node_path_value_changed(GtkAdjustment *adj, GObject *tbl, gchar const *value_ SPUnit const *unit = tracker->getActiveUnit(); if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) { - prefs->setDouble(Glib::ustring("/tools/nodes/") + value_name, sp_units_get_pixels(adj->value, *unit)); + prefs->setDouble(Glib::ustring("/tools/nodes/") + (d == Geom::X ? "x" : "y"), + sp_units_get_pixels(adj->value, *unit)); } // quit if run by the attr_changed listener @@ -1199,15 +1169,13 @@ sp_node_path_value_changed(GtkAdjustment *adj, GObject *tbl, gchar const *value_ // in turn, prevent listener from responding g_object_set_data( tbl, "freeze", GINT_TO_POINTER(TRUE)); - ShapeEditor *shape_editor = get_current_shape_editor(); - if (shape_editor && shape_editor->has_nodepath()) { + InkNodeTool *nt = get_node_tool(); + if (nt && !nt->_selected_nodes->empty()) { double val = sp_units_get_pixels(gtk_adjustment_get_value(adj), *unit); - if (!strcmp(value_name, "x")) { - sp_node_selected_move_absolute(shape_editor->get_nodepath(), val, Geom::X); - } - if (!strcmp(value_name, "y")) { - sp_node_selected_move_absolute(shape_editor->get_nodepath(), val, Geom::Y); - } + double oldval = nt->_selected_nodes->pointwiseBounds()->midpoint()[d]; + Geom::Point delta(0,0); + delta[d] = val - oldval; + nt->_multipath->move(delta); } g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) ); @@ -1216,13 +1184,13 @@ sp_node_path_value_changed(GtkAdjustment *adj, GObject *tbl, gchar const *value_ static void sp_node_path_x_value_changed(GtkAdjustment *adj, GObject *tbl) { - sp_node_path_value_changed(adj, tbl, "x"); + sp_node_path_value_changed(adj, tbl, Geom::X); } static void sp_node_path_y_value_changed(GtkAdjustment *adj, GObject *tbl) { - sp_node_path_value_changed(adj, tbl, "y"); + sp_node_path_value_changed(adj, tbl, Geom::Y); } void @@ -1241,26 +1209,6 @@ sp_node_toolbox_sel_changed (Inkscape::Selection *selection, GObject *tbl) gtk_action_set_sensitive(w, FALSE); } } - - { - GtkAction* w = GTK_ACTION( g_object_get_data( tbl, "nodes_clippathedit" ) ); - SPItem *item = selection->singleItem(); - if (item && item->clip_ref && item->clip_ref->getObject()) { - gtk_action_set_sensitive(w, TRUE); - } else { - gtk_action_set_sensitive(w, FALSE); - } - } - - { - GtkAction* w = GTK_ACTION( g_object_get_data( tbl, "nodes_maskedit" ) ); - SPItem *item = selection->singleItem(); - if (item && item->mask_ref && item->mask_ref->getObject()) { - gtk_action_set_sensitive(w, TRUE); - } else { - gtk_action_set_sensitive(w, FALSE); - } - } } void @@ -1427,7 +1375,7 @@ static void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions Inkscape::ICON_SIZE_DECORATION ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_show_helperpath), desktop ); - gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/nodes/show_helperpath", false) ); + gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/nodes/show_outline", false) ); } { @@ -1442,25 +1390,25 @@ static void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions } { - InkAction* inky = ink_action_new( "ObjectEditClipPathAction", - _("Edit clipping path"), - _("Edit the clipping path of the object"), + InkToggleAction* inky = ink_toggle_action_new( "ObjectEditClipPathAction", + _("Edit clipping paths"), + _("Show editing controls for clipping paths of selected objects"), INKSCAPE_ICON_PATH_CLIP_EDIT, Inkscape::ICON_SIZE_DECORATION ); - g_signal_connect_after( G_OBJECT(inky), "activate", G_CALLBACK(sp_node_path_edit_clippath), desktop ); gtk_action_group_add_action( mainActions, GTK_ACTION(inky) ); - g_object_set_data( holder, "nodes_clippathedit", inky); + g_signal_connect_after( G_OBJECT(inky), "toggled", G_CALLBACK(toggle_edit_clip), desktop ); + gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(inky), prefs->getBool("/tools/nodes/edit_clipping_paths") ); } { - InkAction* inky = ink_action_new( "ObjectEditMaskPathAction", - _("Edit mask path"), - _("Edit the mask of the object"), + InkToggleAction* inky = ink_toggle_action_new( "ObjectEditMaskPathAction", + _("Edit masks"), + _("Show editing controls for masks of selected objects"), INKSCAPE_ICON_PATH_MASK_EDIT, Inkscape::ICON_SIZE_DECORATION ); - g_signal_connect_after( G_OBJECT(inky), "activate", G_CALLBACK(sp_node_path_edit_maskpath), desktop ); gtk_action_group_add_action( mainActions, GTK_ACTION(inky) ); - g_object_set_data( holder, "nodes_maskedit", inky); + g_signal_connect_after( G_OBJECT(inky), "toggled", G_CALLBACK(toggle_edit_mask), desktop ); + gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(inky), prefs->getBool("/tools/nodes/edit_masks") ); } /* X coord of selected node(s) */ @@ -6339,10 +6287,10 @@ sp_text_toolbox_family_keypress (GtkWidget */*w*/, GdkEventKey *event, GObject * case GDK_Return: // unfreeze and update, which will defocus g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) ); - sp_text_toolbox_family_changed (NULL, tbl); + sp_text_toolbox_family_changed (NULL, tbl); return TRUE; // I consumed the event break; - case GDK_Escape: + case GDK_Escape: // defocus gtk_widget_grab_focus (GTK_WIDGET(desktop->canvas)); return TRUE; // I consumed the event @@ -6535,7 +6483,7 @@ cell_data_func (GtkCellLayout */*cell_layout*/, gboolean text_toolbox_completion_match_selected (GtkEntryCompletion *widget, GtkTreeModel *model, GtkTreeIter *iter, - GObject *tbl) + GObject *tbl) { // We intercept this signal so as to fire family_changed at once (without it, you'd have to // press Enter again after choosing a completion) @@ -6610,10 +6558,10 @@ void sp_text_toolbox_family_popnotify (GtkComboBox *widget, } // update - sp_text_toolbox_family_changed (NULL, tbl); + sp_text_toolbox_family_changed (NULL, tbl); break; } - } + } } } @@ -6652,7 +6600,7 @@ sp_text_toolbox_new (SPDesktop *desktop) g_signal_connect (G_OBJECT (font_sel->gobj()), "key-press-event", G_CALLBACK(sp_text_toolbox_family_list_keypress), tbl); cbe_add_completion(font_sel->gobj(), G_OBJECT(tbl)); - + gtk_toolbar_append_widget( tbl, (GtkWidget*) font_sel->gobj(), "", ""); g_object_set_data (G_OBJECT (tbl), "family-entry-combo", font_sel); @@ -6665,7 +6613,7 @@ sp_text_toolbox_new (SPDesktop *desktop) g_signal_connect (G_OBJECT (entry), "activate", G_CALLBACK (sp_text_toolbox_family_changed), tbl); g_signal_connect (G_OBJECT (font_sel->gobj()), "changed", G_CALLBACK (sp_text_toolbox_family_changed), tbl); - g_signal_connect (G_OBJECT (font_sel->gobj()), "notify::popup-shown", + g_signal_connect (G_OBJECT (font_sel->gobj()), "notify::popup-shown", G_CALLBACK (sp_text_toolbox_family_popnotify), tbl); g_signal_connect (G_OBJECT (entry), "key-press-event", G_CALLBACK(sp_text_toolbox_family_keypress), tbl); g_signal_connect (G_OBJECT (entry), "focus-in-event", G_CALLBACK (sp_text_toolbox_entry_focus_in), tbl); @@ -6881,7 +6829,7 @@ static void connector_spacing_changed(GtkAdjustment *adj, GObject* tbl) if ( !repr->attribute("inkscape:connector-spacing") && ( adj->value == defaultConnSpacing )) { - // Don't need to update the repr if the attribute doesn't + // Don't need to update the repr if the attribute doesn't // exist and it is being set to the default value -- as will // happen at startup. return; @@ -6972,7 +6920,7 @@ static void connector_tb_event_attr_changed(Inkscape::XML::Node *repr, gtk_adjustment_set_value(adj, spacing); gtk_adjustment_value_changed(adj); - + spinbutton_defocus(GTK_OBJECT(tbl)); } -- cgit v1.2.3 From 15946b67ee5b2a27140e6d00ef69b9fa1bef71ce Mon Sep 17 00:00:00 2001 From: Nicolas Dufour Date: Sat, 2 Jan 2010 15:19:53 +0100 Subject: i18n fix in toolbox.cpp (no-c-format %) (bzr r8936) --- src/widgets/toolbox.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/widgets') diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index 9fc077778..f4913c019 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -4583,6 +4583,7 @@ static void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction gdouble values[] = {10, 25, 35, 50, 60, 80, 100}; EgeAdjustmentAction *eact = create_adjustment_action( "SprayRotationAction", _("Rotation"), _("Rotation:"), + // xgettext:no-c-format _("Variation of the rotation of the sprayed objects. 0% for the same rotation than the original object."), "/tools/spray/rotation_variation", 0, GTK_WIDGET(desktop->canvas), NULL, holder, TRUE, "spray-rotation", @@ -4599,6 +4600,7 @@ static void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction gdouble values[] = {10, 25, 35, 50, 60, 80, 100}; EgeAdjustmentAction *eact = create_adjustment_action( "SprayScaleAction", _("Scale"), _("Scale:"), + // xgettext:no-c-format _("Variation in the scale of the sprayed objects. 0% for the same scale than the original object."), "/tools/spray/scale_variation", 0, GTK_WIDGET(desktop->canvas), NULL, holder, TRUE, "spray-scale", -- cgit v1.2.3 From 2866152c8917b26ea2d82d789dd43941294fdb9f Mon Sep 17 00:00:00 2001 From: Steren Giannini Date: Sun, 3 Jan 2010 21:39:52 +0100 Subject: Spray cleanup ------------ This line and the following will be ignored -------------- removed: src/ui/dialog/spray-option.cpp src/ui/dialog/spray-option.h modified: src/spray-context.cpp src/ui/dialog/Makefile_insert src/ui/dialog/dialog-manager.cpp src/ui/view/edit-widget.cpp src/ui/view/edit-widget.h src/widgets/toolbox.cpp unknown: backup.bzr/ description-pak doc-pak/ po/.intltool-merge-cache (bzr r8938.1.1) --- src/widgets/toolbox.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/widgets') diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index f4913c019..e0a489f2d 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -4561,6 +4561,7 @@ static void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction 1, 100, 1.0, 10.0, labels, values, G_N_ELEMENTS(labels), sp_spray_population_value_changed, 1, 0 ); + ege_adjustment_action_set_appearance( eact, TOOLBAR_SLIDER_HINT ); gtk_action_group_add_action( mainActions, GTK_ACTION(eact) ); gtk_action_set_sensitive( GTK_ACTION(eact), TRUE ); g_object_set_data( holder, "spray_population", eact ); @@ -4590,6 +4591,7 @@ static void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction 0, 100, 1.0, 10.0, labels, values, G_N_ELEMENTS(labels), sp_spray_rotation_value_changed, 1, 0 ); + ege_adjustment_action_set_appearance( eact, TOOLBAR_SLIDER_HINT ); gtk_action_group_add_action( mainActions, GTK_ACTION(eact) ); gtk_action_set_sensitive( GTK_ACTION(eact), TRUE ); g_object_set_data( holder, "spray_rotation", eact ); @@ -4607,6 +4609,7 @@ static void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction 0, 100, 1.0, 10.0, labels, values, G_N_ELEMENTS(labels), sp_spray_scale_value_changed, 1, 0 ); + ege_adjustment_action_set_appearance( eact, TOOLBAR_SLIDER_HINT ); gtk_action_group_add_action( mainActions, GTK_ACTION(eact) ); gtk_action_set_sensitive( GTK_ACTION(eact), TRUE ); g_object_set_data( holder, "spray_scale", eact ); -- cgit v1.2.3 From 679a9b56f1f0072fda8df847dc82ef0142e9e24e Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Mon, 4 Jan 2010 01:34:09 -0800 Subject: Refactoring copy-n-paste duplicate code out of toolbar creation. (bzr r8940) --- src/widgets/toolbox.cpp | 97 +++++++++---------------------------------------- 1 file changed, 18 insertions(+), 79 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index e0a489f2d..eddd184eb 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -835,21 +835,14 @@ void handlebox_attached(GtkHandleBox* /*handlebox*/, GtkWidget* widget, gpointer -GtkWidget * -sp_tool_toolbox_new() +static GtkWidget* toolboxNewCommon( GtkWidget* tb, GtkPositionType handlePos ) { - GtkTooltips *tt = gtk_tooltips_new(); - GtkWidget* tb = gtk_toolbar_new(); - gtk_toolbar_set_orientation(GTK_TOOLBAR(tb), GTK_ORIENTATION_VERTICAL); - gtk_toolbar_set_show_arrow(GTK_TOOLBAR(tb), TRUE); - g_object_set_data(G_OBJECT(tb), "desktop", NULL); - g_object_set_data(G_OBJECT(tb), "tooltips", tt); gtk_widget_set_sensitive(tb, FALSE); GtkWidget *hb = gtk_handle_box_new(); - gtk_handle_box_set_handle_position(GTK_HANDLE_BOX(hb), GTK_POS_TOP); + gtk_handle_box_set_handle_position(GTK_HANDLE_BOX(hb), handlePos); gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(hb), GTK_SHADOW_OUT); gtk_handle_box_set_snap_edge(GTK_HANDLE_BOX(hb), GTK_POS_LEFT); @@ -865,90 +858,38 @@ sp_tool_toolbox_new() return hb; } -GtkWidget * -sp_aux_toolbox_new() +GtkWidget *sp_tool_toolbox_new() { - GtkWidget *tb = gtk_vbox_new(FALSE, 0); - - gtk_box_set_spacing(GTK_BOX(tb), AUX_SPACING); - - g_object_set_data(G_OBJECT(tb), "desktop", NULL); - - gtk_widget_set_sensitive(tb, FALSE); - - GtkWidget *hb = gtk_handle_box_new(); - gtk_handle_box_set_handle_position(GTK_HANDLE_BOX(hb), GTK_POS_LEFT); - gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(hb), GTK_SHADOW_OUT); - gtk_handle_box_set_snap_edge(GTK_HANDLE_BOX(hb), GTK_POS_LEFT); - - gtk_container_add(GTK_CONTAINER(hb), tb); - gtk_widget_show(GTK_WIDGET(tb)); + GtkWidget *tb = gtk_toolbar_new(); + gtk_toolbar_set_orientation(GTK_TOOLBAR(tb), GTK_ORIENTATION_VERTICAL); + gtk_toolbar_set_show_arrow(GTK_TOOLBAR(tb), TRUE); - sigc::connection* conn = new sigc::connection; - g_object_set_data(G_OBJECT(hb), "event_context_connection", conn); + return toolboxNewCommon( tb, GTK_POS_TOP ); +} - g_signal_connect(G_OBJECT(hb), "child_detached", G_CALLBACK(handlebox_detached), static_cast(0)); - g_signal_connect(G_OBJECT(hb), "child_attached", G_CALLBACK(handlebox_attached), static_cast(0)); +GtkWidget *sp_aux_toolbox_new() +{ + GtkWidget *tb = gtk_vbox_new(FALSE, 0); - return hb; + return toolboxNewCommon( tb, GTK_POS_LEFT ); } //#################################### //# Commands Bar //#################################### -GtkWidget * -sp_commands_toolbox_new() +GtkWidget *sp_commands_toolbox_new() { GtkWidget *tb = gtk_toolbar_new(); - g_object_set_data(G_OBJECT(tb), "desktop", NULL); - gtk_widget_set_sensitive(tb, FALSE); - - GtkWidget *hb = gtk_handle_box_new(); - gtk_handle_box_set_handle_position(GTK_HANDLE_BOX(hb), GTK_POS_LEFT); - gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(hb), GTK_SHADOW_OUT); - gtk_handle_box_set_snap_edge(GTK_HANDLE_BOX(hb), GTK_POS_LEFT); - - gtk_container_add(GTK_CONTAINER(hb), tb); - gtk_widget_show(GTK_WIDGET(tb)); - - sigc::connection* conn = new sigc::connection; - g_object_set_data(G_OBJECT(hb), "event_context_connection", conn); - - g_signal_connect(G_OBJECT(hb), "child_detached", G_CALLBACK(handlebox_detached), static_cast(0)); - g_signal_connect(G_OBJECT(hb), "child_attached", G_CALLBACK(handlebox_attached), static_cast(0)); - - return hb; + return toolboxNewCommon( tb, GTK_POS_LEFT ); } -GtkWidget * -sp_snap_toolbox_new() +GtkWidget *sp_snap_toolbox_new() { GtkWidget *tb = gtk_vbox_new(FALSE, 0); - gtk_box_set_spacing(GTK_BOX(tb), AUX_SPACING); - g_object_set_data(G_OBJECT(tb), "desktop", NULL); - - //GtkWidget *tb = gtk_toolbar_new(); - //g_object_set_data(G_OBJECT(tb), "desktop", NULL); - gtk_widget_set_sensitive(tb, FALSE); - - GtkWidget *hb = gtk_handle_box_new(); - gtk_handle_box_set_handle_position(GTK_HANDLE_BOX(hb), GTK_POS_LEFT); - gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(hb), GTK_SHADOW_OUT); - gtk_handle_box_set_snap_edge(GTK_HANDLE_BOX(hb), GTK_POS_LEFT); - - gtk_container_add(GTK_CONTAINER(hb), tb); - gtk_widget_show(GTK_WIDGET(tb)); - - sigc::connection* conn = new sigc::connection; - g_object_set_data(G_OBJECT(hb), "event_context_connection", conn); - - g_signal_connect(G_OBJECT(hb), "child_detached", G_CALLBACK(handlebox_detached), static_cast(0)); - g_signal_connect(G_OBJECT(hb), "child_attached", G_CALLBACK(handlebox_attached), static_cast(0)); - - return hb; + return toolboxNewCommon( tb, GTK_POS_LEFT ); } static EgeAdjustmentAction * create_adjustment_action( gchar const *name, @@ -2346,8 +2287,7 @@ void show_aux_toolbox(GtkWidget *toolbox_toplevel) gtk_widget_show_all(shown_toolbox); } -static GtkWidget * -sp_empty_toolbox_new(SPDesktop *desktop) +static GtkWidget *sp_empty_toolbox_new(SPDesktop *desktop) { GtkWidget *tbl = gtk_toolbar_new(); gtk_object_set_data(GTK_OBJECT(tbl), "dtw", desktop->canvas); @@ -6959,8 +6899,7 @@ void sp_text_toolbox_family_popnotify(GtkComboBox *widget, } } -GtkWidget* -sp_text_toolbox_new (SPDesktop *desktop) +GtkWidget *sp_text_toolbox_new (SPDesktop *desktop) { GtkToolbar *tbl = GTK_TOOLBAR(gtk_toolbar_new()); GtkIconSize secondarySize = static_cast(prefToSize("/toolbox/secondary", 1)); -- cgit v1.2.3 From c66bc0edca27e2880783826aab41c7dd41e9d61b Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Mon, 4 Jan 2010 02:06:59 -0800 Subject: More refactoring to reduce copy-n-paste duplication. (bzr r8941) --- src/widgets/toolbox.cpp | 143 +++++++++++++++++++----------------------------- 1 file changed, 55 insertions(+), 88 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index eddd184eb..44ad5a6ce 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -860,11 +860,11 @@ static GtkWidget* toolboxNewCommon( GtkWidget* tb, GtkPositionType handlePos ) GtkWidget *sp_tool_toolbox_new() { - GtkWidget *tb = gtk_toolbar_new(); - gtk_toolbar_set_orientation(GTK_TOOLBAR(tb), GTK_ORIENTATION_VERTICAL); - gtk_toolbar_set_show_arrow(GTK_TOOLBAR(tb), TRUE); + GtkWidget *toolBar = gtk_toolbar_new(); + gtk_toolbar_set_orientation(GTK_TOOLBAR(toolBar), GTK_ORIENTATION_VERTICAL); + gtk_toolbar_set_show_arrow(GTK_TOOLBAR(toolBar), TRUE); - return toolboxNewCommon( tb, GTK_POS_TOP ); + return toolboxNewCommon( toolBar, GTK_POS_TOP ); } GtkWidget *sp_aux_toolbox_new() @@ -1584,6 +1584,43 @@ toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop, SetupFunction setup_ } // end of toolbox_set_desktop() +static void setupToolboxCommon( GtkWidget *toolbox, + SPDesktop *desktop, + gchar const *descr, + gchar const* toolbarName, + gchar const* sizePref, + GtkOrientation orientation ) +{ + Glib::RefPtr mainActions = create_or_fetch_actions( desktop ); + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + + GtkUIManager* mgr = gtk_ui_manager_new(); + GError* errVal = 0; + + gtk_ui_manager_insert_action_group( mgr, mainActions->gobj(), 0 ); + gtk_ui_manager_add_ui_from_string( mgr, descr, -1, &errVal ); + + GtkWidget* toolBar = gtk_ui_manager_get_widget( mgr, toolbarName ); + if ( prefs->getBool("/toolbox/icononly", true) ) { + gtk_toolbar_set_style( GTK_TOOLBAR(toolBar), GTK_TOOLBAR_ICONS ); + } + + Inkscape::IconSize toolboxSize = prefToSize(sizePref); + gtk_toolbar_set_icon_size( GTK_TOOLBAR(toolBar), static_cast(toolboxSize) ); + + gtk_toolbar_set_orientation(GTK_TOOLBAR(toolBar), orientation); + gtk_toolbar_set_show_arrow(GTK_TOOLBAR(toolBar), TRUE); + + g_object_set_data(G_OBJECT(toolBar), "desktop", NULL); + + GtkWidget* child = gtk_bin_get_child(GTK_BIN(toolbox)); + if ( child ) { + gtk_container_remove( GTK_CONTAINER(toolbox), child ); + } + + gtk_container_add( GTK_CONTAINER(toolbox), toolBar ); +} + static void setup_tool_toolbox(GtkWidget *toolbox, SPDesktop *desktop) { @@ -1612,36 +1649,13 @@ setup_tool_toolbox(GtkWidget *toolbox, SPDesktop *desktop) " " " " ""; - Glib::RefPtr mainActions = create_or_fetch_actions( desktop ); - GtkUIManager* mgr = gtk_ui_manager_new(); - GError* errVal = 0; - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - - gtk_ui_manager_insert_action_group( mgr, mainActions->gobj(), 0 ); - gtk_ui_manager_add_ui_from_string( mgr, descr, -1, &errVal ); - - GtkWidget* toolBar = gtk_ui_manager_get_widget( mgr, "/ui/ToolToolbar" ); - if ( prefs->getBool("/toolbox/icononly", true) ) { - gtk_toolbar_set_style( GTK_TOOLBAR(toolBar), GTK_TOOLBAR_ICONS ); - } - Inkscape::IconSize toolboxSize = prefToSize("/toolbox/tools/small"); - gtk_toolbar_set_icon_size( GTK_TOOLBAR(toolBar), (GtkIconSize)toolboxSize ); - - gtk_toolbar_set_orientation(GTK_TOOLBAR(toolBar), GTK_ORIENTATION_VERTICAL); - gtk_toolbar_set_show_arrow(GTK_TOOLBAR(toolBar), TRUE); - - g_object_set_data(G_OBJECT(toolBar), "desktop", NULL); - - GtkWidget* child = gtk_bin_get_child(GTK_BIN(toolbox)); - if ( child ) { - gtk_container_remove( GTK_CONTAINER(toolbox), child ); - } - gtk_container_add( GTK_CONTAINER(toolbox), toolBar ); -// Inkscape::IconSize toolboxSize = prefToSize("/toolbox/tools/small"); + setupToolboxCommon( toolbox, desktop, descr, + "/ui/ToolToolbar", + "/toolbox/tools/small", + GTK_ORIENTATION_VERTICAL ); } - static void update_tool_toolbox( SPDesktop *desktop, SPEventContext *eventcontext, GtkWidget */*toolbox*/ ) { @@ -1687,9 +1701,9 @@ setup_aux_toolbox(GtkWidget *toolbox, SPDesktop *desktop) } else { GtkWidget *sub_toolbox = 0; - if (aux_toolboxes[i].create_func == NULL) + if (aux_toolboxes[i].create_func == NULL) { sub_toolbox = sp_empty_toolbox_new(desktop); - else { + } else { sub_toolbox = aux_toolboxes[i].create_func(desktop); } @@ -1806,35 +1820,11 @@ setup_commands_toolbox(GtkWidget *toolbox, SPDesktop *desktop) " " " " ""; - Glib::RefPtr mainActions = create_or_fetch_actions( desktop ); - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - - GtkUIManager* mgr = gtk_ui_manager_new(); - GError* errVal = 0; - - gtk_ui_manager_insert_action_group( mgr, mainActions->gobj(), 0 ); - gtk_ui_manager_add_ui_from_string( mgr, descr, -1, &errVal ); - - GtkWidget* toolBar = gtk_ui_manager_get_widget( mgr, "/ui/CommandsToolbar" ); - if ( prefs->getBool("/toolbox/icononly", true) ) { - gtk_toolbar_set_style( GTK_TOOLBAR(toolBar), GTK_TOOLBAR_ICONS ); - } - - Inkscape::IconSize toolboxSize = prefToSize("/toolbox/small"); - gtk_toolbar_set_icon_size( GTK_TOOLBAR(toolBar), (GtkIconSize)toolboxSize ); - - gtk_toolbar_set_orientation(GTK_TOOLBAR(toolBar), GTK_ORIENTATION_HORIZONTAL); - gtk_toolbar_set_show_arrow(GTK_TOOLBAR(toolBar), TRUE); - - - g_object_set_data(G_OBJECT(toolBar), "desktop", NULL); - - GtkWidget* child = gtk_bin_get_child(GTK_BIN(toolbox)); - if ( child ) { - gtk_container_remove( GTK_CONTAINER(toolbox), child ); - } - gtk_container_add( GTK_CONTAINER(toolbox), toolBar ); + setupToolboxCommon( toolbox, desktop, descr, + "/ui/CommandsToolbar", + "/toolbox/small", + GTK_ORIENTATION_HORIZONTAL ); } static void @@ -1958,7 +1948,6 @@ void toggle_snap_callback (GtkToggleAction *act, gpointer data) { //data points void setup_snap_toolbox(GtkWidget *toolbox, SPDesktop *desktop) { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); Glib::RefPtr mainActions = create_or_fetch_actions(desktop); gchar const * descr = @@ -2153,32 +2142,10 @@ void setup_snap_toolbox(GtkWidget *toolbox, SPDesktop *desktop) g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox ); }*/ - GtkUIManager* mgr = gtk_ui_manager_new(); - GError* errVal = 0; - - gtk_ui_manager_insert_action_group( mgr, mainActions->gobj(), 0 ); - gtk_ui_manager_add_ui_from_string( mgr, descr, -1, &errVal ); - - GtkWidget* toolBar = gtk_ui_manager_get_widget( mgr, "/ui/SnapToolbar" ); - if ( prefs->getBool("/toolbox/icononly", true) ) { - gtk_toolbar_set_style( GTK_TOOLBAR(toolBar), GTK_TOOLBAR_ICONS ); - } - - Inkscape::IconSize toolboxSize = prefToSize("/toolbox/secondary"); - gtk_toolbar_set_icon_size( GTK_TOOLBAR(toolBar), static_cast(toolboxSize) ); - - gtk_toolbar_set_orientation(GTK_TOOLBAR(toolBar), GTK_ORIENTATION_HORIZONTAL); - gtk_toolbar_set_show_arrow(GTK_TOOLBAR(toolBar), TRUE); - - g_object_set_data(G_OBJECT(toolBar), "desktop", NULL); - - GtkWidget* child = gtk_bin_get_child(GTK_BIN(toolbox)); - if ( child ) { - gtk_container_remove( GTK_CONTAINER(toolbox), child ); - } - - gtk_container_add( GTK_CONTAINER(toolbox), toolBar ); - + setupToolboxCommon( toolbox, desktop, descr, + "/ui/SnapToolbar", + "/toolbox/secondary", + GTK_ORIENTATION_HORIZONTAL ); } void update_snap_toolbox(SPDesktop *desktop, SPEventContext */*eventcontext*/, GtkWidget *toolbox) -- cgit v1.2.3 From 881465c8c48e52023efa0a939177ace3fa0c279f Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Wed, 6 Jan 2010 01:44:56 -0800 Subject: Refactored common value. (bzr r8946) --- src/widgets/toolbox.cpp | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index 44ad5a6ce..49cbbe010 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -489,7 +489,7 @@ static gchar const * ui_descr = static Glib::RefPtr create_or_fetch_actions( SPDesktop* desktop ); -static void toolbox_set_desktop (GtkWidget *toolbox, SPDesktop *desktop, SetupFunction setup_func, UpdateFunction update_func, sigc::connection*); +static void toolbox_set_desktop (GtkWidget *toolbox, SPDesktop *desktop, SetupFunction setup_func, UpdateFunction update_func); static void setup_tool_toolbox (GtkWidget *toolbox, SPDesktop *desktop); static void update_tool_toolbox (SPDesktop *desktop, SPEventContext *eventcontext, GtkWidget *toolbox); @@ -871,6 +871,8 @@ GtkWidget *sp_aux_toolbox_new() { GtkWidget *tb = gtk_vbox_new(FALSE, 0); + g_object_set_data(G_OBJECT(tb), "MarkForChild", const_cast("MarkForChild")); + return toolboxNewCommon( tb, GTK_POS_LEFT ); } @@ -1513,21 +1515,17 @@ sp_tool_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop) toolbox_set_desktop(toolbox, desktop, setup_tool_toolbox, - update_tool_toolbox, - static_cast(g_object_get_data(G_OBJECT(toolbox), - "event_context_connection"))); + update_tool_toolbox); } void sp_aux_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop) { - toolbox_set_desktop(gtk_bin_get_child(GTK_BIN(toolbox)), + toolbox_set_desktop(toolbox, desktop, setup_aux_toolbox, - update_aux_toolbox, - static_cast(g_object_get_data(G_OBJECT(toolbox), - "event_context_connection"))); + update_aux_toolbox); } void @@ -1536,9 +1534,7 @@ sp_commands_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop) toolbox_set_desktop(toolbox, desktop, setup_commands_toolbox, - update_commands_toolbox, - static_cast(g_object_get_data(G_OBJECT(toolbox), - "event_context_connection"))); + update_commands_toolbox); } void @@ -1547,15 +1543,21 @@ sp_snap_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop) toolbox_set_desktop(toolbox, desktop, setup_snap_toolbox, - update_snap_toolbox, - static_cast(g_object_get_data(G_OBJECT(toolbox), - "event_context_connection"))); + update_snap_toolbox); } static void -toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop, SetupFunction setup_func, UpdateFunction update_func, sigc::connection *conn) +toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop, SetupFunction setup_func, UpdateFunction update_func) { + sigc::connection *conn = static_cast(g_object_get_data(G_OBJECT(toolbox), + "event_context_connection")); + { + GtkWidget* child = gtk_bin_get_child(GTK_BIN(toolbox)); + if (g_object_get_data(G_OBJECT(child), "MarkForChild")) { + toolbox = child; + } + } gpointer ptr = g_object_get_data(G_OBJECT(toolbox), "desktop"); SPDesktop *old_desktop = static_cast(ptr); -- cgit v1.2.3 From 568dab6fba413360b1ca2cbf5205bdde8eb9a13b Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Thu, 7 Jan 2010 01:19:48 -0800 Subject: Added UXManager. Cleaning up toolbox creation. (bzr r8951) --- src/widgets/desktop-widget.cpp | 15 ++++-- src/widgets/toolbox.cpp | 104 +++++++++++++++++++---------------------- src/widgets/toolbox.h | 11 ++--- 3 files changed, 63 insertions(+), 67 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index b63992afe..6c330b5f3 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -55,6 +55,7 @@ #include "ui/widget/dock.h" #include "ui/widget/layer-selector.h" #include "ui/widget/selected-style.h" +#include "ui/uxmanager.h" #include "widgets/button.h" #include "widgets/ruler.h" #include "widgets/spinbutton-events.h" @@ -67,6 +68,10 @@ using Inkscape::round; #endif + +using Inkscape::UI::UXManager; + + #ifdef WITH_INKBOARD #endif @@ -1374,10 +1379,12 @@ sp_desktop_widget_new (SPNamedView *namedview) sp_desktop_widget_layout (dtw); - sp_tool_toolbox_set_desktop (dtw->tool_toolbox, dtw->desktop); - sp_aux_toolbox_set_desktop (dtw->aux_toolbox, dtw->desktop); - sp_commands_toolbox_set_desktop (dtw->commands_toolbox, dtw->desktop); - sp_snap_toolbox_set_desktop (dtw->snap_toolbox, dtw->desktop); + std::vector toolboxes; + toolboxes.push_back(dtw->tool_toolbox); + toolboxes.push_back(dtw->aux_toolbox); + toolboxes.push_back(dtw->commands_toolbox); + toolboxes.push_back(dtw->snap_toolbox); + UXManager::getInstance()->connectToDesktop( toolboxes, dtw->desktop ); dtw->panels->setDesktop( dtw->desktop ); diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index 49cbbe010..185e8bd2d 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -106,6 +106,16 @@ using Inkscape::UnitTracker; typedef void (*SetupFunction)(GtkWidget *toolbox, SPDesktop *desktop); typedef void (*UpdateFunction)(SPDesktop *desktop, SPEventContext *eventcontext, GtkWidget *toolbox); +enum BarId { + BAR_TOOL = 0, + BAR_AUX, + BAR_COMMANDS, + BAR_SNAP, +}; + +#define BAR_ID_KEY "BarIdValue" + + static void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder); static void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder); static void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder); @@ -489,8 +499,6 @@ static gchar const * ui_descr = static Glib::RefPtr create_or_fetch_actions( SPDesktop* desktop ); -static void toolbox_set_desktop (GtkWidget *toolbox, SPDesktop *desktop, SetupFunction setup_func, UpdateFunction update_func); - static void setup_tool_toolbox (GtkWidget *toolbox, SPDesktop *desktop); static void update_tool_toolbox (SPDesktop *desktop, SPEventContext *eventcontext, GtkWidget *toolbox); @@ -833,9 +841,7 @@ void handlebox_attached(GtkHandleBox* /*handlebox*/, GtkWidget* widget, gpointer gtk_widget_set_size_request( widget, -1, -1 ); } - - -static GtkWidget* toolboxNewCommon( GtkWidget* tb, GtkPositionType handlePos ) +static GtkWidget* toolboxNewCommon( GtkWidget* tb, BarId id, GtkPositionType handlePos ) { g_object_set_data(G_OBJECT(tb), "desktop", NULL); @@ -855,6 +861,9 @@ static GtkWidget* toolboxNewCommon( GtkWidget* tb, GtkPositionType handlePos ) g_signal_connect(G_OBJECT(hb), "child_detached", G_CALLBACK(handlebox_detached), static_cast(0)); g_signal_connect(G_OBJECT(hb), "child_attached", G_CALLBACK(handlebox_attached), static_cast(0)); + gpointer val = GINT_TO_POINTER(id); + g_object_set_data(G_OBJECT(hb), BAR_ID_KEY, val); + return hb; } @@ -864,16 +873,14 @@ GtkWidget *sp_tool_toolbox_new() gtk_toolbar_set_orientation(GTK_TOOLBAR(toolBar), GTK_ORIENTATION_VERTICAL); gtk_toolbar_set_show_arrow(GTK_TOOLBAR(toolBar), TRUE); - return toolboxNewCommon( toolBar, GTK_POS_TOP ); + return toolboxNewCommon( toolBar, BAR_TOOL, GTK_POS_TOP ); } GtkWidget *sp_aux_toolbox_new() { GtkWidget *tb = gtk_vbox_new(FALSE, 0); - g_object_set_data(G_OBJECT(tb), "MarkForChild", const_cast("MarkForChild")); - - return toolboxNewCommon( tb, GTK_POS_LEFT ); + return toolboxNewCommon( tb, BAR_AUX, GTK_POS_LEFT ); } //#################################### @@ -884,14 +891,14 @@ GtkWidget *sp_commands_toolbox_new() { GtkWidget *tb = gtk_toolbar_new(); - return toolboxNewCommon( tb, GTK_POS_LEFT ); + return toolboxNewCommon( tb, BAR_COMMANDS, GTK_POS_LEFT ); } GtkWidget *sp_snap_toolbox_new() { GtkWidget *tb = gtk_vbox_new(FALSE, 0); - return toolboxNewCommon( tb, GTK_POS_LEFT ); + return toolboxNewCommon( tb, BAR_SNAP, GTK_POS_LEFT ); } static EgeAdjustmentAction * create_adjustment_action( gchar const *name, @@ -1509,55 +1516,41 @@ static void sp_zoom_toolbox_prep(SPDesktop */*desktop*/, GtkActionGroup* /*mainA // no custom GtkAction setup needed } // end of sp_zoom_toolbox_prep() -void -sp_tool_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop) +void sp_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop) { - toolbox_set_desktop(toolbox, - desktop, - setup_tool_toolbox, - update_tool_toolbox); -} + sigc::connection *conn = static_cast(g_object_get_data(G_OBJECT(toolbox), + "event_context_connection")); + BarId id = static_cast( GPOINTER_TO_INT(g_object_get_data(G_OBJECT(toolbox), BAR_ID_KEY)) ); -void -sp_aux_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop) -{ - toolbox_set_desktop(toolbox, - desktop, - setup_aux_toolbox, - update_aux_toolbox); -} + SetupFunction setup_func = 0; + UpdateFunction update_func = 0; -void -sp_commands_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop) -{ - toolbox_set_desktop(toolbox, - desktop, - setup_commands_toolbox, - update_commands_toolbox); -} + switch (id) { + case BAR_TOOL: + setup_func = setup_tool_toolbox; + update_func = update_tool_toolbox; + break; -void -sp_snap_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop) -{ - toolbox_set_desktop(toolbox, - desktop, - setup_snap_toolbox, - update_snap_toolbox); -} + case BAR_AUX: + toolbox = gtk_bin_get_child(GTK_BIN(toolbox)); + setup_func = setup_aux_toolbox; + update_func = update_aux_toolbox; + break; + case BAR_COMMANDS: + setup_func = setup_commands_toolbox; + update_func = update_commands_toolbox; + break; -static void -toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop, SetupFunction setup_func, UpdateFunction update_func) -{ - sigc::connection *conn = static_cast(g_object_get_data(G_OBJECT(toolbox), - "event_context_connection")); - { - GtkWidget* child = gtk_bin_get_child(GTK_BIN(toolbox)); - if (g_object_get_data(G_OBJECT(child), "MarkForChild")) { - toolbox = child; - } + case BAR_SNAP: + setup_func = setup_snap_toolbox; + update_func = update_snap_toolbox; + break; + default: + g_warning("Unexpected toolbox id encountered."); } + gpointer ptr = g_object_get_data(G_OBJECT(toolbox), "desktop"); SPDesktop *old_desktop = static_cast(ptr); @@ -1573,17 +1566,16 @@ toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop, SetupFunction setup_ g_object_set_data(G_OBJECT(toolbox), "desktop", (gpointer)desktop); - if (desktop) { + if (desktop && setup_func && update_func) { gtk_widget_set_sensitive(toolbox, TRUE); setup_func(toolbox, desktop); update_func(desktop, desktop->event_context, toolbox); - *conn = desktop->connectEventContextChanged - (sigc::bind (sigc::ptr_fun(update_func), toolbox)); + *conn = desktop->connectEventContextChanged(sigc::bind (sigc::ptr_fun(update_func), toolbox)); } else { gtk_widget_set_sensitive(toolbox, FALSE); } -} // end of toolbox_set_desktop() +} // end of sp_toolbox_set_desktop() static void setupToolboxCommon( GtkWidget *toolbox, diff --git a/src/widgets/toolbox.h b/src/widgets/toolbox.h index 4bc417e8f..a07a8cb2a 100644 --- a/src/widgets/toolbox.h +++ b/src/widgets/toolbox.h @@ -16,21 +16,18 @@ #include #include +#include #include "forward.h" #include "icon-size.h" GtkWidget *sp_tool_toolbox_new (); -void sp_tool_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop); - GtkWidget *sp_aux_toolbox_new (); -void sp_aux_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop); - GtkWidget *sp_commands_toolbox_new (); -void sp_commands_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop); - GtkWidget *sp_snap_toolbox_new (); -void sp_snap_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop); + +void sp_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop); + void update_snap_toolbox(SPDesktop *desktop, SPEventContext *eventcontext, GtkWidget *toolbox); void setup_snap_toolbox (GtkWidget *toolbox, SPDesktop *desktop); -- cgit v1.2.3 From c12fb9de3064fa395cca2e78d92bb564974ce9d4 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Fri, 8 Jan 2010 01:16:41 -0800 Subject: C++-ification pass. (bzr r8954) --- src/widgets/desktop-widget.cpp | 95 +++++++++++++++++++++--------------------- src/widgets/desktop-widget.h | 33 ++++++++++----- 2 files changed, 71 insertions(+), 57 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index 6c330b5f3..babb5b5b6 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -48,7 +48,6 @@ #include "sp-image.h" #include "sp-item.h" #include "sp-namedview.h" -#include "toolbox.h" #include "ui/dialog/dialog-manager.h" #include "ui/dialog/swatches.h" #include "ui/icon-names.h" @@ -56,12 +55,14 @@ #include "ui/widget/layer-selector.h" #include "ui/widget/selected-style.h" #include "ui/uxmanager.h" -#include "widgets/button.h" -#include "widgets/ruler.h" -#include "widgets/spinbutton-events.h" -#include "widgets/spw-utilities.h" -#include "widgets/toolbox.h" -#include "widgets/widget-sizes.h" + +// We're in the "widgets" directory, so no need to explicitly prefix these: +#include "button.h" +#include "ruler.h" +#include "spinbutton-events.h" +#include "spw-utilities.h" +#include "toolbox.h" +#include "widget-sizes.h" #if defined (SOLARIS) && (SOLARIS == 8) #include "round.h" @@ -90,7 +91,6 @@ enum { /* SPDesktopWidget */ static void sp_desktop_widget_class_init (SPDesktopWidgetClass *klass); -static void sp_desktop_widget_init (SPDesktopWidget *widget); static void sp_desktop_widget_destroy (GtkObject *object); static void sp_desktop_widget_size_allocate (GtkWidget *widget, GtkAllocation *allocation); @@ -102,7 +102,6 @@ static void sp_dtw_color_profile_event(EgeColorProfTracker *widget, SPDesktopWid static void cms_adjust_toggled( GtkWidget *button, gpointer data ); static void cms_adjust_set_sensitive( SPDesktopWidget *dtw, bool enabled ); static void sp_desktop_widget_adjustment_value_changed (GtkAdjustment *adj, SPDesktopWidget *dtw); -static void sp_desktop_widget_namedview_modified (SPObject *obj, guint flags, SPDesktopWidget *dtw); static gdouble sp_dtw_zoom_value_to_display (gdouble value); static gdouble sp_dtw_zoom_display_to_value (gdouble value); @@ -246,7 +245,7 @@ SPDesktopWidget::window_get_pointer() /** * Registers SPDesktopWidget class and returns its type number. */ -GType sp_desktop_widget_get_type(void) +GType SPDesktopWidget::getType(void) { static GtkType type = 0; if (!type) { @@ -259,7 +258,7 @@ GType sp_desktop_widget_get_type(void) 0, // class_data sizeof(SPDesktopWidget), 0, // n_preallocs - (GInstanceInitFunc)sp_desktop_widget_init, + (GInstanceInitFunc)SPDesktopWidget::init, 0 // value_table }; type = g_type_register_static(SP_TYPE_VIEW_WIDGET, "SPDesktopWidget", &info, static_cast(0)); @@ -287,8 +286,7 @@ sp_desktop_widget_class_init (SPDesktopWidgetClass *klass) /** * Callback for SPDesktopWidget object initialization. */ -static void -sp_desktop_widget_init (SPDesktopWidget *dtw) +void SPDesktopWidget::init( SPDesktopWidget *dtw ) { GtkWidget *widget; GtkWidget *tbl; @@ -712,23 +710,22 @@ sp_desktop_widget_realize (GtkWidget *widget) dtw->desktop->set_display_area (d.x0, d.y0, d.x1, d.y1, 10); - sp_desktop_widget_update_namedview(dtw); + dtw->updateNamedview(); } /* This is just to provide access to common functionality from sp_desktop_widget_realize() above as well as from SPDesktop::change_document() */ -void -sp_desktop_widget_update_namedview (SPDesktopWidget *dtw) { - g_return_if_fail(dtw); - - /* Listen on namedview modification */ +void SPDesktopWidget::updateNamedview() +{ + // Listen on namedview modification // originally (prior to the sigc++ conversion) the signal was simply // connected twice rather than disconnecting the first connection - dtw->modified_connection.disconnect(); - dtw->modified_connection = dtw->desktop->namedview->connectModified(sigc::bind<2>(sigc::ptr_fun(&sp_desktop_widget_namedview_modified), dtw)); - sp_desktop_widget_namedview_modified (dtw->desktop->namedview, SP_OBJECT_MODIFIED_FLAG, dtw); + modified_connection.disconnect(); + + modified_connection = desktop->namedview->connectModified(sigc::mem_fun(*this, &SPDesktopWidget::namedviewModified)); + namedviewModified(desktop->namedview, SP_OBJECT_MODIFIED_FLAG); - dtw->updateTitle(SP_DOCUMENT_NAME (dtw->desktop->doc())); + updateTitle(SP_DOCUMENT_NAME (desktop->doc())); } /** @@ -1204,18 +1201,18 @@ sp_desktop_widget_fullscreen(SPDesktopWidget *dtw) /** * Hide whatever the user does not want to see in the window */ -void -sp_desktop_widget_layout (SPDesktopWidget *dtw) +void SPDesktopWidget::layoutWidgets() { + SPDesktopWidget *dtw = this; Glib::ustring pref_root; Inkscape::Preferences *prefs = Inkscape::Preferences::get(); if (dtw->desktop->is_focusMode()) { - pref_root = "/focus/"; + pref_root = "/focus/"; } else if (dtw->desktop->is_fullscreen()) { - pref_root = "/fullscreen/"; + pref_root = "/fullscreen/"; } else { - pref_root = "/window/"; + pref_root = "/window/"; } #ifndef GDK_WINDOWING_QUARTZ @@ -1233,10 +1230,10 @@ sp_desktop_widget_layout (SPDesktopWidget *dtw) } if (!prefs->getBool(pref_root + "snaptoolbox/state", true)) { - gtk_widget_hide_all (dtw->snap_toolbox); - } else { - gtk_widget_show_all (dtw->snap_toolbox); - } + gtk_widget_hide_all (dtw->snap_toolbox); + } else { + gtk_widget_show_all (dtw->snap_toolbox); + } if (!prefs->getBool(pref_root + "toppanel/state", true)) { gtk_widget_hide_all (dtw->aux_toolbox); @@ -1341,8 +1338,12 @@ SPDesktopWidget::isToolboxButtonActive (const gchar* id) return isActive; } -SPViewWidget * -sp_desktop_widget_new (SPNamedView *namedview) +SPViewWidget *sp_desktop_widget_new( SPNamedView *namedview ) +{ + return SP_VIEW_WIDGET(SPDesktopWidget::createInstance(namedview)); +} + +SPDesktopWidget* SPDesktopWidget::createInstance(SPNamedView *namedview) { SPDesktopWidget *dtw = (SPDesktopWidget*)g_object_new(SP_TYPE_DESKTOP_WIDGET, NULL); @@ -1367,7 +1368,7 @@ sp_desktop_widget_new (SPNamedView *namedview) sp_view_widget_set_view (SP_VIEW_WIDGET (dtw), dtw->desktop); /* Listen on namedview modification */ - dtw->modified_connection = namedview->connectModified(sigc::bind<2>(sigc::ptr_fun(&sp_desktop_widget_namedview_modified), dtw)); + dtw->modified_connection = namedview->connectModified(sigc::mem_fun(*dtw, &SPDesktopWidget::namedviewModified)); dtw->layer_selector->setDesktop(dtw->desktop); @@ -1377,7 +1378,7 @@ sp_desktop_widget_new (SPNamedView *namedview) gtk_box_pack_start (GTK_BOX (dtw->vbox), dtw->menubar, FALSE, FALSE, 0); #endif - sp_desktop_widget_layout (dtw); + dtw->layoutWidgets(); std::vector toolboxes; toolboxes.push_back(dtw->tool_toolbox); @@ -1388,7 +1389,7 @@ sp_desktop_widget_new (SPNamedView *namedview) dtw->panels->setDesktop( dtw->desktop ); - return SP_VIEW_WIDGET (dtw); + return dtw; } void @@ -1443,22 +1444,22 @@ sp_desktop_widget_update_vruler (SPDesktopWidget *dtw) } -static void -sp_desktop_widget_namedview_modified (SPObject *obj, guint flags, SPDesktopWidget *dtw) +void SPDesktopWidget::namedviewModified(SPObject *obj, guint flags) { SPNamedView *nv=SP_NAMEDVIEW(obj); + if (flags & SP_OBJECT_MODIFIED_FLAG) { - dtw->dt2r = 1.0 / nv->doc_units->unittobase; - dtw->ruler_origin = Geom::Point(0,0); //nv->gridorigin; Why was the grid origin used here? + this->dt2r = 1.0 / nv->doc_units->unittobase; + this->ruler_origin = Geom::Point(0,0); //nv->gridorigin; Why was the grid origin used here? - sp_ruler_set_metric (GTK_RULER (dtw->vruler), nv->getDefaultMetric()); - sp_ruler_set_metric (GTK_RULER (dtw->hruler), nv->getDefaultMetric()); + sp_ruler_set_metric(GTK_RULER (this->vruler), nv->getDefaultMetric()); + sp_ruler_set_metric(GTK_RULER (this->hruler), nv->getDefaultMetric()); - gtk_tooltips_set_tip (dtw->tt, dtw->hruler_box, gettext(sp_unit_get_plural (nv->doc_units)), NULL); - gtk_tooltips_set_tip (dtw->tt, dtw->vruler_box, gettext(sp_unit_get_plural (nv->doc_units)), NULL); + gtk_tooltips_set_tip(this->tt, this->hruler_box, gettext(sp_unit_get_plural (nv->doc_units)), NULL); + gtk_tooltips_set_tip(this->tt, this->vruler_box, gettext(sp_unit_get_plural (nv->doc_units)), NULL); - sp_desktop_widget_update_rulers (dtw); - update_snap_toolbox(dtw->desktop, NULL, dtw->snap_toolbox); + sp_desktop_widget_update_rulers(this); + update_snap_toolbox(this->desktop, NULL, this->snap_toolbox); } } diff --git a/src/widgets/desktop-widget.h b/src/widgets/desktop-widget.h index 04146cac6..c9bedb1ab 100644 --- a/src/widgets/desktop-widget.h +++ b/src/widgets/desktop-widget.h @@ -5,6 +5,7 @@ * SPDesktopWidget: handling Gtk events on a desktop. * * Authors: + * Jon A. Cruz (c) 2010 * John Bintz (c) 2006 * Ralf Stephan (c) 2005, distrib. under GPL2 * ? -2004 @@ -26,28 +27,23 @@ typedef struct _EgeColorProfTracker EgeColorProfTracker; -#define SP_TYPE_DESKTOP_WIDGET (sp_desktop_widget_get_type ()) +#define SP_TYPE_DESKTOP_WIDGET SPDesktopWidget::getType() #define SP_DESKTOP_WIDGET(o) (GTK_CHECK_CAST ((o), SP_TYPE_DESKTOP_WIDGET, SPDesktopWidget)) #define SP_DESKTOP_WIDGET_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), SP_TYPE_DESKTOP_WIDGET, SPDesktopWidgetClass)) #define SP_IS_DESKTOP_WIDGET(o) (GTK_CHECK_TYPE ((o), SP_TYPE_DESKTOP_WIDGET)) #define SP_IS_DESKTOP_WIDGET_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_DESKTOP_WIDGET)) -GtkType sp_desktop_widget_get_type(); - void sp_desktop_widget_destroy (SPDesktopWidget* dtw); void sp_desktop_widget_show_decorations(SPDesktopWidget *dtw, gboolean show); void sp_desktop_widget_iconify(SPDesktopWidget *dtw); void sp_desktop_widget_maximize(SPDesktopWidget *dtw); void sp_desktop_widget_fullscreen(SPDesktopWidget *dtw); -void sp_desktop_widget_layout(SPDesktopWidget *dtw); void sp_desktop_widget_update_zoom(SPDesktopWidget *dtw); void sp_desktop_widget_update_rulers (SPDesktopWidget *dtw); void sp_desktop_widget_update_hruler (SPDesktopWidget *dtw); void sp_desktop_widget_update_vruler (SPDesktopWidget *dtw); -void sp_desktop_widget_update_namedview (SPDesktopWidget *dtw); - /* Show/hide rulers & scrollbars */ void sp_desktop_widget_toggle_rulers (SPDesktopWidget *dtw); void sp_desktop_widget_toggle_scrollbars (SPDesktopWidget *dtw); @@ -86,8 +82,6 @@ struct SPDesktopWidget { GtkWidget *hscrollbar, *vscrollbar, *vscrollbar_box; - GtkWidget *tool_toolbox, *aux_toolbox, *commands_toolbox, *snap_toolbox; - /* Rulers */ GtkWidget *hruler, *vruler; GtkWidget *hruler_box, *vruler_box; // eventboxes for setting tooltips @@ -129,8 +123,11 @@ struct SPDesktopWidget { { _dtw->updateTitle (uri); } virtual Gtk::Window* getWindow() { return _dtw->window; } - virtual void layout() - { sp_desktop_widget_layout (_dtw); } + + virtual void layout() { + _dtw->layoutWidgets(); + } + virtual void present() { _dtw->presentWindow(); } virtual void getGeometry (gint &x, gint &y, gint &w, gint &h) @@ -231,6 +228,22 @@ struct SPDesktopWidget { Inkscape::UI::Widget::Dock* getDock(); + static GtkType getType(); + static SPDesktopWidget* createInstance(SPNamedView *namedview); + + void updateNamedview(); + +private: + GtkWidget *tool_toolbox; + GtkWidget *aux_toolbox; + GtkWidget *commands_toolbox,; + GtkWidget *snap_toolbox; + + static void init(SPDesktopWidget *widget); + void layoutWidgets(); + + void namedviewModified(SPObject *obj, guint flags); + }; /// The SPDesktopWidget vtable -- cgit v1.2.3 From c4170261f04e1d37439f71c92fb3ac442da40c7f Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sat, 9 Jan 2010 01:37:23 -0800 Subject: Initial c++-ification of toolbox creation. (bzr r8955) --- src/widgets/desktop-widget.cpp | 14 ++--- src/widgets/select-toolbar.cpp | 2 +- src/widgets/toolbox.cpp | 123 ++++++++++++++++++++++++++++------------- src/widgets/toolbox.h | 38 ++++++++----- 4 files changed, 116 insertions(+), 61 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index babb5b5b6..8ed416a4c 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -71,7 +71,7 @@ using Inkscape::round; using Inkscape::UI::UXManager; - +using Inkscape::UI::ToolboxFactory; #ifdef WITH_INKBOARD #endif @@ -327,16 +327,16 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) gtk_box_pack_end (GTK_BOX (dtw->vbox), hbox, TRUE, TRUE, 0); gtk_widget_show (hbox); - dtw->aux_toolbox = sp_aux_toolbox_new (); + dtw->aux_toolbox = ToolboxFactory::createAuxToolbox(); gtk_box_pack_end (GTK_BOX (dtw->vbox), dtw->aux_toolbox, FALSE, TRUE, 0); - dtw->snap_toolbox = sp_snap_toolbox_new (); + dtw->snap_toolbox = ToolboxFactory::createSnapToolbox(); gtk_box_pack_end (GTK_BOX (dtw->vbox), dtw->snap_toolbox, FALSE, TRUE, 0); - dtw->commands_toolbox = sp_commands_toolbox_new (); + dtw->commands_toolbox = ToolboxFactory::createCommandsToolbox(); gtk_box_pack_end (GTK_BOX (dtw->vbox), dtw->commands_toolbox, FALSE, TRUE, 0); - dtw->tool_toolbox = sp_tool_toolbox_new (); + dtw->tool_toolbox = ToolboxFactory::createToolToolbox(); gtk_box_pack_start (GTK_BOX (hbox), dtw->tool_toolbox, FALSE, TRUE, 0); tbl = gtk_table_new (2, 3, FALSE); @@ -1240,7 +1240,7 @@ void SPDesktopWidget::layoutWidgets() } else { // we cannot just show_all because that will show all tools' panels; // this is a function from toolbox.cpp that shows only the current tool's panel - show_aux_toolbox (dtw->aux_toolbox); + ToolboxFactory::showAuxToolbox(dtw->aux_toolbox); } if (!prefs->getBool(pref_root + "toolbox/state", true)) { @@ -1459,7 +1459,7 @@ void SPDesktopWidget::namedviewModified(SPObject *obj, guint flags) gtk_tooltips_set_tip(this->tt, this->vruler_box, gettext(sp_unit_get_plural (nv->doc_units)), NULL); sp_desktop_widget_update_rulers(this); - update_snap_toolbox(this->desktop, NULL, this->snap_toolbox); + ToolboxFactory::updateSnapToolbox(this->desktop, 0, this->snap_toolbox); } } diff --git a/src/widgets/select-toolbar.cpp b/src/widgets/select-toolbar.cpp index f168cedeb..f383d2500 100644 --- a/src/widgets/select-toolbar.cpp +++ b/src/widgets/select-toolbar.cpp @@ -390,7 +390,7 @@ static GtkAction* create_action_for_verb( Inkscape::Verb* verb, Inkscape::UI::Vi void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder) { Inkscape::UI::View::View *view = desktop; - Inkscape::IconSize secondarySize = prefToSize("/toolbox/secondary", 1); + Inkscape::IconSize secondarySize = Inkscape::UI::ToolboxFactory::prefToSize("/toolbox/secondary", 1); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); GtkAction* act = 0; diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index 185e8bd2d..f014a7d70 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -137,8 +137,10 @@ static void sp_lpetool_toolbox_prep(SPDesktop *desktop, GtkActionGroup* ma namespace { GtkWidget *sp_text_toolbox_new (SPDesktop *desktop); } +using Inkscape::UI::ToolboxFactory; -Inkscape::IconSize prefToSize( Glib::ustring const &path, int base ) { + +Inkscape::IconSize ToolboxFactory::prefToSize( Glib::ustring const &path, int base ) { static Inkscape::IconSize sizeChoices[] = { Inkscape::ICON_SIZE_LARGE_TOOLBAR, Inkscape::ICON_SIZE_SMALL_TOOLBAR, @@ -499,6 +501,8 @@ static gchar const * ui_descr = static Glib::RefPtr create_or_fetch_actions( SPDesktop* desktop ); +void setup_snap_toolbox (GtkWidget *toolbox, SPDesktop *desktop); + static void setup_tool_toolbox (GtkWidget *toolbox, SPDesktop *desktop); static void update_tool_toolbox (SPDesktop *desktop, SPEventContext *eventcontext, GtkWidget *toolbox); @@ -580,7 +584,7 @@ Gtk::Widget* VerbAction::create_menu_item_vfunc() Gtk::Widget* VerbAction::create_tool_item_vfunc() { // Gtk::Widget* widg = Gtk::Action::create_tool_item_vfunc(); - Inkscape::IconSize toolboxSize = prefToSize("/toolbox/tools/small"); + Inkscape::IconSize toolboxSize = ToolboxFactory::prefToSize("/toolbox/tools/small"); GtkWidget* toolbox = 0; GtkWidget *button = sp_toolbox_button_new_from_verb_with_doubleclick( toolbox, toolboxSize, SP_BUTTON_TYPE_TOGGLE, @@ -788,7 +792,7 @@ Glib::RefPtr create_or_fetch_actions( SPDesktop* desktop ) SP_VERB_ZOOM_SELECTION, }; - Inkscape::IconSize toolboxSize = prefToSize("/toolbox/small"); + Inkscape::IconSize toolboxSize = ToolboxFactory::prefToSize("/toolbox/small"); static std::map > groups; Glib::RefPtr mainActions; @@ -867,16 +871,14 @@ static GtkWidget* toolboxNewCommon( GtkWidget* tb, BarId id, GtkPositionType han return hb; } -GtkWidget *sp_tool_toolbox_new() +GtkWidget *ToolboxFactory::createToolToolbox() { - GtkWidget *toolBar = gtk_toolbar_new(); - gtk_toolbar_set_orientation(GTK_TOOLBAR(toolBar), GTK_ORIENTATION_VERTICAL); - gtk_toolbar_set_show_arrow(GTK_TOOLBAR(toolBar), TRUE); + GtkWidget *tb = gtk_vbox_new(FALSE, 0); - return toolboxNewCommon( toolBar, BAR_TOOL, GTK_POS_TOP ); + return toolboxNewCommon( tb, BAR_TOOL, GTK_POS_TOP ); } -GtkWidget *sp_aux_toolbox_new() +GtkWidget *ToolboxFactory::createAuxToolbox() { GtkWidget *tb = gtk_vbox_new(FALSE, 0); @@ -887,14 +889,14 @@ GtkWidget *sp_aux_toolbox_new() //# Commands Bar //#################################### -GtkWidget *sp_commands_toolbox_new() +GtkWidget *ToolboxFactory::createCommandsToolbox() { - GtkWidget *tb = gtk_toolbar_new(); + GtkWidget *tb = gtk_vbox_new(FALSE, 0); return toolboxNewCommon( tb, BAR_COMMANDS, GTK_POS_LEFT ); } -GtkWidget *sp_snap_toolbox_new() +GtkWidget *ToolboxFactory::createSnapToolbox() { GtkWidget *tb = gtk_vbox_new(FALSE, 0); @@ -1257,7 +1259,7 @@ static void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions tracker->setActiveUnit( sp_desktop_namedview(desktop)->doc_units ); g_object_set_data( holder, "tracker", tracker ); - Inkscape::IconSize secondarySize = prefToSize("/toolbox/secondary", 1); + Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); { InkAction* inky = ink_action_new( "NodeInsertAction", @@ -1516,7 +1518,7 @@ static void sp_zoom_toolbox_prep(SPDesktop */*desktop*/, GtkActionGroup* /*mainA // no custom GtkAction setup needed } // end of sp_zoom_toolbox_prep() -void sp_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop) +void ToolboxFactory::setToolboxDesktop(GtkWidget *toolbox, SPDesktop *desktop) { sigc::connection *conn = static_cast(g_object_get_data(G_OBJECT(toolbox), "event_context_connection")); @@ -1545,7 +1547,7 @@ void sp_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop) case BAR_SNAP: setup_func = setup_snap_toolbox; - update_func = update_snap_toolbox; + update_func = updateSnapToolbox; break; default: g_warning("Unexpected toolbox id encountered."); @@ -1582,8 +1584,7 @@ static void setupToolboxCommon( GtkWidget *toolbox, SPDesktop *desktop, gchar const *descr, gchar const* toolbarName, - gchar const* sizePref, - GtkOrientation orientation ) + gchar const* sizePref ) { Glib::RefPtr mainActions = create_or_fetch_actions( desktop ); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); @@ -1591,6 +1592,8 @@ static void setupToolboxCommon( GtkWidget *toolbox, GtkUIManager* mgr = gtk_ui_manager_new(); GError* errVal = 0; + GtkOrientation orientation = GTK_ORIENTATION_HORIZONTAL; + gtk_ui_manager_insert_action_group( mgr, mainActions->gobj(), 0 ); gtk_ui_manager_add_ui_from_string( mgr, descr, -1, &errVal ); @@ -1599,9 +1602,14 @@ static void setupToolboxCommon( GtkWidget *toolbox, gtk_toolbar_set_style( GTK_TOOLBAR(toolBar), GTK_TOOLBAR_ICONS ); } - Inkscape::IconSize toolboxSize = prefToSize(sizePref); + Inkscape::IconSize toolboxSize = ToolboxFactory::prefToSize(sizePref); gtk_toolbar_set_icon_size( GTK_TOOLBAR(toolBar), static_cast(toolboxSize) ); + if (GTK_IS_HANDLE_BOX(toolbox)) { + // g_message("GRABBING ORIENTATION [%s]", toolbarName); + GtkPositionType pos = gtk_handle_box_get_handle_position(GTK_HANDLE_BOX(toolbox)); + orientation = ((pos == GTK_POS_LEFT) || (pos == GTK_POS_RIGHT)) ? GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL; + } gtk_toolbar_set_orientation(GTK_TOOLBAR(toolBar), orientation); gtk_toolbar_set_show_arrow(GTK_TOOLBAR(toolBar), TRUE); @@ -1615,6 +1623,48 @@ static void setupToolboxCommon( GtkWidget *toolbox, gtk_container_add( GTK_CONTAINER(toolbox), toolBar ); } +void ToolboxFactory::setOrientation(GtkWidget* toolbox, GtkOrientation orientation) +{ + //g_message("Set orientation for %p to be %d", toolbox, orientation); + //GType type = GTK_WIDGET_TYPE(toolbox); + //g_message(" [%s]", g_type_name(type)); + //g_message(" %p", g_object_get_data(G_OBJECT(toolbox), BAR_ID_KEY)); + + if (GTK_IS_BIN(toolbox)) { + //g_message(" is a BIN"); + GtkWidget* child = gtk_bin_get_child(GTK_BIN(toolbox)); + if (child) { + //GType type2 = GTK_WIDGET_TYPE(child); + //g_message(" child [%s]", g_type_name(type2)); + + if (GTK_IS_BOX(child)) { + //g_message(" is a BOX"); + + GList* children = gtk_container_get_children(GTK_CONTAINER(child)); + if (children && children->data) { + //GtkWidget* child2 = GTK_WIDGET(children->data); + //GType type3 = GTK_WIDGET_TYPE(child2); + //g_message(" child [%s]", g_type_name(type3)); + g_message("need to add dynamic switch"); + + g_list_free(children); + } else { + //g_message(" has no children %p", children); + // The call is being made before the toolbox proper has been setup. + if (GTK_IS_HANDLE_BOX(toolbox)) { + GtkPositionType pos = (orientation == GTK_ORIENTATION_HORIZONTAL) ? GTK_POS_LEFT : GTK_POS_TOP; + gtk_handle_box_set_handle_position(GTK_HANDLE_BOX(toolbox), pos); + //g_message("Setting position"); + } + } + } + } + } + + + +} + static void setup_tool_toolbox(GtkWidget *toolbox, SPDesktop *desktop) { @@ -1646,8 +1696,7 @@ setup_tool_toolbox(GtkWidget *toolbox, SPDesktop *desktop) setupToolboxCommon( toolbox, desktop, descr, "/ui/ToolToolbar", - "/toolbox/tools/small", - GTK_ORIENTATION_VERTICAL ); + "/toolbox/tools/small"); } static void @@ -1728,7 +1777,7 @@ setup_aux_toolbox(GtkWidget *toolbox, SPDesktop *desktop) gtk_toolbar_set_style( GTK_TOOLBAR(toolBar), GTK_TOOLBAR_ICONS ); } - Inkscape::IconSize toolboxSize = prefToSize("/toolbox/small"); + Inkscape::IconSize toolboxSize = ToolboxFactory::prefToSize("/toolbox/small"); gtk_toolbar_set_icon_size( GTK_TOOLBAR(toolBar), static_cast(toolboxSize) ); gtk_table_attach( GTK_TABLE(holder), toolBar, 0, 1, 0, 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0 ); @@ -1817,8 +1866,7 @@ setup_commands_toolbox(GtkWidget *toolbox, SPDesktop *desktop) setupToolboxCommon( toolbox, desktop, descr, "/ui/CommandsToolbar", - "/toolbox/small", - GTK_ORIENTATION_HORIZONTAL ); + "/toolbox/small" ); } static void @@ -1971,7 +2019,7 @@ void setup_snap_toolbox(GtkWidget *toolbox, SPDesktop *desktop) " " ""; - Inkscape::IconSize secondarySize = prefToSize("/toolbox/secondary", 1); + Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); { InkToggleAction* act = ink_toggle_action_new("ToggleSnapGlobal", @@ -2138,18 +2186,17 @@ void setup_snap_toolbox(GtkWidget *toolbox, SPDesktop *desktop) setupToolboxCommon( toolbox, desktop, descr, "/ui/SnapToolbar", - "/toolbox/secondary", - GTK_ORIENTATION_HORIZONTAL ); + "/toolbox/secondary" ); } -void update_snap_toolbox(SPDesktop *desktop, SPEventContext */*eventcontext*/, GtkWidget *toolbox) +void ToolboxFactory::updateSnapToolbox(SPDesktop *desktop, SPEventContext */*eventcontext*/, GtkWidget *toolbox) { g_assert(desktop != NULL); g_assert(toolbox != NULL); SPNamedView *nv = sp_desktop_namedview(desktop); if (nv == NULL) { - g_warning("Namedview cannot be retrieved (in update_snap_toolbox)!"); + g_warning("Namedview cannot be retrieved (in updateSnapToolbox)!"); return; } @@ -2234,7 +2281,7 @@ void update_snap_toolbox(SPDesktop *desktop, SPEventContext */*eventcontext*/, G g_object_set_data(G_OBJECT(toolbox), "freeze", GINT_TO_POINTER(FALSE)); // unfreeze (see above) } -void show_aux_toolbox(GtkWidget *toolbox_toplevel) +void ToolboxFactory::showAuxToolbox(GtkWidget *toolbox_toplevel) { gtk_widget_show(toolbox_toplevel); GtkWidget *toolbox = gtk_bin_get_child(GTK_BIN(toolbox_toplevel)); @@ -2629,7 +2676,7 @@ sp_toolbox_add_label(GtkWidget *tbl, gchar const *title, bool wide) static void sp_star_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder) { - Inkscape::IconSize secondarySize = prefToSize("/toolbox/secondary", 1); + Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); { EgeOutputAction* act = ege_output_action_new( "StarStateAction", _("New:"), "", 0 ); @@ -2998,7 +3045,7 @@ sp_rect_toolbox_selection_changed(Inkscape::Selection *selection, GObject *tbl) static void sp_rect_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder) { EgeAdjustmentAction* eact = 0; - Inkscape::IconSize secondarySize = prefToSize("/toolbox/secondary", 1); + Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); { EgeOutputAction* act = ege_output_action_new( "RectStateAction", _("New:"), "", 0 ); @@ -3640,7 +3687,7 @@ sp_spiral_toolbox_selection_changed(Inkscape::Selection *selection, GObject *tbl static void sp_spiral_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder) { EgeAdjustmentAction* eact = 0; - Inkscape::IconSize secondarySize = prefToSize("/toolbox/secondary", 1); + Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); { EgeOutputAction* act = ege_output_action_new( "SpiralStateAction", _("New:"), "", 0 ); @@ -3747,7 +3794,7 @@ static void sp_add_freehand_mode_toggle(GtkActionGroup* mainActions, GObject* ho { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); guint freehandMode = prefs->getInt(( tool_is_pencil ? "/tools/freehand/pencil/freehand-mode" : "/tools/freehand/pen/freehand-mode" ), 0); - Inkscape::IconSize secondarySize = prefToSize("/toolbox/secondary", 1); + Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); { GtkListStore* model = gtk_list_store_new( 3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING ); @@ -4041,7 +4088,7 @@ static void tweak_toggle_doo (GtkToggleAction *act, gpointer /*data*/) { static void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder) { - Inkscape::IconSize secondarySize = prefToSize("/toolbox/secondary", 1); + Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); { @@ -4355,7 +4402,7 @@ static void sp_spray_scale_value_changed( GtkAdjustment *adj, GObject */*tbl*/ ) static void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder) { - Inkscape::IconSize secondarySize = prefToSize("/toolbox/secondary", 1); + Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); { @@ -5302,7 +5349,7 @@ static void sp_arc_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, Inkscape::Preferences *prefs = Inkscape::Preferences::get(); EgeAdjustmentAction* eact = 0; - Inkscape::IconSize secondarySize = prefToSize("/toolbox/secondary", 1); + Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); { @@ -6863,7 +6910,7 @@ void sp_text_toolbox_family_popnotify(GtkComboBox *widget, GtkWidget *sp_text_toolbox_new (SPDesktop *desktop) { GtkToolbar *tbl = GTK_TOOLBAR(gtk_toolbar_new()); - GtkIconSize secondarySize = static_cast(prefToSize("/toolbox/secondary", 1)); + GtkIconSize secondarySize = static_cast(ToolboxFactory::prefToSize("/toolbox/secondary", 1)); gtk_object_set_data(GTK_OBJECT(tbl), "dtw", desktop->canvas); gtk_object_set_data(GTK_OBJECT(tbl), "desktop", desktop); @@ -7360,7 +7407,7 @@ static void sp_connector_toolbox_selection_changed(Inkscape::Selection *selectio static void sp_connector_toolbox_prep( SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder ) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - Inkscape::IconSize secondarySize = prefToSize("/toolbox/secondary", 1); + Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); // Editing mode toggle button { diff --git a/src/widgets/toolbox.h b/src/widgets/toolbox.h index a07a8cb2a..b028dd0a9 100644 --- a/src/widgets/toolbox.h +++ b/src/widgets/toolbox.h @@ -21,30 +21,38 @@ #include "forward.h" #include "icon-size.h" -GtkWidget *sp_tool_toolbox_new (); -GtkWidget *sp_aux_toolbox_new (); -GtkWidget *sp_commands_toolbox_new (); -GtkWidget *sp_snap_toolbox_new (); +namespace Inkscape { +namespace UI { -void sp_toolbox_set_desktop(GtkWidget *toolbox, SPDesktop *desktop); +class ToolboxFactory +{ +public: + static void setToolboxDesktop(GtkWidget *toolbox, SPDesktop *desktop); + static void setOrientation(GtkWidget* toolbox, GtkOrientation orientation); + static void showAuxToolbox(GtkWidget* toolbox); -void update_snap_toolbox(SPDesktop *desktop, SPEventContext *eventcontext, GtkWidget *toolbox); -void setup_snap_toolbox (GtkWidget *toolbox, SPDesktop *desktop); + static GtkWidget *createToolToolbox(); + static GtkWidget *createAuxToolbox(); + static GtkWidget *createCommandsToolbox(); + static GtkWidget *createSnapToolbox(); -void show_aux_toolbox(GtkWidget *toolbox); + static void updateSnapToolbox(SPDesktop *desktop, SPEventContext *eventcontext, GtkWidget *toolbox); -GtkWidget *sp_toolbox_button_normal_new_from_verb(GtkWidget *t, - Inkscape::IconSize size, - Inkscape::Verb * verb, - Inkscape::UI::View::View *view, - GtkTooltips *tt); + static Inkscape::IconSize prefToSize(Glib::ustring const &path, int base = 0 ); + +private: + ToolboxFactory(); +}; + +} // namespace UI +} // namespace Inkscape -void aux_toolbox_space(GtkWidget *tb, gint space); // utility + +// TODO remove this: void sp_toolbox_add_label(GtkWidget *tbl, gchar const *title, bool wide = true); -Inkscape::IconSize prefToSize(Glib::ustring const &path, int base = 0 ); #endif /* !SEEN_TOOLBOX_H */ -- cgit v1.2.3 From 2a4b008d73a68bf1648e6f6cdb6e250d35cc9388 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sat, 9 Jan 2010 01:40:31 -0800 Subject: Leverage recent toolbox c++-ification work to move the snap toolbar to the side with minimal effort. (bzr r8956) --- src/widgets/desktop-widget.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/widgets') diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index 8ed416a4c..f7e7f911d 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -331,7 +331,8 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) gtk_box_pack_end (GTK_BOX (dtw->vbox), dtw->aux_toolbox, FALSE, TRUE, 0); dtw->snap_toolbox = ToolboxFactory::createSnapToolbox(); - gtk_box_pack_end (GTK_BOX (dtw->vbox), dtw->snap_toolbox, FALSE, TRUE, 0); + ToolboxFactory::setOrientation( dtw->snap_toolbox, GTK_ORIENTATION_VERTICAL ); + gtk_box_pack_end (GTK_BOX (hbox), dtw->snap_toolbox, FALSE, TRUE, 0); dtw->commands_toolbox = ToolboxFactory::createCommandsToolbox(); gtk_box_pack_end (GTK_BOX (dtw->vbox), dtw->commands_toolbox, FALSE, TRUE, 0); -- cgit v1.2.3 From 0af1d677c0c9142f9a366a84428cee261894e3bb Mon Sep 17 00:00:00 2001 From: Maximilian Albert Date: Sun, 10 Jan 2010 10:47:19 +0000 Subject: Avoid crash by uninitialized perspectives. Fixed bugs: - https://launchpad.net/bugs/500507 (bzr r8962) --- src/widgets/toolbox.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index f014a7d70..a09e04132 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -3409,7 +3409,7 @@ static void box3d_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, box3d_angle_x = eact; } - if (!persp3d_VP_is_finite(persp_impl, Proj::X)) { + if (!persp_impl || !persp3d_VP_is_finite(persp_impl, Proj::X)) { gtk_action_set_sensitive( GTK_ACTION(eact), TRUE ); } else { gtk_action_set_sensitive( GTK_ACTION(eact), FALSE ); @@ -3449,7 +3449,7 @@ static void box3d_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, box3d_angle_y = eact; } - if (!persp3d_VP_is_finite(persp_impl, Proj::Y)) { + if (!persp_impl || !persp3d_VP_is_finite(persp_impl, Proj::Y)) { gtk_action_set_sensitive( GTK_ACTION(eact), TRUE ); } else { gtk_action_set_sensitive( GTK_ACTION(eact), FALSE ); @@ -3488,7 +3488,7 @@ static void box3d_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, box3d_angle_z = eact; } - if (!persp3d_VP_is_finite(persp_impl, Proj::Z)) { + if (!persp_impl || !persp3d_VP_is_finite(persp_impl, Proj::Z)) { gtk_action_set_sensitive( GTK_ACTION(eact), TRUE ); } else { gtk_action_set_sensitive( GTK_ACTION(eact), FALSE ); -- cgit v1.2.3 From 7d549f19e53f6bb1b157f04a1cffb69d8f910ec5 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sun, 10 Jan 2010 03:22:05 -0800 Subject: Completed base code to flip toolbox orientation. Basic integration of task switching control. (bzr r8963) --- src/widgets/desktop-widget.cpp | 8 ++++- src/widgets/toolbox.cpp | 77 +++++++++++++++++++++++++++++++++++++----- 2 files changed, 76 insertions(+), 9 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index f7e7f911d..f70ade5a3 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -571,6 +571,8 @@ sp_desktop_widget_destroy (GtkObject *object) { SPDesktopWidget *dtw = SP_DESKTOP_WIDGET (object); + UXManager::getInstance()->delTrack(dtw); + if (dtw->desktop) { if ( watcher ) { watcher->remove(dtw); @@ -1341,7 +1343,11 @@ SPDesktopWidget::isToolboxButtonActive (const gchar* id) SPViewWidget *sp_desktop_widget_new( SPNamedView *namedview ) { - return SP_VIEW_WIDGET(SPDesktopWidget::createInstance(namedview)); + SPDesktopWidget* dtw = SPDesktopWidget::createInstance(namedview); + + UXManager::getInstance()->addTrack(dtw); + + return SP_VIEW_WIDGET(dtw); } SPDesktopWidget* SPDesktopWidget::createInstance(SPNamedView *namedview) diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index a09e04132..5eb19bbd6 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -98,10 +98,12 @@ #include "../xml/attribute-record.h" #include "../xml/node-event-vector.h" #include "../xml/repr.h" +#include "ui/uxmanager.h" #include "toolbox.h" using Inkscape::UnitTracker; +using Inkscape::UI::UXManager; typedef void (*SetupFunction)(GtkWidget *toolbox, SPDesktop *desktop); typedef void (*UpdateFunction)(SPDesktop *desktop, SPEventContext *eventcontext, GtkWidget *toolbox); @@ -137,6 +139,13 @@ static void sp_lpetool_toolbox_prep(SPDesktop *desktop, GtkActionGroup* ma namespace { GtkWidget *sp_text_toolbox_new (SPDesktop *desktop); } + +static void fireTaskChange( EgeSelectOneAction *act, SPDesktop *dt ) +{ + gint selected = ege_select_one_action_get_active( act ); + UXManager::getInstance()->setTask(dt, selected); +} + using Inkscape::UI::ToolboxFactory; @@ -828,6 +837,39 @@ Glib::RefPtr create_or_fetch_actions( SPDesktop* desktop ) } } + if ( !mainActions->get_action("TaskSetAction") ) { + GtkListStore* model = gtk_list_store_new( 3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING ); + + GtkTreeIter iter; + gtk_list_store_append( model, &iter ); + gtk_list_store_set( model, &iter, + 0, _("Default"), + 1, _("Default interface setup"), + 2, 0, + -1 ); + + gtk_list_store_append( model, &iter ); + gtk_list_store_set( model, &iter, + 0, _("Custom"), + 1, _("Set the custom task"), + 2, 0, + -1 ); + + EgeSelectOneAction* act = ege_select_one_action_new( "TaskSetAction", _("Task"), (""), NULL, GTK_TREE_MODEL(model) ); + g_object_set( act, "short_label", _("Task:"), NULL ); + mainActions->add(Glib::wrap(GTK_ACTION(act))); + //g_object_set_data( holder, "mode_action", act ); + + ege_select_one_action_set_appearance( act, "minimal" ); + ege_select_one_action_set_radio_action_type( act, INK_RADIO_ACTION_TYPE ); + g_object_set( G_OBJECT(act), "icon-property", "iconId", NULL ); + ege_select_one_action_set_icon_column( act, 2 ); + //ege_select_one_action_set_icon_size( act, secondarySize ); + ege_select_one_action_set_tooltip_column( act, 1 ); + + //ege_select_one_action_set_active( act, mode ); + g_signal_connect_after( G_OBJECT(act), "changed", G_CALLBACK(fireTaskChange), desktop ); + } return mainActions; } @@ -1630,6 +1672,9 @@ void ToolboxFactory::setOrientation(GtkWidget* toolbox, GtkOrientation orientati //g_message(" [%s]", g_type_name(type)); //g_message(" %p", g_object_get_data(G_OBJECT(toolbox), BAR_ID_KEY)); + GtkPositionType pos = (orientation == GTK_ORIENTATION_HORIZONTAL) ? GTK_POS_LEFT : GTK_POS_TOP; + GtkHandleBox* handleBox = 0; + if (GTK_IS_BIN(toolbox)) { //g_message(" is a BIN"); GtkWidget* child = gtk_bin_get_child(GTK_BIN(toolbox)); @@ -1646,23 +1691,37 @@ void ToolboxFactory::setOrientation(GtkWidget* toolbox, GtkOrientation orientati //GType type3 = GTK_WIDGET_TYPE(child2); //g_message(" child [%s]", g_type_name(type3)); g_message("need to add dynamic switch"); - + for (GList* curr = children; curr; curr = g_list_next(curr)) { + GtkWidget* child2 = GTK_WIDGET(curr->data); + + if (GTK_IS_TOOLBAR(child2)) { + GtkToolbar* childBar = GTK_TOOLBAR(child2); + gtk_toolbar_set_orientation(childBar, orientation); + if (GTK_IS_HANDLE_BOX(toolbox)) { + handleBox = GTK_HANDLE_BOX(toolbox); + } + } + } g_list_free(children); } else { - //g_message(" has no children %p", children); - // The call is being made before the toolbox proper has been setup. if (GTK_IS_HANDLE_BOX(toolbox)) { - GtkPositionType pos = (orientation == GTK_ORIENTATION_HORIZONTAL) ? GTK_POS_LEFT : GTK_POS_TOP; - gtk_handle_box_set_handle_position(GTK_HANDLE_BOX(toolbox), pos); - //g_message("Setting position"); + handleBox = GTK_HANDLE_BOX(toolbox); } + // The call is being made before the toolbox proper has been setup. + } + } else if (GTK_IS_TOOLBAR(child)) { + GtkToolbar* toolbar = GTK_TOOLBAR(child); + gtk_toolbar_set_orientation( toolbar, orientation ); + if (GTK_IS_HANDLE_BOX(toolbox)) { + handleBox = GTK_HANDLE_BOX(toolbox); } } } } - - + if (handleBox) { + gtk_handle_box_set_handle_position(handleBox, pos); + } } static void @@ -1861,6 +1920,8 @@ setup_commands_toolbox(GtkWidget *toolbox, SPDesktop *desktop) " " " " " " + " " + " " " " ""; -- cgit v1.2.3 From c1b8b4b850750c8f9739101cf3b1c44a698ae2d4 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sun, 10 Jan 2010 10:54:03 -0800 Subject: Temporarily block out code giving problems on 64-bit. (bzr r8965) --- src/widgets/toolbox.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/widgets') diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index 5eb19bbd6..300746147 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -837,6 +837,7 @@ Glib::RefPtr create_or_fetch_actions( SPDesktop* desktop ) } } +/* if ( !mainActions->get_action("TaskSetAction") ) { GtkListStore* model = gtk_list_store_new( 3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING ); @@ -870,6 +871,7 @@ Glib::RefPtr create_or_fetch_actions( SPDesktop* desktop ) //ege_select_one_action_set_active( act, mode ); g_signal_connect_after( G_OBJECT(act), "changed", G_CALLBACK(fireTaskChange), desktop ); } +*/ return mainActions; } @@ -1920,8 +1922,10 @@ setup_commands_toolbox(GtkWidget *toolbox, SPDesktop *desktop) " " " " " " +/* " " " " +*/ " " ""; -- cgit v1.2.3 From 4210429f83683f5afb268e9e537aa8bac1b43167 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sun, 10 Jan 2010 14:33:40 -0800 Subject: Removed null'd use of icons. (bzr r8966) --- src/widgets/toolbox.cpp | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index 300746147..b4dc4ee17 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -837,23 +837,20 @@ Glib::RefPtr create_or_fetch_actions( SPDesktop* desktop ) } } -/* if ( !mainActions->get_action("TaskSetAction") ) { - GtkListStore* model = gtk_list_store_new( 3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING ); + GtkListStore* model = gtk_list_store_new( 2, G_TYPE_STRING, G_TYPE_STRING ); GtkTreeIter iter; gtk_list_store_append( model, &iter ); gtk_list_store_set( model, &iter, 0, _("Default"), 1, _("Default interface setup"), - 2, 0, -1 ); gtk_list_store_append( model, &iter ); gtk_list_store_set( model, &iter, 0, _("Custom"), 1, _("Set the custom task"), - 2, 0, -1 ); EgeSelectOneAction* act = ege_select_one_action_new( "TaskSetAction", _("Task"), (""), NULL, GTK_TREE_MODEL(model) ); @@ -863,15 +860,12 @@ Glib::RefPtr create_or_fetch_actions( SPDesktop* desktop ) ege_select_one_action_set_appearance( act, "minimal" ); ege_select_one_action_set_radio_action_type( act, INK_RADIO_ACTION_TYPE ); - g_object_set( G_OBJECT(act), "icon-property", "iconId", NULL ); - ege_select_one_action_set_icon_column( act, 2 ); //ege_select_one_action_set_icon_size( act, secondarySize ); ege_select_one_action_set_tooltip_column( act, 1 ); //ege_select_one_action_set_active( act, mode ); g_signal_connect_after( G_OBJECT(act), "changed", G_CALLBACK(fireTaskChange), desktop ); } -*/ return mainActions; } @@ -1922,10 +1916,8 @@ setup_commands_toolbox(GtkWidget *toolbox, SPDesktop *desktop) " " " " " " -/* " " " " -*/ " " ""; -- cgit v1.2.3 From 37428929b5c56280aec1b9b8adab46addd58e78f Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sun, 10 Jan 2010 16:12:18 -0800 Subject: Disable questioned code section. Added name fetch. (bzr r8967) --- src/widgets/toolbox.cpp | 28 ++++++++++++++++++++++++++++ src/widgets/toolbox.h | 3 +++ 2 files changed, 31 insertions(+) (limited to 'src/widgets') diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index b4dc4ee17..25014160d 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -140,11 +140,13 @@ static void sp_lpetool_toolbox_prep(SPDesktop *desktop, GtkActionGroup* ma namespace { GtkWidget *sp_text_toolbox_new (SPDesktop *desktop); } +#if ENABLE_TASK_SUPPORT static void fireTaskChange( EgeSelectOneAction *act, SPDesktop *dt ) { gint selected = ege_select_one_action_get_active( act ); UXManager::getInstance()->setTask(dt, selected); } +#endif // ENABLE_TASK_SUPPORT using Inkscape::UI::ToolboxFactory; @@ -837,6 +839,7 @@ Glib::RefPtr create_or_fetch_actions( SPDesktop* desktop ) } } +#if ENABLE_TASK_SUPPORT if ( !mainActions->get_action("TaskSetAction") ) { GtkListStore* model = gtk_list_store_new( 2, G_TYPE_STRING, G_TYPE_STRING ); @@ -866,6 +869,7 @@ Glib::RefPtr create_or_fetch_actions( SPDesktop* desktop ) //ege_select_one_action_set_active( act, mode ); g_signal_connect_after( G_OBJECT(act), "changed", G_CALLBACK(fireTaskChange), desktop ); } +#endif // ENABLE_TASK_SUPPORT return mainActions; } @@ -1916,8 +1920,10 @@ setup_commands_toolbox(GtkWidget *toolbox, SPDesktop *desktop) " " " " " " +#if ENABLE_TASK_SUPPORT " " " " +#endif // ENABLE_TASK_SUPPORT " " ""; @@ -2246,6 +2252,28 @@ void setup_snap_toolbox(GtkWidget *toolbox, SPDesktop *desktop) "/toolbox/secondary" ); } +Glib::ustring ToolboxFactory::getToolboxName(GtkWidget* toolbox) +{ + Glib::ustring name; + BarId id = static_cast( GPOINTER_TO_INT(g_object_get_data(G_OBJECT(toolbox), BAR_ID_KEY)) ); + switch(id) { + case BAR_TOOL: + name = "ToolToolbar"; + break; + case BAR_AUX: + name = "AuxToolbar"; + break; + case BAR_COMMANDS: + name = "CommandsToolbar"; + break; + case BAR_SNAP: + name = "SnapToolbar"; + break; + } + + return name; +} + void ToolboxFactory::updateSnapToolbox(SPDesktop *desktop, SPEventContext */*eventcontext*/, GtkWidget *toolbox) { g_assert(desktop != NULL); diff --git a/src/widgets/toolbox.h b/src/widgets/toolbox.h index b028dd0a9..2e4b2958a 100644 --- a/src/widgets/toolbox.h +++ b/src/widgets/toolbox.h @@ -7,6 +7,7 @@ * Authors: * Lauris Kaplinski * Frank Felfe + * Jon A. Cruz * * Copyright (C) 1999-2002 Authors * Copyright (C) 2001-2002 Ximian, Inc. @@ -36,6 +37,8 @@ public: static GtkWidget *createCommandsToolbox(); static GtkWidget *createSnapToolbox(); + static Glib::ustring getToolboxName(GtkWidget* toolbox); + static void updateSnapToolbox(SPDesktop *desktop, SPEventContext *eventcontext, GtkWidget *toolbox); static Inkscape::IconSize prefToSize(Glib::ustring const &path, int base = 0 ); -- cgit v1.2.3 From 6b0bd0122093b8ea4a3a91bf25d1606ac429cb56 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Mon, 11 Jan 2010 01:09:52 -0800 Subject: Implemented dynamic repositioning of toolboxes. (bzr r8968) --- src/widgets/desktop-widget.cpp | 54 ++++++++++++++++++++++++++++++++++++------ src/widgets/desktop-widget.h | 3 +++ src/widgets/toolbox.cpp | 2 ++ 3 files changed, 52 insertions(+), 7 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index f70ade5a3..6655df3eb 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -292,7 +292,6 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) GtkWidget *tbl; GtkWidget *canvas_tbl; - GtkWidget *hbox; GtkWidget *eventbox; GtkStyle *style; @@ -323,25 +322,25 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) gtk_box_pack_end( GTK_BOX( dtw->vbox ), GTK_WIDGET(dtw->panels->gobj()), FALSE, TRUE, 0 ); } - hbox = gtk_hbox_new (FALSE, 0); - gtk_box_pack_end (GTK_BOX (dtw->vbox), hbox, TRUE, TRUE, 0); - gtk_widget_show (hbox); + dtw->hbox = gtk_hbox_new(FALSE, 0); + gtk_box_pack_end( GTK_BOX (dtw->vbox), dtw->hbox, TRUE, TRUE, 0 ); + gtk_widget_show(dtw->hbox); dtw->aux_toolbox = ToolboxFactory::createAuxToolbox(); gtk_box_pack_end (GTK_BOX (dtw->vbox), dtw->aux_toolbox, FALSE, TRUE, 0); dtw->snap_toolbox = ToolboxFactory::createSnapToolbox(); ToolboxFactory::setOrientation( dtw->snap_toolbox, GTK_ORIENTATION_VERTICAL ); - gtk_box_pack_end (GTK_BOX (hbox), dtw->snap_toolbox, FALSE, TRUE, 0); + gtk_box_pack_end( GTK_BOX(dtw->hbox), dtw->snap_toolbox, FALSE, TRUE, 0 ); dtw->commands_toolbox = ToolboxFactory::createCommandsToolbox(); gtk_box_pack_end (GTK_BOX (dtw->vbox), dtw->commands_toolbox, FALSE, TRUE, 0); dtw->tool_toolbox = ToolboxFactory::createToolToolbox(); - gtk_box_pack_start (GTK_BOX (hbox), dtw->tool_toolbox, FALSE, TRUE, 0); + gtk_box_pack_start( GTK_BOX(dtw->hbox), dtw->tool_toolbox, FALSE, TRUE, 0 ); tbl = gtk_table_new (2, 3, FALSE); - gtk_box_pack_start (GTK_BOX (hbox), tbl, TRUE, TRUE, 1); + gtk_box_pack_start( GTK_BOX(dtw->hbox), tbl, TRUE, TRUE, 1 ); canvas_tbl = gtk_table_new (3, 3, FALSE); @@ -1341,6 +1340,47 @@ SPDesktopWidget::isToolboxButtonActive (const gchar* id) return isActive; } +void SPDesktopWidget::setToolboxPosition(Glib::ustring const& id, GtkPositionType pos) +{ + // Note - later on these won't be individual member variables. + GtkWidget* toolbox = 0; + if (id == "ToolToolbar") { + toolbox = tool_toolbox; + } else if (id == "AuxToolbar") { + toolbox = aux_toolbox; + } else if (id == "CommandsToolbar") { + toolbox = commands_toolbox; + } else if (id == "SnapToolbar") { + toolbox = snap_toolbox; + } + + + if (toolbox) { + switch(pos) { + case GTK_POS_TOP: + case GTK_POS_BOTTOM: + if ( gtk_widget_is_ancestor(toolbox, hbox) ) { + gtk_widget_reparent( toolbox, vbox ); + gtk_box_set_child_packing(GTK_BOX(vbox), toolbox, FALSE, TRUE, 0, GTK_PACK_START); + } + ToolboxFactory::setOrientation(toolbox, GTK_ORIENTATION_HORIZONTAL); + break; + case GTK_POS_LEFT: + case GTK_POS_RIGHT: + if ( !gtk_widget_is_ancestor(toolbox, hbox) ) { + gtk_widget_reparent( toolbox, hbox ); + gtk_box_set_child_packing(GTK_BOX(hbox), toolbox, FALSE, TRUE, 0, GTK_PACK_START); + if (pos == GTK_POS_LEFT) { + gtk_box_reorder_child( GTK_BOX(hbox), toolbox, 0 ); + } + } + ToolboxFactory::setOrientation(toolbox, GTK_ORIENTATION_VERTICAL); + break; + } + } +} + + SPViewWidget *sp_desktop_widget_new( SPNamedView *namedview ) { SPDesktopWidget* dtw = SPDesktopWidget::createInstance(namedview); diff --git a/src/widgets/desktop-widget.h b/src/widgets/desktop-widget.h index c9bedb1ab..33f2a6ae7 100644 --- a/src/widgets/desktop-widget.h +++ b/src/widgets/desktop-widget.h @@ -76,6 +76,8 @@ struct SPDesktopWidget { // The root vbox of the window layout. GtkWidget *vbox; + GtkWidget *hbox; + GtkWidget *menubar, *statusbar; Inkscape::UI::Dialogs::SwatchesPanel *panels; @@ -218,6 +220,7 @@ struct SPDesktopWidget { void setToolboxAdjustmentValue (gchar const * id, double value); void setToolboxSelectOneValue (gchar const * id, gint value); bool isToolboxButtonActive (gchar const *id); + void setToolboxPosition(Glib::ustring const& id, GtkPositionType pos); void setCoordinateStatus(Geom::Point p); void requestCanvasUpdate(); void requestCanvasUpdateAndWait(); diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index 25014160d..c12896d70 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -102,6 +102,8 @@ #include "toolbox.h" +//#define ENABLE_TASK_SUPPORT 1 + using Inkscape::UnitTracker; using Inkscape::UI::UXManager; -- cgit v1.2.3 From 2341fc86741702524ffeb0164ecd1208766846fd Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Mon, 11 Jan 2010 21:35:47 -0800 Subject: Enabling now that some have confirmed proper functionality on 64-bit. (bzr r8970) --- src/widgets/toolbox.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/widgets') diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index c12896d70..4f61d9659 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -102,7 +102,7 @@ #include "toolbox.h" -//#define ENABLE_TASK_SUPPORT 1 +#define ENABLE_TASK_SUPPORT 1 using Inkscape::UnitTracker; using Inkscape::UI::UXManager; -- cgit v1.2.3 From 36c2b2febc6c0c11991849232c907d5573600935 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Tue, 12 Jan 2010 01:59:58 -0800 Subject: Initial cut of disabling floating windows on window managers with problems. (bzr r8971) --- src/widgets/desktop-widget.cpp | 1 + src/widgets/toolbox.cpp | 28 ++++++++++++++++++++-------- 2 files changed, 21 insertions(+), 8 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index 6655df3eb..32d682904 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -337,6 +337,7 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) gtk_box_pack_end (GTK_BOX (dtw->vbox), dtw->commands_toolbox, FALSE, TRUE, 0); dtw->tool_toolbox = ToolboxFactory::createToolToolbox(); + ToolboxFactory::setOrientation( dtw->tool_toolbox, GTK_ORIENTATION_VERTICAL ); gtk_box_pack_start( GTK_BOX(dtw->hbox), dtw->tool_toolbox, FALSE, TRUE, 0 ); tbl = gtk_table_new (2, 3, FALSE); diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index 4f61d9659..6724da1bb 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -118,7 +118,7 @@ enum BarId { }; #define BAR_ID_KEY "BarIdValue" - +#define HANDLE_POS_MARK "x-inkscape-pos" static void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder); static void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder); @@ -895,10 +895,15 @@ static GtkWidget* toolboxNewCommon( GtkWidget* tb, BarId id, GtkPositionType han gtk_widget_set_sensitive(tb, FALSE); - GtkWidget *hb = gtk_handle_box_new(); - gtk_handle_box_set_handle_position(GTK_HANDLE_BOX(hb), handlePos); - gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(hb), GTK_SHADOW_OUT); - gtk_handle_box_set_snap_edge(GTK_HANDLE_BOX(hb), GTK_POS_LEFT); + GtkWidget *hb = 0; + if ( UXManager::getInstance()->isFloatWindowProblem() ) { + hb = gtk_event_box_new(); // A simple, neutral container. + } else { + hb = gtk_handle_box_new(); + gtk_handle_box_set_handle_position(GTK_HANDLE_BOX(hb), handlePos); + gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(hb), GTK_SHADOW_OUT); + gtk_handle_box_set_snap_edge(GTK_HANDLE_BOX(hb), GTK_POS_LEFT); + } gtk_container_add(GTK_CONTAINER(hb), tb); gtk_widget_show(GTK_WIDGET(tb)); @@ -906,8 +911,10 @@ static GtkWidget* toolboxNewCommon( GtkWidget* tb, BarId id, GtkPositionType han sigc::connection* conn = new sigc::connection; g_object_set_data(G_OBJECT(hb), "event_context_connection", conn); - g_signal_connect(G_OBJECT(hb), "child_detached", G_CALLBACK(handlebox_detached), static_cast(0)); - g_signal_connect(G_OBJECT(hb), "child_attached", G_CALLBACK(handlebox_attached), static_cast(0)); + if ( GTK_IS_HANDLE_BOX(hb) ) { + g_signal_connect(G_OBJECT(hb), "child_detached", G_CALLBACK(handlebox_detached), static_cast(0)); + g_signal_connect(G_OBJECT(hb), "child_attached", G_CALLBACK(handlebox_attached), static_cast(0)); + } gpointer val = GINT_TO_POINTER(id); g_object_set_data(G_OBJECT(hb), BAR_ID_KEY, val); @@ -1653,6 +1660,9 @@ static void setupToolboxCommon( GtkWidget *toolbox, // g_message("GRABBING ORIENTATION [%s]", toolbarName); GtkPositionType pos = gtk_handle_box_get_handle_position(GTK_HANDLE_BOX(toolbox)); orientation = ((pos == GTK_POS_LEFT) || (pos == GTK_POS_RIGHT)) ? GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL; + } else { + GtkPositionType pos = static_cast(GPOINTER_TO_INT(g_object_get_data( G_OBJECT(toolbox), HANDLE_POS_MARK ))); + orientation = ((pos == GTK_POS_LEFT) || (pos == GTK_POS_RIGHT)) ? GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL; } gtk_toolbar_set_orientation(GTK_TOOLBAR(toolBar), orientation); gtk_toolbar_set_show_arrow(GTK_TOOLBAR(toolBar), TRUE); @@ -1706,10 +1716,12 @@ void ToolboxFactory::setOrientation(GtkWidget* toolbox, GtkOrientation orientati } g_list_free(children); } else { + // The call is being made before the toolbox proper has been setup. if (GTK_IS_HANDLE_BOX(toolbox)) { handleBox = GTK_HANDLE_BOX(toolbox); + } else { + g_object_set_data(G_OBJECT(toolbox), HANDLE_POS_MARK, GINT_TO_POINTER(pos)); } - // The call is being made before the toolbox proper has been setup. } } else if (GTK_IS_TOOLBAR(child)) { GtkToolbar* toolbar = GTK_TOOLBAR(child); -- cgit v1.2.3 From 8eb76a64895afea27e6975977437ab6be981bde5 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Tue, 12 Jan 2010 23:29:06 -0800 Subject: Adding a 'widescreen' task. (bzr r8972) --- src/widgets/toolbox.cpp | 63 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 50 insertions(+), 13 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index 6724da1bb..8b8ea1a01 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -858,6 +858,12 @@ Glib::RefPtr create_or_fetch_actions( SPDesktop* desktop ) 1, _("Set the custom task"), -1 ); + gtk_list_store_append( model, &iter ); + gtk_list_store_set( model, &iter, + 0, _("Wide"), + 1, _("Setup for widescreen work"), + -1 ); + EgeSelectOneAction* act = ege_select_one_action_new( "TaskSetAction", _("Task"), (""), NULL, GTK_TREE_MODEL(model) ); g_object_set( act, "short_label", _("Task:"), NULL ); mainActions->add(Glib::wrap(GTK_ACTION(act))); @@ -1677,34 +1683,63 @@ static void setupToolboxCommon( GtkWidget *toolbox, gtk_container_add( GTK_CONTAINER(toolbox), toolBar ); } +#define noDUMP_DETAILS 1 + void ToolboxFactory::setOrientation(GtkWidget* toolbox, GtkOrientation orientation) { - //g_message("Set orientation for %p to be %d", toolbox, orientation); - //GType type = GTK_WIDGET_TYPE(toolbox); - //g_message(" [%s]", g_type_name(type)); - //g_message(" %p", g_object_get_data(G_OBJECT(toolbox), BAR_ID_KEY)); +#if DUMP_DETAILS + g_message("Set orientation for %p to be %d", toolbox, orientation); + GType type = GTK_WIDGET_TYPE(toolbox); + g_message(" [%s]", g_type_name(type)); + g_message(" %p", g_object_get_data(G_OBJECT(toolbox), BAR_ID_KEY)); +#endif GtkPositionType pos = (orientation == GTK_ORIENTATION_HORIZONTAL) ? GTK_POS_LEFT : GTK_POS_TOP; GtkHandleBox* handleBox = 0; if (GTK_IS_BIN(toolbox)) { - //g_message(" is a BIN"); +#if DUMP_DETAILS + g_message(" is a BIN"); +#endif // DUMP_DETAILS GtkWidget* child = gtk_bin_get_child(GTK_BIN(toolbox)); if (child) { - //GType type2 = GTK_WIDGET_TYPE(child); - //g_message(" child [%s]", g_type_name(type2)); +#if DUMP_DETAILS + GType type2 = GTK_WIDGET_TYPE(child); + g_message(" child [%s]", g_type_name(type2)); +#endif // DUMP_DETAILS if (GTK_IS_BOX(child)) { - //g_message(" is a BOX"); +#if DUMP_DETAILS + g_message(" is a BOX"); +#endif // DUMP_DETAILS GList* children = gtk_container_get_children(GTK_CONTAINER(child)); - if (children && children->data) { - //GtkWidget* child2 = GTK_WIDGET(children->data); - //GType type3 = GTK_WIDGET_TYPE(child2); - //g_message(" child [%s]", g_type_name(type3)); - g_message("need to add dynamic switch"); + if (children) { for (GList* curr = children; curr; curr = g_list_next(curr)) { GtkWidget* child2 = GTK_WIDGET(curr->data); +#if DUMP_DETAILS + GType type3 = GTK_WIDGET_TYPE(child2); + g_message(" child2 [%s]", g_type_name(type3)); +#endif // DUMP_DETAILS + + if (GTK_IS_CONTAINER(child2)) { + GList* children2 = gtk_container_get_children(GTK_CONTAINER(child2)); + if (children2) { + for (GList* curr2 = children2; curr2; curr2 = g_list_next(curr2)) { + GtkWidget* child3 = GTK_WIDGET(curr2->data); +#if DUMP_DETAILS + GType type4 = GTK_WIDGET_TYPE(child3); + g_message(" child3 [%s]", g_type_name(type4)); +#endif // DUMP_DETAILS + if (GTK_IS_TOOLBAR(child3)) { + GtkToolbar* childBar = GTK_TOOLBAR(child3); + gtk_toolbar_set_orientation(childBar, orientation); + } + } + g_list_free(children2); + } + } + if (GTK_IS_TOOLBAR(child2)) { GtkToolbar* childBar = GTK_TOOLBAR(child2); @@ -1712,6 +1747,8 @@ void ToolboxFactory::setOrientation(GtkWidget* toolbox, GtkOrientation orientati if (GTK_IS_HANDLE_BOX(toolbox)) { handleBox = GTK_HANDLE_BOX(toolbox); } + } else { + g_message("need to add dynamic switch"); } } g_list_free(children); -- cgit v1.2.3 From dd3076a51d8a53223c771a39fa5f976db0c85af5 Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Thu, 14 Jan 2010 09:42:20 +0100 Subject: Implement segment weld to make segment join similar to node join (bzr r8846.2.12) --- src/widgets/toolbox.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/widgets') diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index bb13bfdad..e3d309c47 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -1061,7 +1061,7 @@ void sp_node_path_edit_join_segment(void) { InkNodeTool *nt = get_node_tool(); - if (nt) nt->_multipath->joinSegment(); + if (nt) nt->_multipath->joinSegments(); } void -- cgit v1.2.3 From 13b341b68636dbc621daf94f6efa229489b7fd70 Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Thu, 14 Jan 2010 18:45:20 +0100 Subject: * Add "show transform handles" toggle button. * Transform handle mode switching similar to selector tool, when node transform handles are visible. (bzr r8846.2.18) --- src/widgets/toolbox.cpp | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index 00f83cdbd..e4a585fb3 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -282,6 +282,8 @@ static gchar const * ui_descr = " " " " + " " + " " " " " " " " @@ -299,9 +301,9 @@ static gchar const * ui_descr = " " " " " " - " " - " " - " " + //" " + //" " + //" " " " " " " " @@ -1027,7 +1029,6 @@ static InkNodeTool *get_node_tool() return static_cast(ec); } - void sp_node_path_edit_add(void) { @@ -1112,6 +1113,12 @@ sp_node_path_edit_auto(void) if (nt) nt->_multipath->setNodeType(Inkscape::UI::NODE_AUTO); } +static void toggle_show_transform_handles (GtkToggleAction *act, gpointer /*data*/) { + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + bool show = gtk_toggle_action_get_active( act ); + prefs->setBool("/tools/nodes/show_transform_handles", show); +} + static void toggle_show_handles (GtkToggleAction *act, gpointer /*data*/) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); bool show = gtk_toggle_action_get_active( act ); @@ -1390,12 +1397,23 @@ static void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions gtk_action_group_add_action( mainActions, GTK_ACTION(inky) ); } + { + InkToggleAction* act = ink_toggle_action_new( "NodesShowTransformHandlesAction", + _("Show Transform Handles"), + _("Show node transformation handles"), + "node-transform", + secondarySize ); + gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); + g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_show_transform_handles), desktop ); + gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/nodes/show_transform_handles", false) ); + } + { InkToggleAction* act = ink_toggle_action_new( "NodesShowHandlesAction", _("Show Handles"), _("Show the Bezier handles of selected nodes"), INKSCAPE_ICON_SHOW_NODE_HANDLES, - Inkscape::ICON_SIZE_DECORATION ); + secondarySize ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_show_handles), desktop ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/nodes/show_handles", true) ); @@ -1406,7 +1424,7 @@ static void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions _("Show Outline"), _("Show the outline of the path"), INKSCAPE_ICON_SHOW_PATH_OUTLINE, - Inkscape::ICON_SIZE_DECORATION ); + secondarySize ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_show_helperpath), desktop ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/nodes/show_outline", false) ); @@ -1417,7 +1435,7 @@ static void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions _("Next path effect parameter"), _("Show next path effect parameter for editing"), INKSCAPE_ICON_PATH_EFFECT_PARAMETER_NEXT, - Inkscape::ICON_SIZE_DECORATION ); + secondarySize ); g_signal_connect_after( G_OBJECT(inky), "activate", G_CALLBACK(sp_node_path_edit_nextLPEparam), desktop ); gtk_action_group_add_action( mainActions, GTK_ACTION(inky) ); g_object_set_data( holder, "nodes_lpeedit", inky); @@ -1428,7 +1446,7 @@ static void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions _("Edit clipping paths"), _("Show editing controls for clipping paths of selected objects"), INKSCAPE_ICON_PATH_CLIP_EDIT, - Inkscape::ICON_SIZE_DECORATION ); + secondarySize ); gtk_action_group_add_action( mainActions, GTK_ACTION(inky) ); g_signal_connect_after( G_OBJECT(inky), "toggled", G_CALLBACK(toggle_edit_clip), desktop ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(inky), prefs->getBool("/tools/nodes/edit_clipping_paths") ); @@ -1439,7 +1457,7 @@ static void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions _("Edit masks"), _("Show editing controls for masks of selected objects"), INKSCAPE_ICON_PATH_MASK_EDIT, - Inkscape::ICON_SIZE_DECORATION ); + secondarySize ); gtk_action_group_add_action( mainActions, GTK_ACTION(inky) ); g_signal_connect_after( G_OBJECT(inky), "toggled", G_CALLBACK(toggle_edit_mask), desktop ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(inky), prefs->getBool("/tools/nodes/edit_masks") ); -- cgit v1.2.3 From 2ab01d69f9d427bdf3536e1508a465372cd040c6 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Thu, 14 Jan 2010 17:02:46 -0800 Subject: Warning cleanup. (bzr r8981) --- src/widgets/toolbox.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index e4a585fb3..e37e1f828 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -1135,13 +1135,13 @@ void sp_node_path_edit_nextLPEparam (GtkAction */*act*/, gpointer data) { sp_selection_next_patheffect_param( reinterpret_cast(data) ); } -void toggle_edit_clip (GtkToggleAction *act, gpointer data) { +void toggle_edit_clip (GtkToggleAction *act, gpointer /*data*/) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); bool edit = gtk_toggle_action_get_active( act ); prefs->setBool("/tools/nodes/edit_clipping_paths", edit); } -void toggle_edit_mask (GtkToggleAction *act, gpointer data) { +void toggle_edit_mask (GtkToggleAction *act, gpointer /*data*/) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); bool edit = gtk_toggle_action_get_active( act ); prefs->setBool("/tools/nodes/edit_masks", edit); -- cgit v1.2.3 From ce334fd6b589cb8a9c847ba194d589136403f7db Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Thu, 14 Jan 2010 23:43:09 -0800 Subject: Correcting statements collapsed to a single line. (bzr r8985) --- src/widgets/toolbox.cpp | 48 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 12 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index e37e1f828..f17686e5e 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -1033,84 +1033,108 @@ void sp_node_path_edit_add(void) { InkNodeTool *nt = get_node_tool(); - if (nt) nt->_multipath->insertNodes(); + if (nt) { + nt->_multipath->insertNodes(); + } } void sp_node_path_edit_delete(void) { InkNodeTool *nt = get_node_tool(); - if (nt) nt->_multipath->deleteNodes(); + if (nt) { + nt->_multipath->deleteNodes(); + } } void sp_node_path_edit_delete_segment(void) { InkNodeTool *nt = get_node_tool(); - if (nt) nt->_multipath->deleteSegments(); + if (nt) { + nt->_multipath->deleteSegments(); + } } void sp_node_path_edit_break(void) { InkNodeTool *nt = get_node_tool(); - if (nt) nt->_multipath->breakNodes(); + if (nt) { + nt->_multipath->breakNodes(); + } } void sp_node_path_edit_join(void) { InkNodeTool *nt = get_node_tool(); - if (nt) nt->_multipath->joinNodes(); + if (nt) { + nt->_multipath->joinNodes(); + } } void sp_node_path_edit_join_segment(void) { InkNodeTool *nt = get_node_tool(); - if (nt) nt->_multipath->joinSegments(); + if (nt) { + nt->_multipath->joinSegments(); + } } void sp_node_path_edit_toline(void) { InkNodeTool *nt = get_node_tool(); - if (nt) nt->_multipath->setSegmentType(Inkscape::UI::SEGMENT_STRAIGHT); + if (nt) { + nt->_multipath->setSegmentType(Inkscape::UI::SEGMENT_STRAIGHT); + } } void sp_node_path_edit_tocurve(void) { InkNodeTool *nt = get_node_tool(); - if (nt) nt->_multipath->setSegmentType(Inkscape::UI::SEGMENT_CUBIC_BEZIER); + if (nt) { + nt->_multipath->setSegmentType(Inkscape::UI::SEGMENT_CUBIC_BEZIER); + } } void sp_node_path_edit_cusp(void) { InkNodeTool *nt = get_node_tool(); - if (nt) nt->_multipath->setNodeType(Inkscape::UI::NODE_CUSP); + if (nt) { + nt->_multipath->setNodeType(Inkscape::UI::NODE_CUSP); + } } void sp_node_path_edit_smooth(void) { InkNodeTool *nt = get_node_tool(); - if (nt) nt->_multipath->setNodeType(Inkscape::UI::NODE_SMOOTH); + if (nt) { + nt->_multipath->setNodeType(Inkscape::UI::NODE_SMOOTH); + } } void sp_node_path_edit_symmetrical(void) { InkNodeTool *nt = get_node_tool(); - if (nt) nt->_multipath->setNodeType(Inkscape::UI::NODE_SYMMETRIC); + if (nt) { + nt->_multipath->setNodeType(Inkscape::UI::NODE_SYMMETRIC); + } } void sp_node_path_edit_auto(void) { InkNodeTool *nt = get_node_tool(); - if (nt) nt->_multipath->setNodeType(Inkscape::UI::NODE_AUTO); + if (nt) { + nt->_multipath->setNodeType(Inkscape::UI::NODE_AUTO); + } } static void toggle_show_transform_handles (GtkToggleAction *act, gpointer /*data*/) { -- cgit v1.2.3 From e730fc12039e5a4218ab3f1d5609617b93e422a1 Mon Sep 17 00:00:00 2001 From: buliabyak <> Date: Thu, 21 Jan 2010 19:50:15 -0400 Subject: disable softproofing if no get display id ONLY if source profile is to be taken from display; add statusbar messages; string edit (bzr r9012) --- src/widgets/desktop-widget.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index 32d682904..ab440595f 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -532,8 +532,10 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) dtw->_tracker = ege_color_prof_tracker_new(GTK_WIDGET(dtw->layer_selector->gobj())); #if ENABLE_LCMS - { + bool fromDisplay = prefs->getBool( "/options/displayprofile/from_display"); + if ( fromDisplay ) { Glib::ustring id = Inkscape::colorprofile_get_display_id( 0, 0 ); + bool enabled = false; if ( dtw->canvas->cms_key ) { *(dtw->canvas->cms_key) = id; @@ -795,6 +797,11 @@ void cms_adjust_toggled( GtkWidget */*button*/, gpointer data ) dtw->requestCanvasUpdate(); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); prefs->setBool("/options/displayprofile/enable", down); + if (down) { + dtw->setMessage (Inkscape::NORMAL_MESSAGE, _("Color-managed display is enabled in this window")); + } else { + dtw->setMessage (Inkscape::NORMAL_MESSAGE, _("Color-managed display is disabled in this window")); + } } #endif // ENABLE_LCMS } @@ -905,8 +912,8 @@ SPDesktopWidget::shutdown() GTK_MESSAGE_WARNING, GTK_BUTTONS_NONE, _("The file \"%s\" was saved with a format (%s) that may cause data loss!\n\n" - "Do you want to save this file as an Inkscape SVG?"), - SP_DOCUMENT_NAME(doc), + "Do you want to save this file as Inkscape SVG?"), + SP_DOCUMENT_NAME(doc)? SP_DOCUMENT_NAME(doc) : "Unnamed", SP_MODULE_KEY_OUTPUT_SVG_INKSCAPE); // fix for bug 1767940: GTK_WIDGET_UNSET_FLAGS(GTK_WIDGET(GTK_MESSAGE_DIALOG(dialog)->label), GTK_CAN_FOCUS); -- cgit v1.2.3 From 5dd8cdca09854551ec8c1003d3210e710d0ce345 Mon Sep 17 00:00:00 2001 From: Diederik van Lierop Date: Fri, 19 Feb 2010 23:33:27 +0100 Subject: Noop: removing and updating comments, fixing indentation (bzr r9101) --- src/widgets/icon.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/widgets') diff --git a/src/widgets/icon.cpp b/src/widgets/icon.cpp index 743502d27..5d91d3532 100644 --- a/src/widgets/icon.cpp +++ b/src/widgets/icon.cpp @@ -1115,6 +1115,26 @@ static guchar *load_svg_pixels(gchar const *name, /* Create ArenaItem and set transform */ unsigned visionkey = sp_item_display_key_new(1); /* fixme: Memory manage root if needed (Lauris) */ + // This needs to be fixed indeed; this leads to a memory leak of a few megabytes these days + // because shapes are being rendered which are not being freed + // Valgrind output: + /*==7014== 1,548,344 bytes in 599 blocks are possibly lost in loss record 20,361 of 20,362 + ==7014== at 0x4A05974: operator new(unsigned long) (vg_replace_malloc.c:220) + ==7014== by 0x4F1015: __gnu_cxx::new_allocator::allocate(unsigned long, void const*) (new_allocator.h:89) + ==7014== by 0x4F02AC: std::_Vector_base >::_M_allocate(unsigned long) (stl_vector.h:140) + ==7014== by 0xCF62D7: std::vector >::_M_fill_insert(__gnu_cxx::__normal_iterator > >, unsigned long, Shape::point_data const&) (vector.tcc:414) + ==7014== by 0xCF4D45: std::vector >::insert(__gnu_cxx::__normal_iterator > >, unsigned long, Shape::point_data const&) (stl_vector.h:851) + ==7014== by 0xCF3DCD: std::vector >::resize(unsigned long, Shape::point_data) (stl_vector.h:557) + ==7014== by 0xCEA771: Shape::AddPoint(Geom::Point) (Shape.cpp:326) + ==7014== by 0xD0F413: Shape::ConvertToShape(Shape*, fill_typ, bool) (ShapeSweep.cpp:257) + ==7014== by 0x5ECD4F: nr_arena_shape_update_stroke(NRArenaShape*, NRGC*, NRRectL*) (nr-arena-shape.cpp:651) + ==7014== by 0x5EE0DA: nr_arena_shape_render(_cairo*, NRArenaItem*, NRRectL*, NRPixBlock*, unsigned int) (nr-arena-shape.cpp:862) + ==7014== by 0x5E72FB: nr_arena_item_invoke_render(_cairo*, NRArenaItem*, NRRectL const*, NRPixBlock*, unsigned int) (nr-arena-item.cpp:578) + ==7014== by 0x5E9DDE: nr_arena_group_render(_cairo*, NRArenaItem*, NRRectL*, NRPixBlock*, unsigned int) (nr-arena-group.cpp:228) + ==7014== by 0x5E72FB: nr_arena_item_invoke_render(_cairo*, NRArenaItem*, NRRectL const*, NRPixBlock*, unsigned int) (nr-arena-item.cpp:578) + ==7014== by 0x5E9DDE: nr_arena_group_render(_cairo*, NRArenaItem*, NRRectL*, NRPixBlock*, unsigned int) (nr-arena-group.cpp:228) + ==7014== by 0x5E72FB: nr_arena_item_invoke_render(_cairo*, NRArenaItem*, NRRectL const*, NRPixBlock*, unsigned int) (nr-arena-item.cpp:578) + */ root = sp_item_invoke_show( SP_ITEM(SP_DOCUMENT_ROOT(doc)), arena, visionkey, SP_ITEM_SHOW_DISPLAY ); -- cgit v1.2.3 From a78a295c3c2df3ee1ff480302a2c2bbb4d39c4b4 Mon Sep 17 00:00:00 2001 From: "Arcadie M. Cracan" Date: Sun, 21 Feb 2010 12:40:13 +0200 Subject: Disabled unfinished connection point edit mode. Added inkscape:connection-start-point, inkscape:connection-end-point attributes for connector endpoints. This corrects the previous approach making drawings created in 0.48 version compatible with earlier versions (new attributes are silently ignored). (bzr r9103.1.1) --- src/widgets/toolbox.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index f17686e5e..f81702f4f 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -499,7 +499,7 @@ static gchar const * ui_descr = " " " " - " " +// " " " " " " " " @@ -509,8 +509,8 @@ static gchar const * ui_descr = " " " " " " - " " - " " +// " " +// " " " " "" -- cgit v1.2.3 From fd703018ee505f643f866aa4e0cc3f1bebf7aa7d Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Mon, 1 Mar 2010 22:10:16 -0800 Subject: Cleanup on id access. (bzr r9127) --- src/widgets/gradient-vector.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/widgets') diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index c884604a2..0a53cfb3e 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -305,7 +305,7 @@ sp_gvs_rebuild_gui_full (SPGradientVectorSelector *gvs) GtkWidget *hb, *l; hb = gtk_hbox_new (FALSE, 4); gtk_widget_show (hb); - l = gtk_label_new (SP_OBJECT_ID (gr)); + l = gtk_label_new(gr->getId()); gtk_widget_show (l); gtk_misc_set_alignment (GTK_MISC (l), 1.0, 0.5); gtk_box_pack_start (GTK_BOX (hb), l, TRUE, TRUE, 0); -- cgit v1.2.3 From 669ba0151fefdfd7ed0d5dd54978698587b1e309 Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Wed, 3 Mar 2010 00:22:31 +0100 Subject: Implement a preference that determines whether deleting nodes preserves the shape (bzr r9130) --- src/widgets/toolbox.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index f81702f4f..8b12a7a5e 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -1043,7 +1043,8 @@ sp_node_path_edit_delete(void) { InkNodeTool *nt = get_node_tool(); if (nt) { - nt->_multipath->deleteNodes(); + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + nt->_multipath->deleteNodes(prefs->getBool("/tools/nodes/delete_preserves_shape", true)); } } @@ -7645,8 +7646,7 @@ static void sp_connector_toolbox_prep( SPDesktop *desktop, GtkActionGroup* mainA gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act), ( tbuttonstate ? TRUE : FALSE )); g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_directed_graph_layout_toggled), holder ); - sigc::connection *connection = new sigc::connection(sp_desktop_selection(desktop)->connectChanged(sigc::bind(sigc::ptr_fun(sp_connector_toolbox_selection_changed), (GObject *)holder)) - ); + sp_desktop_selection(desktop)->connectChanged(sigc::bind(sigc::ptr_fun(sp_connector_toolbox_selection_changed), (GObject *)holder)); } // Avoid overlaps toggle button -- cgit v1.2.3 From 4093b6dc1f07f39ad53db2dced0bab7a734ce568 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Thu, 4 Mar 2010 22:13:58 -0800 Subject: Updated gradient toolba to not see "solid" one-stops as gradients. (bzr r9147) --- src/widgets/gradient-toolbar.cpp | 154 ++++++++++++++++++++++----------------- 1 file changed, 87 insertions(+), 67 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/gradient-toolbar.cpp b/src/widgets/gradient-toolbar.cpp index ddd9fd96a..784e3f20f 100644 --- a/src/widgets/gradient-toolbar.cpp +++ b/src/widgets/gradient-toolbar.cpp @@ -164,8 +164,7 @@ gr_prepare_label (SPObject *obj) return g_strdup_printf ("%s", id); } -GtkWidget * -gr_vector_list (SPDesktop *desktop, bool selection_empty, SPGradient *gr_selected, bool gr_multi) +GtkWidget *gr_vector_list(SPDesktop *desktop, bool selection_empty, SPGradient *gr_selected, bool gr_multi) { SPDocument *document = sp_desktop_document (desktop); @@ -175,7 +174,8 @@ gr_vector_list (SPDesktop *desktop, bool selection_empty, SPGradient *gr_selecte GSList *gl = NULL; const GSList *gradients = sp_document_get_resource_list (document, "gradient"); for (const GSList *i = gradients; i != NULL; i = i->next) { - if (SP_GRADIENT_HAS_STOPS (i->data)) { + SPGradient *grad = SP_GRADIENT(i->data); + if (SP_GRADIENT_HAS_STOPS(grad) && !grad->isSolid()) { gl = g_slist_prepend (gl, i->data); } } @@ -185,6 +185,7 @@ gr_vector_list (SPDesktop *desktop, bool selection_empty, SPGradient *gr_selecte guint idx = 0; if (!gl) { + // The document has no gradients GtkWidget *l = gtk_label_new(""); gtk_label_set_markup (GTK_LABEL(l), _("No gradients")); GtkWidget *i = gtk_menu_item_new (); @@ -194,6 +195,7 @@ gr_vector_list (SPDesktop *desktop, bool selection_empty, SPGradient *gr_selecte gtk_menu_append (GTK_MENU (m), i); gtk_widget_set_sensitive (om, FALSE); } else if (selection_empty) { + // Document has gradients, but nothing is currently selected. GtkWidget *l = gtk_label_new(""); gtk_label_set_markup (GTK_LABEL(l), _("Nothing selected")); GtkWidget *i = gtk_menu_item_new (); @@ -268,29 +270,37 @@ gr_vector_list (SPDesktop *desktop, bool selection_empty, SPGradient *gr_selecte } -void -gr_read_selection (Inkscape::Selection *selection, GrDrag *drag, SPGradient **gr_selected, bool *gr_multi, SPGradientSpread *spr_selected, bool *spr_multi) +void gr_read_selection( Inkscape::Selection *selection, + GrDrag *drag, + SPGradient *&gr_selected, + bool &gr_multi, + SPGradientSpread &spr_selected, + bool &spr_multi ) { if (drag && drag->selected) { // GRADIENTFIXME: make this work for more than one selected dragger? - GrDragger *dragger = (GrDragger*) drag->selected->data; - for (GSList const* i = dragger->draggables; i != NULL; i = i->next) { // for all draggables of dragger - GrDraggable *draggable = (GrDraggable *) i->data; - SPGradient *gradient = sp_item_gradient_get_vector (draggable->item, draggable->fill_or_stroke); - SPGradientSpread spread = sp_item_gradient_get_spread (draggable->item, draggable->fill_or_stroke); + GrDragger *dragger = static_cast(drag->selected->data); + for (GSList const* i = dragger->draggables; i; i = i->next) { // for all draggables of dragger + GrDraggable *draggable = static_cast(i->data); + SPGradient *gradient = sp_item_gradient_get_vector(draggable->item, draggable->fill_or_stroke); + SPGradientSpread spread = sp_item_gradient_get_spread(draggable->item, draggable->fill_or_stroke); + + if (gradient && gradient->isSolid()) { + gradient = 0; + } - if (gradient != *gr_selected) { - if (*gr_selected != NULL) { - *gr_multi = true; + if (gradient && (gradient != gr_selected)) { + if (gr_selected) { + gr_multi = true; } else { - *gr_selected = gradient; + gr_selected = gradient; } } - if (spread != *spr_selected) { - if (*spr_selected != INT_MAX) { - *spr_multi = true; + if (spread != spr_selected) { + if (spr_selected != INT_MAX) { + spr_multi = true; } else { - *spr_selected = spread; + spr_selected = spread; } } } @@ -298,48 +308,59 @@ gr_read_selection (Inkscape::Selection *selection, GrDrag *drag, SPGradient **gr } // If no selected dragger, read desktop selection - for (GSList const* i = selection->itemList(); i != NULL; i = i->next) { + for (GSList const* i = selection->itemList(); i; i = i->next) { SPItem *item = SP_ITEM(i->data); SPStyle *style = SP_OBJECT_STYLE (item); if (style && (style->fill.isPaintserver())) { SPObject *server = SP_OBJECT_STYLE_FILL_SERVER (item); - if (SP_IS_GRADIENT (server)) { + if (SP_IS_GRADIENT(server)) { SPGradient *gradient = sp_gradient_get_vector (SP_GRADIENT (server), false); SPGradientSpread spread = sp_gradient_get_spread (SP_GRADIENT (server)); - if (gradient != *gr_selected) { - if (*gr_selected != NULL) { - *gr_multi = true; + + if (gradient && gradient->isSolid()) { + gradient = 0; + } + + if (gradient && (gradient != gr_selected)) { + if (gr_selected) { + gr_multi = true; } else { - *gr_selected = gradient; + gr_selected = gradient; } } - if (spread != *spr_selected) { - if (*spr_selected != INT_MAX) { - *spr_multi = true; + if (spread != spr_selected) { + if (spr_selected != INT_MAX) { + spr_multi = true; } else { - *spr_selected = spread; + spr_selected = spread; } } } } if (style && (style->stroke.isPaintserver())) { SPObject *server = SP_OBJECT_STYLE_STROKE_SERVER (item); - if (SP_IS_GRADIENT (server)) { + if (SP_IS_GRADIENT(server)) { SPGradient *gradient = sp_gradient_get_vector (SP_GRADIENT (server), false); SPGradientSpread spread = sp_gradient_get_spread (SP_GRADIENT (server)); - if (gradient != *gr_selected) { - if (*gr_selected != NULL) { - *gr_multi = true; + + if (gradient && gradient->isSolid()) { + gradient = 0; + + } + + if (gradient && (gradient != gr_selected)) { + if (gr_selected) { + gr_multi = true; } else { - *gr_selected = gradient; + gr_selected = gradient; } } - if (spread != *spr_selected) { - if (*spr_selected != INT_MAX) { - *spr_multi = true; + if (spread != spr_selected) { + if (spr_selected != INT_MAX) { + spr_multi = true; } else { - *spr_selected = spread; + spr_selected = spread; } } } @@ -347,41 +368,41 @@ gr_read_selection (Inkscape::Selection *selection, GrDrag *drag, SPGradient **gr } } -static void -gr_tb_selection_changed (Inkscape::Selection *, gpointer data) +static void gr_tb_selection_changed(Inkscape::Selection * /*selection*/, gpointer data) { - GtkWidget *widget = (GtkWidget *) data; - - SPDesktop *desktop = (SPDesktop *) g_object_get_data (G_OBJECT(widget), "desktop"); - if (!desktop) - return; + GtkWidget *widget = GTK_WIDGET(data); + + SPDesktop *desktop = static_cast(g_object_get_data(G_OBJECT(widget), "desktop")); + if (desktop) { + Inkscape::Selection *selection = sp_desktop_selection(desktop); // take from desktop, not from args + if (selection) { + SPEventContext *ev = sp_desktop_event_context(desktop); + + GtkWidget *om = (GtkWidget *) g_object_get_data(G_OBJECT(widget), "menu"); + if (om) { + gtk_widget_destroy(om); + om = 0; + } - Inkscape::Selection *selection = sp_desktop_selection (desktop); // take from desktop, not from args - if (!selection) - return; + SPGradient *gr_selected = 0; + bool gr_multi = false; - SPEventContext *ev = sp_desktop_event_context (desktop); + SPGradientSpread spr_selected = static_cast(INT_MAX); // meaning undefined + bool spr_multi = false; - GtkWidget *om = (GtkWidget *) g_object_get_data (G_OBJECT (widget), "menu"); - if (om) gtk_widget_destroy (om); + gr_read_selection(selection, ev ? ev->get_drag() : 0, gr_selected, gr_multi, spr_selected, spr_multi); - SPGradient *gr_selected = NULL; - bool gr_multi = false; + om = gr_vector_list(desktop, selection->isEmpty(), gr_selected, gr_multi); + g_object_set_data(G_OBJECT(widget), "menu", om); - SPGradientSpread spr_selected = (SPGradientSpread) INT_MAX; // meaning undefined - bool spr_multi = false; + GtkWidget *buttons = (GtkWidget *) g_object_get_data(G_OBJECT(widget), "buttons"); + gtk_widget_set_sensitive(buttons, (gr_selected && !gr_multi)); - gr_read_selection (selection, ev? ev->get_drag() : NULL, &gr_selected, &gr_multi, &spr_selected, &spr_multi); - - om = gr_vector_list (desktop, selection->isEmpty(), gr_selected, gr_multi); - g_object_set_data (G_OBJECT (widget), "menu", om); + gtk_box_pack_start(GTK_BOX(widget), om, TRUE, TRUE, 0); - GtkWidget *buttons = (GtkWidget *) g_object_get_data (G_OBJECT(widget), "buttons"); - gtk_widget_set_sensitive (buttons, (gr_selected && !gr_multi)); - - gtk_box_pack_start (GTK_BOX (widget), om, TRUE, TRUE, 0); - - gtk_widget_show_all (widget); + gtk_widget_show_all(widget); + } + } } static void @@ -431,8 +452,7 @@ gr_edit (GtkWidget */*button*/, GtkWidget *widget) } } -GtkWidget * -gr_change_widget (SPDesktop *desktop) +GtkWidget * gr_change_widget(SPDesktop *desktop) { Inkscape::Selection *selection = sp_desktop_selection (desktop); SPDocument *document = sp_desktop_document (desktop); @@ -446,7 +466,7 @@ gr_change_widget (SPDesktop *desktop) GtkTooltips *tt = gtk_tooltips_new(); - gr_read_selection (selection, ev? ev->get_drag() : NULL, &gr_selected, &gr_multi, &spr_selected, &spr_multi); + gr_read_selection (selection, ev? ev->get_drag() : 0, gr_selected, gr_multi, spr_selected, spr_multi); GtkWidget *widget = gtk_hbox_new(FALSE, FALSE); gtk_object_set_data(GTK_OBJECT(widget), "dtw", desktop->canvas); -- cgit v1.2.3 From 998e601fb0de79b7617fa9402eb36537041663c6 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Fri, 5 Mar 2010 22:31:33 -0800 Subject: New tab in Fill&Stroke dialog for swatch fills. (bzr r9153) --- src/widgets/fill-style.cpp | 30 +++++++++------ src/widgets/gradient-vector.cpp | 2 +- src/widgets/paint-selector.cpp | 74 ++++++++++++++++++++++++++++++++++--- src/widgets/paint-selector.h | 82 +++++++++++++++++++++++++++-------------- src/widgets/stroke-style.cpp | 8 +++- 5 files changed, 148 insertions(+), 48 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/fill-style.cpp b/src/widgets/fill-style.cpp index 5e9d30bcd..0b08f36b5 100644 --- a/src/widgets/fill-style.cpp +++ b/src/widgets/fill-style.cpp @@ -184,7 +184,7 @@ sp_fill_style_widget_update (SPWidget *spw) // create temporary style 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 = sp_desktop_query_style (SP_ACTIVE_DESKTOP, query, QUERY_STYLE_PROPERTY_FILL); + int result = sp_desktop_query_style (SP_ACTIVE_DESKTOP, query, QUERY_STYLE_PROPERTY_FILL); switch (result) { case QUERY_STYLE_NOTHING: @@ -196,12 +196,12 @@ sp_fill_style_widget_update (SPWidget *spw) case QUERY_STYLE_SINGLE: case QUERY_STYLE_MULTIPLE_AVERAGED: // TODO: treat this slightly differently, e.g. display "averaged" somewhere in paint selector - case QUERY_STYLE_MULTIPLE_SAME: + case QUERY_STYLE_MULTIPLE_SAME: { SPPaintSelectorMode pselmode = sp_style_determine_paint_selector_mode (query, true); sp_paint_selector_set_mode (psel, pselmode); - sp_paint_selector_set_fillrule (psel, query->fill_rule.computed == ART_WIND_RULE_NONZERO? + sp_paint_selector_set_fillrule (psel, query->fill_rule.computed == ART_WIND_RULE_NONZERO? SP_PAINT_SELECTOR_FILLRULE_NONZERO : SP_PAINT_SELECTOR_FILLRULE_EVENODD); if (query->fill.set && query->fill.isColor()) { @@ -210,7 +210,9 @@ sp_fill_style_widget_update (SPWidget *spw) SPPaintServer *server = SP_STYLE_FILL_SERVER (query); - if (SP_IS_LINEARGRADIENT (server)) { + if (server && server->isSwatch()) { + sp_paint_selector_set_swatch( psel, server ); + } else if (SP_IS_LINEARGRADIENT (server)) { SPGradient *vector = sp_gradient_get_vector (SP_GRADIENT (server), FALSE); sp_paint_selector_set_gradient_linear (psel, vector); @@ -279,7 +281,7 @@ sp_fill_style_widget_fillrule_changed ( SPPaintSelector */*psel*/, sp_repr_css_attr_unref (css); - sp_document_done (SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_FILL_STROKE, + sp_document_done (SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_FILL_STROKE, _("Change fill rule")); } @@ -305,8 +307,8 @@ sp_fill_style_widget_paint_dragged (SPPaintSelector *psel, SPWidget *spw) } if (g_object_get_data (G_OBJECT (spw), "local")) { - // previous local flag not cleared yet; - // this means dragged events come too fast, so we better skip this one to speed up display + // previous local flag not cleared yet; + // this means dragged events come too fast, so we better skip this one to speed up display // (it's safe to do this in any case) return; } @@ -319,7 +321,7 @@ sp_fill_style_widget_paint_dragged (SPPaintSelector *psel, SPWidget *spw) case SP_PAINT_SELECTOR_MODE_COLOR_CMYK: { sp_paint_selector_set_flat_color (psel, SP_ACTIVE_DESKTOP, "fill", "fill-opacity"); - sp_document_maybe_done (sp_desktop_document(SP_ACTIVE_DESKTOP), undo_label, SP_VERB_DIALOG_FILL_STROKE, + sp_document_maybe_done (sp_desktop_document(SP_ACTIVE_DESKTOP), undo_label, SP_VERB_DIALOG_FILL_STROKE, _("Set fill color")); g_object_set_data (G_OBJECT (spw), "local", GINT_TO_POINTER (TRUE)); // local change, do not update from selection break; @@ -381,7 +383,7 @@ sp_fill_style_widget_paint_changed ( SPPaintSelector *psel, sp_repr_css_attr_unref (css); - sp_document_done (document, SP_VERB_DIALOG_FILL_STROKE, + sp_document_done (document, SP_VERB_DIALOG_FILL_STROKE, _("Remove fill")); break; } @@ -462,7 +464,7 @@ sp_fill_style_widget_paint_changed ( SPPaintSelector *psel, sp_repr_css_attr_unref (css); - sp_document_done (document, SP_VERB_DIALOG_FILL_STROKE, + sp_document_done (document, SP_VERB_DIALOG_FILL_STROKE, _("Set gradient on fill")); } break; @@ -509,13 +511,17 @@ sp_fill_style_widget_paint_changed ( SPPaintSelector *psel, } // end if - sp_document_done (document, SP_VERB_DIALOG_FILL_STROKE, + sp_document_done (document, SP_VERB_DIALOG_FILL_STROKE, _("Set pattern on fill")); } // end if break; + case SP_PAINT_SELECTOR_MODE_SWATCH: + // TODO + break; + case SP_PAINT_SELECTOR_MODE_UNSET: if (items) { SPCSSAttr *css = sp_repr_css_attr_new (); @@ -524,7 +530,7 @@ sp_fill_style_widget_paint_changed ( SPPaintSelector *psel, sp_desktop_set_style (desktop, css); sp_repr_css_attr_unref (css); - sp_document_done (document, SP_VERB_DIALOG_FILL_STROKE, + sp_document_done (document, SP_VERB_DIALOG_FILL_STROKE, _("Unset fill")); } break; diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index 0a53cfb3e..8ffacb9f5 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -1170,7 +1170,7 @@ sp_gradient_vector_color_changed (SPColorSelector *csel, GtkObject *object) /* Set start parameters */ /* We rely on normalized vector, i.e. stops HAVE to exist */ - g_return_if_fail (sp_first_stop(ngr) != NULL); + g_return_if_fail(ngr->getFirstStop() != NULL); GtkOptionMenu *mnu = (GtkOptionMenu *)g_object_get_data (G_OBJECT(object), "stopmenu"); SPStop *stop = SP_STOP(g_object_get_data (G_OBJECT(gtk_menu_get_active (GTK_MENU(gtk_option_menu_get_menu (mnu)))), "stop")); diff --git a/src/widgets/paint-selector.cpp b/src/widgets/paint-selector.cpp index a101b9eeb..b91f24105 100644 --- a/src/widgets/paint-selector.cpp +++ b/src/widgets/paint-selector.cpp @@ -1,13 +1,16 @@ -#define __SP_PAINT_SELECTOR_C__ - /** \file * SPPaintSelector: Generic paint selector widget. */ /* - * Copyright (C) Lauris Kaplinski 2002 + * Authors: + * Lauris Kaplinski * bulia byak * John Cliff + * Jon A. Cruz + * + * Copyright (C) Lauris Kaplinski 2002 + * Copyright (C) 2010 Authors */ #define noSP_PS_VERBOSE @@ -80,6 +83,7 @@ static void sp_paint_selector_set_mode_none(SPPaintSelector *psel); static void sp_paint_selector_set_mode_color(SPPaintSelector *psel, SPPaintSelectorMode mode); static void sp_paint_selector_set_mode_gradient(SPPaintSelector *psel, SPPaintSelectorMode mode); static void sp_paint_selector_set_mode_pattern(SPPaintSelector *psel, SPPaintSelectorMode mode); +static void sp_paint_selector_set_mode_swatch(SPPaintSelector *psel, SPPaintSelectorMode mode); static void sp_paint_selector_set_mode_unset(SPPaintSelector *psel); @@ -187,6 +191,8 @@ sp_paint_selector_init(SPPaintSelector *psel) SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL, tt, _("Radial gradient")); psel->pattern = sp_paint_selector_style_button_add(psel, INKSCAPE_ICON_PAINT_PATTERN, SP_PAINT_SELECTOR_MODE_PATTERN, tt, _("Pattern")); + psel->swatch = sp_paint_selector_style_button_add(psel, INKSCAPE_ICON_PAINT_SWATCH, + SP_PAINT_SELECTOR_MODE_SWATCH, tt, _("Swatch")); psel->unset = sp_paint_selector_style_button_add(psel, INKSCAPE_ICON_PAINT_UNKNOWN, SP_PAINT_SELECTOR_MODE_UNSET, tt, _("Unset paint (make it undefined so it can be inherited)")); @@ -347,6 +353,9 @@ sp_paint_selector_set_mode(SPPaintSelector *psel, SPPaintSelectorMode mode) case SP_PAINT_SELECTOR_MODE_PATTERN: sp_paint_selector_set_mode_pattern(psel, mode); break; + case SP_PAINT_SELECTOR_MODE_SWATCH: + sp_paint_selector_set_mode_swatch(psel, mode); + break; case SP_PAINT_SELECTOR_MODE_UNSET: sp_paint_selector_set_mode_unset(psel); break; @@ -398,6 +407,14 @@ sp_paint_selector_set_color_alpha(SPPaintSelector *psel, SPColor const *color, f csel->base->setColorAlpha( *color, alpha ); } +void sp_paint_selector_set_swatch(SPPaintSelector *psel, SPPaintServer */*server*/ ) +{ +#ifdef SP_PS_VERBOSE + g_print("PaintSelector set SWATCH\n"); +#endif + sp_paint_selector_set_mode(psel, SP_PAINT_SELECTOR_MODE_SWATCH); +} + void sp_paint_selector_set_gradient_linear(SPPaintSelector *psel, SPGradient *vector) { @@ -722,6 +739,7 @@ sp_paint_selector_set_style_buttons(SPPaintSelector *psel, GtkWidget *active) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(psel->gradient), (active == psel->gradient)); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(psel->radial), (active == psel->radial)); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(psel->pattern), (active == psel->pattern)); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(psel->swatch), (active == psel->swatch)); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(psel->unset), (active == psel->unset)); } @@ -1039,6 +1057,49 @@ sp_paint_selector_get_pattern(SPPaintSelector *psel) return NULL; } +static void sp_paint_selector_set_mode_swatch(SPPaintSelector *psel, SPPaintSelectorMode mode) +{ + if (mode == SP_PAINT_SELECTOR_MODE_SWATCH) { + sp_paint_selector_set_style_buttons(psel, psel->swatch); // TODO swatch + } + + gtk_widget_set_sensitive(psel->style, TRUE); + + GtkWidget *tbl = NULL; + + if (psel->mode == SP_PAINT_SELECTOR_MODE_SWATCH){ + /* Already have pattern menu */ + tbl = (GtkWidget*)gtk_object_get_data(GTK_OBJECT(psel->selector), "swatch-selector"); + } else { + sp_paint_selector_clear_frame(psel); + + /* Create vbox */ + tbl = gtk_vbox_new(FALSE, 4); + gtk_widget_show(tbl); + + { + GtkWidget *hb = gtk_hbox_new(FALSE, 0); + GtkWidget *l = gtk_label_new(NULL); + gtk_label_set_markup(GTK_LABEL(l), _("Represents a swatch fill.")); + gtk_label_set_line_wrap(GTK_LABEL(l), true); + gtk_widget_set_size_request(l, 180, -1); + gtk_box_pack_start(GTK_BOX(hb), l, TRUE, TRUE, AUX_BETWEEN_BUTTON_GROUPS); + gtk_box_pack_start(GTK_BOX(tbl), hb, FALSE, FALSE, AUX_BETWEEN_BUTTON_GROUPS); + } + + gtk_widget_show_all(tbl); + + gtk_container_add(GTK_CONTAINER(psel->frame), tbl); + psel->selector = tbl; + gtk_object_set_data(GTK_OBJECT(psel->selector), "swatch-selector", tbl); + + gtk_frame_set_label(GTK_FRAME(psel->frame), _("Swatch fill")); + } +#ifdef SP_PS_VERBOSE + g_print("Swatch req\n"); +#endif +} + void sp_paint_selector_set_flat_color(SPPaintSelector *psel, SPDesktop *desktop, gchar const *color_property, gchar const *opacity_property) { @@ -1068,8 +1129,7 @@ sp_paint_selector_set_flat_color(SPPaintSelector *psel, SPDesktop *desktop, gcha sp_repr_css_attr_unref(css); } -SPPaintSelectorMode -sp_style_determine_paint_selector_mode(SPStyle *style, bool isfill) +SPPaintSelectorMode sp_style_determine_paint_selector_mode(SPStyle *style, bool isfill) { SPPaintSelectorMode mode = SP_PAINT_SELECTOR_MODE_UNSET; SPIPaint& target = isfill ? style->fill : style->stroke; @@ -1079,7 +1139,9 @@ sp_style_determine_paint_selector_mode(SPStyle *style, bool isfill) } else if ( target.isPaintserver() ) { SPPaintServer *server = isfill? SP_STYLE_FILL_SERVER(style) : SP_STYLE_STROKE_SERVER(style); - if (SP_IS_LINEARGRADIENT(server)) { + if (server && server->isSwatch()) { + mode = SP_PAINT_SELECTOR_MODE_SWATCH; + } else if (SP_IS_LINEARGRADIENT(server)) { mode = SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR; } else if (SP_IS_RADIALGRADIENT(server)) { mode = SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL; diff --git a/src/widgets/paint-selector.h b/src/widgets/paint-selector.h index de8bbf46a..82dee4d16 100644 --- a/src/widgets/paint-selector.h +++ b/src/widgets/paint-selector.h @@ -1,16 +1,22 @@ -#ifndef __SP_PAINT_SELECTOR_H__ -#define __SP_PAINT_SELECTOR_H__ +#ifndef SEEN_SP_PAINT_SELECTOR_H +#define SEEN_SP_PAINT_SELECTOR_H /** \file * Generic paint selector widget * + * Authors: + * Lauris + * Jon A. Cruz + * * Copyright (C) Lauris 2002 + * Copyright (C) 2010 Authors * */ #include #include "sp-gradient-spread.h" #include "sp-gradient-units.h" + class SPGradient; #define SP_TYPE_PAINT_SELECTOR (sp_paint_selector_get_type ()) @@ -26,53 +32,60 @@ class SPGradient; #include typedef enum { - SP_PAINT_SELECTOR_MODE_EMPTY, - SP_PAINT_SELECTOR_MODE_MULTIPLE, - SP_PAINT_SELECTOR_MODE_NONE, - SP_PAINT_SELECTOR_MODE_COLOR_RGB, - SP_PAINT_SELECTOR_MODE_COLOR_CMYK, - SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR, + SP_PAINT_SELECTOR_MODE_EMPTY, + SP_PAINT_SELECTOR_MODE_MULTIPLE, + SP_PAINT_SELECTOR_MODE_NONE, + SP_PAINT_SELECTOR_MODE_COLOR_RGB, + SP_PAINT_SELECTOR_MODE_COLOR_CMYK, + SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR, SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL, SP_PAINT_SELECTOR_MODE_PATTERN, + SP_PAINT_SELECTOR_MODE_SWATCH, SP_PAINT_SELECTOR_MODE_UNSET } SPPaintSelectorMode; typedef enum { - SP_PAINT_SELECTOR_FILLRULE_NONZERO, - SP_PAINT_SELECTOR_FILLRULE_EVENODD + SP_PAINT_SELECTOR_FILLRULE_NONZERO, + SP_PAINT_SELECTOR_FILLRULE_EVENODD } SPPaintSelectorFillRule; /// Generic paint selector widget struct SPPaintSelector { - GtkVBox vbox; + GtkVBox vbox; - guint update : 1; + guint update : 1; - SPPaintSelectorMode mode; + SPPaintSelectorMode mode; - GtkWidget *style; - GtkWidget *none, *solid, *gradient, *radial, *pattern, *unset; + GtkWidget *style; + GtkWidget *none; + GtkWidget *solid; + GtkWidget *gradient; + GtkWidget *radial; + GtkWidget *pattern; + GtkWidget *swatch; + GtkWidget *unset; - GtkWidget *fillrulebox; - GtkWidget *evenodd, *nonzero; + GtkWidget *fillrulebox; + GtkWidget *evenodd, *nonzero; - GtkWidget *frame, *selector; + GtkWidget *frame, *selector; - SPColor color; - float alpha; + SPColor color; + float alpha; }; /// The SPPaintSelector vtable struct SPPaintSelectorClass { - GtkVBoxClass parent_class; + GtkVBoxClass parent_class; - void (* mode_changed) (SPPaintSelector *psel, SPPaintSelectorMode mode); + void (* mode_changed) (SPPaintSelector *psel, SPPaintSelectorMode mode); - void (* grabbed) (SPPaintSelector *psel); - void (* dragged) (SPPaintSelector *psel); - void (* released) (SPPaintSelector *psel); - void (* changed) (SPPaintSelector *psel); - void (* fillrule_changed) (SPPaintSelector *psel, SPPaintSelectorFillRule fillrule); + void (* grabbed) (SPPaintSelector *psel); + void (* dragged) (SPPaintSelector *psel); + void (* released) (SPPaintSelector *psel); + void (* changed) (SPPaintSelector *psel); + void (* fillrule_changed) (SPPaintSelector *psel, SPPaintSelectorFillRule fillrule); }; GtkType sp_paint_selector_get_type (void); @@ -88,6 +101,8 @@ void sp_paint_selector_set_gradient_linear (SPPaintSelector *psel, SPGradient *v void sp_paint_selector_set_gradient_radial (SPPaintSelector *psel, SPGradient *vector); +void sp_paint_selector_set_swatch(SPPaintSelector *psel, SPPaintServer *server ); + void sp_paint_selector_set_gradient_properties (SPPaintSelector *psel, SPGradientUnits units, SPGradientSpread spread); void sp_paint_selector_get_gradient_properties (SPPaintSelector *psel, SPGradientUnits *units, SPGradientSpread *spread); @@ -107,4 +122,15 @@ void sp_paint_selector_set_flat_color (SPPaintSelector *psel, SPDesktop *desktop SPPaintSelectorMode sp_style_determine_paint_selector_mode (SPStyle *style, bool isfill); -#endif +#endif // SEEN_SP_PAINT_SELECTOR_H + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 : diff --git a/src/widgets/stroke-style.cpp b/src/widgets/stroke-style.cpp index f502f87d3..51e70807c 100644 --- a/src/widgets/stroke-style.cpp +++ b/src/widgets/stroke-style.cpp @@ -204,7 +204,9 @@ sp_stroke_style_paint_update (SPWidget *spw) SPPaintServer *server = SP_STYLE_STROKE_SERVER (query); - if (SP_IS_LINEARGRADIENT (server)) { + if (server && server->isSwatch()) { + sp_paint_selector_set_swatch( psel, server ); + } else if (SP_IS_LINEARGRADIENT (server)) { SPGradient *vector = sp_gradient_get_vector (SP_GRADIENT (server), FALSE); sp_paint_selector_set_gradient_linear (psel, vector); @@ -443,6 +445,10 @@ sp_stroke_style_paint_changed(SPPaintSelector *psel, SPWidget *spw) break; + case SP_PAINT_SELECTOR_MODE_SWATCH: + // TODO + break; + case SP_PAINT_SELECTOR_MODE_UNSET: if (items) { SPCSSAttr *css = sp_repr_css_attr_new (); -- cgit v1.2.3 From 86d58e07f051eab72dffc20a972a63c81a786cca Mon Sep 17 00:00:00 2001 From: Nicolas Dufour Date: Sat, 6 Mar 2010 09:10:15 +0100 Subject: i18n. Remove underscores in message context. Fixed bugs: - https://launchpad.net/bugs/505157 (bzr r9154) --- src/widgets/select-toolbar.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/select-toolbar.cpp b/src/widgets/select-toolbar.cpp index f383d2500..e2ad61e2d 100644 --- a/src/widgets/select-toolbar.cpp +++ b/src/widgets/select-toolbar.cpp @@ -457,7 +457,7 @@ void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb //TRANSLATORS: only translate "string" in "context|string". // For more details, see http://developer.gnome.org/doc/API/2.0/glib/glib-I18N.html#Q-:CAPS - eact = create_adjustment_action( "XAction", _("select_toolbar|X position"), _("select_toolbar|X"), "X", + eact = create_adjustment_action( "XAction", _("select toolbar|X position"), _("select toolbar|X"), "X", -1e6, GTK_WIDGET(desktop->canvas), tracker, spw, _("Horizontal coordinate of selection"), TRUE ); gtk_action_group_add_action( selectionActions, GTK_ACTION(eact) ); @@ -465,7 +465,7 @@ void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb //TRANSLATORS: only translate "string" in "context|string". // For more details, see http://developer.gnome.org/doc/API/2.0/glib/glib-I18N.html#Q-:CAPS - eact = create_adjustment_action( "YAction", _("select_toolbar|Y position"), _("select_toolbar|Y"), "Y", + eact = create_adjustment_action( "YAction", _("select toolbar|Y position"), _("select toolbar|Y"), "Y", -1e6, GTK_WIDGET(desktop->canvas), tracker, spw, _("Vertical coordinate of selection"), FALSE ); gtk_action_group_add_action( selectionActions, GTK_ACTION(eact) ); @@ -473,7 +473,7 @@ void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb //TRANSLATORS: only translate "string" in "context|string". // For more details, see http://developer.gnome.org/doc/API/2.0/glib/glib-I18N.html#Q-:CAPS - eact = create_adjustment_action( "WidthAction", _("select_toolbar|Width"), _("select_toolbar|W"), "width", + eact = create_adjustment_action( "WidthAction", _("select toolbar|Width"), _("select toolbar|W"), "width", 1e-3, GTK_WIDGET(desktop->canvas), tracker, spw, _("Width of selection"), FALSE ); gtk_action_group_add_action( selectionActions, GTK_ACTION(eact) ); @@ -494,7 +494,7 @@ void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb //TRANSLATORS: only translate "string" in "context|string". // For more details, see http://developer.gnome.org/doc/API/2.0/glib/glib-I18N.html#Q-:CAPS - eact = create_adjustment_action( "HeightAction", _("select_toolbar|Height"), _("select_toolbar|H"), "height", + eact = create_adjustment_action( "HeightAction", _("select toolbar|Height"), _("select toolbar|H"), "height", 1e-3, GTK_WIDGET(desktop->canvas), tracker, spw, _("Height of selection"), FALSE ); gtk_action_group_add_action( selectionActions, GTK_ACTION(eact) ); -- cgit v1.2.3 From f513b9222757e2a52b735516ce500d4b02764aa3 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sat, 6 Mar 2010 00:29:16 -0800 Subject: Block "special" solid gradients from gradient F&S dialog. (bzr r9156) --- src/widgets/gradient-vector.cpp | 823 ++++++++++++++++++++-------------------- 1 file changed, 413 insertions(+), 410 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index 8ffacb9f5..0b3c13820 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -5,12 +5,14 @@ * Lauris Kaplinski * bulia byak * MenTaLguY + * Jon A. Cruz * * Copyright (C) 2001-2002 Lauris Kaplinski * Copyright (C) 2001 Ximian, Inc. * Copyright (C) 2004 Monash University * Copyright (C) 2004 David Turner * Copyright (C) 2006 MenTaLguY + * Copyright (C) 2010 Jon A. Cruz * * Released under GNU GPL, read the file 'COPYING' for more information * @@ -46,16 +48,16 @@ enum { LAST_SIGNAL }; -static void sp_gradient_vector_selector_class_init (SPGradientVectorSelectorClass *klass); -static void sp_gradient_vector_selector_init (SPGradientVectorSelector *gvs); -static void sp_gradient_vector_selector_destroy (GtkObject *object); +static void sp_gradient_vector_selector_class_init(SPGradientVectorSelectorClass *klass); +static void sp_gradient_vector_selector_init(SPGradientVectorSelector *gvs); +static void sp_gradient_vector_selector_destroy(GtkObject *object); -static void sp_gvs_gradient_release (SPObject *obj, SPGradientVectorSelector *gvs); -static void sp_gvs_defs_release (SPObject *defs, SPGradientVectorSelector *gvs); -static void sp_gvs_defs_modified (SPObject *defs, guint flags, SPGradientVectorSelector *gvs); +static void sp_gvs_gradient_release(SPObject *obj, SPGradientVectorSelector *gvs); +static void sp_gvs_defs_release(SPObject *defs, SPGradientVectorSelector *gvs); +static void sp_gvs_defs_modified(SPObject *defs, guint flags, SPGradientVectorSelector *gvs); -static void sp_gvs_rebuild_gui_full (SPGradientVectorSelector *gvs); -static void sp_gvs_gradient_activate (GtkMenuItem *mi, SPGradientVectorSelector *gvs); +static void sp_gvs_rebuild_gui_full(SPGradientVectorSelector *gvs); +static void sp_gvs_gradient_activate(GtkMenuItem *mi, SPGradientVectorSelector *gvs); static GtkVBoxClass *parent_class; static guint signals[LAST_SIGNAL] = {0}; @@ -74,36 +76,35 @@ GType sp_gradient_vector_selector_get_type(void) sizeof(SPGradientVectorSelectorClass), NULL, /* base_init */ NULL, /* base_finalize */ - (GClassInitFunc) sp_gradient_vector_selector_class_init, + reinterpret_cast(sp_gradient_vector_selector_class_init), NULL, /* class_finalize */ NULL, /* class_data */ sizeof(SPGradientVectorSelector), 0, /* n_preallocs */ - (GInstanceInitFunc) sp_gradient_vector_selector_init, + reinterpret_cast(sp_gradient_vector_selector_init), 0, /* value_table */ }; type = g_type_register_static( GTK_TYPE_VBOX, "SPGradientVectorSelector", &info, - static_cast< GTypeFlags > (0) ); + static_cast< GTypeFlags >(0) ); } return type; } -static void -sp_gradient_vector_selector_class_init (SPGradientVectorSelectorClass *klass) +static void sp_gradient_vector_selector_class_init(SPGradientVectorSelectorClass *klass) { GtkObjectClass *object_class; - object_class = GTK_OBJECT_CLASS (klass); + object_class = GTK_OBJECT_CLASS(klass); - parent_class = (GtkVBoxClass*)gtk_type_class (GTK_TYPE_VBOX); + parent_class = static_cast(gtk_type_class(GTK_TYPE_VBOX)); - signals[VECTOR_SET] = gtk_signal_new ("vector_set", + signals[VECTOR_SET] = gtk_signal_new( "vector_set", GTK_RUN_LAST, GTK_CLASS_TYPE(object_class), - GTK_SIGNAL_OFFSET (SPGradientVectorSelectorClass, vector_set), + GTK_SIGNAL_OFFSET(SPGradientVectorSelectorClass, vector_set), gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1, GTK_TYPE_POINTER); @@ -111,8 +112,7 @@ sp_gradient_vector_selector_class_init (SPGradientVectorSelectorClass *klass) object_class->destroy = sp_gradient_vector_selector_destroy; } -static void -sp_gradient_vector_selector_init (SPGradientVectorSelector *gvs) +static void sp_gradient_vector_selector_init(SPGradientVectorSelector *gvs) { gvs->idlabel = TRUE; @@ -123,17 +123,14 @@ sp_gradient_vector_selector_init (SPGradientVectorSelector *gvs) new (&gvs->defs_release_connection) sigc::connection(); new (&gvs->defs_modified_connection) sigc::connection(); - gvs->menu = gtk_option_menu_new (); - gtk_widget_show (gvs->menu); - gtk_box_pack_start (GTK_BOX (gvs), gvs->menu, TRUE, TRUE, 0); + gvs->menu = gtk_option_menu_new(); + gtk_widget_show(gvs->menu); + gtk_box_pack_start(GTK_BOX(gvs), gvs->menu, TRUE, TRUE, 0); } -static void -sp_gradient_vector_selector_destroy (GtkObject *object) +static void sp_gradient_vector_selector_destroy(GtkObject *object) { - SPGradientVectorSelector *gvs; - - gvs = SP_GRADIENT_VECTOR_SELECTOR (object); + SPGradientVectorSelector *gvs = SP_GRADIENT_VECTOR_SELECTOR(object); if (gvs->gr) { gvs->gradient_release_connection.disconnect(); @@ -150,40 +147,39 @@ sp_gradient_vector_selector_destroy (GtkObject *object) gvs->defs_release_connection.~connection(); gvs->defs_modified_connection.~connection(); - if (((GtkObjectClass *) (parent_class))->destroy) - (* ((GtkObjectClass *) (parent_class))->destroy) (object); + if ((reinterpret_cast(parent_class))->destroy) { + (* (reinterpret_cast(parent_class))->destroy) (object); + } } -GtkWidget * -sp_gradient_vector_selector_new (SPDocument *doc, SPGradient *gr) +GtkWidget *sp_gradient_vector_selector_new(SPDocument *doc, SPGradient *gr) { GtkWidget *gvs; - g_return_val_if_fail (!gr || SP_IS_GRADIENT (gr), NULL); - g_return_val_if_fail (!gr || (SP_OBJECT_DOCUMENT (gr) == doc), NULL); + g_return_val_if_fail(!gr || SP_IS_GRADIENT(gr), NULL); + g_return_val_if_fail(!gr || (SP_OBJECT_DOCUMENT(gr) == doc), NULL); - gvs = (GtkWidget*)gtk_type_new (SP_TYPE_GRADIENT_VECTOR_SELECTOR); + gvs = static_cast(gtk_type_new(SP_TYPE_GRADIENT_VECTOR_SELECTOR)); if (doc) { - sp_gradient_vector_selector_set_gradient (SP_GRADIENT_VECTOR_SELECTOR (gvs), doc, gr); + sp_gradient_vector_selector_set_gradient(SP_GRADIENT_VECTOR_SELECTOR(gvs), doc, gr); } else { - sp_gvs_rebuild_gui_full (SP_GRADIENT_VECTOR_SELECTOR (gvs)); + sp_gvs_rebuild_gui_full(SP_GRADIENT_VECTOR_SELECTOR(gvs)); } return gvs; } -void -sp_gradient_vector_selector_set_gradient (SPGradientVectorSelector *gvs, SPDocument *doc, SPGradient *gr) +void sp_gradient_vector_selector_set_gradient(SPGradientVectorSelector *gvs, SPDocument *doc, SPGradient *gr) { static gboolean suppress = FALSE; - g_return_if_fail (gvs != NULL); - g_return_if_fail (SP_IS_GRADIENT_VECTOR_SELECTOR (gvs)); - g_return_if_fail (!gr || (doc != NULL)); - g_return_if_fail (!gr || SP_IS_GRADIENT (gr)); - g_return_if_fail (!gr || (SP_OBJECT_DOCUMENT (gr) == doc)); - g_return_if_fail (!gr || SP_GRADIENT_HAS_STOPS (gr)); + g_return_if_fail(gvs != NULL); + g_return_if_fail(SP_IS_GRADIENT_VECTOR_SELECTOR(gvs)); + g_return_if_fail(!gr || (doc != NULL)); + g_return_if_fail(!gr || SP_IS_GRADIENT(gr)); + g_return_if_fail(!gr || (SP_OBJECT_DOCUMENT(gr) == doc)); + g_return_if_fail(!gr || SP_GRADIENT_HAS_STOPS(gr)); if (doc != gvs->doc) { /* Disconnect signals */ @@ -196,7 +192,8 @@ sp_gradient_vector_selector_set_gradient (SPGradientVectorSelector *gvs, SPDocum gvs->defs_modified_connection.disconnect(); gvs->doc = NULL; } - /* Connect signals */ + + // Connect signals if (doc) { gvs->defs_release_connection = SP_DOCUMENT_DEFS(doc)->connectRelease(sigc::bind<1>(sigc::ptr_fun(&sp_gvs_defs_release), gvs)); gvs->defs_modified_connection = SP_DOCUMENT_DEFS(doc)->connectModified(sigc::bind<2>(sigc::ptr_fun(&sp_gvs_defs_modified), gvs)); @@ -206,145 +203,144 @@ sp_gradient_vector_selector_set_gradient (SPGradientVectorSelector *gvs, SPDocum } gvs->doc = doc; gvs->gr = gr; - sp_gvs_rebuild_gui_full (gvs); - if (!suppress) g_signal_emit (G_OBJECT (gvs), signals[VECTOR_SET], 0, gr); + sp_gvs_rebuild_gui_full(gvs); + if (!suppress) g_signal_emit(G_OBJECT(gvs), signals[VECTOR_SET], 0, gr); } else if (gr != gvs->gr) { - /* Harder case - keep document, rebuild menus and stuff */ - /* fixme: (Lauris) */ + // Harder case - keep document, rebuild menus and stuff + // fixme: (Lauris) suppress = TRUE; - sp_gradient_vector_selector_set_gradient (gvs, NULL, NULL); - sp_gradient_vector_selector_set_gradient (gvs, doc, gr); + sp_gradient_vector_selector_set_gradient(gvs, NULL, NULL); + sp_gradient_vector_selector_set_gradient(gvs, doc, gr); suppress = FALSE; - g_signal_emit (G_OBJECT (gvs), signals[VECTOR_SET], 0, gr); + g_signal_emit(G_OBJECT(gvs), signals[VECTOR_SET], 0, gr); } /* The case of setting NULL -> NULL is not very interesting */ } -SPDocument * -sp_gradient_vector_selector_get_document (SPGradientVectorSelector *gvs) +SPDocument *sp_gradient_vector_selector_get_document(SPGradientVectorSelector *gvs) { - g_return_val_if_fail (gvs != NULL, NULL); - g_return_val_if_fail (SP_IS_GRADIENT_VECTOR_SELECTOR (gvs), NULL); + g_return_val_if_fail(gvs != NULL, NULL); + g_return_val_if_fail(SP_IS_GRADIENT_VECTOR_SELECTOR(gvs), NULL); return gvs->doc; } -SPGradient * -sp_gradient_vector_selector_get_gradient (SPGradientVectorSelector *gvs) +SPGradient *sp_gradient_vector_selector_get_gradient(SPGradientVectorSelector *gvs) { - g_return_val_if_fail (gvs != NULL, NULL); - g_return_val_if_fail (SP_IS_GRADIENT_VECTOR_SELECTOR (gvs), NULL); + g_return_val_if_fail(gvs != NULL, NULL); + g_return_val_if_fail(SP_IS_GRADIENT_VECTOR_SELECTOR(gvs), NULL); return gvs->gr; } -static void -sp_gvs_rebuild_gui_full (SPGradientVectorSelector *gvs) +static void sp_gvs_rebuild_gui_full(SPGradientVectorSelector *gvs) { /* Clear old menu, if there is any */ - if (gtk_option_menu_get_menu (GTK_OPTION_MENU (gvs->menu))) { - gtk_option_menu_remove_menu (GTK_OPTION_MENU (gvs->menu)); + if (gtk_option_menu_get_menu(GTK_OPTION_MENU(gvs->menu))) { + gtk_option_menu_remove_menu(GTK_OPTION_MENU(gvs->menu)); } /* Create new menu widget */ - GtkWidget *m = gtk_menu_new (); - gtk_widget_show (m); + GtkWidget *m = gtk_menu_new(); + gtk_widget_show(m); /* Pick up all gradients with vectors */ GSList *gl = NULL; if (gvs->gr) { - const GSList *gradients = sp_document_get_resource_list (SP_OBJECT_DOCUMENT (gvs->gr), "gradient"); - for (const GSList *l = gradients; l != NULL; l = l->next) { - if (SP_GRADIENT_HAS_STOPS (l->data)) { - gl = g_slist_prepend (gl, l->data); + const GSList *gradients = sp_document_get_resource_list(SP_OBJECT_DOCUMENT(gvs->gr), "gradient"); + for (const GSList *curr = gradients; curr; curr = curr->next) { + SPGradient* grad = SP_GRADIENT(curr->data); + if (SP_GRADIENT_HAS_STOPS(grad) && !grad->isSwatch()) { + gl = g_slist_prepend(gl, curr->data); } } } - gl = g_slist_reverse (gl); + gl = g_slist_reverse(gl); gint pos = 0; gint idx = 0; if (!gvs->doc) { GtkWidget *i; - i = gtk_menu_item_new_with_label (_("No document selected")); - gtk_widget_show (i); - gtk_menu_append (GTK_MENU (m), i); - gtk_widget_set_sensitive (gvs->menu, FALSE); + i = gtk_menu_item_new_with_label(_("No document selected")); + gtk_widget_show(i); + gtk_menu_append(GTK_MENU(m), i); + gtk_widget_set_sensitive(gvs->menu, FALSE); } else if (!gl) { GtkWidget *i; - i = gtk_menu_item_new_with_label (_("No gradients in document")); - gtk_widget_show (i); - gtk_menu_append (GTK_MENU (m), i); - gtk_widget_set_sensitive (gvs->menu, FALSE); + i = gtk_menu_item_new_with_label(_("No gradients in document")); + gtk_widget_show(i); + gtk_menu_append(GTK_MENU(m), i); + gtk_widget_set_sensitive(gvs->menu, FALSE); } else if (!gvs->gr) { GtkWidget *i; - i = gtk_menu_item_new_with_label (_("No gradient selected")); - gtk_widget_show (i); - gtk_menu_append (GTK_MENU (m), i); - gtk_widget_set_sensitive (gvs->menu, FALSE); + i = gtk_menu_item_new_with_label(_("No gradient selected")); + gtk_widget_show(i); + gtk_menu_append(GTK_MENU(m), i); + gtk_widget_set_sensitive(gvs->menu, FALSE); } else { while (gl) { SPGradient *gr; GtkWidget *i, *w; - gr = SP_GRADIENT (gl->data); - gl = g_slist_remove (gl, gr); + gr = SP_GRADIENT(gl->data); + gl = g_slist_remove(gl, gr); /* We have to know: */ /* Gradient destroy */ /* Gradient name change */ - i = gtk_menu_item_new (); - gtk_widget_show (i); - g_object_set_data (G_OBJECT (i), "gradient", gr); - g_signal_connect (G_OBJECT (i), "activate", G_CALLBACK (sp_gvs_gradient_activate), gvs); + i = gtk_menu_item_new(); + gtk_widget_show(i); + g_object_set_data(G_OBJECT(i), "gradient", gr); + g_signal_connect(G_OBJECT(i), "activate", G_CALLBACK(sp_gvs_gradient_activate), gvs); - w = sp_gradient_image_new (gr); - gtk_widget_show (w); + w = sp_gradient_image_new(gr); + gtk_widget_show(w); if (gvs->idlabel) { GtkWidget *hb, *l; - hb = gtk_hbox_new (FALSE, 4); - gtk_widget_show (hb); + hb = gtk_hbox_new(FALSE, 4); + gtk_widget_show(hb); l = gtk_label_new(gr->getId()); - gtk_widget_show (l); - gtk_misc_set_alignment (GTK_MISC (l), 1.0, 0.5); - gtk_box_pack_start (GTK_BOX (hb), l, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (hb), w, FALSE, FALSE, 0); + gtk_widget_show(l); + gtk_misc_set_alignment(GTK_MISC(l), 1.0, 0.5); + gtk_box_pack_start(GTK_BOX(hb), l, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(hb), w, FALSE, FALSE, 0); w = hb; } - gtk_container_add (GTK_CONTAINER (i), w); + gtk_container_add(GTK_CONTAINER(i), w); - gtk_menu_append (GTK_MENU (m), i); + gtk_menu_append(GTK_MENU(m), i); - if (gr == gvs->gr) pos = idx; + if (gr == gvs->gr) { + pos = idx; + } idx += 1; } - gtk_widget_set_sensitive (gvs->menu, TRUE); + gtk_widget_set_sensitive(gvs->menu, TRUE); } - gtk_option_menu_set_menu (GTK_OPTION_MENU (gvs->menu), m); + gtk_option_menu_set_menu(GTK_OPTION_MENU(gvs->menu), m); /* Set history */ - gtk_option_menu_set_history (GTK_OPTION_MENU (gvs->menu), pos); + gtk_option_menu_set_history(GTK_OPTION_MENU(gvs->menu), pos); } -static void -sp_gvs_gradient_activate (GtkMenuItem *mi, SPGradientVectorSelector *gvs) +static void sp_gvs_gradient_activate(GtkMenuItem *mi, SPGradientVectorSelector *gvs) { SPGradient *gr, *norm; - gr = (SPGradient*)g_object_get_data (G_OBJECT (mi), "gradient"); + gr = (SPGradient*)g_object_get_data(G_OBJECT(mi), "gradient"); /* Hmmm... bad things may happen here, if actual gradient is something new */ /* Namely - menuitems etc. will be fucked up */ /* Hmmm - probably we can just re-set it as menuitem data (Lauris) */ - //g_print ("SPGradientVectorSelector: gradient %s activated\n", SP_OBJECT_ID (gr)); + //g_print("SPGradientVectorSelector: gradient %s activated\n", SP_OBJECT_ID(gr)); - norm = sp_gradient_ensure_vector_normalized (gr); + norm = sp_gradient_ensure_vector_normalized(gr); if (norm != gr) { - //g_print ("SPGradientVectorSelector: become %s after normalization\n", SP_OBJECT_ID (norm)); + //g_print("SPGradientVectorSelector: become %s after normalization\n", SP_OBJECT_ID(norm)); /* But be careful that we do not have gradient saved anywhere else */ - g_object_set_data (G_OBJECT (mi), "gradient", norm); + g_object_set_data(G_OBJECT(mi), "gradient", norm); } /* fixme: Really we would want to use _set_vector */ @@ -359,19 +355,18 @@ sp_gvs_gradient_activate (GtkMenuItem *mi, SPGradientVectorSelector *gvs) gvs->gr = norm; } - g_signal_emit (G_OBJECT (gvs), signals[VECTOR_SET], 0, norm); + g_signal_emit(G_OBJECT(gvs), signals[VECTOR_SET], 0, norm); if (norm != gr) { /* We do extra undo push here */ /* If handler has already done it, it is just NOP */ // FIXME: looks like this is never a valid undo step, consider removing this - sp_document_done (SP_OBJECT_DOCUMENT (norm), SP_VERB_CONTEXT_GRADIENT, + sp_document_done(SP_OBJECT_DOCUMENT(norm), SP_VERB_CONTEXT_GRADIENT, /* TODO: annotate */ "gradient-vector.cpp:350"); } } -static void -sp_gvs_gradient_release (SPObject */*obj*/, SPGradientVectorSelector *gvs) +static void sp_gvs_gradient_release(SPObject */*obj*/, SPGradientVectorSelector *gvs) { /* Disconnect gradient */ if (gvs->gr) { @@ -380,11 +375,10 @@ sp_gvs_gradient_release (SPObject */*obj*/, SPGradientVectorSelector *gvs) } /* Rebuild GUI */ - sp_gvs_rebuild_gui_full (gvs); + sp_gvs_rebuild_gui_full(gvs); } -static void -sp_gvs_defs_release (SPObject */*defs*/, SPGradientVectorSelector *gvs) +static void sp_gvs_defs_release(SPObject */*defs*/, SPGradientVectorSelector *gvs) { gvs->doc = NULL; @@ -398,15 +392,14 @@ sp_gvs_defs_release (SPObject */*defs*/, SPGradientVectorSelector *gvs) } /* Rebuild GUI */ - sp_gvs_rebuild_gui_full (gvs); + sp_gvs_rebuild_gui_full(gvs); } -static void -sp_gvs_defs_modified (SPObject */*defs*/, guint /*flags*/, SPGradientVectorSelector *gvs) +static void sp_gvs_defs_modified(SPObject */*defs*/, guint /*flags*/, SPGradientVectorSelector *gvs) { /* fixme: We probably have to check some flags here (Lauris) */ - sp_gvs_rebuild_gui_full (gvs); + sp_gvs_rebuild_gui_full(gvs); } /*################################################################## @@ -422,27 +415,27 @@ sp_gvs_defs_modified (SPObject */*defs*/, guint /*flags*/, SPGradientVectorSelec #define PAD 4 -static GtkWidget *sp_gradient_vector_widget_new (SPGradient *gradient, SPStop *stop); +static GtkWidget *sp_gradient_vector_widget_new(SPGradient *gradient, SPStop *stop); -static void sp_gradient_vector_widget_load_gradient (GtkWidget *widget, SPGradient *gradient); -static gint sp_gradient_vector_dialog_delete (GtkWidget *widget, GdkEvent *event, GtkWidget *dialog); -static void sp_gradient_vector_dialog_destroy (GtkObject *object, gpointer data); +static void sp_gradient_vector_widget_load_gradient(GtkWidget *widget, SPGradient *gradient); +static gint sp_gradient_vector_dialog_delete(GtkWidget *widget, GdkEvent *event, GtkWidget *dialog); +static void sp_gradient_vector_dialog_destroy(GtkObject *object, gpointer data); -static void sp_gradient_vector_widget_destroy (GtkObject *object, gpointer data); -static void sp_gradient_vector_gradient_release (SPObject *obj, GtkWidget *widget); -static void sp_gradient_vector_gradient_modified (SPObject *obj, guint flags, GtkWidget *widget); -static void sp_gradient_vector_color_dragged (SPColorSelector *csel, GtkObject *object); -static void sp_gradient_vector_color_changed (SPColorSelector *csel, GtkObject *object); +static void sp_gradient_vector_widget_destroy(GtkObject *object, gpointer data); +static void sp_gradient_vector_gradient_release(SPObject *obj, GtkWidget *widget); +static void sp_gradient_vector_gradient_modified(SPObject *obj, guint flags, GtkWidget *widget); +static void sp_gradient_vector_color_dragged(SPColorSelector *csel, GtkObject *object); +static void sp_gradient_vector_color_changed(SPColorSelector *csel, GtkObject *object); static void update_stop_list( GtkWidget *mnu, SPGradient *gradient, SPStop *new_stop); static gboolean blocked = FALSE; -static void grad_edit_dia_stop_added_or_removed (Inkscape::XML::Node */*repr*/, Inkscape::XML::Node */*child*/, Inkscape::XML::Node */*ref*/, gpointer data) +static void grad_edit_dia_stop_added_or_removed(Inkscape::XML::Node */*repr*/, Inkscape::XML::Node */*child*/, Inkscape::XML::Node */*ref*/, gpointer data) { GtkWidget *vb = GTK_WIDGET(data); - GtkWidget *mnu = (GtkWidget *)g_object_get_data (G_OBJECT(vb), "stopmenu"); - SPGradient *gradient = (SPGradient *)g_object_get_data (G_OBJECT(vb), "gradient"); - update_stop_list (mnu, gradient, NULL); + GtkWidget *mnu = (GtkWidget *)g_object_get_data(G_OBJECT(vb), "stopmenu"); + SPGradient *gradient = (SPGradient *)g_object_get_data(G_OBJECT(vb), "gradient"); + update_stop_list(mnu, gradient, NULL); } //FIXME!!! We must also listen to attr changes on all children (i.e. stops) too, @@ -457,14 +450,13 @@ static Inkscape::XML::NodeEventVector grad_edit_dia_repr_events = NULL /* order_changed */ }; -static void -verify_grad(SPGradient *gradient) +static void verify_grad(SPGradient *gradient) { int i = 0; SPStop *stop = NULL; /* count stops */ for ( SPObject *ochild = sp_object_first_child(SP_OBJECT(gradient)) ; ochild != NULL ; ochild = SP_OBJECT_NEXT(ochild) ) { - if (SP_IS_STOP (ochild)) { + if (SP_IS_STOP(ochild)) { i++; stop = SP_STOP(ochild); } @@ -475,7 +467,7 @@ verify_grad(SPGradient *gradient) if (i < 1) { gchar c[64]; - sp_svg_write_color (c, sizeof(c), 0x00000000); + sp_svg_write_color(c, sizeof(c), 0x00000000); Inkscape::CSSOStringStream os; os << "stop-color:" << c << ";stop-opacity:" << 1.0 << ";"; @@ -485,32 +477,31 @@ verify_grad(SPGradient *gradient) child = xml_doc->createElement("svg:stop"); sp_repr_set_css_double(child, "offset", 0.0); child->setAttribute("style", os.str().c_str()); - SP_OBJECT_REPR (gradient)->addChild(child, NULL); + SP_OBJECT_REPR(gradient)->addChild(child, NULL); Inkscape::GC::release(child); child = xml_doc->createElement("svg:stop"); sp_repr_set_css_double(child, "offset", 1.0); child->setAttribute("style", os.str().c_str()); - SP_OBJECT_REPR (gradient)->addChild(child, NULL); + SP_OBJECT_REPR(gradient)->addChild(child, NULL); Inkscape::GC::release(child); } if (i < 2) { sp_repr_set_css_double(SP_OBJECT_REPR(stop), "offset", 0.0); Inkscape::XML::Node *child = SP_OBJECT_REPR(stop)->duplicate(SP_OBJECT_REPR(gradient)->document()); sp_repr_set_css_double(child, "offset", 1.0); - SP_OBJECT_REPR(gradient)->addChild(child, SP_OBJECT_REPR (stop)); + SP_OBJECT_REPR(gradient)->addChild(child, SP_OBJECT_REPR(stop)); Inkscape::GC::release(child); } } -static void -select_stop_in_list( GtkWidget *mnu, SPGradient *gradient, SPStop *new_stop) +static void select_stop_in_list( GtkWidget *mnu, SPGradient *gradient, SPStop *new_stop) { int i = 0; for ( SPObject *ochild = sp_object_first_child(SP_OBJECT(gradient)) ; ochild != NULL ; ochild = SP_OBJECT_NEXT(ochild) ) { - if (SP_IS_STOP (ochild)) { - if (SP_OBJECT (ochild) == SP_OBJECT(new_stop)) { - gtk_option_menu_set_history (GTK_OPTION_MENU (mnu), i); + if (SP_IS_STOP(ochild)) { + if (SP_OBJECT(ochild) == SP_OBJECT(new_stop)) { + gtk_option_menu_set_history(GTK_OPTION_MENU(mnu), i); break; } i++; @@ -518,99 +509,100 @@ select_stop_in_list( GtkWidget *mnu, SPGradient *gradient, SPStop *new_stop) } } -static void -update_stop_list( GtkWidget *mnu, SPGradient *gradient, SPStop *new_stop) +static void update_stop_list( GtkWidget *mnu, SPGradient *gradient, SPStop *new_stop) { - if (!SP_IS_GRADIENT (gradient)) + if (!SP_IS_GRADIENT(gradient)) { return; + } blocked = TRUE; /* Clear old menu, if there is any */ - if (gtk_option_menu_get_menu (GTK_OPTION_MENU (mnu))) { - gtk_option_menu_remove_menu (GTK_OPTION_MENU (mnu)); + if (gtk_option_menu_get_menu(GTK_OPTION_MENU(mnu))) { + gtk_option_menu_remove_menu(GTK_OPTION_MENU(mnu)); } /* Create new menu widget */ - GtkWidget *m = gtk_menu_new (); - gtk_widget_show (m); + GtkWidget *m = gtk_menu_new(); + gtk_widget_show(m); GSList *sl = NULL; if (gradient->has_stops) { - for ( SPObject *ochild = sp_object_first_child (SP_OBJECT(gradient)) ; ochild != NULL ; ochild = SP_OBJECT_NEXT(ochild) ) { - if (SP_IS_STOP (ochild)) { - sl = g_slist_append (sl, ochild); + for ( SPObject *ochild = sp_object_first_child(SP_OBJECT(gradient)) ; ochild != NULL ; ochild = SP_OBJECT_NEXT(ochild) ) { + if (SP_IS_STOP(ochild)) { + sl = g_slist_append(sl, ochild); } } } if (!sl) { - GtkWidget *i = gtk_menu_item_new_with_label (_("No stops in gradient")); - gtk_widget_show (i); - gtk_menu_append (GTK_MENU (m), i); - gtk_widget_set_sensitive (mnu, FALSE); + GtkWidget *i = gtk_menu_item_new_with_label(_("No stops in gradient")); + gtk_widget_show(i); + gtk_menu_append(GTK_MENU(m), i); + gtk_widget_set_sensitive(mnu, FALSE); } else { for (; sl != NULL; sl = sl->next){ SPStop *stop; GtkWidget *i; if (SP_IS_STOP(sl->data)){ - stop = SP_STOP (sl->data); - i = gtk_menu_item_new (); - gtk_widget_show (i); - g_object_set_data (G_OBJECT (i), "stop", stop); - GtkWidget *hb = gtk_hbox_new (FALSE, 4); + stop = SP_STOP(sl->data); + i = gtk_menu_item_new(); + gtk_widget_show(i); + g_object_set_data(G_OBJECT(i), "stop", stop); + GtkWidget *hb = gtk_hbox_new(FALSE, 4); GtkWidget *cpv = sp_color_preview_new(sp_stop_get_rgba32(stop)); - gtk_widget_show (cpv); - gtk_container_add ( GTK_CONTAINER (hb), cpv ); - g_object_set_data ( G_OBJECT (i), "preview", cpv ); + gtk_widget_show(cpv); + gtk_container_add( GTK_CONTAINER(hb), cpv ); + g_object_set_data( G_OBJECT(i), "preview", cpv ); Inkscape::XML::Node *repr = SP_OBJECT_REPR((SPItem *) sl->data); - GtkWidget *l = gtk_label_new (repr->attribute("id")); - gtk_widget_show (l); - gtk_misc_set_alignment (GTK_MISC (l), 1.0, 0.5); - gtk_box_pack_start (GTK_BOX (hb), l, TRUE, TRUE, 0); - gtk_widget_show (hb); - gtk_container_add (GTK_CONTAINER (i), hb); - gtk_menu_append (GTK_MENU (m), i); + GtkWidget *l = gtk_label_new(repr->attribute("id")); + gtk_widget_show(l); + gtk_misc_set_alignment(GTK_MISC(l), 1.0, 0.5); + gtk_box_pack_start(GTK_BOX(hb), l, TRUE, TRUE, 0); + gtk_widget_show(hb); + gtk_container_add(GTK_CONTAINER(i), hb); + gtk_menu_append(GTK_MENU(m), i); } } - gtk_widget_set_sensitive (mnu, TRUE); + gtk_widget_set_sensitive(mnu, TRUE); } - gtk_option_menu_set_menu (GTK_OPTION_MENU (mnu), m); + gtk_option_menu_set_menu(GTK_OPTION_MENU(mnu), m); /* Set history */ if (new_stop == NULL) { - gtk_option_menu_set_history (GTK_OPTION_MENU (mnu), 0); + gtk_option_menu_set_history(GTK_OPTION_MENU(mnu), 0); } else { - select_stop_in_list (mnu, gradient, new_stop); + select_stop_in_list(mnu, gradient, new_stop); } blocked = FALSE; } -/*user selected existing stop from list*/ -static void -sp_grad_edit_select (GtkOptionMenu *mnu, GtkWidget *tbl) +// user selected existing stop from list +static void sp_grad_edit_select(GtkOptionMenu *mnu, GtkWidget *tbl) { - SPGradient *gradient = (SPGradient *)g_object_get_data (G_OBJECT(tbl), "gradient"); + SPGradient *gradient = (SPGradient *)g_object_get_data(G_OBJECT(tbl), "gradient"); - GObject *item = G_OBJECT(gtk_menu_get_active (GTK_MENU(gtk_option_menu_get_menu (mnu)))); - SPStop *stop = SP_STOP (g_object_get_data (item, "stop")); - if (!stop) return; + GObject *item = G_OBJECT(gtk_menu_get_active(GTK_MENU(gtk_option_menu_get_menu(mnu)))); + SPStop *stop = SP_STOP(g_object_get_data(item, "stop")); + if (!stop) { + return; + } blocked = TRUE; - SPColorSelector *csel = (SPColorSelector*)g_object_get_data (G_OBJECT (tbl), "cselector"); + SPColorSelector *csel = (SPColorSelector*)g_object_get_data(G_OBJECT(tbl), "cselector"); guint32 const c = sp_stop_get_rgba32(stop); - csel->base->setAlpha(SP_RGBA32_A_F (c)); - SPColor color( SP_RGBA32_R_F (c), SP_RGBA32_G_F (c), SP_RGBA32_B_F (c) ); + csel->base->setAlpha(SP_RGBA32_A_F(c)); + SPColor color( SP_RGBA32_R_F(c), SP_RGBA32_G_F(c), SP_RGBA32_B_F(c) ); // set its color, from the stored array csel->base->setColor( color ); - GtkWidget *offspin = GTK_WIDGET (g_object_get_data (G_OBJECT (tbl), "offspn")); - GtkWidget *offslide =GTK_WIDGET (g_object_get_data (G_OBJECT (tbl), "offslide")); + GtkWidget *offspin = GTK_WIDGET(g_object_get_data(G_OBJECT(tbl), "offspn")); + GtkWidget *offslide =GTK_WIDGET(g_object_get_data(G_OBJECT(tbl), "offslide")); - GtkAdjustment *adj = (GtkAdjustment*)gtk_object_get_data (GTK_OBJECT (tbl), "offset"); + GtkAdjustment *adj = static_cast(gtk_object_get_data(GTK_OBJECT(tbl), "offset")); bool isEndStop = false; @@ -634,16 +626,16 @@ sp_grad_edit_select (GtkOptionMenu *mnu, GtkWidget *tbl) //fixme: does this work on all possible input gradients? if (!isEndStop) { - gtk_widget_set_sensitive (offslide, TRUE); - gtk_widget_set_sensitive (GTK_WIDGET (offspin), TRUE); + gtk_widget_set_sensitive(offslide, TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(offspin), TRUE); } else { - gtk_widget_set_sensitive (offslide, FALSE); - gtk_widget_set_sensitive (GTK_WIDGET (offspin), FALSE); + gtk_widget_set_sensitive(offslide, FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(offspin), FALSE); } - gtk_adjustment_set_value (adj, stop->offset); + gtk_adjustment_set_value(adj, stop->offset); - gtk_adjustment_changed (adj); + gtk_adjustment_changed(adj); blocked = FALSE; } @@ -651,57 +643,58 @@ sp_grad_edit_select (GtkOptionMenu *mnu, GtkWidget *tbl) -static void -offadjustmentChanged( GtkAdjustment *adjustment, GtkWidget *vb) +static void offadjustmentChanged( GtkAdjustment *adjustment, GtkWidget *vb) { - if (blocked) + if (blocked) { return; + } blocked = TRUE; - GtkOptionMenu *mnu = (GtkOptionMenu *)g_object_get_data (G_OBJECT(vb), "stopmenu"); - if (!g_object_get_data (G_OBJECT(gtk_menu_get_active (GTK_MENU(gtk_option_menu_get_menu (mnu)))), "stop")) return; - SPStop *stop = SP_STOP(g_object_get_data (G_OBJECT(gtk_menu_get_active (GTK_MENU(gtk_option_menu_get_menu (mnu)))), "stop")); + GtkOptionMenu *mnu = static_cast(g_object_get_data(G_OBJECT(vb), "stopmenu")); + if (!g_object_get_data(G_OBJECT(gtk_menu_get_active(GTK_MENU(gtk_option_menu_get_menu(mnu)))), "stop")) { + return; + } + SPStop *stop = SP_STOP(g_object_get_data(G_OBJECT(gtk_menu_get_active(GTK_MENU(gtk_option_menu_get_menu(mnu)))), "stop")); stop->offset = adjustment->value; sp_repr_set_css_double(SP_OBJECT_REPR(stop), "offset", stop->offset); - sp_document_done (SP_OBJECT_DOCUMENT (stop), SP_VERB_CONTEXT_GRADIENT, + sp_document_done(SP_OBJECT_DOCUMENT(stop), SP_VERB_CONTEXT_GRADIENT, _("Change gradient stop offset")); blocked = FALSE; } -guint32 -sp_average_color (guint32 c1, guint32 c2, gdouble p = 0.5) +guint32 sp_average_color(guint32 c1, guint32 c2, gdouble p = 0.5) { - guint32 r = (guint32) (SP_RGBA32_R_U (c1) * p + SP_RGBA32_R_U (c2) * (1 - p)); - guint32 g = (guint32) (SP_RGBA32_G_U (c1) * p + SP_RGBA32_G_U (c2) * (1 - p)); - guint32 b = (guint32) (SP_RGBA32_B_U (c1) * p + SP_RGBA32_B_U (c2) * (1 - p)); - guint32 a = (guint32) (SP_RGBA32_A_U (c1) * p + SP_RGBA32_A_U (c2) * (1 - p)); + guint32 r = (guint32) (SP_RGBA32_R_U(c1) * p + SP_RGBA32_R_U(c2) * (1 - p)); + guint32 g = (guint32) (SP_RGBA32_G_U(c1) * p + SP_RGBA32_G_U(c2) * (1 - p)); + guint32 b = (guint32) (SP_RGBA32_B_U(c1) * p + SP_RGBA32_B_U(c2) * (1 - p)); + guint32 a = (guint32) (SP_RGBA32_A_U(c1) * p + SP_RGBA32_A_U(c2) * (1 - p)); - return SP_RGBA32_U_COMPOSE (r, g, b, a); + return SP_RGBA32_U_COMPOSE(r, g, b, a); } -static void -sp_grd_ed_add_stop (GtkWidget */*widget*/, GtkWidget *vb) +static void sp_grd_ed_add_stop(GtkWidget */*widget*/, GtkWidget *vb) { - SPGradient *gradient = (SPGradient *) g_object_get_data (G_OBJECT(vb), "gradient"); - verify_grad (gradient); - GtkOptionMenu *mnu = (GtkOptionMenu *)g_object_get_data (G_OBJECT(vb), "stopmenu"); + SPGradient *gradient = static_cast(g_object_get_data(G_OBJECT(vb), "gradient")); + verify_grad(gradient); + GtkOptionMenu *mnu = static_cast(g_object_get_data(G_OBJECT(vb), "stopmenu")); - SPStop *stop = (SPStop *) g_object_get_data (G_OBJECT(gtk_menu_get_active (GTK_MENU(gtk_option_menu_get_menu (mnu)))), "stop"); + SPStop *stop = static_cast(g_object_get_data(G_OBJECT(gtk_menu_get_active(GTK_MENU(gtk_option_menu_get_menu(mnu)))), "stop")); - if (stop == NULL) + if (stop == NULL) { return; + } Inkscape::XML::Node *new_stop_repr = NULL; - SPStop *next = sp_next_stop (stop); + SPStop *next = sp_next_stop(stop); if (next == NULL) { - SPStop *prev = sp_prev_stop (stop, gradient); + SPStop *prev = sp_prev_stop(stop, gradient); if (prev != NULL) { next = stop; stop = prev; @@ -723,186 +716,184 @@ sp_grd_ed_add_stop (GtkWidget */*widget*/, GtkWidget *vb) guint32 const c1 = sp_stop_get_rgba32(stop); guint32 const c2 = sp_stop_get_rgba32(next); - guint32 cnew = sp_average_color (c1, c2); + guint32 cnew = sp_average_color(c1, c2); Inkscape::CSSOStringStream os; gchar c[64]; - sp_svg_write_color (c, sizeof(c), cnew); - gdouble opacity = (gdouble) SP_RGBA32_A_F (cnew); + sp_svg_write_color(c, sizeof(c), cnew); + gdouble opacity = static_cast(SP_RGBA32_A_F(cnew)); os << "stop-color:" << c << ";stop-opacity:" << opacity <<";"; SP_OBJECT_REPR (newstop)->setAttribute("style", os.str().c_str()); sp_repr_set_css_double( SP_OBJECT_REPR(newstop), "offset", (double)newstop->offset); - sp_gradient_vector_widget_load_gradient (vb, gradient); + sp_gradient_vector_widget_load_gradient(vb, gradient); Inkscape::GC::release(new_stop_repr); update_stop_list(GTK_WIDGET(mnu), gradient, newstop); - GtkWidget *offspin = GTK_WIDGET (g_object_get_data (G_OBJECT (vb), "offspn")); - GtkWidget *offslide =GTK_WIDGET (g_object_get_data (G_OBJECT (vb), "offslide")); - gtk_widget_set_sensitive (offslide, TRUE); - gtk_widget_set_sensitive (GTK_WIDGET (offspin), TRUE); - sp_document_done (SP_OBJECT_DOCUMENT (gradient), SP_VERB_CONTEXT_GRADIENT, + GtkWidget *offspin = GTK_WIDGET(g_object_get_data(G_OBJECT(vb), "offspn")); + GtkWidget *offslide =GTK_WIDGET(g_object_get_data(G_OBJECT(vb), "offslide")); + gtk_widget_set_sensitive(offslide, TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(offspin), TRUE); + sp_document_done(SP_OBJECT_DOCUMENT(gradient), SP_VERB_CONTEXT_GRADIENT, _("Add gradient stop")); } -static void -sp_grd_ed_del_stop (GtkWidget */*widget*/, GtkWidget *vb) +static void sp_grd_ed_del_stop(GtkWidget */*widget*/, GtkWidget *vb) { - SPGradient *gradient = (SPGradient *)g_object_get_data (G_OBJECT(vb), "gradient"); + SPGradient *gradient = static_cast(g_object_get_data(G_OBJECT(vb), "gradient")); - GtkOptionMenu *mnu = (GtkOptionMenu *)g_object_get_data (G_OBJECT(vb), "stopmenu"); - if (!g_object_get_data (G_OBJECT(gtk_menu_get_active (GTK_MENU(gtk_option_menu_get_menu (mnu)))), "stop")) return; - SPStop *stop = SP_STOP(g_object_get_data (G_OBJECT(gtk_menu_get_active (GTK_MENU(gtk_option_menu_get_menu (mnu)))), "stop")); + GtkOptionMenu *mnu = static_cast(g_object_get_data(G_OBJECT(vb), "stopmenu")); + if (!g_object_get_data(G_OBJECT(gtk_menu_get_active(GTK_MENU(gtk_option_menu_get_menu(mnu)))), "stop")) return; + SPStop *stop = SP_STOP(g_object_get_data(G_OBJECT(gtk_menu_get_active(GTK_MENU(gtk_option_menu_get_menu(mnu)))), "stop")); if (gradient->vector.stops.size() > 2) { // 2 is the minimum // if we delete first or last stop, move the next/previous to the edge if (stop->offset == 0) { - SPStop *next = sp_next_stop (stop); + SPStop *next = sp_next_stop(stop); if (next) { next->offset = 0; - sp_repr_set_css_double (SP_OBJECT_REPR (next), "offset", 0); + sp_repr_set_css_double(SP_OBJECT_REPR(next), "offset", 0); } } else if (stop->offset == 1) { - SPStop *prev = sp_prev_stop (stop, gradient); + SPStop *prev = sp_prev_stop(stop, gradient); if (prev) { prev->offset = 1; - sp_repr_set_css_double (SP_OBJECT_REPR (prev), "offset", 1); + sp_repr_set_css_double(SP_OBJECT_REPR(prev), "offset", 1); } } SP_OBJECT_REPR(gradient)->removeChild(SP_OBJECT_REPR(stop)); - sp_gradient_vector_widget_load_gradient (vb, gradient); + sp_gradient_vector_widget_load_gradient(vb, gradient); update_stop_list(GTK_WIDGET(mnu), gradient, NULL); - sp_document_done (SP_OBJECT_DOCUMENT (gradient), SP_VERB_CONTEXT_GRADIENT, + sp_document_done(SP_OBJECT_DOCUMENT(gradient), SP_VERB_CONTEXT_GRADIENT, _("Delete gradient stop")); } } -static GtkWidget * -sp_gradient_vector_widget_new (SPGradient *gradient, SPStop *select_stop) +static GtkWidget * sp_gradient_vector_widget_new(SPGradient *gradient, SPStop *select_stop) { GtkWidget *vb, *w, *f, *csel; - g_return_val_if_fail (!gradient || SP_IS_GRADIENT (gradient), NULL); + g_return_val_if_fail(!gradient || SP_IS_GRADIENT(gradient), NULL); - vb = gtk_vbox_new (FALSE, PAD); - g_signal_connect (G_OBJECT (vb), "destroy", G_CALLBACK (sp_gradient_vector_widget_destroy), NULL); + vb = gtk_vbox_new(FALSE, PAD); + g_signal_connect(G_OBJECT(vb), "destroy", G_CALLBACK(sp_gradient_vector_widget_destroy), NULL); - w = sp_gradient_image_new (gradient); - g_object_set_data (G_OBJECT (vb), "preview", w); - gtk_widget_show (w); - gtk_box_pack_start (GTK_BOX (vb), w, TRUE, TRUE, PAD); + w = sp_gradient_image_new(gradient); + g_object_set_data(G_OBJECT(vb), "preview", w); + gtk_widget_show(w); + gtk_box_pack_start(GTK_BOX(vb), w, TRUE, TRUE, PAD); - sp_repr_add_listener (SP_OBJECT_REPR(gradient), &grad_edit_dia_repr_events, vb); - GtkTooltips *tt = gtk_tooltips_new (); + sp_repr_add_listener(SP_OBJECT_REPR(gradient), &grad_edit_dia_repr_events, vb); + GtkTooltips *tt = gtk_tooltips_new(); /* Stop list */ - GtkWidget *mnu = gtk_option_menu_new (); + GtkWidget *mnu = gtk_option_menu_new(); /* Create new menu widget */ - update_stop_list (GTK_WIDGET(mnu), gradient, NULL); - gtk_signal_connect (GTK_OBJECT (mnu), "changed", GTK_SIGNAL_FUNC (sp_grad_edit_select), vb); - gtk_widget_show (mnu); - gtk_object_set_data (GTK_OBJECT (vb), "stopmenu", mnu); - gtk_box_pack_start (GTK_BOX (vb), mnu, FALSE, FALSE, 0); + update_stop_list(GTK_WIDGET(mnu), gradient, NULL); + gtk_signal_connect(GTK_OBJECT(mnu), "changed", GTK_SIGNAL_FUNC(sp_grad_edit_select), vb); + gtk_widget_show(mnu); + gtk_object_set_data(GTK_OBJECT(vb), "stopmenu", mnu); + gtk_box_pack_start(GTK_BOX(vb), mnu, FALSE, FALSE, 0); /* Add and Remove buttons */ - GtkWidget *hb = gtk_hbox_new (FALSE, 1); + GtkWidget *hb = gtk_hbox_new(FALSE, 1); // TRANSLATORS: "Stop" means: a "phase" of a gradient - GtkWidget *b = gtk_button_new_with_label (_("Add stop")); - gtk_widget_show (b); - gtk_container_add (GTK_CONTAINER (hb), b); - gtk_tooltips_set_tip (tt, b, _("Add another control stop to gradient"), NULL); - gtk_signal_connect (GTK_OBJECT (b), "clicked", GTK_SIGNAL_FUNC (sp_grd_ed_add_stop), vb); - b = gtk_button_new_with_label (_("Delete stop")); - gtk_widget_show (b); - gtk_container_add (GTK_CONTAINER (hb), b); - gtk_tooltips_set_tip (tt, b, _("Delete current control stop from gradient"), NULL); - gtk_signal_connect (GTK_OBJECT (b), "clicked", GTK_SIGNAL_FUNC (sp_grd_ed_del_stop), vb); + GtkWidget *b = gtk_button_new_with_label(_("Add stop")); + gtk_widget_show(b); + gtk_container_add(GTK_CONTAINER(hb), b); + gtk_tooltips_set_tip(tt, b, _("Add another control stop to gradient"), NULL); + gtk_signal_connect(GTK_OBJECT(b), "clicked", GTK_SIGNAL_FUNC(sp_grd_ed_add_stop), vb); + b = gtk_button_new_with_label(_("Delete stop")); + gtk_widget_show(b); + gtk_container_add(GTK_CONTAINER(hb), b); + gtk_tooltips_set_tip(tt, b, _("Delete current control stop from gradient"), NULL); + gtk_signal_connect(GTK_OBJECT(b), "clicked", GTK_SIGNAL_FUNC(sp_grd_ed_del_stop), vb); - gtk_widget_show (hb); - gtk_box_pack_start (GTK_BOX (vb),hb, FALSE, FALSE, AUX_BETWEEN_BUTTON_GROUPS); + gtk_widget_show(hb); + gtk_box_pack_start(GTK_BOX(vb),hb, FALSE, FALSE, AUX_BETWEEN_BUTTON_GROUPS); /* Offset Slider and stuff */ - hb = gtk_hbox_new (FALSE, 0); + hb = gtk_hbox_new(FALSE, 0); /* Label */ - GtkWidget *l = gtk_label_new (_("Offset:")); - gtk_misc_set_alignment (GTK_MISC (l), 1.0, 0.5); - gtk_box_pack_start (GTK_BOX (hb),l, FALSE, FALSE, AUX_BETWEEN_BUTTON_GROUPS); - gtk_widget_show (l); + GtkWidget *l = gtk_label_new(_("Offset:")); + gtk_misc_set_alignment(GTK_MISC(l), 1.0, 0.5); + gtk_box_pack_start(GTK_BOX(hb),l, FALSE, FALSE, AUX_BETWEEN_BUTTON_GROUPS); + gtk_widget_show(l); /* Adjustment */ GtkAdjustment *Offset_adj = NULL; - Offset_adj= (GtkAdjustment *) gtk_adjustment_new (0.0, 0.0, 1.0, 0.01, 0.01, 0.0); - gtk_object_set_data (GTK_OBJECT (vb), "offset", Offset_adj); - GtkMenu *m = GTK_MENU(gtk_option_menu_get_menu (GTK_OPTION_MENU(mnu))); - SPStop *stop = SP_STOP (g_object_get_data (G_OBJECT (gtk_menu_get_active (m)), "stop")); - gtk_adjustment_set_value (Offset_adj, stop->offset); + Offset_adj= (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 1.0, 0.01, 0.01, 0.0); + gtk_object_set_data(GTK_OBJECT(vb), "offset", Offset_adj); + GtkMenu *m = GTK_MENU(gtk_option_menu_get_menu(GTK_OPTION_MENU(mnu))); + SPStop *stop = SP_STOP(g_object_get_data(G_OBJECT(gtk_menu_get_active(m)), "stop")); + gtk_adjustment_set_value(Offset_adj, stop->offset); /* Slider */ GtkWidget *slider = gtk_hscale_new(Offset_adj); gtk_scale_set_draw_value( GTK_SCALE(slider), FALSE ); - gtk_widget_show (slider); - gtk_box_pack_start (GTK_BOX (hb),slider, TRUE, TRUE, AUX_BETWEEN_BUTTON_GROUPS); - gtk_object_set_data (GTK_OBJECT (vb), "offslide", slider); + gtk_widget_show(slider); + gtk_box_pack_start(GTK_BOX(hb),slider, TRUE, TRUE, AUX_BETWEEN_BUTTON_GROUPS); + gtk_object_set_data(GTK_OBJECT(vb), "offslide", slider); /* Spinbutton */ - GtkWidget *sbtn = gtk_spin_button_new (GTK_ADJUSTMENT (Offset_adj), 0.01, 2); - sp_dialog_defocus_on_enter (sbtn); - gtk_widget_show (sbtn); - gtk_box_pack_start (GTK_BOX (hb),sbtn, FALSE, TRUE, AUX_BETWEEN_BUTTON_GROUPS); - gtk_object_set_data (GTK_OBJECT (vb), "offspn", sbtn); + GtkWidget *sbtn = gtk_spin_button_new(GTK_ADJUSTMENT(Offset_adj), 0.01, 2); + sp_dialog_defocus_on_enter(sbtn); + gtk_widget_show(sbtn); + gtk_box_pack_start(GTK_BOX(hb),sbtn, FALSE, TRUE, AUX_BETWEEN_BUTTON_GROUPS); + gtk_object_set_data(GTK_OBJECT(vb), "offspn", sbtn); if (stop->offset>0 && stop->offset<1) { - gtk_widget_set_sensitive (slider, TRUE); - gtk_widget_set_sensitive (GTK_WIDGET (sbtn), TRUE); + gtk_widget_set_sensitive(slider, TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(sbtn), TRUE); } else { - gtk_widget_set_sensitive (slider, FALSE); - gtk_widget_set_sensitive (GTK_WIDGET (sbtn), FALSE); + gtk_widget_set_sensitive(slider, FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(sbtn), FALSE); } /* Signals */ - gtk_signal_connect (GTK_OBJECT (Offset_adj), "value_changed", - GTK_SIGNAL_FUNC (offadjustmentChanged), vb); + gtk_signal_connect(GTK_OBJECT(Offset_adj), "value_changed", + GTK_SIGNAL_FUNC(offadjustmentChanged), vb); - // gtk_signal_connect (GTK_OBJECT (slider), "changed", GTK_SIGNAL_FUNC (offsliderChanged), vb); - gtk_widget_show (hb); - gtk_box_pack_start (GTK_BOX (vb), hb, FALSE, FALSE, PAD); + // gtk_signal_connect(GTK_OBJECT(slider), "changed", GTK_SIGNAL_FUNC(offsliderChanged), vb); + gtk_widget_show(hb); + gtk_box_pack_start(GTK_BOX(vb), hb, FALSE, FALSE, PAD); // TRANSLATORS: "Stop" means: a "phase" of a gradient - f = gtk_frame_new (_("Stop Color")); - gtk_widget_show (f); - gtk_box_pack_start (GTK_BOX (vb), f, TRUE, TRUE, PAD); - csel = (GtkWidget*)sp_color_selector_new (SP_TYPE_COLOR_NOTEBOOK); - g_object_set_data (G_OBJECT (vb), "cselector", csel); - gtk_widget_show (csel); - gtk_container_add (GTK_CONTAINER (f), csel); - g_signal_connect (G_OBJECT (csel), "dragged", G_CALLBACK (sp_gradient_vector_color_dragged), vb); - g_signal_connect (G_OBJECT (csel), "changed", G_CALLBACK (sp_gradient_vector_color_changed), vb); - - gtk_widget_show (vb); - - sp_gradient_vector_widget_load_gradient (vb, gradient); - - if (select_stop) - select_stop_in_list (GTK_WIDGET(mnu), gradient, select_stop); + f = gtk_frame_new(_("Stop Color")); + gtk_widget_show(f); + gtk_box_pack_start(GTK_BOX(vb), f, TRUE, TRUE, PAD); + csel = static_cast(sp_color_selector_new(SP_TYPE_COLOR_NOTEBOOK)); + g_object_set_data(G_OBJECT(vb), "cselector", csel); + gtk_widget_show(csel); + gtk_container_add(GTK_CONTAINER(f), csel); + g_signal_connect(G_OBJECT(csel), "dragged", G_CALLBACK(sp_gradient_vector_color_dragged), vb); + g_signal_connect(G_OBJECT(csel), "changed", G_CALLBACK(sp_gradient_vector_color_changed), vb); + + gtk_widget_show(vb); + + sp_gradient_vector_widget_load_gradient(vb, gradient); + + if (select_stop) { + select_stop_in_list(GTK_WIDGET(mnu), gradient, select_stop); + } return vb; } -GtkWidget * -sp_gradient_vector_editor_new (SPGradient *gradient, SPStop *stop) +GtkWidget * sp_gradient_vector_editor_new(SPGradient *gradient, SPStop *stop) { GtkWidget *wid; if (dlg == NULL) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - dlg = sp_window_new (_("Gradient editor"), TRUE); + dlg = sp_window_new(_("Gradient editor"), TRUE); if (x == -1000 || y == -1000) { x = prefs->getInt(prefs_path + "x", -1000); y = prefs->getInt(prefs_path + "y", -1000); @@ -912,32 +903,39 @@ sp_gradient_vector_editor_new (SPGradient *gradient, SPStop *stop) h = prefs->getInt(prefs_path + "h", 0); } - if (x<0) x=0; - if (y<0) y=0; + if (x<0) { + x=0; + } + if (y<0) { + y=0; + } - if (x != 0 || y != 0) - gtk_window_move ((GtkWindow *) dlg, x, y); - else + if (x != 0 || y != 0) { + gtk_window_move(reinterpret_cast(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); + } + if (w && h) { + gtk_window_resize(reinterpret_cast(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_gradient_vector_dialog_destroy), dlg); - gtk_signal_connect (GTK_OBJECT (dlg), "delete_event", G_CALLBACK (sp_gradient_vector_dialog_delete), dlg); - g_signal_connect (G_OBJECT (INKSCAPE), "shut_down", G_CALLBACK (sp_gradient_vector_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 ); - - gtk_container_set_border_width (GTK_CONTAINER (dlg), PAD); - - wid = (GtkWidget*)sp_gradient_vector_widget_new (gradient, stop); - g_object_set_data (G_OBJECT (dlg), "gradient-vector-widget", wid); + 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_gradient_vector_dialog_destroy), dlg); + gtk_signal_connect(GTK_OBJECT(dlg), "delete_event", G_CALLBACK(sp_gradient_vector_dialog_delete), dlg); + g_signal_connect(G_OBJECT(INKSCAPE), "shut_down", G_CALLBACK(sp_gradient_vector_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 ); + + gtk_container_set_border_width(GTK_CONTAINER(dlg), PAD); + + wid = static_cast(sp_gradient_vector_widget_new(gradient, stop)); + g_object_set_data(G_OBJECT(dlg), "gradient-vector-widget", wid); /* Connect signals */ - gtk_widget_show (wid); - gtk_container_add (GTK_CONTAINER (dlg), wid); + gtk_widget_show(wid); + gtk_container_add(GTK_CONTAINER(dlg), wid); } else { // FIXME: temp fix for 0.38 // Simply load_gradient into the editor does not work for multi-stop gradients, @@ -946,29 +944,28 @@ sp_gradient_vector_editor_new (SPGradient *gradient, SPStop *stop) // and call sp_gradient_vector_editor_new again, so it creates the window anew. GdkEventAny event; - GtkWidget *widget = (GtkWidget *) dlg; + GtkWidget *widget = static_cast(dlg); event.type = GDK_DELETE; event.window = widget->window; event.send_event = TRUE; - g_object_ref (G_OBJECT (event.window)); - gtk_main_do_event ((GdkEvent*)&event); - g_object_unref (G_OBJECT (event.window)); + g_object_ref(G_OBJECT(event.window)); + gtk_main_do_event(reinterpret_cast(&event)); + g_object_unref(G_OBJECT(event.window)); - g_assert (dlg == NULL); - sp_gradient_vector_editor_new (gradient, stop); + g_assert(dlg == NULL); + sp_gradient_vector_editor_new(gradient, stop); } return dlg; } -static void -sp_gradient_vector_widget_load_gradient (GtkWidget *widget, SPGradient *gradient) +static void sp_gradient_vector_widget_load_gradient(GtkWidget *widget, SPGradient *gradient) { blocked = TRUE; SPGradient *old; - old = (SPGradient*)g_object_get_data (G_OBJECT (widget), "gradient"); + old = (SPGradient*)g_object_get_data(G_OBJECT(widget), "gradient"); if (old != gradient) { sigc::connection *release_connection; @@ -982,7 +979,7 @@ sp_gradient_vector_widget_load_gradient (GtkWidget *widget, SPGradient *gradient g_assert( modified_connection != NULL ); release_connection->disconnect(); modified_connection->disconnect(); - sp_signal_disconnect_by_data (old, widget); + sp_signal_disconnect_by_data(old, widget); } if (gradient) { @@ -1009,62 +1006,64 @@ sp_gradient_vector_widget_load_gradient (GtkWidget *widget, SPGradient *gradient g_object_set_data(G_OBJECT(widget), "gradient_modified_connection", modified_connection); } - g_object_set_data (G_OBJECT (widget), "gradient", gradient); + g_object_set_data(G_OBJECT(widget), "gradient", gradient); if (gradient) { - gtk_widget_set_sensitive (widget, TRUE); + gtk_widget_set_sensitive(widget, TRUE); - sp_gradient_ensure_vector (gradient); + sp_gradient_ensure_vector(gradient); - GtkOptionMenu *mnu = (GtkOptionMenu *)g_object_get_data (G_OBJECT(widget), "stopmenu"); - SPStop *stop = SP_STOP(g_object_get_data (G_OBJECT(gtk_menu_get_active (GTK_MENU(gtk_option_menu_get_menu (mnu)))), "stop")); + GtkOptionMenu *mnu = static_cast(g_object_get_data(G_OBJECT(widget), "stopmenu")); + SPStop *stop = SP_STOP(g_object_get_data(G_OBJECT(gtk_menu_get_active(GTK_MENU(gtk_option_menu_get_menu(mnu)))), "stop")); guint32 const c = sp_stop_get_rgba32(stop); /// get the color selector - SPColorSelector *csel = SP_COLOR_SELECTOR(g_object_get_data (G_OBJECT (widget), "cselector")); + SPColorSelector *csel = SP_COLOR_SELECTOR(g_object_get_data(G_OBJECT(widget), "cselector")); // set alpha - csel->base->setAlpha(SP_RGBA32_A_F (c)); - SPColor color( SP_RGBA32_R_F (c), SP_RGBA32_G_F (c), SP_RGBA32_B_F (c) ); + csel->base->setAlpha(SP_RGBA32_A_F(c)); + SPColor color( SP_RGBA32_R_F(c), SP_RGBA32_G_F(c), SP_RGBA32_B_F(c) ); // set color csel->base->setColor( color ); /* Fill preview */ GtkWidget *w = static_cast(g_object_get_data(G_OBJECT(widget), "preview")); - sp_gradient_image_set_gradient (SP_GRADIENT_IMAGE (w), gradient); + sp_gradient_image_set_gradient(SP_GRADIENT_IMAGE(w), gradient); - update_stop_list (GTK_WIDGET(mnu), gradient, NULL); + update_stop_list(GTK_WIDGET(mnu), gradient, NULL); // Once the user edits a gradient, it stops being auto-collectable if (SP_OBJECT_REPR(gradient)->attribute("inkscape:collect")) { - SPDocument *document = SP_OBJECT_DOCUMENT (gradient); + SPDocument *document = SP_OBJECT_DOCUMENT(gradient); bool saved = sp_document_get_undo_sensitive(document); - sp_document_set_undo_sensitive (document, false); + sp_document_set_undo_sensitive(document, false); SP_OBJECT_REPR(gradient)->setAttribute("inkscape:collect", NULL); - sp_document_set_undo_sensitive (document, saved); + sp_document_set_undo_sensitive(document, saved); } } else { // no gradient, disable everything - gtk_widget_set_sensitive (widget, FALSE); + gtk_widget_set_sensitive(widget, FALSE); } blocked = FALSE; } -static void -sp_gradient_vector_dialog_destroy (GtkObject */*object*/, gpointer /*data*/) +static void sp_gradient_vector_dialog_destroy(GtkObject */*object*/, gpointer /*data*/) { - sp_signal_disconnect_by_data (INKSCAPE, dlg); + sp_signal_disconnect_by_data(INKSCAPE, dlg); wd.win = dlg = NULL; wd.stop = 0; } -static gboolean -sp_gradient_vector_dialog_delete (GtkWidget */*widget*/, GdkEvent */*event*/, GtkWidget */*dialog*/) +static gboolean sp_gradient_vector_dialog_delete(GtkWidget */*widget*/, GdkEvent */*event*/, GtkWidget */*dialog*/) { - gtk_window_get_position ((GtkWindow *) dlg, &x, &y); - gtk_window_get_size ((GtkWindow *) dlg, &w, &h); + gtk_window_get_position(GTK_WINDOW(dlg), &x, &y); + gtk_window_get_size(GTK_WINDOW(dlg), &w, &h); - if (x<0) x=0; - if (y<0) y=0; + if (x<0) { + x=0; + } + if (y<0) { + y=0; + } Inkscape::Preferences *prefs = Inkscape::Preferences::get(); prefs->setInt(prefs_path + "x", x); @@ -1077,12 +1076,11 @@ sp_gradient_vector_dialog_delete (GtkWidget */*widget*/, GdkEvent */*event*/, Gt /* Widget destroy handler */ -static void -sp_gradient_vector_widget_destroy (GtkObject *object, gpointer /*data*/) +static void sp_gradient_vector_widget_destroy(GtkObject *object, gpointer /*data*/) { GObject *gradient; - gradient = (GObject*)g_object_get_data (G_OBJECT (object), "gradient"); + gradient = (GObject*)g_object_get_data(G_OBJECT(object), "gradient"); sigc::connection *release_connection = (sigc::connection *)g_object_get_data(G_OBJECT(object), "gradient_release_connection"); sigc::connection *modified_connection = (sigc::connection *)g_object_get_data(G_OBJECT(object), "gradient_modified_connection"); @@ -1092,27 +1090,25 @@ sp_gradient_vector_widget_destroy (GtkObject *object, gpointer /*data*/) g_assert( modified_connection != NULL ); release_connection->disconnect(); modified_connection->disconnect(); - sp_signal_disconnect_by_data (gradient, object); + sp_signal_disconnect_by_data(gradient, object); } if (gradient && SP_OBJECT_REPR(gradient)) { - sp_repr_remove_listener_by_data (SP_OBJECT_REPR(gradient), object); + sp_repr_remove_listener_by_data(SP_OBJECT_REPR(gradient), object); } } -static void -sp_gradient_vector_gradient_release (SPObject */*object*/, GtkWidget *widget) +static void sp_gradient_vector_gradient_release(SPObject */*object*/, GtkWidget *widget) { - sp_gradient_vector_widget_load_gradient (widget, NULL); + sp_gradient_vector_widget_load_gradient(widget, NULL); } -static void -sp_gradient_vector_gradient_modified (SPObject *object, guint /*flags*/, GtkWidget *widget) +static void sp_gradient_vector_gradient_modified(SPObject *object, guint /*flags*/, GtkWidget *widget) { SPGradient *gradient=SP_GRADIENT(object); if (!blocked) { blocked = TRUE; - sp_gradient_vector_widget_load_gradient (widget, gradient); + sp_gradient_vector_widget_load_gradient(widget, gradient); blocked = FALSE; } } @@ -1121,23 +1117,27 @@ static void sp_gradient_vector_color_dragged(SPColorSelector *csel, GtkObject *o { SPGradient *gradient, *ngr; - if (blocked) return; + if (blocked) { + return; + } - gradient = (SPGradient*)g_object_get_data (G_OBJECT (object), "gradient"); - if (!gradient) return; + gradient = static_cast(g_object_get_data(G_OBJECT(object), "gradient")); + if (!gradient) { + return; + } blocked = TRUE; - ngr = sp_gradient_ensure_vector_normalized (gradient); + ngr = sp_gradient_ensure_vector_normalized(gradient); if (ngr != gradient) { /* Our master gradient has changed */ - sp_gradient_vector_widget_load_gradient (GTK_WIDGET (object), ngr); + sp_gradient_vector_widget_load_gradient(GTK_WIDGET(object), ngr); } - sp_gradient_ensure_vector (ngr); + sp_gradient_ensure_vector(ngr); - GtkOptionMenu *mnu = (GtkOptionMenu *)g_object_get_data (G_OBJECT(object), "stopmenu"); - SPStop *stop = SP_STOP(g_object_get_data (G_OBJECT(gtk_menu_get_active (GTK_MENU(gtk_option_menu_get_menu (mnu)))), "stop")); + GtkOptionMenu *mnu = static_cast(g_object_get_data(G_OBJECT(object), "stopmenu")); + SPStop *stop = SP_STOP(g_object_get_data(G_OBJECT(gtk_menu_get_active(GTK_MENU(gtk_option_menu_get_menu(mnu)))), "stop")); csel->base->getColorAlpha(stop->specified_color, &stop->opacity); @@ -1146,54 +1146,57 @@ static void sp_gradient_vector_color_dragged(SPColorSelector *csel, GtkObject *o blocked = FALSE; } -static void -sp_gradient_vector_color_changed (SPColorSelector *csel, GtkObject *object) +static void sp_gradient_vector_color_changed(SPColorSelector *csel, GtkObject *object) { SPColor color; float alpha; guint32 rgb; - if (blocked) return; + if (blocked) { + return; + } - SPGradient *gradient = (SPGradient*)g_object_get_data (G_OBJECT (object), "gradient"); - if (!gradient) return; + SPGradient *gradient = static_cast(g_object_get_data(G_OBJECT(object), "gradient")); + if (!gradient) { + return; + } blocked = TRUE; - SPGradient *ngr = sp_gradient_ensure_vector_normalized (gradient); + SPGradient *ngr = sp_gradient_ensure_vector_normalized(gradient); if (ngr != gradient) { /* Our master gradient has changed */ - sp_gradient_vector_widget_load_gradient (GTK_WIDGET (object), ngr); + sp_gradient_vector_widget_load_gradient(GTK_WIDGET(object), ngr); } - sp_gradient_ensure_vector (ngr); + sp_gradient_ensure_vector(ngr); /* Set start parameters */ /* We rely on normalized vector, i.e. stops HAVE to exist */ g_return_if_fail(ngr->getFirstStop() != NULL); - GtkOptionMenu *mnu = (GtkOptionMenu *)g_object_get_data (G_OBJECT(object), "stopmenu"); - SPStop *stop = SP_STOP(g_object_get_data (G_OBJECT(gtk_menu_get_active (GTK_MENU(gtk_option_menu_get_menu (mnu)))), "stop")); + GtkOptionMenu *mnu = static_cast(g_object_get_data(G_OBJECT(object), "stopmenu")); + SPStop *stop = SP_STOP(g_object_get_data(G_OBJECT(gtk_menu_get_active(GTK_MENU(gtk_option_menu_get_menu(mnu)))), "stop")); - csel = (SPColorSelector*)g_object_get_data (G_OBJECT (object), "cselector"); + csel = static_cast(g_object_get_data(G_OBJECT(object), "cselector")); csel->base->getColorAlpha( color, &alpha ); rgb = color.toRGBA32( 0x00 ); - sp_repr_set_css_double (SP_OBJECT_REPR (stop), "offset", stop->offset); + sp_repr_set_css_double(SP_OBJECT_REPR(stop), "offset", stop->offset); Inkscape::CSSOStringStream os; gchar c[64]; - sp_svg_write_color (c, sizeof(c), rgb); - os << "stop-color:" << c << ";stop-opacity:" << (gdouble) alpha <<";"; - SP_OBJECT_REPR (stop)->setAttribute("style", os.str().c_str()); - // g_snprintf (c, 256, "stop-color:#%06x;stop-opacity:%g;", rgb >> 8, (gdouble) alpha); - //SP_OBJECT_REPR (stop)->setAttribute("style", c); + sp_svg_write_color(c, sizeof(c), rgb); + os << "stop-color:" << c << ";stop-opacity:" << static_cast(alpha) <<";"; + SP_OBJECT_REPR(stop)->setAttribute("style", os.str().c_str()); + // g_snprintf(c, 256, "stop-color:#%06x;stop-opacity:%g;", rgb >> 8, static_cast(alpha)); + //SP_OBJECT_REPR(stop)->setAttribute("style", c); - sp_document_done (SP_OBJECT_DOCUMENT (ngr), SP_VERB_CONTEXT_GRADIENT, + sp_document_done(SP_OBJECT_DOCUMENT(ngr), SP_VERB_CONTEXT_GRADIENT, _("Change gradient stop color")); blocked = FALSE; - SPColorPreview *cpv = (SPColorPreview *)g_object_get_data (G_OBJECT(gtk_menu_get_active (GTK_MENU(gtk_option_menu_get_menu (mnu)))), "preview"); + SPColorPreview *cpv = static_cast(g_object_get_data(G_OBJECT(gtk_menu_get_active(GTK_MENU(gtk_option_menu_get_menu(mnu)))), "preview")); sp_color_preview_set_rgba32(cpv, sp_stop_get_rgba32(stop)); } -- cgit v1.2.3 From 219bb6583ceec088cdbafecfffa04f58a89a1c75 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sun, 7 Mar 2010 15:14:39 -0800 Subject: Restore node toolbar buttons that were just commented out. Fixes bug #534045. Fixed bugs: - https://launchpad.net/bugs/534045 (bzr r9161) --- src/widgets/toolbox.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index 8b12a7a5e..88a5440e6 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -301,9 +301,9 @@ static gchar const * ui_descr = " " " " " " - //" " - //" " - //" " + " " + " " + " " " " " " " " -- cgit v1.2.3 From 885e415aa5fcdcd01c6ecae0a804d65a101764e0 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sun, 7 Mar 2010 16:08:32 -0800 Subject: Move new "NodesShow*" action to be with the existing ones on the toolbar. (bzr r9162) --- src/widgets/toolbox.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/widgets') diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index 88a5440e6..b4324ca0d 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -282,7 +282,6 @@ static gchar const * ui_descr = " " " " - " " " " " " " " @@ -312,6 +311,7 @@ static gchar const * ui_descr = " " " " " " + " " " " " " " " -- cgit v1.2.3 From e0a60a7ea64f3576bac00b84c440769c7221e1c3 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sun, 7 Mar 2010 17:31:49 -0800 Subject: Cleanup of gradients and stops. (bzr r9163) --- src/widgets/gradient-vector.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index 0b3c13820..751898f4f 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -583,8 +583,6 @@ static void update_stop_list( GtkWidget *mnu, SPGradient *gradient, SPStop *new_ // user selected existing stop from list static void sp_grad_edit_select(GtkOptionMenu *mnu, GtkWidget *tbl) { - SPGradient *gradient = (SPGradient *)g_object_get_data(G_OBJECT(tbl), "gradient"); - GObject *item = G_OBJECT(gtk_menu_get_active(GTK_MENU(gtk_option_menu_get_menu(mnu)))); SPStop *stop = SP_STOP(g_object_get_data(item, "stop")); if (!stop) { @@ -607,7 +605,7 @@ static void sp_grad_edit_select(GtkOptionMenu *mnu, GtkWidget *tbl) bool isEndStop = false; SPStop *prev = NULL; - prev = sp_prev_stop(stop, gradient); + prev = stop->getPrevStop(); if (prev != NULL ) { adj->lower = prev->offset; } else { @@ -616,7 +614,7 @@ static void sp_grad_edit_select(GtkOptionMenu *mnu, GtkWidget *tbl) } SPStop *next = NULL; - next = sp_next_stop(stop); + next = stop->getNextStop(); if (next != NULL ) { adj->upper = next->offset; } else { @@ -691,10 +689,10 @@ static void sp_grd_ed_add_stop(GtkWidget */*widget*/, GtkWidget *vb) Inkscape::XML::Node *new_stop_repr = NULL; - SPStop *next = sp_next_stop(stop); + SPStop *next = stop->getNextStop(); if (next == NULL) { - SPStop *prev = sp_prev_stop(stop, gradient); + SPStop *prev = stop->getPrevStop(); if (prev != NULL) { next = stop; stop = prev; @@ -706,8 +704,8 @@ static void sp_grd_ed_add_stop(GtkWidget */*widget*/, GtkWidget *vb) SP_OBJECT_REPR(gradient)->addChild(new_stop_repr, SP_OBJECT_REPR(stop)); } else { next = stop; - new_stop_repr = SP_OBJECT_REPR(sp_prev_stop(stop, gradient))->duplicate(SP_OBJECT_REPR(gradient)->document()); - SP_OBJECT_REPR(gradient)->addChild(new_stop_repr, SP_OBJECT_REPR(sp_prev_stop(stop, gradient))); + new_stop_repr = SP_OBJECT_REPR(stop->getPrevStop())->duplicate(SP_OBJECT_REPR(gradient)->document()); + SP_OBJECT_REPR(gradient)->addChild(new_stop_repr, SP_OBJECT_REPR(stop->getPrevStop())); } SPStop *newstop = (SPStop *) SP_OBJECT_DOCUMENT(gradient)->getObjectByRepr(new_stop_repr); @@ -748,13 +746,13 @@ static void sp_grd_ed_del_stop(GtkWidget */*widget*/, GtkWidget *vb) // if we delete first or last stop, move the next/previous to the edge if (stop->offset == 0) { - SPStop *next = sp_next_stop(stop); + SPStop *next = stop->getNextStop(); if (next) { next->offset = 0; sp_repr_set_css_double(SP_OBJECT_REPR(next), "offset", 0); } } else if (stop->offset == 1) { - SPStop *prev = sp_prev_stop(stop, gradient); + SPStop *prev = stop->getPrevStop(); if (prev) { prev->offset = 1; sp_repr_set_css_double(SP_OBJECT_REPR(prev), "offset", 1); -- cgit v1.2.3 From bf07185f8dd1ac62e867214ea51e541de1b06f45 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sun, 7 Mar 2010 20:27:39 -0800 Subject: Cleanup of gradient-selector to allow for new mode. (bzr r9164) --- src/widgets/gradient-selector.cpp | 73 +++++++++++++++------------------------ src/widgets/gradient-selector.h | 47 ++++++++++++++----------- src/widgets/paint-selector.cpp | 28 +++++++++------ 3 files changed, 71 insertions(+), 77 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/gradient-selector.cpp b/src/widgets/gradient-selector.cpp index f24a6781b..1a98c68dc 100644 --- a/src/widgets/gradient-selector.cpp +++ b/src/widgets/gradient-selector.cpp @@ -4,9 +4,11 @@ * Authors: * Lauris Kaplinski * bulia byak + * Jon A. Cruz * * Copyright (C) 2001-2002 Lauris Kaplinski * Copyright (C) 2001 Ximian, Inc. + * Copyright (C) 2010 Jon A. Cruz * * Released under GNU GPL, read the file 'COPYING' for more information */ @@ -120,7 +122,7 @@ sp_gradient_selector_init (SPGradientSelector *sel) { GtkWidget *hb, *l, *m, *mi; - sel->mode = SP_GRADIENT_SELECTOR_MODE_LINEAR; + sel->mode = SPGradientSelector::MODE_LINEAR; sel->gradientUnits = SP_GRADIENT_UNITS_USERSPACEONUSE; sel->gradientSpread = SP_GRADIENT_SPREAD_PAD; @@ -206,77 +208,58 @@ sp_gradient_selector_new (void) return (GtkWidget *) sel; } -void -sp_gradient_selector_set_mode (SPGradientSelector *sel, guint mode) +void SPGradientSelector::setMode(SelectorMode mode) { - g_return_if_fail (sel != NULL); - g_return_if_fail (SP_IS_GRADIENT_SELECTOR (sel)); - - sel->mode = mode; + this->mode = mode; } -void -sp_gradient_selector_set_units (SPGradientSelector *sel, guint units) +void SPGradientSelector::setUnits(SPGradientUnits units) { - g_return_if_fail (sel != NULL); - g_return_if_fail (SP_IS_GRADIENT_SELECTOR (sel)); - - sel->gradientUnits = (SPGradientUnits)units; + gradientUnits = units; } -void -sp_gradient_selector_set_spread (SPGradientSelector *sel, guint spread) +void SPGradientSelector::setSpread(SPGradientSpread spread) { - g_return_if_fail (sel != NULL); - g_return_if_fail (SP_IS_GRADIENT_SELECTOR (sel)); - - sel->gradientSpread = (SPGradientSpread)spread; + gradientSpread = spread; - gtk_option_menu_set_history (GTK_OPTION_MENU (sel->spread), sel->gradientSpread); + gtk_option_menu_set_history(GTK_OPTION_MENU(spread), gradientSpread); } -SPGradientUnits -sp_gradient_selector_get_units (SPGradientSelector *sel) +SPGradientUnits SPGradientSelector::getUnits() { - return (SPGradientUnits) sel->gradientUnits; + //return (SPGradientUnits) sel->gradientUnits; + return gradientUnits; } -SPGradientSpread -sp_gradient_selector_get_spread (SPGradientSelector *sel) +SPGradientSpread SPGradientSelector::getSpread() { - return (SPGradientSpread) sel->gradientSpread; + return gradientSpread; } -void -sp_gradient_selector_set_vector (SPGradientSelector *sel, SPDocument *doc, SPGradient *vector) +void SPGradientSelector::setVector(SPDocument *doc, SPGradient *vector) { - g_return_if_fail (sel != NULL); - g_return_if_fail (SP_IS_GRADIENT_SELECTOR (sel)); - g_return_if_fail (!vector || SP_IS_GRADIENT (vector)); - g_return_if_fail (!vector || (SP_OBJECT_DOCUMENT (vector) == doc)); + g_return_if_fail(!vector || SP_IS_GRADIENT(vector)); + g_return_if_fail(!vector || (SP_OBJECT_DOCUMENT(vector) == doc)); - if (vector && !SP_GRADIENT_HAS_STOPS (vector)) + if (vector && !SP_GRADIENT_HAS_STOPS(vector)) { return; + } - sp_gradient_vector_selector_set_gradient (SP_GRADIENT_VECTOR_SELECTOR (sel->vectors), doc, vector); + sp_gradient_vector_selector_set_gradient(SP_GRADIENT_VECTOR_SELECTOR(vectors), doc, vector); if (vector) { - gtk_widget_set_sensitive (sel->edit, TRUE); - gtk_widget_set_sensitive (sel->add, TRUE); + gtk_widget_set_sensitive(edit, TRUE); + gtk_widget_set_sensitive(add, TRUE); } else { - gtk_widget_set_sensitive (sel->edit, FALSE); - gtk_widget_set_sensitive (sel->add, (doc != NULL)); + gtk_widget_set_sensitive(edit, FALSE); + gtk_widget_set_sensitive(add, (doc != NULL)); } } -SPGradient * -sp_gradient_selector_get_vector (SPGradientSelector *sel) +SPGradient *SPGradientSelector::getVector() { - if (sel == NULL || !SP_IS_GRADIENT_SELECTOR (sel)) - return NULL; - /* fixme: */ - return SP_GRADIENT_VECTOR_SELECTOR (sel->vectors)->gr; + return SP_GRADIENT_VECTOR_SELECTOR(vectors)->gr; } static void @@ -287,7 +270,7 @@ sp_gradient_selector_vector_set (SPGradientVectorSelector */*gvs*/, SPGradient * if (!blocked) { blocked = TRUE; gr = sp_gradient_ensure_vector_normalized (gr); - sp_gradient_selector_set_vector (sel, (gr) ? SP_OBJECT_DOCUMENT (gr) : NULL, gr); + sel->setVector((gr) ? SP_OBJECT_DOCUMENT (gr) : 0, gr); g_signal_emit (G_OBJECT (sel), signals[CHANGED], 0, gr); blocked = FALSE; } diff --git a/src/widgets/gradient-selector.h b/src/widgets/gradient-selector.h index e68dfecfc..85674b4a9 100644 --- a/src/widgets/gradient-selector.h +++ b/src/widgets/gradient-selector.h @@ -6,16 +6,21 @@ * * Authors: * Lauris Kaplinski + * Jon A. Cruz * * Copyright (C) 2001-2002 Lauris Kaplinski * Copyright (C) 2001 Ximian, Inc. + * Copyright (C) 2010 Jon A. Cruz * * Released under GNU GPL, read the file 'COPYING' for more information */ #include +#include +#include "sp-gradient.h" #include "sp-gradient-spread.h" #include "sp-gradient-units.h" + class SPGradient; #define SP_TYPE_GRADIENT_SELECTOR (sp_gradient_selector_get_type ()) @@ -24,32 +29,41 @@ class SPGradient; #define SP_IS_GRADIENT_SELECTOR(o) (GTK_CHECK_TYPE ((o), SP_TYPE_GRADIENT_SELECTOR)) #define SP_IS_GRADIENT_SELECTOR_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_GRADIENT_SELECTOR)) -#include -#include -#include "../forward.h" -#include -enum { - SP_GRADIENT_SELECTOR_MODE_LINEAR, - SP_GRADIENT_SELECTOR_MODE_RADIAL -}; struct SPGradientSelector { GtkVBox vbox; - guint mode : 1; + enum SelectorMode { + MODE_LINEAR, + MODE_RADIAL + }; + + SelectorMode mode; - SPGradientUnits gradientUnits : 1; - SPGradientSpread gradientSpread : 2; + SPGradientUnits gradientUnits; + SPGradientSpread gradientSpread; /* Vector selector */ GtkWidget *vectors; + /* Editing buttons */ - GtkWidget *edit, *add; + GtkWidget *edit; + GtkWidget *add; + /* Position widget */ GtkWidget *position; + /* Spread selector */ GtkWidget *spread; + + void setMode(SelectorMode mode); + void setUnits(SPGradientUnits units); + void setSpread(SPGradientSpread spread); + void setVector(SPDocument *doc, SPGradient *vector); + SPGradientUnits getUnits(); + SPGradientSpread getSpread(); + SPGradient *getVector(); }; struct SPGradientSelectorClass { @@ -65,17 +79,8 @@ GType sp_gradient_selector_get_type(void); GtkWidget *sp_gradient_selector_new (void); -void sp_gradient_selector_set_mode (SPGradientSelector *sel, guint mode); -void sp_gradient_selector_set_units (SPGradientSelector *sel, guint units); -void sp_gradient_selector_set_spread (SPGradientSelector *sel, guint spread); -void sp_gradient_selector_set_vector (SPGradientSelector *sel, SPDocument *doc, SPGradient *vector); void sp_gradient_selector_set_bbox (SPGradientSelector *sel, gdouble x0, gdouble y0, gdouble x1, gdouble y1); -SPGradientUnits sp_gradient_selector_get_units (SPGradientSelector *sel); -SPGradientSpread sp_gradient_selector_get_spread (SPGradientSelector *sel); - -SPGradient *sp_gradient_selector_get_vector (SPGradientSelector *sel); - #endif // SEEN_GRADIENT_SELECTOR_H diff --git a/src/widgets/paint-selector.cpp b/src/widgets/paint-selector.cpp index b91f24105..59312b0d2 100644 --- a/src/widgets/paint-selector.cpp +++ b/src/widgets/paint-selector.cpp @@ -426,8 +426,8 @@ sp_paint_selector_set_gradient_linear(SPPaintSelector *psel, SPGradient *vector) gsel = (SPGradientSelector*)gtk_object_get_data(GTK_OBJECT(psel->selector), "gradient-selector"); - sp_gradient_selector_set_mode(gsel, SP_GRADIENT_SELECTOR_MODE_LINEAR); - sp_gradient_selector_set_vector(gsel, (vector) ? SP_OBJECT_DOCUMENT(vector) : NULL, vector); + gsel->setMode(SPGradientSelector::MODE_LINEAR); + gsel->setVector((vector) ? SP_OBJECT_DOCUMENT(vector) : 0, vector); } void @@ -441,8 +441,9 @@ sp_paint_selector_set_gradient_radial(SPPaintSelector *psel, SPGradient *vector) gsel = (SPGradientSelector*)gtk_object_get_data(GTK_OBJECT(psel->selector), "gradient-selector"); - sp_gradient_selector_set_mode(gsel, SP_GRADIENT_SELECTOR_MODE_RADIAL); - sp_gradient_selector_set_vector(gsel, (vector) ? SP_OBJECT_DOCUMENT(vector) : NULL, vector); + gsel->setMode(SPGradientSelector::MODE_RADIAL); + + gsel->setVector((vector) ? SP_OBJECT_DOCUMENT(vector) : 0, vector); } void @@ -453,8 +454,8 @@ sp_paint_selector_set_gradient_properties(SPPaintSelector *psel, SPGradientUnits g_return_if_fail((psel->mode == SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR) || (psel->mode == SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL)); gsel = (SPGradientSelector*)gtk_object_get_data(GTK_OBJECT(psel->selector), "gradient-selector"); - sp_gradient_selector_set_units(gsel, units); - sp_gradient_selector_set_spread(gsel, spread); + gsel->setUnits(units); + gsel->setSpread(spread); } void @@ -465,8 +466,12 @@ sp_paint_selector_get_gradient_properties(SPPaintSelector *psel, SPGradientUnits g_return_if_fail((psel->mode == SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR) || (psel->mode == SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL)); gsel = (SPGradientSelector*)gtk_object_get_data(GTK_OBJECT(psel->selector), "gradient-selector"); - if (units) *units = sp_gradient_selector_get_units(gsel); - if (spread) *spread = sp_gradient_selector_get_spread(gsel); + if (units) { + *units = gsel->getUnits(); + } + if (spread) { + *spread = gsel->getSpread(); + } } /** @@ -496,7 +501,7 @@ sp_paint_selector_get_gradient_vector(SPPaintSelector *psel) gsel = (SPGradientSelector*)gtk_object_get_data(GTK_OBJECT(psel->selector), "gradient-selector"); - return sp_gradient_selector_get_vector(gsel); + return gsel->getVector(); } void @@ -720,10 +725,11 @@ sp_paint_selector_set_mode_gradient(SPPaintSelector *psel, SPPaintSelectorMode m /* Actually we have to set option menu history here */ if (mode == SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR) { - sp_gradient_selector_set_mode(SP_GRADIENT_SELECTOR(gsel), SP_GRADIENT_SELECTOR_MODE_LINEAR); + SP_GRADIENT_SELECTOR(gsel)->setMode(SPGradientSelector::MODE_LINEAR); + //sp_gradient_selector_set_mode(SP_GRADIENT_SELECTOR(gsel), SP_GRADIENT_SELECTOR_MODE_LINEAR); gtk_frame_set_label(GTK_FRAME(psel->frame), _("Linear gradient")); } else { - sp_gradient_selector_set_mode(SP_GRADIENT_SELECTOR(gsel), SP_GRADIENT_SELECTOR_MODE_RADIAL); + SP_GRADIENT_SELECTOR(gsel)->setMode(SPGradientSelector::MODE_RADIAL); gtk_frame_set_label(GTK_FRAME(psel->frame), _("Radial gradient")); } #ifdef SP_PS_VERBOSE -- cgit v1.2.3 From 8f648299359e469fa96a6bd5678ab8856ccdcafe Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sun, 7 Mar 2010 21:43:54 -0800 Subject: Follow-up fix of member/parameter name collision. (bzr r9165) --- src/widgets/gradient-selector.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/widgets') diff --git a/src/widgets/gradient-selector.cpp b/src/widgets/gradient-selector.cpp index 1a98c68dc..ada9b2f09 100644 --- a/src/widgets/gradient-selector.cpp +++ b/src/widgets/gradient-selector.cpp @@ -222,7 +222,7 @@ void SPGradientSelector::setSpread(SPGradientSpread spread) { gradientSpread = spread; - gtk_option_menu_set_history(GTK_OPTION_MENU(spread), gradientSpread); + gtk_option_menu_set_history(GTK_OPTION_MENU(this->spread), gradientSpread); } SPGradientUnits SPGradientSelector::getUnits() -- cgit v1.2.3 From be18b3457f1b5c1205cdd45eae0a8a19b9c3e7b3 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Tue, 9 Mar 2010 02:12:09 -0800 Subject: Initial F&S dialog setting of swatch colors. (bzr r9169) --- src/widgets/fill-style.cpp | 16 ++--- src/widgets/gradient-selector.cpp | 32 +++++++-- src/widgets/gradient-selector.h | 4 +- src/widgets/gradient-toolbar.cpp | 4 +- src/widgets/gradient-vector.cpp | 10 ++- src/widgets/gradient-vector.h | 7 ++ src/widgets/paint-selector.cpp | 133 +++++++++++++++++++++++--------------- src/widgets/paint-selector.h | 2 +- src/widgets/stroke-style.cpp | 7 +- 9 files changed, 140 insertions(+), 75 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/fill-style.cpp b/src/widgets/fill-style.cpp index 0b08f36b5..87cd238a7 100644 --- a/src/widgets/fill-style.cpp +++ b/src/widgets/fill-style.cpp @@ -210,10 +210,11 @@ sp_fill_style_widget_update (SPWidget *spw) SPPaintServer *server = SP_STYLE_FILL_SERVER (query); - if (server && server->isSwatch()) { - sp_paint_selector_set_swatch( psel, server ); + if (server && SP_IS_GRADIENT(server) && SP_GRADIENT(server)->getVector()->isSwatch()) { + SPGradient *vector = SP_GRADIENT(server)->getVector(); + sp_paint_selector_set_swatch( psel, vector ); } else if (SP_IS_LINEARGRADIENT (server)) { - SPGradient *vector = sp_gradient_get_vector (SP_GRADIENT (server), FALSE); + SPGradient *vector = SP_GRADIENT(server)->getVector(); sp_paint_selector_set_gradient_linear (psel, vector); SPLinearGradient *lg = SP_LINEARGRADIENT (server); @@ -221,7 +222,7 @@ sp_fill_style_widget_update (SPWidget *spw) SP_GRADIENT_UNITS (lg), SP_GRADIENT_SPREAD (lg)); } else if (SP_IS_RADIALGRADIENT (server)) { - SPGradient *vector = sp_gradient_get_vector (SP_GRADIENT (server), FALSE); + SPGradient *vector = SP_GRADIENT(server)->getVector(); sp_paint_selector_set_gradient_radial (psel, vector); SPRadialGradient *rg = SP_RADIALGRADIENT (server); @@ -411,8 +412,9 @@ sp_fill_style_widget_paint_changed ( SPPaintSelector *psel, case SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR: case SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL: + case SP_PAINT_SELECTOR_MODE_SWATCH: if (items) { - SPGradientType const gradient_type = ( psel->mode == SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR + SPGradientType const gradient_type = ( psel->mode != SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL ? SP_GRADIENT_TYPE_LINEAR : SP_GRADIENT_TYPE_RADIAL ); @@ -518,10 +520,6 @@ sp_fill_style_widget_paint_changed ( SPPaintSelector *psel, break; - case SP_PAINT_SELECTOR_MODE_SWATCH: - // TODO - break; - case SP_PAINT_SELECTOR_MODE_UNSET: if (items) { SPCSSAttr *css = sp_repr_css_attr_new (); diff --git a/src/widgets/gradient-selector.cpp b/src/widgets/gradient-selector.cpp index ada9b2f09..bc2413730 100644 --- a/src/widgets/gradient-selector.cpp +++ b/src/widgets/gradient-selector.cpp @@ -120,7 +120,7 @@ sp_gradient_selector_class_init (SPGradientSelectorClass *klass) static void sp_gradient_selector_init (SPGradientSelector *sel) { - GtkWidget *hb, *l, *m, *mi; + GtkWidget *hb, *m, *mi; sel->mode = SPGradientSelector::MODE_LINEAR; @@ -182,9 +182,9 @@ sp_gradient_selector_init (SPGradientSelector *sel) gtk_option_menu_set_menu (GTK_OPTION_MENU (sel->spread), m); - l = gtk_label_new (_("Repeat:")); - gtk_widget_show (l); - gtk_box_pack_end (GTK_BOX (hb), l, FALSE, FALSE, 4); + sel->spreadLbl = gtk_label_new (_("Repeat:")); + gtk_widget_show(sel->spreadLbl); + gtk_box_pack_end(GTK_BOX(hb), sel->spreadLbl, FALSE, FALSE, 4); } static void @@ -210,7 +210,28 @@ sp_gradient_selector_new (void) void SPGradientSelector::setMode(SelectorMode mode) { - this->mode = mode; + if (mode != this->mode) { + this->mode = mode; + if (mode == MODE_SWATCH) { + if (spread) { + GtkWidget *parent = gtk_widget_get_parent(spread); + if (parent) { + gtk_container_remove(GTK_CONTAINER(parent), spread); + spread = 0; + } + } + if (spreadLbl) { + GtkWidget *parent = gtk_widget_get_parent(spreadLbl); + if (parent) { + gtk_container_remove(GTK_CONTAINER(parent), spreadLbl); + spreadLbl = 0; + } + } + + SPGradientVectorSelector* vs = SP_GRADIENT_VECTOR_SELECTOR(vectors); + vs->setSwatched(); + } + } } void SPGradientSelector::setUnits(SPGradientUnits units) @@ -227,7 +248,6 @@ void SPGradientSelector::setSpread(SPGradientSpread spread) SPGradientUnits SPGradientSelector::getUnits() { - //return (SPGradientUnits) sel->gradientUnits; return gradientUnits; } diff --git a/src/widgets/gradient-selector.h b/src/widgets/gradient-selector.h index 85674b4a9..25f561a6e 100644 --- a/src/widgets/gradient-selector.h +++ b/src/widgets/gradient-selector.h @@ -36,7 +36,8 @@ struct SPGradientSelector { enum SelectorMode { MODE_LINEAR, - MODE_RADIAL + MODE_RADIAL, + MODE_SWATCH }; SelectorMode mode; @@ -56,6 +57,7 @@ struct SPGradientSelector { /* Spread selector */ GtkWidget *spread; + GtkWidget *spreadLbl; void setMode(SelectorMode mode); void setUnits(SPGradientUnits units); diff --git a/src/widgets/gradient-toolbar.cpp b/src/widgets/gradient-toolbar.cpp index 784e3f20f..077e038e7 100644 --- a/src/widgets/gradient-toolbar.cpp +++ b/src/widgets/gradient-toolbar.cpp @@ -315,7 +315,7 @@ void gr_read_selection( Inkscape::Selection *selection, if (style && (style->fill.isPaintserver())) { SPObject *server = SP_OBJECT_STYLE_FILL_SERVER (item); if (SP_IS_GRADIENT(server)) { - SPGradient *gradient = sp_gradient_get_vector (SP_GRADIENT (server), false); + SPGradient *gradient = SP_GRADIENT(server)->getVector(); SPGradientSpread spread = sp_gradient_get_spread (SP_GRADIENT (server)); if (gradient && gradient->isSolid()) { @@ -341,7 +341,7 @@ void gr_read_selection( Inkscape::Selection *selection, if (style && (style->stroke.isPaintserver())) { SPObject *server = SP_OBJECT_STYLE_STROKE_SERVER (item); if (SP_IS_GRADIENT(server)) { - SPGradient *gradient = sp_gradient_get_vector (SP_GRADIENT (server), false); + SPGradient *gradient = SP_GRADIENT(server)->getVector(); SPGradientSpread spread = sp_gradient_get_spread (SP_GRADIENT (server)); if (gradient && gradient->isSolid()) { diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index 751898f4f..147077f44 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -116,6 +116,8 @@ static void sp_gradient_vector_selector_init(SPGradientVectorSelector *gvs) { gvs->idlabel = TRUE; + gvs->swatched = false; + gvs->doc = NULL; gvs->gr = NULL; @@ -250,7 +252,7 @@ static void sp_gvs_rebuild_gui_full(SPGradientVectorSelector *gvs) const GSList *gradients = sp_document_get_resource_list(SP_OBJECT_DOCUMENT(gvs->gr), "gradient"); for (const GSList *curr = gradients; curr; curr = curr->next) { SPGradient* grad = SP_GRADIENT(curr->data); - if (SP_GRADIENT_HAS_STOPS(grad) && !grad->isSwatch()) { + if (SP_GRADIENT_HAS_STOPS(grad) && (grad->isSwatch() == gvs->swatched)) { gl = g_slist_prepend(gl, curr->data); } } @@ -402,6 +404,12 @@ static void sp_gvs_defs_modified(SPObject */*defs*/, guint /*flags*/, SPGradient sp_gvs_rebuild_gui_full(gvs); } +void SPGradientVectorSelector::setSwatched() +{ + swatched = true; + sp_gvs_rebuild_gui_full(this); +} + /*################################################################## ### Vector Editing Widget ##################################################################*/ diff --git a/src/widgets/gradient-vector.h b/src/widgets/gradient-vector.h index ea1f5159f..ceca9158c 100644 --- a/src/widgets/gradient-vector.h +++ b/src/widgets/gradient-vector.h @@ -6,7 +6,9 @@ * * Author: * Lauris Kaplinski + * Jon A. Cruz * + * Copyright (C) 2010 Jon A. Cruz * Copyright (C) 2001-2002 Lauris Kaplinski * Copyright (C) 2001 Ximian, Inc. * @@ -31,6 +33,8 @@ struct SPGradientVectorSelector { guint idlabel : 1; + bool swatched; + SPDocument *doc; SPGradient *gr; @@ -40,6 +44,9 @@ struct SPGradientVectorSelector { sigc::connection gradient_release_connection; sigc::connection defs_release_connection; sigc::connection defs_modified_connection; + + + void setSwatched(); }; struct SPGradientVectorSelectorClass { diff --git a/src/widgets/paint-selector.cpp b/src/widgets/paint-selector.cpp index 59312b0d2..5898563a5 100644 --- a/src/widgets/paint-selector.cpp +++ b/src/widgets/paint-selector.cpp @@ -92,6 +92,40 @@ static void sp_paint_selector_set_style_buttons(SPPaintSelector *psel, GtkWidget static GtkVBoxClass *parent_class; static guint psel_signals[LAST_SIGNAL] = {0}; +#ifdef SP_PS_VERBOSE +static gchar const* modeStrings[] = { + "MODE_EMPTY", + "MODE_MULTIPLE", + "MODE_NONE", + "MODE_COLOR_RGB", + "MODE_COLOR_CMYK", + "MODE_GRADIENT_LINEAR", + "MODE_GRADIENT_RADIAL", + "MODE_PATTERN", + "MODE_SWATCH", + "MODE_UNSET", + ".", + ".", + ".", +}; +#endif + +static bool isPaintModeGradient( SPPaintSelectorMode mode ) +{ + bool isGrad = (mode == SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR) || + (mode == SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL) || + (mode == SP_PAINT_SELECTOR_MODE_SWATCH); + + return isGrad; +} + +static SPGradientSelector *getGradientFromData(SPPaintSelector *psel) +{ + gchar const* key = (psel->mode == SP_PAINT_SELECTOR_MODE_SWATCH) ? "swatch-selector" : "gradient-selector"; + SPGradientSelector *grad = reinterpret_cast(gtk_object_get_data(GTK_OBJECT(psel->selector), key)); + return grad; +} + GType sp_paint_selector_get_type(void) { static GtkType type = 0; @@ -330,7 +364,7 @@ sp_paint_selector_set_mode(SPPaintSelector *psel, SPPaintSelectorMode mode) if (psel->mode != mode) { psel->update = TRUE; #ifdef SP_PS_VERBOSE - g_print("Mode change %d -> %d\n", psel->mode, mode); + g_print("Mode change %d -> %d %s -> %s\n", psel->mode, mode, modeStrings[psel->mode], modeStrings[mode]); #endif switch (mode) { case SP_PAINT_SELECTOR_MODE_EMPTY: @@ -407,24 +441,27 @@ sp_paint_selector_set_color_alpha(SPPaintSelector *psel, SPColor const *color, f csel->base->setColorAlpha( *color, alpha ); } -void sp_paint_selector_set_swatch(SPPaintSelector *psel, SPPaintServer */*server*/ ) +void sp_paint_selector_set_swatch(SPPaintSelector *psel, SPGradient *vector ) { #ifdef SP_PS_VERBOSE g_print("PaintSelector set SWATCH\n"); #endif sp_paint_selector_set_mode(psel, SP_PAINT_SELECTOR_MODE_SWATCH); + + SPGradientSelector *gsel = static_cast(gtk_object_get_data(GTK_OBJECT(psel->selector), "swatch-selector")); + + gsel->setVector((vector) ? SP_OBJECT_DOCUMENT(vector) : 0, vector); } void sp_paint_selector_set_gradient_linear(SPPaintSelector *psel, SPGradient *vector) { - SPGradientSelector *gsel; #ifdef SP_PS_VERBOSE g_print("PaintSelector set GRADIENT LINEAR\n"); #endif sp_paint_selector_set_mode(psel, SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR); - gsel = (SPGradientSelector*)gtk_object_get_data(GTK_OBJECT(psel->selector), "gradient-selector"); + SPGradientSelector *gsel = getGradientFromData(psel); gsel->setMode(SPGradientSelector::MODE_LINEAR); gsel->setVector((vector) ? SP_OBJECT_DOCUMENT(vector) : 0, vector); @@ -433,39 +470,34 @@ sp_paint_selector_set_gradient_linear(SPPaintSelector *psel, SPGradient *vector) void sp_paint_selector_set_gradient_radial(SPPaintSelector *psel, SPGradient *vector) { - SPGradientSelector *gsel; #ifdef SP_PS_VERBOSE g_print("PaintSelector set GRADIENT RADIAL\n"); #endif sp_paint_selector_set_mode(psel, SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL); - gsel = (SPGradientSelector*)gtk_object_get_data(GTK_OBJECT(psel->selector), "gradient-selector"); + SPGradientSelector *gsel = getGradientFromData(psel); gsel->setMode(SPGradientSelector::MODE_RADIAL); gsel->setVector((vector) ? SP_OBJECT_DOCUMENT(vector) : 0, vector); } -void -sp_paint_selector_set_gradient_properties(SPPaintSelector *psel, SPGradientUnits units, SPGradientSpread spread) +void sp_paint_selector_set_gradient_properties(SPPaintSelector *psel, SPGradientUnits units, SPGradientSpread spread) { - SPGradientSelector *gsel; g_return_if_fail(SP_IS_PAINT_SELECTOR(psel)); - g_return_if_fail((psel->mode == SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR) || - (psel->mode == SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL)); - gsel = (SPGradientSelector*)gtk_object_get_data(GTK_OBJECT(psel->selector), "gradient-selector"); + g_return_if_fail(isPaintModeGradient(psel->mode)); + + SPGradientSelector *gsel = getGradientFromData(psel); gsel->setUnits(units); gsel->setSpread(spread); } -void -sp_paint_selector_get_gradient_properties(SPPaintSelector *psel, SPGradientUnits *units, SPGradientSpread *spread) +void sp_paint_selector_get_gradient_properties(SPPaintSelector *psel, SPGradientUnits *units, SPGradientSpread *spread) { - SPGradientSelector *gsel; g_return_if_fail(SP_IS_PAINT_SELECTOR(psel)); - g_return_if_fail((psel->mode == SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR) || - (psel->mode == SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL)); - gsel = (SPGradientSelector*)gtk_object_get_data(GTK_OBJECT(psel->selector), "gradient-selector"); + g_return_if_fail(isPaintModeGradient(psel->mode)); + + SPGradientSelector *gsel = getGradientFromData(psel); if (units) { *units = gsel->getUnits(); } @@ -491,24 +523,23 @@ sp_paint_selector_get_color_alpha(SPPaintSelector *psel, SPColor *color, gfloat && ( *alpha <= 1.0 ) ) ); } -SPGradient * -sp_paint_selector_get_gradient_vector(SPPaintSelector *psel) +SPGradient *sp_paint_selector_get_gradient_vector(SPPaintSelector *psel) { - SPGradientSelector *gsel; - - g_return_val_if_fail((psel->mode == SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR) || - (psel->mode == SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL), NULL); + SPGradient* vect = 0; - gsel = (SPGradientSelector*)gtk_object_get_data(GTK_OBJECT(psel->selector), "gradient-selector"); + if (isPaintModeGradient(psel->mode)) { + SPGradientSelector *gsel = getGradientFromData(psel); + vect = gsel->getVector(); + } - return gsel->getVector(); + return vect; } void sp_gradient_selector_attrs_to_gradient(SPGradient *gr, SPPaintSelector *psel) { - SPGradientUnits units; - SPGradientSpread spread; + SPGradientUnits units = SP_GRADIENT_UNITS_OBJECTBOUNDINGBOX; + SPGradientSpread spread = SP_GRADIENT_SPREAD_PAD; sp_paint_selector_get_gradient_properties(psel, &units, &spread); sp_gradient_set_units(gr, units); sp_gradient_set_spread(gr, spread); @@ -1066,38 +1097,30 @@ sp_paint_selector_get_pattern(SPPaintSelector *psel) static void sp_paint_selector_set_mode_swatch(SPPaintSelector *psel, SPPaintSelectorMode mode) { if (mode == SP_PAINT_SELECTOR_MODE_SWATCH) { - sp_paint_selector_set_style_buttons(psel, psel->swatch); // TODO swatch + sp_paint_selector_set_style_buttons(psel, psel->swatch); } gtk_widget_set_sensitive(psel->style, TRUE); - GtkWidget *tbl = NULL; + GtkWidget *tbl = 0; if (psel->mode == SP_PAINT_SELECTOR_MODE_SWATCH){ /* Already have pattern menu */ - tbl = (GtkWidget*)gtk_object_get_data(GTK_OBJECT(psel->selector), "swatch-selector"); + tbl = static_cast(gtk_object_get_data(GTK_OBJECT(psel->selector), "swatch-selector")); } else { sp_paint_selector_clear_frame(psel); - - /* Create vbox */ - tbl = gtk_vbox_new(FALSE, 4); - gtk_widget_show(tbl); - - { - GtkWidget *hb = gtk_hbox_new(FALSE, 0); - GtkWidget *l = gtk_label_new(NULL); - gtk_label_set_markup(GTK_LABEL(l), _("Represents a swatch fill.")); - gtk_label_set_line_wrap(GTK_LABEL(l), true); - gtk_widget_set_size_request(l, 180, -1); - gtk_box_pack_start(GTK_BOX(hb), l, TRUE, TRUE, AUX_BETWEEN_BUTTON_GROUPS); - gtk_box_pack_start(GTK_BOX(tbl), hb, FALSE, FALSE, AUX_BETWEEN_BUTTON_GROUPS); - } - - gtk_widget_show_all(tbl); - - gtk_container_add(GTK_CONTAINER(psel->frame), tbl); - psel->selector = tbl; - gtk_object_set_data(GTK_OBJECT(psel->selector), "swatch-selector", tbl); + /* Create new gradient selector */ + GtkWidget *gsel = sp_gradient_selector_new(); + SP_GRADIENT_SELECTOR(gsel)->setMode(SPGradientSelector::MODE_SWATCH); + gtk_widget_show(gsel); + gtk_signal_connect(GTK_OBJECT(gsel), "grabbed", GTK_SIGNAL_FUNC(sp_paint_selector_gradient_grabbed), psel); + gtk_signal_connect(GTK_OBJECT(gsel), "dragged", GTK_SIGNAL_FUNC(sp_paint_selector_gradient_dragged), psel); + gtk_signal_connect(GTK_OBJECT(gsel), "released", GTK_SIGNAL_FUNC(sp_paint_selector_gradient_released), psel); + gtk_signal_connect(GTK_OBJECT(gsel), "changed", GTK_SIGNAL_FUNC(sp_paint_selector_gradient_changed), psel); + // Pack everything to frame + gtk_container_add(GTK_CONTAINER(psel->frame), gsel); + psel->selector = gsel; + gtk_object_set_data(GTK_OBJECT(psel->selector), "swatch-selector", gsel); gtk_frame_set_label(GTK_FRAME(psel->frame), _("Swatch fill")); } @@ -1145,7 +1168,13 @@ SPPaintSelectorMode sp_style_determine_paint_selector_mode(SPStyle *style, bool } else if ( target.isPaintserver() ) { SPPaintServer *server = isfill? SP_STYLE_FILL_SERVER(style) : SP_STYLE_STROKE_SERVER(style); - if (server && server->isSwatch()) { + +#ifdef SP_PS_VERBOSE + g_message("==== server:%p %s grad:%s swatch:%s", server, server->getId(), (SP_IS_GRADIENT(server)?"Y":"n"), (SP_IS_GRADIENT(server) && SP_GRADIENT(server)->getVector()->isSwatch()?"Y":"n")); +#endif // SP_PS_VERBOSE + + + if (server && SP_IS_GRADIENT(server) && SP_GRADIENT(server)->getVector()->isSwatch()) { mode = SP_PAINT_SELECTOR_MODE_SWATCH; } else if (SP_IS_LINEARGRADIENT(server)) { mode = SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR; diff --git a/src/widgets/paint-selector.h b/src/widgets/paint-selector.h index 82dee4d16..2d7ac3011 100644 --- a/src/widgets/paint-selector.h +++ b/src/widgets/paint-selector.h @@ -101,7 +101,7 @@ void sp_paint_selector_set_gradient_linear (SPPaintSelector *psel, SPGradient *v void sp_paint_selector_set_gradient_radial (SPPaintSelector *psel, SPGradient *vector); -void sp_paint_selector_set_swatch(SPPaintSelector *psel, SPPaintServer *server ); +void sp_paint_selector_set_swatch(SPPaintSelector *psel, SPGradient *vector ); void sp_paint_selector_set_gradient_properties (SPPaintSelector *psel, SPGradientUnits units, SPGradientSpread spread); void sp_paint_selector_get_gradient_properties (SPPaintSelector *psel, SPGradientUnits *units, SPGradientSpread *spread); diff --git a/src/widgets/stroke-style.cpp b/src/widgets/stroke-style.cpp index 51e70807c..a981934dd 100644 --- a/src/widgets/stroke-style.cpp +++ b/src/widgets/stroke-style.cpp @@ -205,9 +205,10 @@ sp_stroke_style_paint_update (SPWidget *spw) SPPaintServer *server = SP_STYLE_STROKE_SERVER (query); if (server && server->isSwatch()) { - sp_paint_selector_set_swatch( psel, server ); + SPGradient *vector = SP_GRADIENT(server)->getVector(); + sp_paint_selector_set_swatch( psel, vector ); } else if (SP_IS_LINEARGRADIENT (server)) { - SPGradient *vector = sp_gradient_get_vector (SP_GRADIENT (server), FALSE); + SPGradient *vector = SP_GRADIENT(server)->getVector(); sp_paint_selector_set_gradient_linear (psel, vector); SPLinearGradient *lg = SP_LINEARGRADIENT (server); @@ -215,7 +216,7 @@ sp_stroke_style_paint_update (SPWidget *spw) SP_GRADIENT_UNITS (lg), SP_GRADIENT_SPREAD (lg)); } else if (SP_IS_RADIALGRADIENT (server)) { - SPGradient *vector = sp_gradient_get_vector (SP_GRADIENT (server), FALSE); + SPGradient *vector = SP_GRADIENT(server)->getVector(); sp_paint_selector_set_gradient_radial (psel, vector); SPRadialGradient *rg = SP_RADIALGRADIENT (server); -- cgit v1.2.3 From bf83d5a03bf856e34bd0a6e2656a5b2dcfe8aafb Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Mon, 15 Mar 2010 00:58:16 +0100 Subject: Move around files to remove some vanity directories. Also remove the obsolete IDL file stub. (bzr r9194) --- src/widgets/toolbox.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/widgets') diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index b4324ca0d..4b0d84d90 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -50,7 +50,7 @@ #include "../ege-select-one-action.h" #include "../flood-context.h" #include "gradient-toolbar.h" -#include "../graphlayout/graphlayout.h" +#include "../graphlayout.h" #include "../helper/unit-menu.h" #include "../helper/units.h" #include "../helper/unit-tracker.h" -- cgit v1.2.3 From ea353326f229e6186147115efe9fe66f7a217638 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Fri, 19 Mar 2010 22:03:02 -0700 Subject: Whitespace cleanup. (bzr r9214) --- src/widgets/sp-color-notebook.cpp | 594 +++++++++++++++++++------------------- 1 file changed, 297 insertions(+), 297 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp index 3ba39dd30..b2df8d2a5 100644 --- a/src/widgets/sp-color-notebook.cpp +++ b/src/widgets/sp-color-notebook.cpp @@ -4,7 +4,7 @@ * A notebook with RGB, CMYK, CMS, HSL, and Wheel pages * * Author: - * Lauris Kaplinski + * Lauris Kaplinski * bulia byak * * Copyright (C) 2001-2002 Lauris Kaplinski @@ -38,13 +38,13 @@ #include "../profile-manager.h" struct SPColorNotebookTracker { - const gchar* name; - const gchar* className; - GType type; - guint submode; - gboolean enabledFull; - gboolean enabledBrief; - SPColorNotebook *backPointer; + const gchar* name; + const gchar* className; + GType type; + guint submode; + gboolean enabledFull; + gboolean enabledBrief; + SPColorNotebook *backPointer; }; static void sp_color_notebook_class_init (SPColorNotebookClass *klass); @@ -83,20 +83,20 @@ GType sp_color_notebook_get_type(void) static void sp_color_notebook_class_init (SPColorNotebookClass *klass) { - GtkObjectClass *object_class; - GtkWidgetClass *widget_class; - SPColorSelectorClass *selector_class; + GtkObjectClass *object_class; + GtkWidgetClass *widget_class; + SPColorSelectorClass *selector_class; - object_class = (GtkObjectClass *) klass; - widget_class = (GtkWidgetClass *) klass; - selector_class = SP_COLOR_SELECTOR_CLASS (klass); + object_class = (GtkObjectClass *) klass; + widget_class = (GtkWidgetClass *) klass; + selector_class = SP_COLOR_SELECTOR_CLASS (klass); - parent_class = SP_COLOR_SELECTOR_CLASS (g_type_class_peek_parent (klass)); + parent_class = SP_COLOR_SELECTOR_CLASS (g_type_class_peek_parent (klass)); - object_class->destroy = sp_color_notebook_destroy; + object_class->destroy = sp_color_notebook_destroy; - widget_class->show_all = sp_color_notebook_show_all; - widget_class->hide_all = sp_color_notebook_hide_all; + widget_class->show_all = sp_color_notebook_show_all; + widget_class->hide_all = sp_color_notebook_hide_all; } static void @@ -165,21 +165,21 @@ gint ColorNotebook::menuHandler( GdkEvent* event ) static void sp_color_notebook_menuitem_response (GtkMenuItem *menuitem, gpointer user_data) { - gboolean active = FALSE; - - active = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menuitem)); - SPColorNotebookTracker *entry = reinterpret_cast< SPColorNotebookTracker* > (user_data); - if ( entry ) - { - if ( active ) - { - ((ColorNotebook*)(SP_COLOR_SELECTOR(entry->backPointer)->base))->addPage(entry->type, entry->submode); - } - else - { - ((ColorNotebook*)(SP_COLOR_SELECTOR(entry->backPointer)->base))->removePage(entry->type, entry->submode); - } - } + gboolean active = FALSE; + + active = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menuitem)); + SPColorNotebookTracker *entry = reinterpret_cast< SPColorNotebookTracker* > (user_data); + if ( entry ) + { + if ( active ) + { + ((ColorNotebook*)(SP_COLOR_SELECTOR(entry->backPointer)->base))->addPage(entry->type, entry->submode); + } + else + { + ((ColorNotebook*)(SP_COLOR_SELECTOR(entry->backPointer)->base))->removePage(entry->type, entry->submode); + } + } } static void @@ -195,249 +195,249 @@ sp_color_notebook_init (SPColorNotebook *colorbook) void ColorNotebook::init() { - GtkWidget* table = 0; - guint row = 0; - guint i = 0; - guint j = 0; - GType *selector_types = 0; - guint selector_type_count = 0; - - GtkTooltips *tt = gtk_tooltips_new (); - - /* tempory hardcoding to get types loaded */ - SP_TYPE_COLOR_SCALES; - SP_TYPE_COLOR_WHEEL_SELECTOR; + GtkWidget* table = 0; + guint row = 0; + guint i = 0; + guint j = 0; + GType *selector_types = 0; + guint selector_type_count = 0; + + GtkTooltips *tt = gtk_tooltips_new (); + + /* tempory hardcoding to get types loaded */ + SP_TYPE_COLOR_SCALES; + SP_TYPE_COLOR_WHEEL_SELECTOR; #if ENABLE_LCMS - SP_TYPE_COLOR_ICC_SELECTOR; + SP_TYPE_COLOR_ICC_SELECTOR; #endif // ENABLE_LCMS - /* REJON: Comment out the next line to not use the normal GTK Color + /* REJON: Comment out the next line to not use the normal GTK Color wheel. */ // SP_TYPE_COLOR_GTKSELECTOR; - _updating = FALSE; - _updatingrgba = FALSE; - _btn = 0; - _popup = 0; - _trackerList = g_ptr_array_new (); - - _book = gtk_notebook_new (); - gtk_widget_show (_book); - - selector_types = g_type_children (SP_TYPE_COLOR_SELECTOR, &selector_type_count); - - for ( i = 0; i < selector_type_count; i++ ) - { - if (!g_type_is_a (selector_types[i], SP_TYPE_COLOR_NOTEBOOK)) - { - guint howmany = 1; - gpointer klass = gtk_type_class (selector_types[i]); - if ( klass && SP_IS_COLOR_SELECTOR_CLASS (klass) ) - { - SPColorSelectorClass *ck = SP_COLOR_SELECTOR_CLASS (klass); - howmany = MAX (1, ck->submode_count); - for ( j = 0; j < howmany; j++ ) - { - SPColorNotebookTracker *entry = reinterpret_cast< SPColorNotebookTracker* > (malloc(sizeof(SPColorNotebookTracker))); - if ( entry ) - { - memset( entry, 0, sizeof(SPColorNotebookTracker) ); - entry->name = ck->name[j]; - entry->type = selector_types[i]; - entry->submode = j; - entry->enabledFull = TRUE; - entry->enabledBrief = TRUE; - entry->backPointer = SP_COLOR_NOTEBOOK(_csel); - - g_ptr_array_add (_trackerList, entry); - } - } - } - } - } - - for ( i = 0; i < _trackerList->len; i++ ) - { - SPColorNotebookTracker *entry = - reinterpret_cast< SPColorNotebookTracker* > (g_ptr_array_index (_trackerList, i)); - if ( entry ) - { - addPage(entry->type, entry->submode); - } - } - - table = gtk_table_new (2, 3, FALSE); - gtk_widget_show (table); - - gtk_box_pack_start (GTK_BOX (_csel), table, TRUE, TRUE, 0); - - gtk_table_attach (GTK_TABLE (table), _book, 0, 2, row, row + 1, + _updating = FALSE; + _updatingrgba = FALSE; + _btn = 0; + _popup = 0; + _trackerList = g_ptr_array_new (); + + _book = gtk_notebook_new (); + gtk_widget_show (_book); + + selector_types = g_type_children (SP_TYPE_COLOR_SELECTOR, &selector_type_count); + + for ( i = 0; i < selector_type_count; i++ ) + { + if (!g_type_is_a (selector_types[i], SP_TYPE_COLOR_NOTEBOOK)) + { + guint howmany = 1; + gpointer klass = gtk_type_class (selector_types[i]); + if ( klass && SP_IS_COLOR_SELECTOR_CLASS (klass) ) + { + SPColorSelectorClass *ck = SP_COLOR_SELECTOR_CLASS (klass); + howmany = MAX (1, ck->submode_count); + for ( j = 0; j < howmany; j++ ) + { + SPColorNotebookTracker *entry = reinterpret_cast< SPColorNotebookTracker* > (malloc(sizeof(SPColorNotebookTracker))); + if ( entry ) + { + memset( entry, 0, sizeof(SPColorNotebookTracker) ); + entry->name = ck->name[j]; + entry->type = selector_types[i]; + entry->submode = j; + entry->enabledFull = TRUE; + entry->enabledBrief = TRUE; + entry->backPointer = SP_COLOR_NOTEBOOK(_csel); + + g_ptr_array_add (_trackerList, entry); + } + } + } + } + } + + for ( i = 0; i < _trackerList->len; i++ ) + { + SPColorNotebookTracker *entry = + reinterpret_cast< SPColorNotebookTracker* > (g_ptr_array_index (_trackerList, i)); + if ( entry ) + { + addPage(entry->type, entry->submode); + } + } + + table = gtk_table_new (2, 3, FALSE); + gtk_widget_show (table); + + gtk_box_pack_start (GTK_BOX (_csel), table, TRUE, TRUE, 0); + + gtk_table_attach (GTK_TABLE (table), _book, 0, 2, row, row + 1, static_cast(GTK_EXPAND|GTK_FILL), static_cast(GTK_EXPAND|GTK_FILL), XPAD, YPAD); - // restore the last active page - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - gtk_notebook_set_current_page (GTK_NOTEBOOK (_book), prefs->getInt("/colorselector/page", 0)); - - { - gboolean found = FALSE; + // restore the last active page + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + gtk_notebook_set_current_page (GTK_NOTEBOOK (_book), prefs->getInt("/colorselector/page", 0)); - _popup = gtk_menu_new(); - GtkMenu *menu = GTK_MENU (_popup); + { + gboolean found = FALSE; - for ( i = 0; i < _trackerList->len; i++ ) - { - SPColorNotebookTracker *entry = reinterpret_cast< SPColorNotebookTracker* > (g_ptr_array_index (_trackerList, i)); - if ( entry ) - { - GtkWidget *item = gtk_check_menu_item_new_with_label (_(entry->name)); - gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), entry->enabledFull); - gtk_widget_show (item); - gtk_menu_append (menu, item); + _popup = gtk_menu_new(); + GtkMenu *menu = GTK_MENU (_popup); - g_signal_connect (G_OBJECT (item), "activate", - G_CALLBACK (sp_color_notebook_menuitem_response), - reinterpret_cast< gpointer > (entry) ); - found = TRUE; - } - } + for ( i = 0; i < _trackerList->len; i++ ) + { + SPColorNotebookTracker *entry = reinterpret_cast< SPColorNotebookTracker* > (g_ptr_array_index (_trackerList, i)); + if ( entry ) + { + GtkWidget *item = gtk_check_menu_item_new_with_label (_(entry->name)); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), entry->enabledFull); + gtk_widget_show (item); + gtk_menu_append (menu, item); + + g_signal_connect (G_OBJECT (item), "activate", + G_CALLBACK (sp_color_notebook_menuitem_response), + reinterpret_cast< gpointer > (entry) ); + found = TRUE; + } + } - GtkWidget *arrow = gtk_arrow_new(GTK_ARROW_RIGHT, GTK_SHADOW_NONE); - gtk_widget_show (arrow); + GtkWidget *arrow = gtk_arrow_new(GTK_ARROW_RIGHT, GTK_SHADOW_NONE); + gtk_widget_show (arrow); - _btn = gtk_button_new (); - gtk_widget_show (_btn); - gtk_container_add (GTK_CONTAINER (_btn), arrow); + _btn = gtk_button_new (); + gtk_widget_show (_btn); + gtk_container_add (GTK_CONTAINER (_btn), arrow); - GtkWidget *align = gtk_alignment_new (1.0, 0.0, 0.0, 0.0); - gtk_widget_show (align); - gtk_container_add (GTK_CONTAINER (align), _btn); + GtkWidget *align = gtk_alignment_new (1.0, 0.0, 0.0, 0.0); + gtk_widget_show (align); + gtk_container_add (GTK_CONTAINER (align), _btn); - // uncomment to reenable the "show/hide modes" menu, - // but first fix it so it remembers its settings in prefs and does not take that much space (entire vertical column!) - //gtk_table_attach (GTK_TABLE (table), align, 2, 3, row, row + 1, GTK_FILL, GTK_FILL, XPAD, YPAD); + // uncomment to reenable the "show/hide modes" menu, + // but first fix it so it remembers its settings in prefs and does not take that much space (entire vertical column!) + //gtk_table_attach (GTK_TABLE (table), align, 2, 3, row, row + 1, GTK_FILL, GTK_FILL, XPAD, YPAD); - gtk_signal_connect_object(GTK_OBJECT(_btn), "event", GTK_SIGNAL_FUNC (sp_color_notebook_menu_handler), GTK_OBJECT(_csel)); - if ( !found ) - { - gtk_widget_set_sensitive (_btn, FALSE); - } - } + gtk_signal_connect_object(GTK_OBJECT(_btn), "event", GTK_SIGNAL_FUNC (sp_color_notebook_menu_handler), GTK_OBJECT(_csel)); + if ( !found ) + { + gtk_widget_set_sensitive (_btn, FALSE); + } + } - row++; + row++; - GtkWidget *rgbabox = gtk_hbox_new (FALSE, 0); + GtkWidget *rgbabox = gtk_hbox_new (FALSE, 0); #if ENABLE_LCMS - /* Create color management icons */ - _box_colormanaged = gtk_event_box_new (); - GtkWidget *colormanaged = gtk_image_new_from_icon_name ("color-management-icon", GTK_ICON_SIZE_SMALL_TOOLBAR); - gtk_container_add (GTK_CONTAINER (_box_colormanaged), colormanaged); - GtkTooltips *tooltips_colormanaged = gtk_tooltips_new (); - gtk_tooltips_set_tip (tooltips_colormanaged, _box_colormanaged, _("Color Managed"), ""); - gtk_widget_set_sensitive (_box_colormanaged, false); - gtk_box_pack_start(GTK_BOX(rgbabox), _box_colormanaged, FALSE, FALSE, 2); - - _box_outofgamut = gtk_event_box_new (); - GtkWidget *outofgamut = gtk_image_new_from_icon_name ("out-of-gamut-icon", GTK_ICON_SIZE_SMALL_TOOLBAR); - gtk_container_add (GTK_CONTAINER (_box_outofgamut), outofgamut); - GtkTooltips *tooltips_outofgamut = gtk_tooltips_new (); - gtk_tooltips_set_tip (tooltips_outofgamut, _box_outofgamut, _("Out of gamut!"), ""); - gtk_widget_set_sensitive (_box_outofgamut, false); - gtk_box_pack_start(GTK_BOX(rgbabox), _box_outofgamut, FALSE, FALSE, 2); - - _box_toomuchink = gtk_event_box_new (); - GtkWidget *toomuchink = gtk_image_new_from_icon_name ("too-much-ink-icon", GTK_ICON_SIZE_SMALL_TOOLBAR); - gtk_container_add (GTK_CONTAINER (_box_toomuchink), toomuchink); - GtkTooltips *tooltips_toomuchink = gtk_tooltips_new (); - gtk_tooltips_set_tip (tooltips_toomuchink, _box_toomuchink, _("Too much ink!"), ""); - gtk_widget_set_sensitive (_box_toomuchink, false); - gtk_box_pack_start(GTK_BOX(rgbabox), _box_toomuchink, FALSE, FALSE, 2); + /* Create color management icons */ + _box_colormanaged = gtk_event_box_new (); + GtkWidget *colormanaged = gtk_image_new_from_icon_name ("color-management-icon", GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_container_add (GTK_CONTAINER (_box_colormanaged), colormanaged); + GtkTooltips *tooltips_colormanaged = gtk_tooltips_new (); + gtk_tooltips_set_tip (tooltips_colormanaged, _box_colormanaged, _("Color Managed"), ""); + gtk_widget_set_sensitive (_box_colormanaged, false); + gtk_box_pack_start(GTK_BOX(rgbabox), _box_colormanaged, FALSE, FALSE, 2); + + _box_outofgamut = gtk_event_box_new (); + GtkWidget *outofgamut = gtk_image_new_from_icon_name ("out-of-gamut-icon", GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_container_add (GTK_CONTAINER (_box_outofgamut), outofgamut); + GtkTooltips *tooltips_outofgamut = gtk_tooltips_new (); + gtk_tooltips_set_tip (tooltips_outofgamut, _box_outofgamut, _("Out of gamut!"), ""); + gtk_widget_set_sensitive (_box_outofgamut, false); + gtk_box_pack_start(GTK_BOX(rgbabox), _box_outofgamut, FALSE, FALSE, 2); + + _box_toomuchink = gtk_event_box_new (); + GtkWidget *toomuchink = gtk_image_new_from_icon_name ("too-much-ink-icon", GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_container_add (GTK_CONTAINER (_box_toomuchink), toomuchink); + GtkTooltips *tooltips_toomuchink = gtk_tooltips_new (); + gtk_tooltips_set_tip (tooltips_toomuchink, _box_toomuchink, _("Too much ink!"), ""); + gtk_widget_set_sensitive (_box_toomuchink, false); + gtk_box_pack_start(GTK_BOX(rgbabox), _box_toomuchink, FALSE, FALSE, 2); #endif //ENABLE_LCMS - /* Create RGBA entry and color preview */ - _rgbal = gtk_label_new_with_mnemonic (_("RGBA_:")); - gtk_misc_set_alignment (GTK_MISC (_rgbal), 1.0, 0.5); - gtk_box_pack_start(GTK_BOX(rgbabox), _rgbal, TRUE, TRUE, 2); + /* Create RGBA entry and color preview */ + _rgbal = gtk_label_new_with_mnemonic (_("RGBA_:")); + gtk_misc_set_alignment (GTK_MISC (_rgbal), 1.0, 0.5); + gtk_box_pack_start(GTK_BOX(rgbabox), _rgbal, TRUE, TRUE, 2); - _rgbae = gtk_entry_new (); - sp_dialog_defocus_on_enter (_rgbae); - gtk_entry_set_max_length (GTK_ENTRY (_rgbae), 8); - gtk_entry_set_width_chars (GTK_ENTRY (_rgbae), 8); - gtk_tooltips_set_tip (tt, _rgbae, _("Hexadecimal RGBA value of the color"), NULL); - gtk_box_pack_start(GTK_BOX(rgbabox), _rgbae, FALSE, FALSE, 0); - gtk_label_set_mnemonic_widget (GTK_LABEL(_rgbal), _rgbae); + _rgbae = gtk_entry_new (); + sp_dialog_defocus_on_enter (_rgbae); + gtk_entry_set_max_length (GTK_ENTRY (_rgbae), 8); + gtk_entry_set_width_chars (GTK_ENTRY (_rgbae), 8); + gtk_tooltips_set_tip (tt, _rgbae, _("Hexadecimal RGBA value of the color"), NULL); + gtk_box_pack_start(GTK_BOX(rgbabox), _rgbae, FALSE, FALSE, 0); + gtk_label_set_mnemonic_widget (GTK_LABEL(_rgbal), _rgbae); - sp_set_font_size_smaller (rgbabox); - gtk_widget_show_all (rgbabox); + sp_set_font_size_smaller (rgbabox); + gtk_widget_show_all (rgbabox); #if ENABLE_LCMS - //the "too much ink" icon is initially hidden - gtk_widget_hide(GTK_WIDGET(_box_toomuchink)); + //the "too much ink" icon is initially hidden + gtk_widget_hide(GTK_WIDGET(_box_toomuchink)); #endif //ENABLE_LCMS - gtk_table_attach (GTK_TABLE (table), rgbabox, 0, 2, row, row + 1, GTK_FILL, GTK_SHRINK, XPAD, YPAD); + gtk_table_attach (GTK_TABLE (table), rgbabox, 0, 2, row, row + 1, GTK_FILL, GTK_SHRINK, XPAD, YPAD); #ifdef SPCS_PREVIEW - _p = sp_color_preview_new (0xffffffff); - gtk_widget_show (_p); - gtk_table_attach (GTK_TABLE (table), _p, 2, 3, row, row + 1, GTK_FILL, GTK_FILL, XPAD, YPAD); + _p = sp_color_preview_new (0xffffffff); + gtk_widget_show (_p); + gtk_table_attach (GTK_TABLE (table), _p, 2, 3, row, row + 1, GTK_FILL, GTK_FILL, XPAD, YPAD); #endif - _switchId = g_signal_connect(GTK_OBJECT (_book), "switch-page", - GTK_SIGNAL_FUNC (sp_color_notebook_switch_page), SP_COLOR_NOTEBOOK(_csel)); + _switchId = g_signal_connect(GTK_OBJECT (_book), "switch-page", + GTK_SIGNAL_FUNC (sp_color_notebook_switch_page), SP_COLOR_NOTEBOOK(_csel)); - _entryId = gtk_signal_connect (GTK_OBJECT (_rgbae), "changed", GTK_SIGNAL_FUNC (ColorNotebook::_rgbaEntryChangedHook), _csel); + _entryId = gtk_signal_connect (GTK_OBJECT (_rgbae), "changed", GTK_SIGNAL_FUNC (ColorNotebook::_rgbaEntryChangedHook), _csel); } static void sp_color_notebook_destroy (GtkObject *object) { - if (((GtkObjectClass *) (parent_class))->destroy) - (* ((GtkObjectClass *) (parent_class))->destroy) (object); + if (((GtkObjectClass *) (parent_class))->destroy) + (* ((GtkObjectClass *) (parent_class))->destroy) (object); } ColorNotebook::~ColorNotebook() { - if ( _trackerList ) - { - g_ptr_array_free (_trackerList, TRUE); - _trackerList = 0; - } - - if ( _switchId ) - { - if ( _book ) - { - g_signal_handler_disconnect (_book, _switchId); - _switchId = 0; - } - } + if ( _trackerList ) + { + g_ptr_array_free (_trackerList, TRUE); + _trackerList = 0; + } + + if ( _switchId ) + { + if ( _book ) + { + g_signal_handler_disconnect (_book, _switchId); + _switchId = 0; + } + } } static void sp_color_notebook_show_all (GtkWidget *widget) { - gtk_widget_show (widget); + gtk_widget_show (widget); } static void sp_color_notebook_hide_all (GtkWidget *widget) { - gtk_widget_hide (widget); + gtk_widget_hide (widget); } GtkWidget * sp_color_notebook_new (void) { - SPColorNotebook *colorbook; + SPColorNotebook *colorbook; - colorbook = (SPColorNotebook*)gtk_type_new (SP_TYPE_COLOR_NOTEBOOK); + colorbook = (SPColorNotebook*)gtk_type_new (SP_TYPE_COLOR_NOTEBOOK); - return GTK_WIDGET (colorbook); + return GTK_WIDGET (colorbook); } ColorNotebook::ColorNotebook( SPColorSelector* csel ) @@ -523,7 +523,7 @@ void ColorNotebook::_updateRgbaEntry( const SPColor& color, gfloat alpha ) { g_return_if_fail( ( 0.0 <= alpha ) && ( alpha <= 1.0 ) ); -#if ENABLE_LCMS +#if ENABLE_LCMS /* update color management icon*/ gtk_widget_set_sensitive (_box_colormanaged, color.icc != NULL); @@ -584,15 +584,15 @@ void ColorNotebook::_entryGrabbed (SPColorSelector *, SPColorNotebook *colorbook void ColorNotebook::_entryDragged (SPColorSelector *csel, SPColorNotebook *colorbook) { - gboolean oldState; + gboolean oldState; ColorNotebook* nb = (ColorNotebook*)(SP_COLOR_SELECTOR(colorbook)->base); - oldState = nb->_dragging; + oldState = nb->_dragging; - nb->_dragging = TRUE; - nb->_entryModified( csel, colorbook ); + nb->_dragging = TRUE; + nb->_entryModified( csel, colorbook ); - nb->_dragging = oldState; + nb->_dragging = oldState; } void ColorNotebook::_entryReleased (SPColorSelector *, SPColorNotebook *colorbook) @@ -603,23 +603,23 @@ void ColorNotebook::_entryReleased (SPColorSelector *, SPColorNotebook *colorboo void ColorNotebook::_entryChanged (SPColorSelector *csel, SPColorNotebook *colorbook) { - gboolean oldState; + gboolean oldState; ColorNotebook* nb = (ColorNotebook*)(SP_COLOR_SELECTOR(colorbook)->base); - oldState = nb->_dragging; + oldState = nb->_dragging; - nb->_dragging = FALSE; - nb->_entryModified( csel, colorbook ); + nb->_dragging = FALSE; + nb->_entryModified( csel, colorbook ); - nb->_dragging = oldState; + nb->_dragging = oldState; } void ColorNotebook::_entryModified (SPColorSelector *csel, SPColorNotebook *colorbook) { - g_return_if_fail (colorbook != NULL); - g_return_if_fail (SP_IS_COLOR_NOTEBOOK (colorbook)); - g_return_if_fail (csel != NULL); - g_return_if_fail (SP_IS_COLOR_SELECTOR (csel)); + g_return_if_fail (colorbook != NULL); + g_return_if_fail (SP_IS_COLOR_NOTEBOOK (colorbook)); + g_return_if_fail (csel != NULL); + g_return_if_fail (SP_IS_COLOR_SELECTOR (csel)); ColorNotebook* nb = (ColorNotebook*)(SP_COLOR_SELECTOR(colorbook)->base); SPColor color; @@ -632,87 +632,87 @@ void ColorNotebook::_entryModified (SPColorSelector *csel, SPColorNotebook *colo GtkWidget* ColorNotebook::addPage(GType page_type, guint submode) { - GtkWidget *page; - - page = sp_color_selector_new( page_type ); - if ( page ) - { - GtkWidget* tab_label = 0; - SPColorSelector* csel; - - csel = SP_COLOR_SELECTOR (page); - if ( submode > 0 ) - { - csel->base->setSubmode( submode ); - } - gtk_widget_show (page); + GtkWidget *page; + + page = sp_color_selector_new( page_type ); + if ( page ) + { + GtkWidget* tab_label = 0; + SPColorSelector* csel; + + csel = SP_COLOR_SELECTOR (page); + if ( submode > 0 ) + { + csel->base->setSubmode( submode ); + } + gtk_widget_show (page); int index = csel->base ? csel->base->getSubmode() : 0; const gchar* str = _(SP_COLOR_SELECTOR_GET_CLASS (csel)->name[index]); // g_message( "Hitting up for tab for '%s'", str ); - tab_label = gtk_label_new(_(str)); - gtk_notebook_append_page( GTK_NOTEBOOK (_book), page, tab_label ); - gtk_signal_connect (GTK_OBJECT (page), "grabbed", GTK_SIGNAL_FUNC (_entryGrabbed), _csel); - gtk_signal_connect (GTK_OBJECT (page), "dragged", GTK_SIGNAL_FUNC (_entryDragged), _csel); - gtk_signal_connect (GTK_OBJECT (page), "released", GTK_SIGNAL_FUNC (_entryReleased), _csel); - gtk_signal_connect (GTK_OBJECT (page), "changed", GTK_SIGNAL_FUNC (_entryChanged), _csel); - } - - return page; + tab_label = gtk_label_new(_(str)); + gtk_notebook_append_page( GTK_NOTEBOOK (_book), page, tab_label ); + gtk_signal_connect (GTK_OBJECT (page), "grabbed", GTK_SIGNAL_FUNC (_entryGrabbed), _csel); + gtk_signal_connect (GTK_OBJECT (page), "dragged", GTK_SIGNAL_FUNC (_entryDragged), _csel); + gtk_signal_connect (GTK_OBJECT (page), "released", GTK_SIGNAL_FUNC (_entryReleased), _csel); + gtk_signal_connect (GTK_OBJECT (page), "changed", GTK_SIGNAL_FUNC (_entryChanged), _csel); + } + + return page; } GtkWidget* ColorNotebook::getPage(GType page_type, guint submode) { - gint count = 0; - gint i = 0; - GtkWidget* page = 0; - -// count = gtk_notebook_get_n_pages (_book); - count = 200; - for ( i = 0; i < count && !page; i++ ) - { - page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (_book), i); - if ( page ) - { - SPColorSelector* csel; - guint pagemode; - csel = SP_COLOR_SELECTOR (page); - pagemode = csel->base->getSubmode(); - if ( G_TYPE_FROM_INSTANCE (page) == page_type - && pagemode == submode ) - { - // found it. - break; - } - else - { - page = 0; - } - } - else - { - break; - } - } - return page; + gint count = 0; + gint i = 0; + GtkWidget* page = 0; + +// count = gtk_notebook_get_n_pages (_book); + count = 200; + for ( i = 0; i < count && !page; i++ ) + { + page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (_book), i); + if ( page ) + { + SPColorSelector* csel; + guint pagemode; + csel = SP_COLOR_SELECTOR (page); + pagemode = csel->base->getSubmode(); + if ( G_TYPE_FROM_INSTANCE (page) == page_type + && pagemode == submode ) + { + // found it. + break; + } + else + { + page = 0; + } + } + else + { + break; + } + } + return page; } void ColorNotebook::removePage( GType page_type, guint submode ) { - GtkWidget *page = 0; - - page = getPage(page_type, submode); - if ( page ) - { - gint where = gtk_notebook_page_num (GTK_NOTEBOOK (_book), page); - if ( where >= 0 ) - { - if ( gtk_notebook_get_current_page (GTK_NOTEBOOK (_book)) == where ) - { + GtkWidget *page = 0; + + page = getPage(page_type, submode); + if ( page ) + { + gint where = gtk_notebook_page_num (GTK_NOTEBOOK (_book), page); + if ( where >= 0 ) + { + if ( gtk_notebook_get_current_page (GTK_NOTEBOOK (_book)) == where ) + { // getColorAlpha(_color, &_alpha); - } - gtk_notebook_remove_page (GTK_NOTEBOOK (_book), where); - } - } + } + gtk_notebook_remove_page (GTK_NOTEBOOK (_book), where); + } + } } /* -- cgit v1.2.3 From 82949ec0ff9e9b2a4f6da18e9bb10a3c7cdbafa1 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sun, 21 Mar 2010 11:18:51 -0700 Subject: Edit single-stop "swatch"/"solid" gradients in-place in the F&S dialog. (bzr r9218) --- src/widgets/CMakeLists.txt | 3 +- src/widgets/Makefile_insert | 2 + src/widgets/paint-selector.cpp | 37 +++++--- src/widgets/swatch-selector.cpp | 198 ++++++++++++++++++++++++++++++++++++++++ src/widgets/swatch-selector.h | 57 ++++++++++++ 5 files changed, 281 insertions(+), 16 deletions(-) create mode 100644 src/widgets/swatch-selector.cpp create mode 100644 src/widgets/swatch-selector.h (limited to 'src/widgets') diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt index 45f013f16..9af325926 100644 --- a/src/widgets/CMakeLists.txt +++ b/src/widgets/CMakeLists.txt @@ -29,8 +29,9 @@ spw-utilities.cpp sp-xmlview-attr-list.cpp sp-xmlview-content.cpp sp-xmlview-tree.cpp +swatch-selector.cpp toolbox.cpp ) ADD_LIBRARY(widgets STATIC ${widgets_SRC}) TARGET_LINK_LIBRARIES(widgets -2geom ${INKSCAPE_LIBS}) \ No newline at end of file +2geom ${INKSCAPE_LIBS}) diff --git a/src/widgets/Makefile_insert b/src/widgets/Makefile_insert index 08b2433ea..5d327d8a3 100644 --- a/src/widgets/Makefile_insert +++ b/src/widgets/Makefile_insert @@ -67,6 +67,8 @@ ink_common_sources += \ widgets/sp-xmlview-tree.h \ widgets/stroke-style.cpp \ widgets/stroke-style.h \ + widgets/swatch-selector.cpp \ + widgets/swatch-selector.h \ widgets/toolbox.cpp \ widgets/toolbox.h \ widgets/widget-sizes.h diff --git a/src/widgets/paint-selector.cpp b/src/widgets/paint-selector.cpp index 5898563a5..892793543 100644 --- a/src/widgets/paint-selector.cpp +++ b/src/widgets/paint-selector.cpp @@ -52,6 +52,7 @@ #include "io/sys.h" #include "helper/stock-items.h" #include "ui/icon-names.h" +#include "widgets/swatch-selector.h" #include "paint-selector.h" @@ -59,6 +60,9 @@ #include "svg/svg-icc-color.h" #endif // SP_PS_VERBOSE + +using Inkscape::Widgets::SwatchSelector; + enum { MODE_CHANGED, GRABBED, @@ -121,6 +125,7 @@ static bool isPaintModeGradient( SPPaintSelectorMode mode ) static SPGradientSelector *getGradientFromData(SPPaintSelector *psel) { + // TODO g_message("FIXME FIXME"); gchar const* key = (psel->mode == SP_PAINT_SELECTOR_MODE_SWATCH) ? "swatch-selector" : "gradient-selector"; SPGradientSelector *grad = reinterpret_cast(gtk_object_get_data(GTK_OBJECT(psel->selector), key)); return grad; @@ -448,9 +453,10 @@ void sp_paint_selector_set_swatch(SPPaintSelector *psel, SPGradient *vector ) #endif sp_paint_selector_set_mode(psel, SP_PAINT_SELECTOR_MODE_SWATCH); - SPGradientSelector *gsel = static_cast(gtk_object_get_data(GTK_OBJECT(psel->selector), "swatch-selector")); - - gsel->setVector((vector) ? SP_OBJECT_DOCUMENT(vector) : 0, vector); + SwatchSelector *swatchsel = static_cast(gtk_object_get_data(GTK_OBJECT(psel->selector), "swatch-selector")); + if (swatchsel) { + swatchsel->setVector( (vector) ? SP_OBJECT_DOCUMENT(vector) : 0, vector ); + } } void @@ -1102,25 +1108,26 @@ static void sp_paint_selector_set_mode_swatch(SPPaintSelector *psel, SPPaintSele gtk_widget_set_sensitive(psel->style, TRUE); - GtkWidget *tbl = 0; + SwatchSelector *swatchsel = 0; if (psel->mode == SP_PAINT_SELECTOR_MODE_SWATCH){ /* Already have pattern menu */ - tbl = static_cast(gtk_object_get_data(GTK_OBJECT(psel->selector), "swatch-selector")); + swatchsel = static_cast(g_object_get_data(G_OBJECT(psel->selector), "swatch-selector")); } else { sp_paint_selector_clear_frame(psel); /* Create new gradient selector */ - GtkWidget *gsel = sp_gradient_selector_new(); - SP_GRADIENT_SELECTOR(gsel)->setMode(SPGradientSelector::MODE_SWATCH); - gtk_widget_show(gsel); - gtk_signal_connect(GTK_OBJECT(gsel), "grabbed", GTK_SIGNAL_FUNC(sp_paint_selector_gradient_grabbed), psel); - gtk_signal_connect(GTK_OBJECT(gsel), "dragged", GTK_SIGNAL_FUNC(sp_paint_selector_gradient_dragged), psel); - gtk_signal_connect(GTK_OBJECT(gsel), "released", GTK_SIGNAL_FUNC(sp_paint_selector_gradient_released), psel); - gtk_signal_connect(GTK_OBJECT(gsel), "changed", GTK_SIGNAL_FUNC(sp_paint_selector_gradient_changed), psel); + SwatchSelector *swatchsel = new SwatchSelector(); + swatchsel->show(); + + swatchsel->connectGrabbedHandler( G_CALLBACK(sp_paint_selector_gradient_grabbed), psel ); + swatchsel->connectDraggedHandler( G_CALLBACK(sp_paint_selector_gradient_dragged), psel ); + swatchsel->connectReleasedHandler( G_CALLBACK(sp_paint_selector_gradient_released), psel ); + swatchsel->connectchangedHandler( G_CALLBACK(sp_paint_selector_gradient_changed), psel ); + // Pack everything to frame - gtk_container_add(GTK_CONTAINER(psel->frame), gsel); - psel->selector = gsel; - gtk_object_set_data(GTK_OBJECT(psel->selector), "swatch-selector", gsel); + gtk_container_add(GTK_CONTAINER(psel->frame), GTK_WIDGET(swatchsel->gobj())); + psel->selector = GTK_WIDGET(swatchsel->gobj()); + gtk_object_set_data(GTK_OBJECT(psel->selector), "swatch-selector", swatchsel); gtk_frame_set_label(GTK_FRAME(psel->frame), _("Swatch fill")); } diff --git a/src/widgets/swatch-selector.cpp b/src/widgets/swatch-selector.cpp new file mode 100644 index 000000000..a7bd5eae1 --- /dev/null +++ b/src/widgets/swatch-selector.cpp @@ -0,0 +1,198 @@ + + +#include + +#include "swatch-selector.h" + +#include "document.h" +#include "gradient-chemistry.h" +#include "gradient-selector.h" +#include "sp-color-notebook.h" +#include "sp-stop.h" +#include "svg/css-ostringstream.h" +#include "svg/svg-color.h" +#include "verbs.h" +#include "xml/node.h" + +namespace Inkscape +{ +namespace Widgets +{ + +SwatchSelector::SwatchSelector() : + Gtk::VBox(), + _gsel(0), + _csel(0) +{ + GtkWidget *gsel = sp_gradient_selector_new(); + _gsel = SP_GRADIENT_SELECTOR(gsel); + g_object_set_data( G_OBJECT(gobj()), "base", this ); + _gsel->setMode(SPGradientSelector::MODE_SWATCH); + + gtk_widget_show(gsel); + + pack_start(*Gtk::manage(Glib::wrap(gsel))); + + + GtkWidget *csel = sp_color_selector_new( SP_TYPE_COLOR_NOTEBOOK ); + _csel = SP_COLOR_SELECTOR(csel); + Gtk::Widget *wrappedCSel = Glib::wrap(csel); + wrappedCSel->show(); + //gtk_widget_show(csel); + + + GObject *obj = G_OBJECT(csel); + + g_signal_connect(obj, "grabbed", G_CALLBACK(_grabbedCb), this); + g_signal_connect(obj, "dragged", G_CALLBACK(_draggedCb), this); + g_signal_connect(obj, "released", G_CALLBACK(_releasedCb), this); + g_signal_connect(obj, "changed", G_CALLBACK(_changedCb), this); + + pack_start(*Gtk::manage(wrappedCSel)); +} + +SwatchSelector::~SwatchSelector() +{ + _csel = 0; // dtor should be handled by Gtk::manage() + _gsel = 0; +} + +void SwatchSelector::_grabbedCb(SPColorSelector * /*csel*/, void * /*data*/) +{ +} + +void SwatchSelector::_draggedCb(SPColorSelector * /*csel*/, void *data) +{ + if (data) { + //SwatchSelector *swsel = reinterpret_cast(data); + + // TODO might have to block cycles + + // Copied from gradient-vector.cpp, but does not appear to cause visible changes: + /* + if (swsel->_gsel) { + SPGradient *gradient = swsel->_gsel->getVector(); + SPGradient *ngr = sp_gradient_ensure_vector_normalized(gradient); + if (ngr != gradient) { + // Our master gradient has changed + // TODO replace with proper - sp_gradient_vector_widget_load_gradient(GTK_WIDGET(swsel->_gsel), ngr); + } + + sp_gradient_ensure_vector(ngr); + + + SPStop* stop = ngr->getFirstStop(); + if (stop) { + swsel->_csel->base->getColorAlpha(stop->specified_color, &stop->opacity); + stop->currentColor = false; + // TODO push refresh + } + } + */ + } +} + +void SwatchSelector::_releasedCb(SPColorSelector * /*csel*/, void * /*data*/) +{ +} + +void SwatchSelector::_changedCb(SPColorSelector */*csel*/, void *data) +{ + if (data) { + SwatchSelector *swsel = reinterpret_cast(data); + + // TODO might have to block cycles + + if (swsel->_gsel) { + SPGradient *gradient = swsel->_gsel->getVector(); + SPGradient *ngr = sp_gradient_ensure_vector_normalized(gradient); + if (ngr != gradient) { + /* Our master gradient has changed */ + // TODO replace with proper - sp_gradient_vector_widget_load_gradient(GTK_WIDGET(swsel->_gsel), ngr); + } + + sp_gradient_ensure_vector(ngr); + + + SPStop* stop = ngr->getFirstStop(); + if (stop) { + SPColor color; + float alpha = 0; + guint32 rgb = 0; + + swsel->_csel->base->getColorAlpha( color, &alpha ); + rgb = color.toRGBA32( 0x00 ); + + // TODO replace with generic shared code that also handles icc-color + Inkscape::CSSOStringStream os; + gchar c[64]; + sp_svg_write_color(c, sizeof(c), rgb); + os << "stop-color:" << c << ";stop-opacity:" << static_cast(alpha) <<";"; + SP_OBJECT_REPR(stop)->setAttribute("style", os.str().c_str()); + + sp_document_done(SP_OBJECT_DOCUMENT(ngr), SP_VERB_CONTEXT_GRADIENT, + _("Change swatch color")); + } + } + } +} + +void SwatchSelector::connectGrabbedHandler( GCallback handler, void *data ) +{ + GObject* obj = G_OBJECT(_gsel); + g_signal_connect( obj, "grabbed", handler, data ); +} + +void SwatchSelector::connectDraggedHandler( GCallback handler, void *data ) +{ + GObject* obj = G_OBJECT(_gsel); + g_signal_connect( obj, "dragged", handler, data ); +} + +void SwatchSelector::connectReleasedHandler( GCallback handler, void *data ) +{ + GObject* obj = G_OBJECT(_gsel); + g_signal_connect( obj, "released", handler, data ); +} + +void SwatchSelector::connectchangedHandler( GCallback handler, void *data ) +{ + GObject* obj = G_OBJECT(_gsel); + g_signal_connect( obj, "changed", handler, data ); +} + +void SwatchSelector::setVector(SPDocument */*doc*/, SPGradient *vector) +{ + //GtkVBox * box = gobj(); + + _gsel->setVector((vector) ? SP_OBJECT_DOCUMENT(vector) : 0, vector); + + if (vector) { + SPStop* stop = vector->getFirstStop(); + + guint32 const colorVal = sp_stop_get_rgba32(stop); + _csel->base->setAlpha(SP_RGBA32_A_F(colorVal)); + SPColor color( SP_RGBA32_R_F(colorVal), SP_RGBA32_G_F(colorVal), SP_RGBA32_B_F(colorVal) ); + // set its color, from the stored array + _csel->base->setColor( color ); + } + +/* +*/ +} + +} // namespace Widgets +} // namespace Inkscape + + + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 : diff --git a/src/widgets/swatch-selector.h b/src/widgets/swatch-selector.h new file mode 100644 index 000000000..cf1c24da1 --- /dev/null +++ b/src/widgets/swatch-selector.h @@ -0,0 +1,57 @@ +#ifndef SEEN_SP_SWATCH_SELECTOR_H +#define SEEN_SP_SWATCH_SELECTOR_H + + + +#include + +class SPDocument; +class SPGradient; +class SPColorSelector; +class SPGradientSelector; + +namespace Inkscape +{ +namespace Widgets +{ + +class SwatchSelector : public Gtk::VBox +{ +public: + SwatchSelector(); + virtual ~SwatchSelector(); + + void connectGrabbedHandler( GCallback handler, void *data ); + void connectDraggedHandler( GCallback handler, void *data ); + void connectReleasedHandler( GCallback handler, void *data ); + void connectchangedHandler( GCallback handler, void *data ); + + void setVector(SPDocument *doc, SPGradient *vector); + +private: + static void _grabbedCb(SPColorSelector *csel, void *data); + static void _draggedCb(SPColorSelector *csel, void *data); + static void _releasedCb(SPColorSelector *csel, void *data); + static void _changedCb(SPColorSelector *csel, void *data); + + SPGradientSelector *_gsel; + SPColorSelector *_csel; +}; + + +} // namespace Widgets +} // namespace Inkscape + +#endif // SEEN_SP_SWATCH_SELECTOR_H + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 : + -- cgit v1.2.3 From df087e8cc5961fef1a59f46889a772da8e58d230 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sun, 21 Mar 2010 15:16:39 -0700 Subject: Fix crash (bzr r9220) --- src/widgets/paint-selector.cpp | 12 +++++++++--- src/widgets/swatch-selector.cpp | 5 +++++ src/widgets/swatch-selector.h | 2 ++ 3 files changed, 16 insertions(+), 3 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/paint-selector.cpp b/src/widgets/paint-selector.cpp index 892793543..3eaec1c23 100644 --- a/src/widgets/paint-selector.cpp +++ b/src/widgets/paint-selector.cpp @@ -125,9 +125,15 @@ static bool isPaintModeGradient( SPPaintSelectorMode mode ) static SPGradientSelector *getGradientFromData(SPPaintSelector *psel) { - // TODO g_message("FIXME FIXME"); - gchar const* key = (psel->mode == SP_PAINT_SELECTOR_MODE_SWATCH) ? "swatch-selector" : "gradient-selector"; - SPGradientSelector *grad = reinterpret_cast(gtk_object_get_data(GTK_OBJECT(psel->selector), key)); + SPGradientSelector *grad = 0; + if (psel->mode == SP_PAINT_SELECTOR_MODE_SWATCH) { + SwatchSelector *swatchsel = static_cast(g_object_get_data(G_OBJECT(psel->selector), "swatch-selector")); + if (swatchsel) { + grad = swatchsel->getGradientSelector(); + } + } else { + grad = reinterpret_cast(gtk_object_get_data(GTK_OBJECT(psel->selector), "gradient-selector")); + } return grad; } diff --git a/src/widgets/swatch-selector.cpp b/src/widgets/swatch-selector.cpp index a7bd5eae1..50ee632cd 100644 --- a/src/widgets/swatch-selector.cpp +++ b/src/widgets/swatch-selector.cpp @@ -57,6 +57,11 @@ SwatchSelector::~SwatchSelector() _gsel = 0; } +SPGradientSelector *SwatchSelector::getGradientSelector() +{ + return _gsel; +} + void SwatchSelector::_grabbedCb(SPColorSelector * /*csel*/, void * /*data*/) { } diff --git a/src/widgets/swatch-selector.h b/src/widgets/swatch-selector.h index cf1c24da1..83acf9fda 100644 --- a/src/widgets/swatch-selector.h +++ b/src/widgets/swatch-selector.h @@ -28,6 +28,8 @@ public: void setVector(SPDocument *doc, SPGradient *vector); + SPGradientSelector *getGradientSelector(); + private: static void _grabbedCb(SPColorSelector *csel, void *data); static void _draggedCb(SPColorSelector *csel, void *data); -- cgit v1.2.3 From 6cf21902eb05d2d47b16b45b8419be4dcd1a35ff Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sun, 21 Mar 2010 17:44:33 -0700 Subject: C++-ification of paint selector. (bzr r9221) --- src/widgets/fill-style.cpp | 40 ++++----- src/widgets/gradient-vector.cpp | 4 +- src/widgets/paint-selector.cpp | 185 ++++++++++++++++++-------------------- src/widgets/paint-selector.h | 48 +++++----- src/widgets/sp-color-notebook.cpp | 4 +- src/widgets/sp-color-selector.cpp | 9 +- src/widgets/sp-color-selector.h | 2 +- src/widgets/stroke-style.cpp | 37 ++++---- src/widgets/swatch-selector.cpp | 2 +- 9 files changed, 154 insertions(+), 177 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/fill-style.cpp b/src/widgets/fill-style.cpp index 87cd238a7..c84a3a07e 100644 --- a/src/widgets/fill-style.cpp +++ b/src/widgets/fill-style.cpp @@ -190,7 +190,7 @@ sp_fill_style_widget_update (SPWidget *spw) case QUERY_STYLE_NOTHING: { /* No paint at all */ - sp_paint_selector_set_mode (psel, SP_PAINT_SELECTOR_MODE_EMPTY); + psel->setMode(SP_PAINT_SELECTOR_MODE_EMPTY); break; } @@ -199,39 +199,37 @@ sp_fill_style_widget_update (SPWidget *spw) case QUERY_STYLE_MULTIPLE_SAME: { SPPaintSelectorMode pselmode = sp_style_determine_paint_selector_mode (query, true); - sp_paint_selector_set_mode (psel, pselmode); + psel->setMode(pselmode); - sp_paint_selector_set_fillrule (psel, query->fill_rule.computed == ART_WIND_RULE_NONZERO? - SP_PAINT_SELECTOR_FILLRULE_NONZERO : SP_PAINT_SELECTOR_FILLRULE_EVENODD); + psel->setFillrule(query->fill_rule.computed == ART_WIND_RULE_NONZERO? + SP_PAINT_SELECTOR_FILLRULE_NONZERO : SP_PAINT_SELECTOR_FILLRULE_EVENODD); if (query->fill.set && query->fill.isColor()) { - sp_paint_selector_set_color_alpha (psel, &query->fill.value.color, SP_SCALE24_TO_FLOAT (query->fill_opacity.value)); + psel->setColorAlpha(query->fill.value.color, SP_SCALE24_TO_FLOAT(query->fill_opacity.value)); } else if (query->fill.set && query->fill.isPaintserver()) { SPPaintServer *server = SP_STYLE_FILL_SERVER (query); if (server && SP_IS_GRADIENT(server) && SP_GRADIENT(server)->getVector()->isSwatch()) { SPGradient *vector = SP_GRADIENT(server)->getVector(); - sp_paint_selector_set_swatch( psel, vector ); + psel->setSwatch( vector ); } else if (SP_IS_LINEARGRADIENT (server)) { SPGradient *vector = SP_GRADIENT(server)->getVector(); - sp_paint_selector_set_gradient_linear (psel, vector); + psel->setGradientLinear( vector ); SPLinearGradient *lg = SP_LINEARGRADIENT (server); - sp_paint_selector_set_gradient_properties (psel, - SP_GRADIENT_UNITS (lg), - SP_GRADIENT_SPREAD (lg)); + psel->setGradientProperties( SP_GRADIENT_UNITS(lg), + SP_GRADIENT_SPREAD(lg) ); } else if (SP_IS_RADIALGRADIENT (server)) { SPGradient *vector = SP_GRADIENT(server)->getVector(); - sp_paint_selector_set_gradient_radial (psel, vector); + psel->setGradientRadial( vector ); SPRadialGradient *rg = SP_RADIALGRADIENT (server); - sp_paint_selector_set_gradient_properties (psel, - SP_GRADIENT_UNITS (rg), - SP_GRADIENT_SPREAD (rg)); + psel->setGradientProperties( SP_GRADIENT_UNITS (rg), + SP_GRADIENT_SPREAD (rg) ); } else if (SP_IS_PATTERN (server)) { SPPattern *pat = pattern_getroot (SP_PATTERN (server)); - sp_update_pattern_list (psel, pat); + psel->updatePatternList( pat ); } } break; @@ -239,7 +237,7 @@ sp_fill_style_widget_update (SPWidget *spw) case QUERY_STYLE_MULTIPLE_DIFFERENT: { - sp_paint_selector_set_mode (psel, SP_PAINT_SELECTOR_MODE_MULTIPLE); + psel->setMode(SP_PAINT_SELECTOR_MODE_MULTIPLE); break; } } @@ -321,7 +319,7 @@ sp_fill_style_widget_paint_dragged (SPPaintSelector *psel, SPWidget *spw) case SP_PAINT_SELECTOR_MODE_COLOR_RGB: case SP_PAINT_SELECTOR_MODE_COLOR_CMYK: { - sp_paint_selector_set_flat_color (psel, SP_ACTIVE_DESKTOP, "fill", "fill-opacity"); + psel->setFlatColor( SP_ACTIVE_DESKTOP, "fill", "fill-opacity" ); sp_document_maybe_done (sp_desktop_document(SP_ACTIVE_DESKTOP), undo_label, SP_VERB_DIALOG_FILL_STROKE, _("Set fill color")); g_object_set_data (G_OBJECT (spw), "local", GINT_TO_POINTER (TRUE)); // local change, do not update from selection @@ -395,7 +393,7 @@ sp_fill_style_widget_paint_changed ( SPPaintSelector *psel, // FIXME: fix for GTK breakage, see comment in SelectedStyle::on_opacity_changed; here it results in losing release events sp_canvas_force_full_redraw_after_interruptions(sp_desktop_canvas(desktop), 0); - sp_paint_selector_set_flat_color (psel, desktop, "fill", "fill-opacity"); + psel->setFlatColor( desktop, "fill", "fill-opacity" ); sp_document_maybe_done (sp_desktop_document(desktop), undo_label, SP_VERB_DIALOG_FILL_STROKE, _("Set fill color")); // resume interruptibility @@ -422,7 +420,7 @@ sp_fill_style_widget_paint_changed ( SPPaintSelector *psel, SPCSSAttr *css = sp_repr_css_attr_new(); sp_repr_css_set_property(css, "fill-opacity", "1.0"); - SPGradient *vector = sp_paint_selector_get_gradient_vector(psel); + SPGradient *vector = psel->getGradientVector(); if (!vector) { /* No vector in paint selector should mean that we just changed mode */ @@ -460,7 +458,7 @@ sp_fill_style_widget_paint_changed ( SPPaintSelector *psel, sp_repr_css_change_recursive (SP_OBJECT_REPR (i->data), css, "style"); SPGradient *gr = sp_item_set_gradient(SP_ITEM(i->data), vector, gradient_type, true); - sp_gradient_selector_attrs_to_gradient (gr, psel); + psel->pushAttrsToGradient( gr ); } } @@ -475,7 +473,7 @@ sp_fill_style_widget_paint_changed ( SPPaintSelector *psel, if (items) { - SPPattern *pattern = sp_paint_selector_get_pattern (psel); + SPPattern *pattern = psel->getPattern(); if (!pattern) { /* No Pattern in paint selector should mean that we just diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index 147077f44..7bfe27310 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -1146,7 +1146,7 @@ static void sp_gradient_vector_color_dragged(SPColorSelector *csel, GtkObject *o SPStop *stop = SP_STOP(g_object_get_data(G_OBJECT(gtk_menu_get_active(GTK_MENU(gtk_option_menu_get_menu(mnu)))), "stop")); - csel->base->getColorAlpha(stop->specified_color, &stop->opacity); + csel->base->getColorAlpha(stop->specified_color, stop->opacity); stop->currentColor = false; blocked = FALSE; @@ -1185,7 +1185,7 @@ static void sp_gradient_vector_color_changed(SPColorSelector *csel, GtkObject *o SPStop *stop = SP_STOP(g_object_get_data(G_OBJECT(gtk_menu_get_active(GTK_MENU(gtk_option_menu_get_menu(mnu)))), "stop")); csel = static_cast(g_object_get_data(G_OBJECT(object), "cselector")); - csel->base->getColorAlpha( color, &alpha ); + csel->base->getColorAlpha( color, alpha ); rgb = color.toRGBA32( 0x00 ); sp_repr_set_css_double(SP_OBJECT_REPR(stop), "offset", stop->offset); diff --git a/src/widgets/paint-selector.cpp b/src/widgets/paint-selector.cpp index 3eaec1c23..360994241 100644 --- a/src/widgets/paint-selector.cpp +++ b/src/widgets/paint-selector.cpp @@ -123,7 +123,7 @@ static bool isPaintModeGradient( SPPaintSelectorMode mode ) return isGrad; } -static SPGradientSelector *getGradientFromData(SPPaintSelector *psel) +static SPGradientSelector *getGradientFromData(SPPaintSelector const *psel) { SPGradientSelector *grad = 0; if (psel->mode == SP_PAINT_SELECTOR_MODE_SWATCH) { @@ -325,7 +325,7 @@ static void sp_paint_selector_style_button_toggled(GtkToggleButton *tb, SPPaintSelector *psel) { if (!psel->update && gtk_toggle_button_get_active(tb)) { - sp_paint_selector_set_mode(psel, (SPPaintSelectorMode)GPOINTER_TO_UINT(gtk_object_get_data(GTK_OBJECT(tb), "mode"))); + psel->setMode(static_cast(GPOINTER_TO_UINT(gtk_object_get_data(GTK_OBJECT(tb), "mode")))); } } @@ -355,11 +355,9 @@ sp_paint_selector_show_fillrule(SPPaintSelector *psel, bool is_fill) GtkWidget * sp_paint_selector_new(bool is_fill) { - SPPaintSelector *psel; + SPPaintSelector *psel = static_cast(gtk_type_new(SP_TYPE_PAINT_SELECTOR)); - psel = (SPPaintSelector*)gtk_type_new(SP_TYPE_PAINT_SELECTOR); - - sp_paint_selector_set_mode(psel, SP_PAINT_SELECTOR_MODE_MULTIPLE); + psel->setMode(SP_PAINT_SELECTOR_MODE_MULTIPLE); // This silliness is here because I don't know how to pass a parameter to the // GtkObject "constructor" (sp_paint_selector_init). Remove it when paint_selector @@ -369,66 +367,64 @@ sp_paint_selector_new(bool is_fill) return GTK_WIDGET(psel); } -void -sp_paint_selector_set_mode(SPPaintSelector *psel, SPPaintSelectorMode mode) +void SPPaintSelector::setMode(SPPaintSelectorMode mode) { - if (psel->mode != mode) { - psel->update = TRUE; + if (this->mode != mode) { + update = TRUE; #ifdef SP_PS_VERBOSE - g_print("Mode change %d -> %d %s -> %s\n", psel->mode, mode, modeStrings[psel->mode], modeStrings[mode]); + g_print("Mode change %d -> %d %s -> %s\n", this->mode, mode, modeStrings[this->mode], modeStrings[mode]); #endif switch (mode) { case SP_PAINT_SELECTOR_MODE_EMPTY: - sp_paint_selector_set_mode_empty(psel); + sp_paint_selector_set_mode_empty(this); break; case SP_PAINT_SELECTOR_MODE_MULTIPLE: - sp_paint_selector_set_mode_multiple(psel); + sp_paint_selector_set_mode_multiple(this); break; case SP_PAINT_SELECTOR_MODE_NONE: - sp_paint_selector_set_mode_none(psel); + sp_paint_selector_set_mode_none(this); break; case SP_PAINT_SELECTOR_MODE_COLOR_RGB: case SP_PAINT_SELECTOR_MODE_COLOR_CMYK: - sp_paint_selector_set_mode_color(psel, mode); + sp_paint_selector_set_mode_color(this, mode); break; case SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR: case SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL: - sp_paint_selector_set_mode_gradient(psel, mode); + sp_paint_selector_set_mode_gradient(this, mode); break; case SP_PAINT_SELECTOR_MODE_PATTERN: - sp_paint_selector_set_mode_pattern(psel, mode); + sp_paint_selector_set_mode_pattern(this, mode); break; case SP_PAINT_SELECTOR_MODE_SWATCH: - sp_paint_selector_set_mode_swatch(psel, mode); + sp_paint_selector_set_mode_swatch(this, mode); break; case SP_PAINT_SELECTOR_MODE_UNSET: - sp_paint_selector_set_mode_unset(psel); + sp_paint_selector_set_mode_unset(this); break; default: g_warning("file %s: line %d: Unknown paint mode %d", __FILE__, __LINE__, mode); break; } - psel->mode = mode; - gtk_signal_emit(GTK_OBJECT(psel), psel_signals[MODE_CHANGED], psel->mode); - psel->update = FALSE; + this->mode = mode; + gtk_signal_emit(GTK_OBJECT(this), psel_signals[MODE_CHANGED], this->mode); + update = FALSE; } } -void -sp_paint_selector_set_fillrule(SPPaintSelector *psel, SPPaintSelectorFillRule fillrule) +void SPPaintSelector::setFillrule(SPPaintSelectorFillRule fillrule) { - if (psel->fillrulebox) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(psel->evenodd), (fillrule == SP_PAINT_SELECTOR_FILLRULE_EVENODD)); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(psel->nonzero), (fillrule == SP_PAINT_SELECTOR_FILLRULE_NONZERO)); + if (fillrulebox) { + // TODO this flips widgets but does not use a member to store state. Revisit + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(evenodd), (fillrule == SP_PAINT_SELECTOR_FILLRULE_EVENODD)); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(nonzero), (fillrule == SP_PAINT_SELECTOR_FILLRULE_NONZERO)); } } -void -sp_paint_selector_set_color_alpha(SPPaintSelector *psel, SPColor const *color, float alpha) +void SPPaintSelector::setColorAlpha(SPColor const &color, float alpha) { g_return_if_fail( ( 0.0 <= alpha ) && ( alpha <= 1.0 ) ); - SPColorSelector *csel; - guint32 rgba; + SPColorSelector *csel = 0; + guint32 rgba = 0; /* if ( sp_color_get_colorspace_type(color) == SP_COLORSPACE_TYPE_CMYK ) @@ -444,115 +440,105 @@ sp_paint_selector_set_color_alpha(SPPaintSelector *psel, SPColor const *color, f #ifdef SP_PS_VERBOSE g_print("PaintSelector set RGBA\n"); #endif - sp_paint_selector_set_mode(psel, SP_PAINT_SELECTOR_MODE_COLOR_RGB); + setMode(SP_PAINT_SELECTOR_MODE_COLOR_RGB); } - csel = (SPColorSelector*)gtk_object_get_data(GTK_OBJECT(psel->selector), "color-selector"); - rgba = color->toRGBA32( alpha ); - csel->base->setColorAlpha( *color, alpha ); + csel = reinterpret_cast(gtk_object_get_data(GTK_OBJECT(selector), "color-selector")); + rgba = color.toRGBA32( alpha ); + csel->base->setColorAlpha( color, alpha ); } -void sp_paint_selector_set_swatch(SPPaintSelector *psel, SPGradient *vector ) +void SPPaintSelector::setSwatch(SPGradient *vector ) { #ifdef SP_PS_VERBOSE g_print("PaintSelector set SWATCH\n"); #endif - sp_paint_selector_set_mode(psel, SP_PAINT_SELECTOR_MODE_SWATCH); + setMode(SP_PAINT_SELECTOR_MODE_SWATCH); - SwatchSelector *swatchsel = static_cast(gtk_object_get_data(GTK_OBJECT(psel->selector), "swatch-selector")); + SwatchSelector *swatchsel = static_cast(g_object_get_data(G_OBJECT(selector), "swatch-selector")); if (swatchsel) { swatchsel->setVector( (vector) ? SP_OBJECT_DOCUMENT(vector) : 0, vector ); } } -void -sp_paint_selector_set_gradient_linear(SPPaintSelector *psel, SPGradient *vector) +void SPPaintSelector::setGradientLinear(SPGradient *vector) { #ifdef SP_PS_VERBOSE g_print("PaintSelector set GRADIENT LINEAR\n"); #endif - sp_paint_selector_set_mode(psel, SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR); + setMode(SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR); - SPGradientSelector *gsel = getGradientFromData(psel); + SPGradientSelector *gsel = getGradientFromData(this); gsel->setMode(SPGradientSelector::MODE_LINEAR); gsel->setVector((vector) ? SP_OBJECT_DOCUMENT(vector) : 0, vector); } -void -sp_paint_selector_set_gradient_radial(SPPaintSelector *psel, SPGradient *vector) +void SPPaintSelector::setGradientRadial(SPGradient *vector) { #ifdef SP_PS_VERBOSE g_print("PaintSelector set GRADIENT RADIAL\n"); #endif - sp_paint_selector_set_mode(psel, SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL); + setMode(SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL); - SPGradientSelector *gsel = getGradientFromData(psel); + SPGradientSelector *gsel = getGradientFromData(this); gsel->setMode(SPGradientSelector::MODE_RADIAL); gsel->setVector((vector) ? SP_OBJECT_DOCUMENT(vector) : 0, vector); } -void sp_paint_selector_set_gradient_properties(SPPaintSelector *psel, SPGradientUnits units, SPGradientSpread spread) +void SPPaintSelector::setGradientProperties( SPGradientUnits units, SPGradientSpread spread ) { - g_return_if_fail(SP_IS_PAINT_SELECTOR(psel)); - g_return_if_fail(isPaintModeGradient(psel->mode)); + g_return_if_fail(isPaintModeGradient(mode)); - SPGradientSelector *gsel = getGradientFromData(psel); + SPGradientSelector *gsel = getGradientFromData(this); gsel->setUnits(units); gsel->setSpread(spread); } -void sp_paint_selector_get_gradient_properties(SPPaintSelector *psel, SPGradientUnits *units, SPGradientSpread *spread) +void SPPaintSelector::getGradientProperties( SPGradientUnits &units, SPGradientSpread &spread) const { - g_return_if_fail(SP_IS_PAINT_SELECTOR(psel)); - g_return_if_fail(isPaintModeGradient(psel->mode)); + g_return_if_fail(isPaintModeGradient(mode)); - SPGradientSelector *gsel = getGradientFromData(psel); - if (units) { - *units = gsel->getUnits(); - } - if (spread) { - *spread = gsel->getSpread(); - } + SPGradientSelector *gsel = getGradientFromData(this); + units = gsel->getUnits(); + spread = gsel->getSpread(); } /** * \post (alpha == NULL) || (*alpha in [0.0, 1.0]). */ -void -sp_paint_selector_get_color_alpha(SPPaintSelector *psel, SPColor *color, gfloat *alpha) +void SPPaintSelector::getColorAlpha(SPColor &color, gfloat &alpha) const { SPColorSelector *csel; - csel = (SPColorSelector*)gtk_object_get_data(GTK_OBJECT(psel->selector), "color-selector"); + csel = reinterpret_cast(g_object_get_data(G_OBJECT(selector), "color-selector")); - csel->base->getColorAlpha( *color, alpha ); + csel->base->getColorAlpha( color, alpha ); - g_assert( !alpha - || ( ( 0.0 <= *alpha ) - && ( *alpha <= 1.0 ) ) ); + g_assert( ( 0.0 <= alpha ) + && ( alpha <= 1.0 ) ); } -SPGradient *sp_paint_selector_get_gradient_vector(SPPaintSelector *psel) +SPGradient *SPPaintSelector::getGradientVector() { SPGradient* vect = 0; - if (isPaintModeGradient(psel->mode)) { - SPGradientSelector *gsel = getGradientFromData(psel); + if (isPaintModeGradient(mode)) { + SPGradientSelector *gsel = getGradientFromData(this); vect = gsel->getVector(); } return vect; } -void -sp_gradient_selector_attrs_to_gradient(SPGradient *gr, SPPaintSelector *psel) + +void SPPaintSelector::pushAttrsToGradient( SPGradient *gr ) const { SPGradientUnits units = SP_GRADIENT_UNITS_OBJECTBOUNDINGBOX; SPGradientSpread spread = SP_GRADIENT_SPREAD_PAD; - sp_paint_selector_get_gradient_properties(psel, &units, &spread); + getGradientProperties( units, spread ); sp_gradient_set_units(gr, units); sp_gradient_set_spread(gr, spread); SP_OBJECT(gr)->updateRepr(); @@ -655,7 +641,7 @@ sp_paint_selector_color_released(SPColorSelector *csel, SPPaintSelector *psel) static void sp_paint_selector_color_changed(SPColorSelector *csel, SPPaintSelector *psel) { - csel->base->getColorAlpha( psel->color, &psel->alpha ); + csel->base->getColorAlpha( psel->color, psel->alpha ); gtk_signal_emit(GTK_OBJECT(psel), psel_signals[CHANGED]); } @@ -968,11 +954,12 @@ ink_pattern_menu(GtkWidget *mnu) /*update pattern list*/ -void -sp_update_pattern_list( SPPaintSelector *psel, SPPattern *pattern) +void SPPaintSelector::updatePatternList( SPPattern *pattern ) { - if (psel->update) return; - GtkWidget *mnu = (GtkWidget *)g_object_get_data(G_OBJECT(psel), "patternmenu"); + if (update) { + return; + } + GtkWidget *mnu = GTK_WIDGET(g_object_get_data(G_OBJECT(this), "patternmenu")); g_assert( mnu != NULL ); /* Clear existing menu if any */ @@ -1068,13 +1055,12 @@ sp_paint_selector_set_mode_pattern(SPPaintSelector *psel, SPPaintSelectorMode mo #endif } -SPPattern * -sp_paint_selector_get_pattern(SPPaintSelector *psel) +SPPattern *SPPaintSelector::getPattern() { - SPPattern *pat; - g_return_val_if_fail((psel->mode == SP_PAINT_SELECTOR_MODE_PATTERN) , NULL); + SPPattern *pat = 0; + g_return_val_if_fail((mode == SP_PAINT_SELECTOR_MODE_PATTERN) , NULL); - GtkWidget *patmnu = (GtkWidget *) g_object_get_data(G_OBJECT(psel), "patternmenu"); + GtkWidget *patmnu = (GtkWidget *) g_object_get_data(G_OBJECT(this), "patternmenu"); /* no pattern menu if we were just selected */ if ( patmnu == NULL ) return NULL; @@ -1086,24 +1072,27 @@ sp_paint_selector_get_pattern(SPPaintSelector *psel) return NULL; } gchar *patid = (gchar *) g_object_get_data(G_OBJECT(gtk_menu_get_active(m)), - "pattern"); + "pattern"); //gchar *pattern = ""; if (strcmp(patid, "none")){ - gchar *stockid = (gchar *) g_object_get_data(G_OBJECT(gtk_menu_get_active(m)), - "stockid"); - gchar *paturn = patid; - if (!strcmp(stockid,"true")) paturn = g_strconcat("urn:inkscape:pattern:",patid,NULL); - SPObject *pat_obj = get_stock_item(paturn); - if (pat_obj) { + gchar *stockid = (gchar *) g_object_get_data(G_OBJECT(gtk_menu_get_active(m)), + "stockid"); + gchar *paturn = patid; + if (!strcmp(stockid,"true")) paturn = g_strconcat("urn:inkscape:pattern:",patid,NULL); + SPObject *pat_obj = get_stock_item(paturn); + if (pat_obj) { pat = SP_PATTERN(pat_obj); } } else { - pat = pattern_getroot(SP_PATTERN(g_object_get_data(G_OBJECT(gtk_menu_get_active(m)), "pattern"))); + pat = pattern_getroot(SP_PATTERN(g_object_get_data(G_OBJECT(gtk_menu_get_active(m)), "pattern"))); + } + + if (pat && !SP_IS_PATTERN(pat)) { + pat = 0; } - if SP_IS_PATTERN(pat) return pat; - return NULL; + return pat; } static void sp_paint_selector_set_mode_swatch(SPPaintSelector *psel, SPPaintSelectorMode mode) @@ -1142,14 +1131,14 @@ static void sp_paint_selector_set_mode_swatch(SPPaintSelector *psel, SPPaintSele #endif } -void -sp_paint_selector_set_flat_color(SPPaintSelector *psel, SPDesktop *desktop, gchar const *color_property, gchar const *opacity_property) +// TODO this seems very bad to be taking in a desktop pointer to muck with. Logic probably belongs elsewhere +void SPPaintSelector::setFlatColor( SPDesktop *desktop, gchar const *color_property, gchar const *opacity_property ) { SPCSSAttr *css = sp_repr_css_attr_new(); SPColor color; - gfloat alpha; - sp_paint_selector_get_color_alpha(psel, &color, &alpha); + gfloat alpha = 0; + getColorAlpha( color, alpha ); std::string colorStr = color.toString(); @@ -1158,7 +1147,7 @@ sp_paint_selector_set_flat_color(SPPaintSelector *psel, SPDesktop *desktop, gcha g_message("sp_paint_selector_set_flat_color() to '%s' from 0x%08x::%s", colorStr.c_str(), rgba, - (color.icc?color.icc->colorProfile.c_str():"") ); + (color.icc ? color.icc->colorProfile.c_str():"") ); #endif // SP_PS_VERBOSE sp_repr_css_set_property(css, color_property, colorStr.c_str()); diff --git a/src/widgets/paint-selector.h b/src/widgets/paint-selector.h index 2d7ac3011..9d0c5e76c 100644 --- a/src/widgets/paint-selector.h +++ b/src/widgets/paint-selector.h @@ -73,6 +73,28 @@ struct SPPaintSelector { SPColor color; float alpha; + + + void setMode( SPPaintSelectorMode mode ); + void setFillrule( SPPaintSelectorFillRule fillrule ); + + void setColorAlpha( SPColor const &color, float alpha ); + void getColorAlpha( SPColor &color, gfloat &alpha ) const; + + void setGradientLinear( SPGradient *vector ); + void setGradientRadial( SPGradient *vector ); + void setSwatch( SPGradient *vector ); + + void setGradientProperties( SPGradientUnits units, SPGradientSpread spread ); + void getGradientProperties( SPGradientUnits &units, SPGradientSpread &spread ) const; + + void pushAttrsToGradient( SPGradient *gr ) const; + SPGradient *getGradientVector(); + SPPattern * getPattern(); + void updatePatternList( SPPattern *pat ); + + // TODO move this elsewhere: + void setFlatColor( SPDesktop *desktop, const gchar *color_property, const gchar *opacity_property ); }; /// The SPPaintSelector vtable @@ -92,33 +114,7 @@ GtkType sp_paint_selector_get_type (void); GtkWidget *sp_paint_selector_new (bool is_fill); -void sp_paint_selector_set_mode (SPPaintSelector *psel, SPPaintSelectorMode mode); -void sp_paint_selector_set_fillrule (SPPaintSelector *psel, SPPaintSelectorFillRule fillrule); - -void sp_paint_selector_set_color_alpha (SPPaintSelector *psel, const SPColor *color, float alpha); - -void sp_paint_selector_set_gradient_linear (SPPaintSelector *psel, SPGradient *vector); - -void sp_paint_selector_set_gradient_radial (SPPaintSelector *psel, SPGradient *vector); - -void sp_paint_selector_set_swatch(SPPaintSelector *psel, SPGradient *vector ); - -void sp_paint_selector_set_gradient_properties (SPPaintSelector *psel, SPGradientUnits units, SPGradientSpread spread); -void sp_paint_selector_get_gradient_properties (SPPaintSelector *psel, SPGradientUnits *units, SPGradientSpread *spread); - -void sp_gradient_selector_attrs_to_gradient (SPGradient *gr, SPPaintSelector *psel); - -void sp_paint_selector_get_color_alpha (SPPaintSelector *psel, SPColor *color, gfloat *alpha); - -SPGradient *sp_paint_selector_get_gradient_vector (SPPaintSelector *psel); - -void sp_paint_selector_system_color_set (SPPaintSelector *psel, const SPColor *color, float opacity); - -SPPattern * sp_paint_selector_get_pattern (SPPaintSelector *psel); - -void sp_update_pattern_list ( SPPaintSelector *psel, SPPattern *pat); -void sp_paint_selector_set_flat_color (SPPaintSelector *psel, SPDesktop *desktop, const gchar *color_property, const gchar *opacity_property); SPPaintSelectorMode sp_style_determine_paint_selector_mode (SPStyle *style, bool isfill); diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp index b2df8d2a5..a249786ff 100644 --- a/src/widgets/sp-color-notebook.cpp +++ b/src/widgets/sp-color-notebook.cpp @@ -126,7 +126,7 @@ void ColorNotebook::switchPage(GtkNotebook*, if ( gtk_notebook_get_current_page (GTK_NOTEBOOK (_book)) >= 0 ) { csel = getCurrentSelector(); - csel->base->getColorAlpha(_color, &_alpha); + csel->base->getColorAlpha(_color, _alpha); } widget = gtk_notebook_get_nth_page (GTK_NOTEBOOK (_book), page_num); if ( widget && SP_IS_COLOR_SELECTOR (widget) ) @@ -625,7 +625,7 @@ void ColorNotebook::_entryModified (SPColorSelector *csel, SPColorNotebook *colo SPColor color; gfloat alpha = 1.0; - csel->base->getColorAlpha( color, &alpha ); + csel->base->getColorAlpha( color, alpha ); nb->_updateRgbaEntry( color, alpha ); nb->_updateInternals( color, alpha, nb->_dragging ); } diff --git a/src/widgets/sp-color-selector.cpp b/src/widgets/sp-color-selector.cpp index 312128781..203bc3c2a 100644 --- a/src/widgets/sp-color-selector.cpp +++ b/src/widgets/sp-color-selector.cpp @@ -318,15 +318,12 @@ void ColorSelector::_colorChanged() { } -void ColorSelector::getColorAlpha( SPColor& color, gfloat* alpha ) const +void ColorSelector::getColorAlpha( SPColor &color, gfloat &alpha ) const { gint i = 0; color = _color; - if ( alpha ) - { - *alpha = _alpha; - } + alpha = _alpha; // Try to catch uninitialized value usage if ( color.v.c[0] ) @@ -345,7 +342,7 @@ void ColorSelector::getColorAlpha( SPColor& color, gfloat* alpha ) const { i++; } - if ( alpha && *alpha ) + if ( alpha ) { i++; } diff --git a/src/widgets/sp-color-selector.h b/src/widgets/sp-color-selector.h index 40446fe0a..a2ad87dd5 100644 --- a/src/widgets/sp-color-selector.h +++ b/src/widgets/sp-color-selector.h @@ -26,7 +26,7 @@ public: gfloat getAlpha() const; void setColorAlpha( const SPColor& color, gfloat alpha, bool emit = false ); - void getColorAlpha( SPColor& color, gfloat* alpha ) const; + void getColorAlpha( SPColor &color, gfloat &alpha ) const; virtual void setSubmode( guint submode ); virtual guint getSubmode() const; diff --git a/src/widgets/stroke-style.cpp b/src/widgets/stroke-style.cpp index a981934dd..57dce6fff 100644 --- a/src/widgets/stroke-style.cpp +++ b/src/widgets/stroke-style.cpp @@ -189,7 +189,7 @@ sp_stroke_style_paint_update (SPWidget *spw) case QUERY_STYLE_NOTHING: { /* No paint at all */ - sp_paint_selector_set_mode (psel, SP_PAINT_SELECTOR_MODE_EMPTY); + psel->setMode(SP_PAINT_SELECTOR_MODE_EMPTY); break; } @@ -198,7 +198,7 @@ sp_stroke_style_paint_update (SPWidget *spw) case QUERY_STYLE_MULTIPLE_SAME: { SPPaintSelectorMode pselmode = sp_style_determine_paint_selector_mode (query, false); - sp_paint_selector_set_mode (psel, pselmode); + psel->setMode(pselmode); if (query->stroke.set && query->stroke.isPaintserver()) { @@ -206,37 +206,34 @@ sp_stroke_style_paint_update (SPWidget *spw) if (server && server->isSwatch()) { SPGradient *vector = SP_GRADIENT(server)->getVector(); - sp_paint_selector_set_swatch( psel, vector ); + psel->setSwatch( vector ); } else if (SP_IS_LINEARGRADIENT (server)) { SPGradient *vector = SP_GRADIENT(server)->getVector(); - sp_paint_selector_set_gradient_linear (psel, vector); + psel->setGradientLinear( vector ); SPLinearGradient *lg = SP_LINEARGRADIENT (server); - sp_paint_selector_set_gradient_properties (psel, - SP_GRADIENT_UNITS (lg), - SP_GRADIENT_SPREAD (lg)); + psel->setGradientProperties( SP_GRADIENT_UNITS(lg), + SP_GRADIENT_SPREAD(lg) ); } else if (SP_IS_RADIALGRADIENT (server)) { SPGradient *vector = SP_GRADIENT(server)->getVector(); - sp_paint_selector_set_gradient_radial (psel, vector); + psel->setGradientRadial( vector ); SPRadialGradient *rg = SP_RADIALGRADIENT (server); - sp_paint_selector_set_gradient_properties (psel, - SP_GRADIENT_UNITS (rg), - SP_GRADIENT_SPREAD (rg)); + psel->setGradientProperties( SP_GRADIENT_UNITS(rg), + SP_GRADIENT_SPREAD(rg) ); } else if (SP_IS_PATTERN (server)) { SPPattern *pat = pattern_getroot (SP_PATTERN (server)); - sp_update_pattern_list (psel, pat); + psel->updatePatternList( pat ); } } else if (query->stroke.set && query->stroke.isColor()) { - sp_paint_selector_set_color_alpha (psel, &query->stroke.value.color, SP_SCALE24_TO_FLOAT (query->stroke_opacity.value)); - + psel->setColorAlpha(query->stroke.value.color, SP_SCALE24_TO_FLOAT(query->stroke_opacity.value)); } break; } case QUERY_STYLE_MULTIPLE_DIFFERENT: { - sp_paint_selector_set_mode (psel, SP_PAINT_SELECTOR_MODE_MULTIPLE); + psel->setMode(SP_PAINT_SELECTOR_MODE_MULTIPLE); break; } } @@ -284,7 +281,7 @@ sp_stroke_style_paint_dragged(SPPaintSelector *psel, SPWidget *spw) case SP_PAINT_SELECTOR_MODE_COLOR_RGB: case SP_PAINT_SELECTOR_MODE_COLOR_CMYK: { - sp_paint_selector_set_flat_color (psel, SP_ACTIVE_DESKTOP, "stroke", "stroke-opacity"); + psel->setFlatColor( SP_ACTIVE_DESKTOP, "stroke", "stroke-opacity" ); sp_document_maybe_done (sp_desktop_document(SP_ACTIVE_DESKTOP), undo_label, SP_VERB_DIALOG_FILL_STROKE, _("Set stroke color")); break; @@ -343,7 +340,7 @@ sp_stroke_style_paint_changed(SPPaintSelector *psel, SPWidget *spw) case SP_PAINT_SELECTOR_MODE_COLOR_RGB: case SP_PAINT_SELECTOR_MODE_COLOR_CMYK: { - sp_paint_selector_set_flat_color (psel, desktop, "stroke", "stroke-opacity"); + psel->setFlatColor(desktop, "stroke", "stroke-opacity"); sp_document_maybe_done (sp_desktop_document(desktop), undo_label, SP_VERB_DIALOG_FILL_STROKE, _("Set stroke color")); @@ -362,7 +359,7 @@ sp_stroke_style_paint_changed(SPPaintSelector *psel, SPWidget *spw) SPGradientType const gradient_type = ( psel->mode == SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR ? SP_GRADIENT_TYPE_LINEAR : SP_GRADIENT_TYPE_RADIAL ); - SPGradient *vector = sp_paint_selector_get_gradient_vector(psel); + SPGradient *vector = psel->getGradientVector(); if (!vector) { /* No vector in paint selector should mean that we just changed mode */ @@ -392,7 +389,7 @@ sp_stroke_style_paint_changed(SPPaintSelector *psel, SPWidget *spw) vector = sp_gradient_ensure_vector_normalized(vector); for (GSList const *i = items; i != NULL; i = i->next) { SPGradient *gr = sp_item_set_gradient(SP_ITEM(i->data), vector, gradient_type, false); - sp_gradient_selector_attrs_to_gradient(gr, psel); + psel->pushAttrsToGradient( gr ); } } @@ -405,7 +402,7 @@ sp_stroke_style_paint_changed(SPPaintSelector *psel, SPWidget *spw) if (items) { - SPPattern *pattern = sp_paint_selector_get_pattern (psel); + SPPattern *pattern = psel->getPattern(); if (!pattern) { /* No Pattern in paint selector should mean that we just diff --git a/src/widgets/swatch-selector.cpp b/src/widgets/swatch-selector.cpp index 50ee632cd..602adec4f 100644 --- a/src/widgets/swatch-selector.cpp +++ b/src/widgets/swatch-selector.cpp @@ -125,7 +125,7 @@ void SwatchSelector::_changedCb(SPColorSelector */*csel*/, void *data) float alpha = 0; guint32 rgb = 0; - swsel->_csel->base->getColorAlpha( color, &alpha ); + swsel->_csel->base->getColorAlpha( color, alpha ); rgb = color.toRGBA32( 0x00 ); // TODO replace with generic shared code that also handles icc-color -- cgit v1.2.3 From 44cc6927d4dbea2b6a9ee34729ade38382c6276a Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sun, 21 Mar 2010 19:47:06 -0700 Subject: C++-ification of enums. (bzr r9222) --- src/widgets/fill-style.cpp | 61 +++++++------ src/widgets/paint-selector.cpp | 190 ++++++++++++++++++----------------------- src/widgets/paint-selector.h | 47 +++++----- src/widgets/stroke-style.cpp | 36 ++++---- 4 files changed, 156 insertions(+), 178 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/fill-style.cpp b/src/widgets/fill-style.cpp index c84a3a07e..57fa22976 100644 --- a/src/widgets/fill-style.cpp +++ b/src/widgets/fill-style.cpp @@ -58,12 +58,12 @@ static void sp_fill_style_widget_change_selection ( SPWidget *spw, static void sp_fill_style_widget_update (SPWidget *spw); -static void sp_fill_style_widget_paint_mode_changed ( SPPaintSelector *psel, - SPPaintSelectorMode mode, - SPWidget *spw ); -static void sp_fill_style_widget_fillrule_changed ( SPPaintSelector *psel, - SPPaintSelectorFillRule mode, - SPWidget *spw ); +static void sp_fill_style_widget_paint_mode_changed( SPPaintSelector *psel, + SPPaintSelector::Mode mode, + SPWidget *spw ); +static void sp_fill_style_widget_fillrule_changed( SPPaintSelector *psel, + SPPaintSelector::FillRule mode, + SPWidget *spw ); static void sp_fill_style_widget_paint_dragged (SPPaintSelector *psel, SPWidget *spw ); static void sp_fill_style_widget_paint_changed (SPPaintSelector *psel, SPWidget *spw ); @@ -190,7 +190,7 @@ sp_fill_style_widget_update (SPWidget *spw) case QUERY_STYLE_NOTHING: { /* No paint at all */ - psel->setMode(SP_PAINT_SELECTOR_MODE_EMPTY); + psel->setMode(SPPaintSelector::MODE_EMPTY); break; } @@ -198,11 +198,11 @@ sp_fill_style_widget_update (SPWidget *spw) case QUERY_STYLE_MULTIPLE_AVERAGED: // TODO: treat this slightly differently, e.g. display "averaged" somewhere in paint selector case QUERY_STYLE_MULTIPLE_SAME: { - SPPaintSelectorMode pselmode = sp_style_determine_paint_selector_mode (query, true); + SPPaintSelector::Mode pselmode = sp_style_determine_paint_selector_mode(query, true); psel->setMode(pselmode); psel->setFillrule(query->fill_rule.computed == ART_WIND_RULE_NONZERO? - SP_PAINT_SELECTOR_FILLRULE_NONZERO : SP_PAINT_SELECTOR_FILLRULE_EVENODD); + SPPaintSelector::FILLRULE_NONZERO : SPPaintSelector::FILLRULE_EVENODD); if (query->fill.set && query->fill.isColor()) { psel->setColorAlpha(query->fill.value.color, SP_SCALE24_TO_FLOAT(query->fill_opacity.value)); @@ -237,7 +237,7 @@ sp_fill_style_widget_update (SPWidget *spw) case QUERY_STYLE_MULTIPLE_DIFFERENT: { - psel->setMode(SP_PAINT_SELECTOR_MODE_MULTIPLE); + psel->setMode(SPPaintSelector::MODE_MULTIPLE); break; } } @@ -250,9 +250,9 @@ sp_fill_style_widget_update (SPWidget *spw) static void -sp_fill_style_widget_paint_mode_changed ( SPPaintSelector *psel, - SPPaintSelectorMode /*mode*/, - SPWidget *spw ) +sp_fill_style_widget_paint_mode_changed( SPPaintSelector *psel, + SPPaintSelector::Mode /*mode*/, + SPWidget *spw ) { if (g_object_get_data (G_OBJECT (spw), "update")) return; @@ -263,10 +263,9 @@ sp_fill_style_widget_paint_mode_changed ( SPPaintSelector *psel, sp_fill_style_widget_paint_changed (psel, spw); } -static void -sp_fill_style_widget_fillrule_changed ( SPPaintSelector */*psel*/, - SPPaintSelectorFillRule mode, - SPWidget *spw ) +static void sp_fill_style_widget_fillrule_changed( SPPaintSelector */*psel*/, + SPPaintSelector::FillRule mode, + SPWidget *spw ) { if (g_object_get_data (G_OBJECT (spw), "update")) return; @@ -274,7 +273,7 @@ sp_fill_style_widget_fillrule_changed ( SPPaintSelector */*psel*/, SPDesktop *desktop = SP_ACTIVE_DESKTOP; SPCSSAttr *css = sp_repr_css_attr_new (); - sp_repr_css_set_property (css, "fill-rule", mode == SP_PAINT_SELECTOR_FILLRULE_EVENODD? "evenodd":"nonzero"); + sp_repr_css_set_property(css, "fill-rule", mode == SPPaintSelector::FILLRULE_EVENODD? "evenodd":"nonzero"); sp_desktop_set_style (desktop, css); @@ -316,8 +315,8 @@ sp_fill_style_widget_paint_dragged (SPPaintSelector *psel, SPWidget *spw) switch (psel->mode) { - case SP_PAINT_SELECTOR_MODE_COLOR_RGB: - case SP_PAINT_SELECTOR_MODE_COLOR_CMYK: + case SPPaintSelector::MODE_COLOR_RGB: + case SPPaintSelector::MODE_COLOR_CMYK: { psel->setFlatColor( SP_ACTIVE_DESKTOP, "fill", "fill-opacity" ); sp_document_maybe_done (sp_desktop_document(SP_ACTIVE_DESKTOP), undo_label, SP_VERB_DIALOG_FILL_STROKE, @@ -363,17 +362,17 @@ sp_fill_style_widget_paint_changed ( SPPaintSelector *psel, switch (psel->mode) { - case SP_PAINT_SELECTOR_MODE_EMPTY: + case SPPaintSelector::MODE_EMPTY: // This should not happen. g_warning ( "file %s: line %d: Paint %d should not emit 'changed'", __FILE__, __LINE__, psel->mode); break; - case SP_PAINT_SELECTOR_MODE_MULTIPLE: + case SPPaintSelector::MODE_MULTIPLE: // This happens when you switch multiple objects with different gradients to flat color; // nothing to do here. break; - case SP_PAINT_SELECTOR_MODE_NONE: + case SPPaintSelector::MODE_NONE: { SPCSSAttr *css = sp_repr_css_attr_new (); sp_repr_css_set_property (css, "fill", "none"); @@ -387,8 +386,8 @@ sp_fill_style_widget_paint_changed ( SPPaintSelector *psel, break; } - case SP_PAINT_SELECTOR_MODE_COLOR_RGB: - case SP_PAINT_SELECTOR_MODE_COLOR_CMYK: + case SPPaintSelector::MODE_COLOR_RGB: + case SPPaintSelector::MODE_COLOR_CMYK: { // FIXME: fix for GTK breakage, see comment in SelectedStyle::on_opacity_changed; here it results in losing release events sp_canvas_force_full_redraw_after_interruptions(sp_desktop_canvas(desktop), 0); @@ -408,11 +407,11 @@ sp_fill_style_widget_paint_changed ( SPPaintSelector *psel, break; } - case SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR: - case SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL: - case SP_PAINT_SELECTOR_MODE_SWATCH: + case SPPaintSelector::MODE_GRADIENT_LINEAR: + case SPPaintSelector::MODE_GRADIENT_RADIAL: + case SPPaintSelector::MODE_SWATCH: if (items) { - SPGradientType const gradient_type = ( psel->mode != SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL + SPGradientType const gradient_type = ( psel->mode != SPPaintSelector::MODE_GRADIENT_RADIAL ? SP_GRADIENT_TYPE_LINEAR : SP_GRADIENT_TYPE_RADIAL ); @@ -469,7 +468,7 @@ sp_fill_style_widget_paint_changed ( SPPaintSelector *psel, } break; - case SP_PAINT_SELECTOR_MODE_PATTERN: + case SPPaintSelector::MODE_PATTERN: if (items) { @@ -518,7 +517,7 @@ sp_fill_style_widget_paint_changed ( SPPaintSelector *psel, break; - case SP_PAINT_SELECTOR_MODE_UNSET: + case SPPaintSelector::MODE_UNSET: if (items) { SPCSSAttr *css = sp_repr_css_attr_new (); sp_repr_css_unset_property (css, "fill"); diff --git a/src/widgets/paint-selector.cpp b/src/widgets/paint-selector.cpp index 360994241..6f3fd823e 100644 --- a/src/widgets/paint-selector.cpp +++ b/src/widgets/paint-selector.cpp @@ -77,17 +77,17 @@ static void sp_paint_selector_class_init(SPPaintSelectorClass *klass); static void sp_paint_selector_init(SPPaintSelector *slider); static void sp_paint_selector_destroy(GtkObject *object); -static GtkWidget *sp_paint_selector_style_button_add(SPPaintSelector *psel, gchar const *px, SPPaintSelectorMode mode, GtkTooltips *tt, gchar const *tip); +static GtkWidget *sp_paint_selector_style_button_add(SPPaintSelector *psel, gchar const *px, SPPaintSelector::Mode mode, GtkTooltips *tt, gchar const *tip); static void sp_paint_selector_style_button_toggled(GtkToggleButton *tb, SPPaintSelector *psel); static void sp_paint_selector_fillrule_toggled(GtkToggleButton *tb, SPPaintSelector *psel); static void sp_paint_selector_set_mode_empty(SPPaintSelector *psel); static void sp_paint_selector_set_mode_multiple(SPPaintSelector *psel); static void sp_paint_selector_set_mode_none(SPPaintSelector *psel); -static void sp_paint_selector_set_mode_color(SPPaintSelector *psel, SPPaintSelectorMode mode); -static void sp_paint_selector_set_mode_gradient(SPPaintSelector *psel, SPPaintSelectorMode mode); -static void sp_paint_selector_set_mode_pattern(SPPaintSelector *psel, SPPaintSelectorMode mode); -static void sp_paint_selector_set_mode_swatch(SPPaintSelector *psel, SPPaintSelectorMode mode); +static void sp_paint_selector_set_mode_color(SPPaintSelector *psel, SPPaintSelector::Mode mode); +static void sp_paint_selector_set_mode_gradient(SPPaintSelector *psel, SPPaintSelector::Mode mode); +static void sp_paint_selector_set_mode_pattern(SPPaintSelector *psel, SPPaintSelector::Mode mode); +static void sp_paint_selector_set_mode_swatch(SPPaintSelector *psel, SPPaintSelector::Mode mode); static void sp_paint_selector_set_mode_unset(SPPaintSelector *psel); @@ -114,11 +114,12 @@ static gchar const* modeStrings[] = { }; #endif -static bool isPaintModeGradient( SPPaintSelectorMode mode ) + +static bool isPaintModeGradient( SPPaintSelector::Mode mode ) { - bool isGrad = (mode == SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR) || - (mode == SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL) || - (mode == SP_PAINT_SELECTOR_MODE_SWATCH); + bool isGrad = (mode == SPPaintSelector::MODE_GRADIENT_LINEAR) || + (mode == SPPaintSelector::MODE_GRADIENT_RADIAL) || + (mode == SPPaintSelector::MODE_SWATCH); return isGrad; } @@ -126,7 +127,7 @@ static bool isPaintModeGradient( SPPaintSelectorMode mode ) static SPGradientSelector *getGradientFromData(SPPaintSelector const *psel) { SPGradientSelector *grad = 0; - if (psel->mode == SP_PAINT_SELECTOR_MODE_SWATCH) { + if (psel->mode == SPPaintSelector::MODE_SWATCH) { SwatchSelector *swatchsel = static_cast(g_object_get_data(G_OBJECT(psel->selector), "swatch-selector")); if (swatchsel) { grad = swatchsel->getGradientSelector(); @@ -217,7 +218,7 @@ sp_paint_selector_init(SPPaintSelector *psel) { GtkTooltips *tt = gtk_tooltips_new(); - psel->mode = (SPPaintSelectorMode)-1; // huh? do you mean 0xff? -- I think this means "not in the enum" + psel->mode = static_cast(-1); // huh? do you mean 0xff? -- I think this means "not in the enum" /* Paint style button box */ psel->style = gtk_hbox_new(FALSE, 0); @@ -227,19 +228,19 @@ sp_paint_selector_init(SPPaintSelector *psel) /* Buttons */ psel->none = sp_paint_selector_style_button_add(psel, INKSCAPE_ICON_PAINT_NONE, - SP_PAINT_SELECTOR_MODE_NONE, tt, _("No paint")); + SPPaintSelector::MODE_NONE, tt, _("No paint")); psel->solid = sp_paint_selector_style_button_add(psel, INKSCAPE_ICON_PAINT_SOLID, - SP_PAINT_SELECTOR_MODE_COLOR_RGB, tt, _("Flat color")); + SPPaintSelector::MODE_COLOR_RGB, tt, _("Flat color")); psel->gradient = sp_paint_selector_style_button_add(psel, INKSCAPE_ICON_PAINT_GRADIENT_LINEAR, - SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR, tt, _("Linear gradient")); + SPPaintSelector::MODE_GRADIENT_LINEAR, tt, _("Linear gradient")); psel->radial = sp_paint_selector_style_button_add(psel, INKSCAPE_ICON_PAINT_GRADIENT_RADIAL, - SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL, tt, _("Radial gradient")); + SPPaintSelector::MODE_GRADIENT_RADIAL, tt, _("Radial gradient")); psel->pattern = sp_paint_selector_style_button_add(psel, INKSCAPE_ICON_PAINT_PATTERN, - SP_PAINT_SELECTOR_MODE_PATTERN, tt, _("Pattern")); + SPPaintSelector::MODE_PATTERN, tt, _("Pattern")); psel->swatch = sp_paint_selector_style_button_add(psel, INKSCAPE_ICON_PAINT_SWATCH, - SP_PAINT_SELECTOR_MODE_SWATCH, tt, _("Swatch")); + SPPaintSelector::MODE_SWATCH, tt, _("Swatch")); psel->unset = sp_paint_selector_style_button_add(psel, INKSCAPE_ICON_PAINT_UNKNOWN, - SP_PAINT_SELECTOR_MODE_UNSET, tt, _("Unset paint (make it undefined so it can be inherited)")); + SPPaintSelector::MODE_UNSET, tt, _("Unset paint (make it undefined so it can be inherited)")); /* Fillrule */ { @@ -252,7 +253,7 @@ sp_paint_selector_init(SPPaintSelector *psel) gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(psel->evenodd), FALSE); // TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/painting.html#FillRuleProperty gtk_tooltips_set_tip(tt, psel->evenodd, _("Any path self-intersections or subpaths create holes in the fill (fill-rule: evenodd)"), NULL); - gtk_object_set_data(GTK_OBJECT(psel->evenodd), "mode", GUINT_TO_POINTER(SP_PAINT_SELECTOR_FILLRULE_EVENODD)); + gtk_object_set_data(GTK_OBJECT(psel->evenodd), "mode", GUINT_TO_POINTER(SPPaintSelector::FILLRULE_EVENODD)); w = sp_icon_new(Inkscape::ICON_SIZE_DECORATION, INKSCAPE_ICON_FILL_RULE_EVEN_ODD); gtk_container_add(GTK_CONTAINER(psel->evenodd), w); gtk_box_pack_start(GTK_BOX(psel->fillrulebox), psel->evenodd, FALSE, FALSE, 0); @@ -263,7 +264,7 @@ sp_paint_selector_init(SPPaintSelector *psel) gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(psel->nonzero), FALSE); // TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/painting.html#FillRuleProperty gtk_tooltips_set_tip(tt, psel->nonzero, _("Fill is solid unless a subpath is counterdirectional (fill-rule: nonzero)"), NULL); - gtk_object_set_data(GTK_OBJECT(psel->nonzero), "mode", GUINT_TO_POINTER(SP_PAINT_SELECTOR_FILLRULE_NONZERO)); + gtk_object_set_data(GTK_OBJECT(psel->nonzero), "mode", GUINT_TO_POINTER(SPPaintSelector::FILLRULE_NONZERO)); w = sp_icon_new(Inkscape::ICON_SIZE_DECORATION, INKSCAPE_ICON_FILL_RULE_NONZERO); gtk_container_add(GTK_CONTAINER(psel->nonzero), w); gtk_box_pack_start(GTK_BOX(psel->fillrulebox), psel->nonzero, FALSE, FALSE, 0); @@ -293,10 +294,9 @@ sp_paint_selector_destroy(GtkObject *object) (* ((GtkObjectClass *) parent_class)->destroy)(object); } -static GtkWidget * -sp_paint_selector_style_button_add(SPPaintSelector *psel, - gchar const *pixmap, SPPaintSelectorMode mode, - GtkTooltips *tt, gchar const *tip) +static GtkWidget *sp_paint_selector_style_button_add(SPPaintSelector *psel, + gchar const *pixmap, SPPaintSelector::Mode mode, + GtkTooltips *tt, gchar const *tip) { GtkWidget *b, *w; @@ -325,7 +325,7 @@ static void sp_paint_selector_style_button_toggled(GtkToggleButton *tb, SPPaintSelector *psel) { if (!psel->update && gtk_toggle_button_get_active(tb)) { - psel->setMode(static_cast(GPOINTER_TO_UINT(gtk_object_get_data(GTK_OBJECT(tb), "mode")))); + psel->setMode(static_cast(GPOINTER_TO_UINT(gtk_object_get_data(GTK_OBJECT(tb), "mode")))); } } @@ -333,7 +333,7 @@ static void sp_paint_selector_fillrule_toggled(GtkToggleButton *tb, SPPaintSelector *psel) { if (!psel->update && gtk_toggle_button_get_active(tb)) { - SPPaintSelectorFillRule fr = (SPPaintSelectorFillRule)GPOINTER_TO_UINT(gtk_object_get_data(GTK_OBJECT(tb), "mode")); + SPPaintSelector::FillRule fr = static_cast(GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(tb), "mode"))); gtk_signal_emit(GTK_OBJECT(psel), psel_signals[FILLRULE_CHANGED], fr); } } @@ -357,7 +357,7 @@ sp_paint_selector_new(bool is_fill) { SPPaintSelector *psel = static_cast(gtk_type_new(SP_TYPE_PAINT_SELECTOR)); - psel->setMode(SP_PAINT_SELECTOR_MODE_MULTIPLE); + psel->setMode(SPPaintSelector::MODE_MULTIPLE); // This silliness is here because I don't know how to pass a parameter to the // GtkObject "constructor" (sp_paint_selector_init). Remove it when paint_selector @@ -367,7 +367,7 @@ sp_paint_selector_new(bool is_fill) return GTK_WIDGET(psel); } -void SPPaintSelector::setMode(SPPaintSelectorMode mode) +void SPPaintSelector::setMode(Mode mode) { if (this->mode != mode) { update = TRUE; @@ -375,30 +375,30 @@ void SPPaintSelector::setMode(SPPaintSelectorMode mode) g_print("Mode change %d -> %d %s -> %s\n", this->mode, mode, modeStrings[this->mode], modeStrings[mode]); #endif switch (mode) { - case SP_PAINT_SELECTOR_MODE_EMPTY: + case MODE_EMPTY: sp_paint_selector_set_mode_empty(this); break; - case SP_PAINT_SELECTOR_MODE_MULTIPLE: + case MODE_MULTIPLE: sp_paint_selector_set_mode_multiple(this); break; - case SP_PAINT_SELECTOR_MODE_NONE: + case MODE_NONE: sp_paint_selector_set_mode_none(this); break; - case SP_PAINT_SELECTOR_MODE_COLOR_RGB: - case SP_PAINT_SELECTOR_MODE_COLOR_CMYK: + case MODE_COLOR_RGB: + case MODE_COLOR_CMYK: sp_paint_selector_set_mode_color(this, mode); break; - case SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR: - case SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL: + case MODE_GRADIENT_LINEAR: + case MODE_GRADIENT_RADIAL: sp_paint_selector_set_mode_gradient(this, mode); break; - case SP_PAINT_SELECTOR_MODE_PATTERN: + case MODE_PATTERN: sp_paint_selector_set_mode_pattern(this, mode); break; - case SP_PAINT_SELECTOR_MODE_SWATCH: + case MODE_SWATCH: sp_paint_selector_set_mode_swatch(this, mode); break; - case SP_PAINT_SELECTOR_MODE_UNSET: + case MODE_UNSET: sp_paint_selector_set_mode_unset(this); break; default: @@ -411,12 +411,12 @@ void SPPaintSelector::setMode(SPPaintSelectorMode mode) } } -void SPPaintSelector::setFillrule(SPPaintSelectorFillRule fillrule) +void SPPaintSelector::setFillrule(FillRule fillrule) { if (fillrulebox) { // TODO this flips widgets but does not use a member to store state. Revisit - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(evenodd), (fillrule == SP_PAINT_SELECTOR_FILLRULE_EVENODD)); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(nonzero), (fillrule == SP_PAINT_SELECTOR_FILLRULE_NONZERO)); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(evenodd), (fillrule == FILLRULE_EVENODD)); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(nonzero), (fillrule == FILLRULE_NONZERO)); } } @@ -432,7 +432,7 @@ void SPPaintSelector::setColorAlpha(SPColor const &color, float alpha) #ifdef SP_PS_VERBOSE g_print("PaintSelector set CMYKA\n"); #endif - sp_paint_selector_set_mode(psel, SP_PAINT_SELECTOR_MODE_COLOR_CMYK); + sp_paint_selector_set_mode(psel, MODE_COLOR_CMYK); } else */ @@ -440,7 +440,7 @@ void SPPaintSelector::setColorAlpha(SPColor const &color, float alpha) #ifdef SP_PS_VERBOSE g_print("PaintSelector set RGBA\n"); #endif - setMode(SP_PAINT_SELECTOR_MODE_COLOR_RGB); + setMode(MODE_COLOR_RGB); } csel = reinterpret_cast(gtk_object_get_data(GTK_OBJECT(selector), "color-selector")); @@ -453,7 +453,7 @@ void SPPaintSelector::setSwatch(SPGradient *vector ) #ifdef SP_PS_VERBOSE g_print("PaintSelector set SWATCH\n"); #endif - setMode(SP_PAINT_SELECTOR_MODE_SWATCH); + setMode(MODE_SWATCH); SwatchSelector *swatchsel = static_cast(g_object_get_data(G_OBJECT(selector), "swatch-selector")); if (swatchsel) { @@ -466,7 +466,7 @@ void SPPaintSelector::setGradientLinear(SPGradient *vector) #ifdef SP_PS_VERBOSE g_print("PaintSelector set GRADIENT LINEAR\n"); #endif - setMode(SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR); + setMode(MODE_GRADIENT_LINEAR); SPGradientSelector *gsel = getGradientFromData(this); @@ -479,7 +479,7 @@ void SPPaintSelector::setGradientRadial(SPGradient *vector) #ifdef SP_PS_VERBOSE g_print("PaintSelector set GRADIENT RADIAL\n"); #endif - setMode(SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL); + setMode(MODE_GRADIENT_RADIAL); SPGradientSelector *gsel = getGradientFromData(this); @@ -617,24 +617,18 @@ sp_paint_selector_set_mode_none(SPPaintSelector *psel) /* Color paint */ -static void -sp_paint_selector_color_grabbed(SPColorSelector *csel, SPPaintSelector *psel) +static void sp_paint_selector_color_grabbed(SPColorSelector * /*csel*/, SPPaintSelector *psel) { - (void)csel; gtk_signal_emit(GTK_OBJECT(psel), psel_signals[GRABBED]); } -static void -sp_paint_selector_color_dragged(SPColorSelector *csel, SPPaintSelector *psel) +static void sp_paint_selector_color_dragged(SPColorSelector * /*csel*/, SPPaintSelector *psel) { - (void)csel; gtk_signal_emit(GTK_OBJECT(psel), psel_signals[DRAGGED]); } -static void -sp_paint_selector_color_released(SPColorSelector *csel, SPPaintSelector *psel) +static void sp_paint_selector_color_released(SPColorSelector * /*csel*/, SPPaintSelector *psel) { - (void)csel; gtk_signal_emit(GTK_OBJECT(psel), psel_signals[RELEASED]); } @@ -646,16 +640,14 @@ sp_paint_selector_color_changed(SPColorSelector *csel, SPPaintSelector *psel) gtk_signal_emit(GTK_OBJECT(psel), psel_signals[CHANGED]); } -static void -sp_paint_selector_set_mode_color(SPPaintSelector *psel, SPPaintSelectorMode mode) +static void sp_paint_selector_set_mode_color(SPPaintSelector *psel, SPPaintSelector::Mode /*mode*/) { - (void)mode; GtkWidget *csel; sp_paint_selector_set_style_buttons(psel, psel->solid); gtk_widget_set_sensitive(psel->style, TRUE); - if ((psel->mode == SP_PAINT_SELECTOR_MODE_COLOR_RGB) || (psel->mode == SP_PAINT_SELECTOR_MODE_COLOR_CMYK)) { + if ((psel->mode == SPPaintSelector::MODE_COLOR_RGB) || (psel->mode == SPPaintSelector::MODE_COLOR_CMYK)) { /* Already have color selector */ csel = (GtkWidget*)gtk_object_get_data(GTK_OBJECT(psel->selector), "color-selector"); } else { @@ -692,49 +684,40 @@ sp_paint_selector_set_mode_color(SPPaintSelector *psel, SPPaintSelectorMode mode /* Gradient */ -static void -sp_paint_selector_gradient_grabbed(SPColorSelector *csel, SPPaintSelector *psel) +static void sp_paint_selector_gradient_grabbed(SPColorSelector * /*csel*/, SPPaintSelector *psel) { - (void)csel; gtk_signal_emit(GTK_OBJECT(psel), psel_signals[GRABBED]); } -static void -sp_paint_selector_gradient_dragged(SPColorSelector *csel, SPPaintSelector *psel) +static void sp_paint_selector_gradient_dragged(SPColorSelector * /*csel*/, SPPaintSelector *psel) { - (void)csel; gtk_signal_emit(GTK_OBJECT(psel), psel_signals[DRAGGED]); } -static void -sp_paint_selector_gradient_released(SPColorSelector *csel, SPPaintSelector *psel) +static void sp_paint_selector_gradient_released(SPColorSelector * /*csel*/, SPPaintSelector *psel) { - (void)csel; gtk_signal_emit(GTK_OBJECT(psel), psel_signals[RELEASED]); } -static void -sp_paint_selector_gradient_changed(SPColorSelector *csel, SPPaintSelector *psel) +static void sp_paint_selector_gradient_changed(SPColorSelector * /*csel*/, SPPaintSelector *psel) { - (void)csel; gtk_signal_emit(GTK_OBJECT(psel), psel_signals[CHANGED]); } -static void -sp_paint_selector_set_mode_gradient(SPPaintSelector *psel, SPPaintSelectorMode mode) +static void sp_paint_selector_set_mode_gradient(SPPaintSelector *psel, SPPaintSelector::Mode mode) { GtkWidget *gsel; /* fixme: We do not need function-wide gsel at all */ - if (mode == SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR) { + if (mode == SPPaintSelector::MODE_GRADIENT_LINEAR) { sp_paint_selector_set_style_buttons(psel, psel->gradient); } else { sp_paint_selector_set_style_buttons(psel, psel->radial); } gtk_widget_set_sensitive(psel->style, TRUE); - if ((psel->mode == SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR) || (psel->mode == SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL)) { + if ((psel->mode == SPPaintSelector::MODE_GRADIENT_LINEAR) || (psel->mode == SPPaintSelector::MODE_GRADIENT_RADIAL)) { /* Already have gradient selector */ gsel = (GtkWidget*)gtk_object_get_data(GTK_OBJECT(psel->selector), "gradient-selector"); } else { @@ -753,7 +736,7 @@ sp_paint_selector_set_mode_gradient(SPPaintSelector *psel, SPPaintSelectorMode m } /* Actually we have to set option menu history here */ - if (mode == SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR) { + if (mode == SPPaintSelector::MODE_GRADIENT_LINEAR) { SP_GRADIENT_SELECTOR(gsel)->setMode(SPGradientSelector::MODE_LINEAR); //sp_gradient_selector_set_mode(SP_GRADIENT_SELECTOR(gsel), SP_GRADIENT_SELECTOR_MODE_LINEAR); gtk_frame_set_label(GTK_FRAME(psel->frame), _("Linear gradient")); @@ -778,18 +761,14 @@ sp_paint_selector_set_style_buttons(SPPaintSelector *psel, GtkWidget *active) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(psel->unset), (active == psel->unset)); } -static void -sp_psel_pattern_destroy(GtkWidget *widget, SPPaintSelector *psel) +static void sp_psel_pattern_destroy(GtkWidget *widget, SPPaintSelector * /*psel*/) { - (void)psel; // drop our reference to the pattern menu widget g_object_unref( G_OBJECT(widget) ); } -static void -sp_psel_pattern_change(GtkWidget *widget, SPPaintSelector *psel) +static void sp_psel_pattern_change(GtkWidget * /*widget*/, SPPaintSelector *psel) { - (void)widget; gtk_signal_emit(GTK_OBJECT(psel), psel_signals[CHANGED]); } @@ -865,17 +844,15 @@ sp_pattern_menu_build (GtkWidget *m, GSList *pattern_list, SPDocument */*source* * current_doc (if non-NULL), and add items to the pattern menu * */ -static void -sp_pattern_list_from_doc (GtkWidget *m, SPDocument *current_doc, SPDocument *source, SPDocument *pattern_doc) +static void sp_pattern_list_from_doc (GtkWidget *m, SPDocument * /*current_doc*/, SPDocument *source, SPDocument * /*pattern_doc*/) { - (void)current_doc; - (void)pattern_doc; GSList *pl = ink_pattern_list_get(source); GSList *clean_pl = NULL; for (; pl != NULL; pl = pl->next) { - if (!SP_IS_PATTERN(pl->data)) + if (!SP_IS_PATTERN(pl->data)) { continue; + } // Add to the list of patterns we really do wish to show clean_pl = g_slist_prepend (clean_pl, pl->data); @@ -998,17 +975,17 @@ void SPPaintSelector::updatePatternList( SPPattern *pattern ) //gtk_option_menu_set_history(GTK_OPTION_MENU(mnu), 0); } -static void -sp_paint_selector_set_mode_pattern(SPPaintSelector *psel, SPPaintSelectorMode mode) +static void sp_paint_selector_set_mode_pattern(SPPaintSelector *psel, SPPaintSelector::Mode mode) { - if (mode == SP_PAINT_SELECTOR_MODE_PATTERN) + if (mode == SPPaintSelector::MODE_PATTERN) { sp_paint_selector_set_style_buttons(psel, psel->pattern); + } gtk_widget_set_sensitive(psel->style, TRUE); GtkWidget *tbl = NULL; - if (psel->mode == SP_PAINT_SELECTOR_MODE_PATTERN){ + if (psel->mode == SPPaintSelector::MODE_PATTERN) { /* Already have pattern menu */ tbl = (GtkWidget*)gtk_object_get_data(GTK_OBJECT(psel->selector), "pattern-selector"); } else { @@ -1058,7 +1035,7 @@ sp_paint_selector_set_mode_pattern(SPPaintSelector *psel, SPPaintSelectorMode mo SPPattern *SPPaintSelector::getPattern() { SPPattern *pat = 0; - g_return_val_if_fail((mode == SP_PAINT_SELECTOR_MODE_PATTERN) , NULL); + g_return_val_if_fail((mode == MODE_PATTERN) , NULL); GtkWidget *patmnu = (GtkWidget *) g_object_get_data(G_OBJECT(this), "patternmenu"); /* no pattern menu if we were just selected */ @@ -1095,9 +1072,9 @@ SPPattern *SPPaintSelector::getPattern() return pat; } -static void sp_paint_selector_set_mode_swatch(SPPaintSelector *psel, SPPaintSelectorMode mode) +static void sp_paint_selector_set_mode_swatch(SPPaintSelector *psel, SPPaintSelector::Mode mode) { - if (mode == SP_PAINT_SELECTOR_MODE_SWATCH) { + if (mode == SPPaintSelector::MODE_SWATCH) { sp_paint_selector_set_style_buttons(psel, psel->swatch); } @@ -1105,7 +1082,7 @@ static void sp_paint_selector_set_mode_swatch(SPPaintSelector *psel, SPPaintSele SwatchSelector *swatchsel = 0; - if (psel->mode == SP_PAINT_SELECTOR_MODE_SWATCH){ + if (psel->mode == SPPaintSelector::MODE_SWATCH){ /* Already have pattern menu */ swatchsel = static_cast(g_object_get_data(G_OBJECT(psel->selector), "swatch-selector")); } else { @@ -1160,13 +1137,13 @@ void SPPaintSelector::setFlatColor( SPDesktop *desktop, gchar const *color_prope sp_repr_css_attr_unref(css); } -SPPaintSelectorMode sp_style_determine_paint_selector_mode(SPStyle *style, bool isfill) +SPPaintSelector::Mode sp_style_determine_paint_selector_mode(SPStyle *style, bool isfill) { - SPPaintSelectorMode mode = SP_PAINT_SELECTOR_MODE_UNSET; + SPPaintSelector::Mode mode = SPPaintSelector::MODE_UNSET; SPIPaint& target = isfill ? style->fill : style->stroke; if ( !target.set ) { - mode = SP_PAINT_SELECTOR_MODE_UNSET; + mode = SPPaintSelector::MODE_UNSET; } else if ( target.isPaintserver() ) { SPPaintServer *server = isfill? SP_STYLE_FILL_SERVER(style) : SP_STYLE_STROKE_SERVER(style); @@ -1177,24 +1154,25 @@ SPPaintSelectorMode sp_style_determine_paint_selector_mode(SPStyle *style, bool if (server && SP_IS_GRADIENT(server) && SP_GRADIENT(server)->getVector()->isSwatch()) { - mode = SP_PAINT_SELECTOR_MODE_SWATCH; + mode = SPPaintSelector::MODE_SWATCH; } else if (SP_IS_LINEARGRADIENT(server)) { - mode = SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR; + mode = SPPaintSelector::MODE_GRADIENT_LINEAR; } else if (SP_IS_RADIALGRADIENT(server)) { - mode = SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL; + mode = SPPaintSelector::MODE_GRADIENT_RADIAL; } else if (SP_IS_PATTERN(server)) { - mode = SP_PAINT_SELECTOR_MODE_PATTERN; + mode = SPPaintSelector::MODE_PATTERN; } else { g_warning( "file %s: line %d: Unknown paintserver", __FILE__, __LINE__ ); - mode = SP_PAINT_SELECTOR_MODE_NONE; + mode = SPPaintSelector::MODE_NONE; } } else if ( target.isColor() ) { - mode = SP_PAINT_SELECTOR_MODE_COLOR_RGB; // so far only rgb can be read from svg + // TODO this is no longer a valid assertion: + mode = SPPaintSelector::MODE_COLOR_RGB; // so far only rgb can be read from svg } else if ( target.isNone() ) { - mode = SP_PAINT_SELECTOR_MODE_NONE; + mode = SPPaintSelector::MODE_NONE; } else { g_warning( "file %s: line %d: Unknown paint type", __FILE__, __LINE__ ); - mode = SP_PAINT_SELECTOR_MODE_NONE; + mode = SPPaintSelector::MODE_NONE; } return mode; diff --git a/src/widgets/paint-selector.h b/src/widgets/paint-selector.h index 9d0c5e76c..63b8f733e 100644 --- a/src/widgets/paint-selector.h +++ b/src/widgets/paint-selector.h @@ -31,31 +31,32 @@ class SPGradient; #include #include -typedef enum { - SP_PAINT_SELECTOR_MODE_EMPTY, - SP_PAINT_SELECTOR_MODE_MULTIPLE, - SP_PAINT_SELECTOR_MODE_NONE, - SP_PAINT_SELECTOR_MODE_COLOR_RGB, - SP_PAINT_SELECTOR_MODE_COLOR_CMYK, - SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR, - SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL, - SP_PAINT_SELECTOR_MODE_PATTERN, - SP_PAINT_SELECTOR_MODE_SWATCH, - SP_PAINT_SELECTOR_MODE_UNSET -} SPPaintSelectorMode; - -typedef enum { - SP_PAINT_SELECTOR_FILLRULE_NONZERO, - SP_PAINT_SELECTOR_FILLRULE_EVENODD -} SPPaintSelectorFillRule; /// Generic paint selector widget struct SPPaintSelector { GtkVBox vbox; + enum Mode { + MODE_EMPTY, + MODE_MULTIPLE, + MODE_NONE, + MODE_COLOR_RGB, + MODE_COLOR_CMYK, + MODE_GRADIENT_LINEAR, + MODE_GRADIENT_RADIAL, + MODE_PATTERN, + MODE_SWATCH, + MODE_UNSET + } ; + + enum FillRule { + FILLRULE_NONZERO, + FILLRULE_EVENODD + } ; + guint update : 1; - SPPaintSelectorMode mode; + Mode mode; GtkWidget *style; GtkWidget *none; @@ -75,8 +76,8 @@ struct SPPaintSelector { float alpha; - void setMode( SPPaintSelectorMode mode ); - void setFillrule( SPPaintSelectorFillRule fillrule ); + void setMode( Mode mode ); + void setFillrule( FillRule fillrule ); void setColorAlpha( SPColor const &color, float alpha ); void getColorAlpha( SPColor &color, gfloat &alpha ) const; @@ -101,13 +102,13 @@ struct SPPaintSelector { struct SPPaintSelectorClass { GtkVBoxClass parent_class; - void (* mode_changed) (SPPaintSelector *psel, SPPaintSelectorMode mode); + void (* mode_changed) (SPPaintSelector *psel, SPPaintSelector::Mode mode); void (* grabbed) (SPPaintSelector *psel); void (* dragged) (SPPaintSelector *psel); void (* released) (SPPaintSelector *psel); void (* changed) (SPPaintSelector *psel); - void (* fillrule_changed) (SPPaintSelector *psel, SPPaintSelectorFillRule fillrule); + void (* fillrule_changed) (SPPaintSelector *psel, SPPaintSelector::FillRule fillrule); }; GtkType sp_paint_selector_get_type (void); @@ -116,7 +117,7 @@ GtkWidget *sp_paint_selector_new (bool is_fill); -SPPaintSelectorMode sp_style_determine_paint_selector_mode (SPStyle *style, bool isfill); +SPPaintSelector::Mode sp_style_determine_paint_selector_mode(SPStyle *style, bool isfill); #endif // SEEN_SP_PAINT_SELECTOR_H diff --git a/src/widgets/stroke-style.cpp b/src/widgets/stroke-style.cpp index 57dce6fff..edf42f30b 100644 --- a/src/widgets/stroke-style.cpp +++ b/src/widgets/stroke-style.cpp @@ -63,7 +63,7 @@ static void sp_stroke_style_paint_selection_modified (SPWidget *spw, Inkscape::S static void sp_stroke_style_paint_selection_changed (SPWidget *spw, Inkscape::Selection *selection, SPPaintSelector *psel); static void sp_stroke_style_paint_update(SPWidget *spw); -static void sp_stroke_style_paint_mode_changed(SPPaintSelector *psel, SPPaintSelectorMode mode, SPWidget *spw); +static void sp_stroke_style_paint_mode_changed(SPPaintSelector *psel, SPPaintSelector::Mode mode, SPWidget *spw); static void sp_stroke_style_paint_dragged(SPPaintSelector *psel, SPWidget *spw); static void sp_stroke_style_paint_changed(SPPaintSelector *psel, SPWidget *spw); @@ -189,7 +189,7 @@ sp_stroke_style_paint_update (SPWidget *spw) case QUERY_STYLE_NOTHING: { /* No paint at all */ - psel->setMode(SP_PAINT_SELECTOR_MODE_EMPTY); + psel->setMode(SPPaintSelector::MODE_EMPTY); break; } @@ -197,7 +197,7 @@ sp_stroke_style_paint_update (SPWidget *spw) case QUERY_STYLE_MULTIPLE_AVERAGED: // TODO: treat this slightly differently, e.g. display "averaged" somewhere in paint selector case QUERY_STYLE_MULTIPLE_SAME: { - SPPaintSelectorMode pselmode = sp_style_determine_paint_selector_mode (query, false); + SPPaintSelector::Mode pselmode = sp_style_determine_paint_selector_mode (query, false); psel->setMode(pselmode); if (query->stroke.set && query->stroke.isPaintserver()) { @@ -233,7 +233,7 @@ sp_stroke_style_paint_update (SPWidget *spw) case QUERY_STYLE_MULTIPLE_DIFFERENT: { - psel->setMode(SP_PAINT_SELECTOR_MODE_MULTIPLE); + psel->setMode(SPPaintSelector::MODE_MULTIPLE); break; } } @@ -248,7 +248,7 @@ sp_stroke_style_paint_update (SPWidget *spw) */ static void sp_stroke_style_paint_mode_changed( SPPaintSelector *psel, - SPPaintSelectorMode /*mode*/, + SPPaintSelector::Mode /*mode*/, SPWidget *spw ) { if (gtk_object_get_data(GTK_OBJECT(spw), "update")) { @@ -278,8 +278,8 @@ sp_stroke_style_paint_dragged(SPPaintSelector *psel, SPWidget *spw) } switch (psel->mode) { - case SP_PAINT_SELECTOR_MODE_COLOR_RGB: - case SP_PAINT_SELECTOR_MODE_COLOR_CMYK: + case SPPaintSelector::MODE_COLOR_RGB: + case SPPaintSelector::MODE_COLOR_CMYK: { psel->setFlatColor( SP_ACTIVE_DESKTOP, "stroke", "stroke-opacity" ); sp_document_maybe_done (sp_desktop_document(SP_ACTIVE_DESKTOP), undo_label, SP_VERB_DIALOG_FILL_STROKE, @@ -313,17 +313,17 @@ sp_stroke_style_paint_changed(SPPaintSelector *psel, SPWidget *spw) GSList const *items = selection->itemList(); switch (psel->mode) { - case SP_PAINT_SELECTOR_MODE_EMPTY: + case SPPaintSelector::MODE_EMPTY: // This should not happen. g_warning ( "file %s: line %d: Paint %d should not emit 'changed'", __FILE__, __LINE__, psel->mode); break; - case SP_PAINT_SELECTOR_MODE_MULTIPLE: + case SPPaintSelector::MODE_MULTIPLE: // This happens when you switch multiple objects with different gradients to flat color; // nothing to do here. break; - case SP_PAINT_SELECTOR_MODE_NONE: + case SPPaintSelector::MODE_NONE: { SPCSSAttr *css = sp_repr_css_attr_new(); sp_repr_css_set_property(css, "stroke", "none"); @@ -337,8 +337,8 @@ sp_stroke_style_paint_changed(SPPaintSelector *psel, SPWidget *spw) break; } - case SP_PAINT_SELECTOR_MODE_COLOR_RGB: - case SP_PAINT_SELECTOR_MODE_COLOR_CMYK: + case SPPaintSelector::MODE_COLOR_RGB: + case SPPaintSelector::MODE_COLOR_CMYK: { psel->setFlatColor(desktop, "stroke", "stroke-opacity"); sp_document_maybe_done (sp_desktop_document(desktop), undo_label, SP_VERB_DIALOG_FILL_STROKE, @@ -353,10 +353,10 @@ sp_stroke_style_paint_changed(SPPaintSelector *psel, SPWidget *spw) break; } - case SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR: - case SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL: + case SPPaintSelector::MODE_GRADIENT_LINEAR: + case SPPaintSelector::MODE_GRADIENT_RADIAL: if (items) { - SPGradientType const gradient_type = ( psel->mode == SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR + SPGradientType const gradient_type = ( psel->mode == SPPaintSelector::MODE_GRADIENT_LINEAR ? SP_GRADIENT_TYPE_LINEAR : SP_GRADIENT_TYPE_RADIAL ); SPGradient *vector = psel->getGradientVector(); @@ -398,7 +398,7 @@ sp_stroke_style_paint_changed(SPPaintSelector *psel, SPWidget *spw) } break; - case SP_PAINT_SELECTOR_MODE_PATTERN: + case SPPaintSelector::MODE_PATTERN: if (items) { @@ -443,11 +443,11 @@ sp_stroke_style_paint_changed(SPPaintSelector *psel, SPWidget *spw) break; - case SP_PAINT_SELECTOR_MODE_SWATCH: + case SPPaintSelector::MODE_SWATCH: // TODO break; - case SP_PAINT_SELECTOR_MODE_UNSET: + case SPPaintSelector::MODE_UNSET: if (items) { SPCSSAttr *css = sp_repr_css_attr_new (); sp_repr_css_unset_property (css, "stroke"); -- cgit v1.2.3 From 20bfd4dac4ab262db7bbcb497f5bf11608c1a908 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Mon, 22 Mar 2010 23:35:55 -0700 Subject: Update to reflect "swatch" gradients as being assumed to be shared. (bzr r9224) --- src/widgets/fill-style.cpp | 18 ++++++++++++++---- src/widgets/paint-selector.cpp | 28 ++++++++++++++-------------- src/widgets/paint-selector.h | 3 +-- src/widgets/stroke-style.cpp | 2 +- 4 files changed, 30 insertions(+), 21 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/fill-style.cpp b/src/widgets/fill-style.cpp index 57fa22976..3f2018b91 100644 --- a/src/widgets/fill-style.cpp +++ b/src/widgets/fill-style.cpp @@ -124,8 +124,8 @@ static void sp_fill_style_widget_construct( SPWidget *spw, SPPaintSelector */*psel*/ ) { #ifdef SP_FS_VERBOSE - g_print ( "Fill style widget constructed: inkscape %p repr %p\n", - spw->inkscape, spw->repr ); + g_print ( "Fill style widget constructed: inkscape %p\n", + spw->inkscape ); #endif if (spw->inkscape) { sp_fill_style_widget_update (spw); @@ -143,6 +143,9 @@ sp_fill_style_widget_modify_selection( SPWidget *spw, SP_OBJECT_PARENT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG) ) { +#ifdef SP_FS_VERBOSE + g_message("sp_fill_style_widget_modify_selection()"); +#endif sp_fill_style_widget_update (spw); } } @@ -198,7 +201,7 @@ sp_fill_style_widget_update (SPWidget *spw) case QUERY_STYLE_MULTIPLE_AVERAGED: // TODO: treat this slightly differently, e.g. display "averaged" somewhere in paint selector case QUERY_STYLE_MULTIPLE_SAME: { - SPPaintSelector::Mode pselmode = sp_style_determine_paint_selector_mode(query, true); + SPPaintSelector::Mode pselmode = SPPaintSelector::getModeForStyle(*query, true); psel->setMode(pselmode); psel->setFillrule(query->fill_rule.computed == ART_WIND_RULE_NONZERO? @@ -208,7 +211,7 @@ sp_fill_style_widget_update (SPWidget *spw) psel->setColorAlpha(query->fill.value.color, SP_SCALE24_TO_FLOAT(query->fill_opacity.value)); } else if (query->fill.set && query->fill.isPaintserver()) { - SPPaintServer *server = SP_STYLE_FILL_SERVER (query); + SPPaintServer *server = query->getFillPaintServer(); if (server && SP_IS_GRADIENT(server) && SP_GRADIENT(server)->getVector()->isSwatch()) { SPGradient *vector = SP_GRADIENT(server)->getVector(); @@ -257,6 +260,10 @@ sp_fill_style_widget_paint_mode_changed( SPPaintSelector *psel, if (g_object_get_data (G_OBJECT (spw), "update")) return; +#ifdef SP_FS_VERBOSE + g_message("sp_fill_style_widget_paint_mode_changed(psel:%p, mode, spw:%p)", psel, spw); +#endif + /* TODO: Does this work? */ /* TODO: Not really, here we have to get old color back from object */ /* Instead of relying on paint widget having meaningful colors set */ @@ -346,6 +353,9 @@ static void sp_fill_style_widget_paint_changed ( SPPaintSelector *psel, SPWidget *spw ) { +#ifdef SP_FS_VERBOSE + g_message("sp_fill_style_widget_paint_changed(psel:%p, spw:%p)", psel, spw); +#endif if (g_object_get_data (G_OBJECT (spw), "update")) { return; } diff --git a/src/widgets/paint-selector.cpp b/src/widgets/paint-selector.cpp index 6f3fd823e..288764177 100644 --- a/src/widgets/paint-selector.cpp +++ b/src/widgets/paint-selector.cpp @@ -1137,42 +1137,42 @@ void SPPaintSelector::setFlatColor( SPDesktop *desktop, gchar const *color_prope sp_repr_css_attr_unref(css); } -SPPaintSelector::Mode sp_style_determine_paint_selector_mode(SPStyle *style, bool isfill) +SPPaintSelector::Mode SPPaintSelector::getModeForStyle(SPStyle const & style, bool isfill) { - SPPaintSelector::Mode mode = SPPaintSelector::MODE_UNSET; - SPIPaint& target = isfill ? style->fill : style->stroke; + Mode mode = MODE_UNSET; + SPIPaint const & target = isfill ? style.fill : style.stroke; if ( !target.set ) { - mode = SPPaintSelector::MODE_UNSET; + mode = MODE_UNSET; } else if ( target.isPaintserver() ) { - SPPaintServer *server = isfill? SP_STYLE_FILL_SERVER(style) : SP_STYLE_STROKE_SERVER(style); - + SPPaintServer const *server = isfill ? style.getFillPaintServer() : style.getStrokePaintServer(); #ifdef SP_PS_VERBOSE + g_message("SPPaintSelector::getModeForStyle(%p, %d)", &style, isfill); g_message("==== server:%p %s grad:%s swatch:%s", server, server->getId(), (SP_IS_GRADIENT(server)?"Y":"n"), (SP_IS_GRADIENT(server) && SP_GRADIENT(server)->getVector()->isSwatch()?"Y":"n")); #endif // SP_PS_VERBOSE if (server && SP_IS_GRADIENT(server) && SP_GRADIENT(server)->getVector()->isSwatch()) { - mode = SPPaintSelector::MODE_SWATCH; + mode = MODE_SWATCH; } else if (SP_IS_LINEARGRADIENT(server)) { - mode = SPPaintSelector::MODE_GRADIENT_LINEAR; + mode = MODE_GRADIENT_LINEAR; } else if (SP_IS_RADIALGRADIENT(server)) { - mode = SPPaintSelector::MODE_GRADIENT_RADIAL; + mode = MODE_GRADIENT_RADIAL; } else if (SP_IS_PATTERN(server)) { - mode = SPPaintSelector::MODE_PATTERN; + mode = MODE_PATTERN; } else { g_warning( "file %s: line %d: Unknown paintserver", __FILE__, __LINE__ ); - mode = SPPaintSelector::MODE_NONE; + mode = MODE_NONE; } } else if ( target.isColor() ) { // TODO this is no longer a valid assertion: - mode = SPPaintSelector::MODE_COLOR_RGB; // so far only rgb can be read from svg + mode = MODE_COLOR_RGB; // so far only rgb can be read from svg } else if ( target.isNone() ) { - mode = SPPaintSelector::MODE_NONE; + mode = MODE_NONE; } else { g_warning( "file %s: line %d: Unknown paint type", __FILE__, __LINE__ ); - mode = SPPaintSelector::MODE_NONE; + mode = MODE_NONE; } return mode; diff --git a/src/widgets/paint-selector.h b/src/widgets/paint-selector.h index 63b8f733e..a3c4cb973 100644 --- a/src/widgets/paint-selector.h +++ b/src/widgets/paint-selector.h @@ -75,6 +75,7 @@ struct SPPaintSelector { SPColor color; float alpha; + static Mode getModeForStyle(SPStyle const & style, bool isfill); void setMode( Mode mode ); void setFillrule( FillRule fillrule ); @@ -117,8 +118,6 @@ GtkWidget *sp_paint_selector_new (bool is_fill); -SPPaintSelector::Mode sp_style_determine_paint_selector_mode(SPStyle *style, bool isfill); - #endif // SEEN_SP_PAINT_SELECTOR_H /* diff --git a/src/widgets/stroke-style.cpp b/src/widgets/stroke-style.cpp index edf42f30b..ddd1c92d3 100644 --- a/src/widgets/stroke-style.cpp +++ b/src/widgets/stroke-style.cpp @@ -197,7 +197,7 @@ sp_stroke_style_paint_update (SPWidget *spw) case QUERY_STYLE_MULTIPLE_AVERAGED: // TODO: treat this slightly differently, e.g. display "averaged" somewhere in paint selector case QUERY_STYLE_MULTIPLE_SAME: { - SPPaintSelector::Mode pselmode = sp_style_determine_paint_selector_mode (query, false); + SPPaintSelector::Mode pselmode = SPPaintSelector::getModeForStyle(*query, false); psel->setMode(pselmode); if (query->stroke.set && query->stroke.isPaintserver()) { -- cgit v1.2.3 From 18857e366a8432923fbd107131dd4b3a8c929218 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Tue, 23 Mar 2010 00:32:40 -0700 Subject: Add needed null check. (bzr r9225) --- src/widgets/swatch-selector.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/widgets') diff --git a/src/widgets/swatch-selector.cpp b/src/widgets/swatch-selector.cpp index 602adec4f..a6f5133b7 100644 --- a/src/widgets/swatch-selector.cpp +++ b/src/widgets/swatch-selector.cpp @@ -108,7 +108,7 @@ void SwatchSelector::_changedCb(SPColorSelector */*csel*/, void *data) // TODO might have to block cycles - if (swsel->_gsel) { + if (swsel->_gsel && swsel->_gsel->getVector()) { SPGradient *gradient = swsel->_gsel->getVector(); SPGradient *ngr = sp_gradient_ensure_vector_normalized(gradient); if (ngr != gradient) { -- cgit v1.2.3