From 6ce48b4860ec433fc7823fe2530cd59072417264 Mon Sep 17 00:00:00 2001 From: cilix42 Date: Thu, 16 Aug 2007 14:09:05 +0000 Subject: [PATCH] Remove second option for resizing 3D boxes (now we have 8 handles; the four front ones resize in XY-plane, the four rear ones along the Z axis) --- src/box3d-context.cpp | 2 - src/box3d-context.h | 3 - src/object-edit.cpp | 159 +++++++++------------------------------- src/widgets/toolbox.cpp | 97 ------------------------ 4 files changed, 36 insertions(+), 225 deletions(-) diff --git a/src/box3d-context.cpp b/src/box3d-context.cpp index 667bfca61..b11eb4c1d 100644 --- a/src/box3d-context.cpp +++ b/src/box3d-context.cpp @@ -90,8 +90,6 @@ static void sp_3dbox_context_class_init(SP3DBoxContextClass *klass) event_context_class->item_handler = sp_3dbox_context_item_handler; } -guint SP3DBoxContext::number_of_handles = 3; - static void sp_3dbox_context_init(SP3DBoxContext *box3d_context) { SPEventContext *event_context = SP_EVENT_CONTEXT(box3d_context); diff --git a/src/box3d-context.h b/src/box3d-context.h index 6d2e560d4..33176ae84 100644 --- a/src/box3d-context.h +++ b/src/box3d-context.h @@ -50,9 +50,6 @@ struct SP3DBoxContext : public SPEventContext { Box3D::VPDrag * _vpdrag; - /* temporary member until the precise behaviour is sorted out */ - static guint number_of_handles; - sigc::connection sel_changed_connection; Inkscape::MessageContext *_message_context; diff --git a/src/object-edit.cpp b/src/object-edit.cpp index bd3bd1902..b15646520 100644 --- a/src/object-edit.cpp +++ b/src/object-edit.cpp @@ -50,7 +50,7 @@ static SPKnotHolder *sp_rect_knot_holder(SPItem *item, SPDesktop *desktop); //static -SPKnotHolder *sp_3dbox_knot_holder(SPItem *item, SPDesktop *desktop, guint number_of_handles); +SPKnotHolder *sp_3dbox_knot_holder(SPItem *item, SPDesktop *desktop); static SPKnotHolder *sp_arc_knot_holder(SPItem *item, SPDesktop *desktop); static SPKnotHolder *sp_star_knot_holder(SPItem *item, SPDesktop *desktop); static SPKnotHolder *sp_spiral_knot_holder(SPItem *item, SPDesktop *desktop); @@ -65,7 +65,7 @@ sp_item_knot_holder(SPItem *item, SPDesktop *desktop) if (SP_IS_RECT(item)) { return sp_rect_knot_holder(item, desktop); } else if (SP_IS_3DBOX(item)) { - return sp_3dbox_knot_holder(item, desktop, SP3DBoxContext::number_of_handles); + return sp_3dbox_knot_holder(item, desktop); } else if (SP_IS_ARC(item)) { return sp_arc_knot_holder(item, desktop); } else if (SP_IS_STAR(item)) { @@ -535,15 +535,11 @@ static void sp_3dbox_knot_set(SPItem *item, guint knot_id, Box3D::Axis direction g_assert(item != NULL); SP3DBox *box = SP_3DBOX(item); - // FIXME: Why must the coordinates be flipped vertically??? - SPDocument *doc = SP_OBJECT_DOCUMENT(box); - gdouble height = sp_document_height(doc); - NR::Matrix const i2d (sp_item_i2d_affine (item)); if (direction == Box3D::Z) { - sp_3dbox_move_corner_in_Z_direction (box, knot_id, new_pos * i2d, !(state & GDK_SHIFT_MASK)); + sp_3dbox_move_corner_in_Z_direction (box, knot_id, new_pos * i2d, !(state & GDK_SHIFT_MASK)); } else { - sp_3dbox_move_corner_in_XY_plane (box, knot_id, new_pos * i2d, (state & GDK_SHIFT_MASK) ? direction : Box3D::XY); + sp_3dbox_move_corner_in_Z_direction (box, knot_id, new_pos * i2d, (state & GDK_SHIFT_MASK)); } sp_3dbox_update_curves (box); sp_3dbox_set_ratios (box); @@ -560,107 +556,44 @@ static NR::Point sp_3dbox_knot_get(SPItem *item, guint knot_id) return sp_3dbox_get_corner(box, knot_id) * i2d; } -static void sp_3dbox_knot1_set(SPItem *item, NR::Point const &new_pos, NR::Point const &origin, guint state) +static void sp_3dbox_knot0_set(SPItem *item, NR::Point const &new_pos, NR::Point const &origin, guint state) { - sp_3dbox_knot_set (item, 1, Box3D::Y, new_pos, origin, state); + sp_3dbox_knot_set(item, 0, Box3D::XY, new_pos, origin, state); } -/* -static void sp_3dbox_knot1_set_constrained(SPItem *item, NR::Point const &new_pos, NR::Point const &origin, guint state) +static void sp_3dbox_knot1_set(SPItem *item, NR::Point const &new_pos, NR::Point const &origin, guint state) { - sp_3dbox_knot_set (item, 1, Box3D::Y, new_pos, origin, state ^ GDK_SHIFT_MASK); + sp_3dbox_knot_set(item, 1, Box3D::XY, new_pos, origin, state); } -*/ static void sp_3dbox_knot2_set(SPItem *item, NR::Point const &new_pos, NR::Point const &origin, guint state) { - sp_3dbox_knot_set (item, 2, Box3D::X, new_pos, origin, state); -} - -/* -static void sp_3dbox_knot2_set_constrained(SPItem *item, NR::Point const &new_pos, NR::Point const &origin, guint state) -{ - sp_3dbox_knot_set (item, 2, Box3D::X, new_pos, origin, state ^ GDK_SHIFT_MASK); + sp_3dbox_knot_set(item, 2, Box3D::XY, new_pos, origin, state); } static void sp_3dbox_knot3_set(SPItem *item, NR::Point const &new_pos, NR::Point const &origin, guint state) { - if (!(state & GDK_SHIFT_MASK)) { - sp_3dbox_knot_set (item, 3, Box3D::Y, new_pos, origin, state); - } else { - sp_3dbox_knot_set (item, 3, Box3D::Z, new_pos, origin, state ^ GDK_SHIFT_MASK); - } -} -*/ - -static void sp_3dbox_knot5_set(SPItem *item, NR::Point const &new_pos, NR::Point const &origin, guint state) -{ - sp_3dbox_knot_set (item, 5, Box3D::Z, new_pos, origin, state); -} - -/* -static void sp_3dbox_knot7_set(SPItem *item, NR::Point const &new_pos, NR::Point const &origin, guint state) -{ - sp_3dbox_knot_set (item, 7, Box3D::Z, new_pos, origin, state); -} -*/ - -// defined a uniform behaviour for all knots -static void sp_3dbox_knot_set_uniformly(SPItem *item, guint knot_id, Box3D::Axis direction, NR::Point const &new_pos, NR::Point const &origin, guint state) -{ - g_assert(item != NULL); - SP3DBox *box = SP_3DBOX(item); - - NR::Matrix const i2d (sp_item_i2d_affine (item)); - if (direction == Box3D::Z) { - sp_3dbox_move_corner_in_Z_direction (box, knot_id, new_pos * i2d, !(state & GDK_SHIFT_MASK)); - } else { - sp_3dbox_move_corner_in_Z_direction (box, knot_id, new_pos * i2d, (state & GDK_SHIFT_MASK)); - } - sp_3dbox_update_curves (box); - sp_3dbox_set_ratios (box); - sp_3dbox_update_perspective_lines (); - sp_3dbox_set_z_orders (box); -} - -static void sp_3dbox_knot0_set_uniformly(SPItem *item, NR::Point const &new_pos, NR::Point const &origin, guint state) -{ - sp_3dbox_knot_set_uniformly(item, 0, Box3D::XY, new_pos, origin, state); + sp_3dbox_knot_set(item, 3, Box3D::XY, new_pos, origin, state); } -static void sp_3dbox_knot1_set_uniformly(SPItem *item, NR::Point const &new_pos, NR::Point const &origin, guint state) +static void sp_3dbox_knot4_set(SPItem *item, NR::Point const &new_pos, NR::Point const &origin, guint state) { - sp_3dbox_knot_set_uniformly(item, 1, Box3D::XY, new_pos, origin, state); + sp_3dbox_knot_set(item, 4, Box3D::Z, new_pos, origin, state); } -static void sp_3dbox_knot2_set_uniformly(SPItem *item, NR::Point const &new_pos, NR::Point const &origin, guint state) -{ - sp_3dbox_knot_set_uniformly(item, 2, Box3D::XY, new_pos, origin, state); -} - -static void sp_3dbox_knot3_set_uniformly(SPItem *item, NR::Point const &new_pos, NR::Point const &origin, guint state) -{ - sp_3dbox_knot_set_uniformly(item, 3, Box3D::XY, new_pos, origin, state); -} - -static void sp_3dbox_knot4_set_uniformly(SPItem *item, NR::Point const &new_pos, NR::Point const &origin, guint state) -{ - sp_3dbox_knot_set_uniformly(item, 4, Box3D::Z, new_pos, origin, state); -} - -static void sp_3dbox_knot5_set_uniformly(SPItem *item, NR::Point const &new_pos, NR::Point const &origin, guint state) +static void sp_3dbox_knot5_set(SPItem *item, NR::Point const &new_pos, NR::Point const &origin, guint state) { - sp_3dbox_knot_set_uniformly(item, 5, Box3D::Z, new_pos, origin, state); + sp_3dbox_knot_set(item, 5, Box3D::Z, new_pos, origin, state); } -static void sp_3dbox_knot6_set_uniformly(SPItem *item, NR::Point const &new_pos, NR::Point const &origin, guint state) +static void sp_3dbox_knot6_set(SPItem *item, NR::Point const &new_pos, NR::Point const &origin, guint state) { - sp_3dbox_knot_set_uniformly(item, 6, Box3D::Z, new_pos, origin, state); + sp_3dbox_knot_set(item, 6, Box3D::Z, new_pos, origin, state); } -static void sp_3dbox_knot7_set_uniformly(SPItem *item, NR::Point const &new_pos, NR::Point const &origin, guint state) +static void sp_3dbox_knot7_set(SPItem *item, NR::Point const &new_pos, NR::Point const &origin, guint state) { - sp_3dbox_knot_set_uniformly(item, 7, Box3D::Z, new_pos, origin, state); + sp_3dbox_knot_set(item, 7, Box3D::Z, new_pos, origin, state); } static NR::Point sp_3dbox_knot0_get(SPItem *item) @@ -706,48 +639,28 @@ static NR::Point sp_3dbox_knot7_get(SPItem *item) //static SPKnotHolder * -sp_3dbox_knot_holder(SPItem *item, SPDesktop *desktop, guint number_of_handles) +sp_3dbox_knot_holder(SPItem *item, SPDesktop *desktop) { g_assert(item != NULL); SPKnotHolder *knot_holder = sp_knot_holder_new(desktop, item, NULL); - switch (number_of_handles) { - case 3: - sp_knot_holder_add(knot_holder, sp_3dbox_knot1_set, sp_3dbox_knot1_get, NULL,_("Resize box in X/Y direction")); - sp_knot_holder_add(knot_holder, sp_3dbox_knot2_set, sp_3dbox_knot2_get, NULL,_("Resize box in X/Y direction")); - sp_knot_holder_add(knot_holder, sp_3dbox_knot5_set, sp_3dbox_knot5_get, NULL,_("Resize box in Z direction")); - sp_pat_knot_holder(item, knot_holder); - break; - case 4: - /*** - sp_knot_holder_add(knot_holder, sp_3dbox_knot1_set_constrained, sp_3dbox_knot1_get, NULL,_("Resize box in X/Y direction")); - sp_knot_holder_add(knot_holder, sp_3dbox_knot2_set_constrained, sp_3dbox_knot2_get, NULL,_("Resize box in X/Y direction")); - sp_knot_holder_add_full(knot_holder, sp_3dbox_knot3_set, sp_3dbox_knot3_get, NULL, - SP_KNOT_SHAPE_CIRCLE, SP_KNOT_MODE_XOR, _("Resize box in Y direction")); - sp_knot_holder_add(knot_holder, sp_3dbox_knot7_set, sp_3dbox_knot7_get, NULL,_("Resize box in Z direction")); - ***/ - sp_knot_holder_add(knot_holder, sp_3dbox_knot0_set_uniformly, sp_3dbox_knot0_get, NULL, - _("Resize box in X/Y direction; with Shift along the Z axis")); - sp_knot_holder_add(knot_holder, sp_3dbox_knot1_set_uniformly, sp_3dbox_knot1_get, NULL, - _("Resize box in X/Y direction; with Shift along the Z axis")); - sp_knot_holder_add(knot_holder, sp_3dbox_knot2_set_uniformly, sp_3dbox_knot2_get, NULL, - _("Resize box in X/Y direction; with Shift along the Z axis")); - sp_knot_holder_add(knot_holder, sp_3dbox_knot3_set_uniformly, sp_3dbox_knot3_get, NULL, - _("Resize box in X/Y direction; with Shift along the Z axis")); - sp_knot_holder_add(knot_holder, sp_3dbox_knot4_set_uniformly, sp_3dbox_knot4_get, NULL, - _("Resize box along the Z axis; with Shift in X/Y direction")); - sp_knot_holder_add(knot_holder, sp_3dbox_knot5_set_uniformly, sp_3dbox_knot5_get, NULL, - _("Resize box along the Z axis; with Shift in X/Y direction")); - sp_knot_holder_add(knot_holder, sp_3dbox_knot6_set_uniformly, sp_3dbox_knot6_get, NULL, - _("Resize box along the Z axis; with Shift in X/Y direction")); - sp_knot_holder_add(knot_holder, sp_3dbox_knot7_set_uniformly, sp_3dbox_knot7_get, NULL, - _("Resize box along the Z axis; with Shift in X/Y direction")); - sp_pat_knot_holder(item, knot_holder); - break; - default: - g_print ("Wrong number of handles (%d): Not implemented yet.\n", number_of_handles); - break; - } + sp_knot_holder_add(knot_holder, sp_3dbox_knot0_set, sp_3dbox_knot0_get, NULL, + _("Resize box in X/Y direction; with Shift along the Z axis")); + sp_knot_holder_add(knot_holder, sp_3dbox_knot1_set, sp_3dbox_knot1_get, NULL, + _("Resize box in X/Y direction; with Shift along the Z axis")); + sp_knot_holder_add(knot_holder, sp_3dbox_knot2_set, sp_3dbox_knot2_get, NULL, + _("Resize box in X/Y direction; with Shift along the Z axis")); + sp_knot_holder_add(knot_holder, sp_3dbox_knot3_set, sp_3dbox_knot3_get, NULL, + _("Resize box in X/Y direction; with Shift along the Z axis")); + sp_knot_holder_add(knot_holder, sp_3dbox_knot4_set, sp_3dbox_knot4_get, NULL, + _("Resize box along the Z axis; with Shift in X/Y direction")); + sp_knot_holder_add(knot_holder, sp_3dbox_knot5_set, sp_3dbox_knot5_get, NULL, + _("Resize box along the Z axis; with Shift in X/Y direction")); + sp_knot_holder_add(knot_holder, sp_3dbox_knot6_set, sp_3dbox_knot6_get, NULL, + _("Resize box along the Z axis; with Shift in X/Y direction")); + sp_knot_holder_add(knot_holder, sp_3dbox_knot7_set, sp_3dbox_knot7_get, NULL, + _("Resize box along the Z axis; with Shift in X/Y direction")); + sp_pat_knot_holder(item, knot_holder); return knot_holder; } diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index 7f4f637b4..9801c9f48 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -94,11 +94,6 @@ #include "ege-select-one-action.h" #include "helper/unit-tracker.h" -// FIXME: The next two lines are only temporarily added until -// the final resizing behaviour of 3D boxes is sorted out. -#include "knotholder.h" -SPKnotHolder *sp_3dbox_knot_holder(SPItem *item, SPDesktop *desktop, guint number_of_handles); - using Inkscape::UnitTracker; typedef void (*SetupFunction)(GtkWidget *toolbox, SPDesktop *desktop); @@ -302,8 +297,6 @@ static gchar const * ui_descr = " " " " " " - " " - " " " " " " @@ -2138,60 +2131,6 @@ static void sp_3dbox_toggle_vp_changed( GtkToggleAction *act, gpointer data ) } -static void sp_3dboxtb_handles_state_changed( EgeSelectOneAction *act, GObject *tbl ) -{ - SPDesktop *desktop = (SPDesktop *) g_object_get_data( tbl, "desktop" ); - if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) { - if ( ege_select_one_action_get_active( act ) != 0 ) { - prefs_set_string_attribute("tools.shapes.3dbox", "constrainedXYmoving", "true"); - } else { - prefs_set_string_attribute("tools.shapes.3dbox", "constrainedXYmoving", "false"); - } - } - - // quit if run by the attr_changed listener - if (g_object_get_data( tbl, "freeze" )) { - return; - } - - // in turn, prevent listener from responding - g_object_set_data( tbl, "freeze", GINT_TO_POINTER(TRUE) ); - - bool modmade = false; - - SPEventContext *ec = SP_EVENT_CONTEXT(inkscape_active_event_context()); - if (!SP_IS_3DBOX_CONTEXT(ec)) return; - SP3DBoxContext *bc = SP_3DBOX_CONTEXT(ec); - for (GSList const *items = sp_desktop_selection(desktop)->itemList(); - items != NULL; - items = items->next) - { - if (SP_IS_3DBOX((SPItem *) items->data)) { - if (ec->shape_knot_holder) { - sp_knot_holder_destroy(ec->shape_knot_holder); - if ( ege_select_one_action_get_active(act) != 0 ) { - bc->number_of_handles = 4; - ec->shape_knot_holder = sp_3dbox_knot_holder((SPItem *) items->data, SP_ACTIVE_DESKTOP, 4);; - } else { - bc->number_of_handles = 3; - ec->shape_knot_holder = sp_3dbox_knot_holder((SPItem *) items->data, SP_ACTIVE_DESKTOP, 3);; - } - } else { - g_print ("Warning: No KnotHolder detected!!!\n"); - } - modmade = true; - } - } - - if (modmade) { - sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_3DBOX, - _("3D Box: Change number of handles")); - } - - g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) ); -} - - static void sp_3dbox_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder) { SPDocument *document = sp_desktop_document (desktop); @@ -2243,42 +2182,6 @@ static void sp_3dbox_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), toggled ); g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_3dbox_toggle_vp_changed), GINT_TO_POINTER(Box3D::Z)); } - - - /* Number of handles and resizing behaviour */ - { - 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, _("Three Handles"), - 1, _("Switch to three handles (arbitrary resizing in XY-direction)"), - 2, "3dbox_three_handles", - -1 ); - - gtk_list_store_append( model, &iter ); - gtk_list_store_set( model, &iter, - 0, _("Four Handles"), - 1, _("Switch to four handles (constrained resizing in XY-direction)"), - 2, "3dbox_four_handles", - -1 ); - - EgeSelectOneAction* act = ege_select_one_action_new( "3DBoxHandlesAction", _(""), _(""), NULL, GTK_TREE_MODEL(model) ); - gtk_action_group_add_action( mainActions, GTK_ACTION(act) ); - g_object_set_data( holder, "handles_action", act ); - - ege_select_one_action_set_appearance( act, "full" ); - 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_tooltip_column( act, 1 ); - - gchar const *handlestr = prefs_get_string_attribute("tools.shapes.3dbox", "constrainedXYmoving"); - bool isConstrained = (!handlestr || (handlestr && !strcmp(handlestr, "true"))); - ege_select_one_action_set_active( act, isConstrained ? 0 : 1 ); - g_signal_connect_after( G_OBJECT(act), "changed", G_CALLBACK(sp_3dboxtb_handles_state_changed), holder ); - } } //######################## -- 2.30.2