pencil-toolbar.cpp revision 98f9f27a27115988e05366a69d7b38be9c12f69d
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang/**
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang * @file
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang * Pencil aux toolbar
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang */
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang/* Authors:
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang * MenTaLguY <mental@rydia.net>
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang * Lauris Kaplinski <lauris@kaplinski.com>
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang * bulia byak <buliabyak@users.sf.net>
3e4305eb6432c65bb0dfe8d9af9707dfc92383eaChristian Maeder * Frank Felfe <innerspace@iname.com>
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang * John Cliff <simarilius@yahoo.com>
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang * David Turner <novalis@gnu.org>
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang * Josh Andler <scislac@scislac.com>
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang * Jon A. Cruz <jon@joncruz.org>
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang * Maximilian Albert <maximilian.albert@gmail.com>
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang * Tavmjong Bah <tavmjong@free.fr>
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang * Abhishek Sharma
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang * Kris De Gussem <Kris.DeGussem@gmail.com>
67d5e49547d78aa56a8f9ba5e64a950b730eba66Till Mossakowski *
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang * Copyright (C) 2004 David Turner
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang * Copyright (C) 2003 MenTaLguY
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang * Copyright (C) 1999-2011 authors
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang * Copyright (C) 2001-2002 Ximian, Inc.
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang *
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang * Released under GNU GPL, read the file 'COPYING' for more information
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang */
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang#ifdef HAVE_CONFIG_H
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang# include "config.h"
806bce66335c88260a63e7524b1efc68d8dfacc1Heng Jiang#endif
806bce66335c88260a63e7524b1efc68d8dfacc1Heng Jiang
806bce66335c88260a63e7524b1efc68d8dfacc1Heng Jiang#include <gtkmm.h>
806bce66335c88260a63e7524b1efc68d8dfacc1Heng Jiang#include <glibmm/i18n.h>
806bce66335c88260a63e7524b1efc68d8dfacc1Heng Jiang#include <list>
806bce66335c88260a63e7524b1efc68d8dfacc1Heng Jiang
806bce66335c88260a63e7524b1efc68d8dfacc1Heng Jiang#include "pencil-toolbar.h"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang#include "desktop.h"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang#include "document-undo.h"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang#include "widgets/ege-adjustment-action.h"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang#include "widgets/ege-select-one-action.h"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang#include "widgets/ink-action.h"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang#include "preferences.h"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang#include "toolbox.h"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang#include "ui/tools-switch.h"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang#include "ui/icon-names.h"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang#include "ui/tools/pen-tool.h"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang#include "ui/uxmanager.h"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang#include "widgets/spinbutton-events.h"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang#include <selection.h>
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang#include "live_effects/effect.h"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang#include "live_effects/lpe-simplify.h"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang#include "live_effects/effect-enum.h"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang#include "live_effects/lpeobject.h"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang#include "live_effects/lpeobject-reference.h"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang#include "sp-lpe-item.h"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang#include "util/glib-list-iterators.h"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiangusing Inkscape::UI::UXManager;
806bce66335c88260a63e7524b1efc68d8dfacc1Heng Jiangusing Inkscape::DocumentUndo;
806bce66335c88260a63e7524b1efc68d8dfacc1Heng Jiangusing Inkscape::UI::ToolboxFactory;
806bce66335c88260a63e7524b1efc68d8dfacc1Heng Jiangusing Inkscape::UI::PrefPusher;
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang//########################
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang//## Pen/Pencil ##
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang//########################
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang/* This is used in generic functions below to share large portions of code between pen and pencil tool */
806bce66335c88260a63e7524b1efc68d8dfacc1Heng Jiangstatic Glib::ustring const freehand_tool_name(GObject *dataKludge)
806bce66335c88260a63e7524b1efc68d8dfacc1Heng Jiang{
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang SPDesktop *desktop = static_cast<SPDesktop *>(g_object_get_data(dataKludge, "desktop"));
806bce66335c88260a63e7524b1efc68d8dfacc1Heng Jiang return ( tools_isactive(desktop, TOOLS_FREEHAND_PEN)
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang ? "/tools/freehand/pen"
c10df434f8e16b46ccf703bf2e38b799f7bcb38bHeng Jiang : "/tools/freehand/pencil" );
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang}
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiangstatic void freehand_mode_changed(EgeSelectOneAction* act, GObject* tbl)
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang{
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang gint mode = ege_select_one_action_get_active(act);
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang Inkscape::Preferences *prefs = Inkscape::Preferences::get();
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang prefs->setInt(freehand_tool_name(tbl) + "/freehand-mode", mode);
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang SPDesktop *desktop = static_cast<SPDesktop *>(g_object_get_data(tbl, "desktop"));
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang // in pen tool we have more options than in pencil tool; if one of them was chosen, we do any
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang // preparatory work here
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang if (SP_IS_PEN_CONTEXT(desktop->event_context)) {
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang Inkscape::UI::Tools::PenTool *pc = SP_PEN_CONTEXT(desktop->event_context);
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang pc->setPolylineMode();
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang }
c10df434f8e16b46ccf703bf2e38b799f7bcb38bHeng Jiang}
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiangstatic void sp_add_freehand_mode_toggle(GtkActionGroup* mainActions, GObject* holder, bool tool_is_pencil)
b0905caf30330ed73d5363e67c9f1f4576737ee1Heng Jiang{
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang /* Freehand mode toggle buttons */
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang {
6c8dc7ab7cb52a12cba748fe0f6b8d8d17a95eb9Heng Jiang Inkscape::Preferences *prefs = Inkscape::Preferences::get();
6c8dc7ab7cb52a12cba748fe0f6b8d8d17a95eb9Heng Jiang guint freehandMode = prefs->getInt(( tool_is_pencil ? "/tools/freehand/pencil/freehand-mode" : "/tools/freehand/pen/freehand-mode" ), 0);
0b31ea5ec0e20f17d55845a5d803c48466e01ca3Heng Jiang Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1);
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang
6c8dc7ab7cb52a12cba748fe0f6b8d8d17a95eb9Heng Jiang {
0b31ea5ec0e20f17d55845a5d803c48466e01ca3Heng Jiang GtkListStore* model = gtk_list_store_new( 3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING );
0b31ea5ec0e20f17d55845a5d803c48466e01ca3Heng Jiang
0b31ea5ec0e20f17d55845a5d803c48466e01ca3Heng Jiang GtkTreeIter iter;
0b31ea5ec0e20f17d55845a5d803c48466e01ca3Heng Jiang gtk_list_store_append( model, &iter );
0b31ea5ec0e20f17d55845a5d803c48466e01ca3Heng Jiang gtk_list_store_set( model, &iter,
0b31ea5ec0e20f17d55845a5d803c48466e01ca3Heng Jiang 0, _("Bezier"),
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang 1, _("Create regular Bezier path"),
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang 2, INKSCAPE_ICON("path-mode-bezier"),
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang -1 );
31ac08a9e5233b83a63fd5aaac494c32305c4c77Heng Jiang
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang gtk_list_store_append( model, &iter );
3e4305eb6432c65bb0dfe8d9af9707dfc92383eaChristian Maeder gtk_list_store_set( model, &iter,
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang 0, _("Spiro"),
f0a4ace924cef940ca4cc646fa180df70ef405d8Klaus Luettich 1, _("Create Spiro path"),
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang 2, INKSCAPE_ICON("path-mode-spiro"),
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang -1 );
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang gtk_list_store_append( model, &iter );
0b31ea5ec0e20f17d55845a5d803c48466e01ca3Heng Jiang gtk_list_store_set( model, &iter,
0b31ea5ec0e20f17d55845a5d803c48466e01ca3Heng Jiang 0, _("BSpline"),
0b31ea5ec0e20f17d55845a5d803c48466e01ca3Heng Jiang 1, _("Create BSpline path"),
0b31ea5ec0e20f17d55845a5d803c48466e01ca3Heng Jiang 2, INKSCAPE_ICON("path-mode-bspline"),
0b31ea5ec0e20f17d55845a5d803c48466e01ca3Heng Jiang -1 );
0b31ea5ec0e20f17d55845a5d803c48466e01ca3Heng Jiang if (!tool_is_pencil) {
0b31ea5ec0e20f17d55845a5d803c48466e01ca3Heng Jiang gtk_list_store_append( model, &iter );
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang gtk_list_store_set( model, &iter,
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang 0, _("Zigzag"),
6c8dc7ab7cb52a12cba748fe0f6b8d8d17a95eb9Heng Jiang 1, _("Create a sequence of straight line segments"),
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang 2, INKSCAPE_ICON("path-mode-polyline"),
31ac08a9e5233b83a63fd5aaac494c32305c4c77Heng Jiang -1 );
31ac08a9e5233b83a63fd5aaac494c32305c4c77Heng Jiang
806bce66335c88260a63e7524b1efc68d8dfacc1Heng Jiang gtk_list_store_append( model, &iter );
806bce66335c88260a63e7524b1efc68d8dfacc1Heng Jiang gtk_list_store_set( model, &iter,
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang 0, _("Paraxial"),
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang 1, _("Create a sequence of paraxial line segments"),
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang 2, INKSCAPE_ICON("path-mode-polyline-paraxial"),
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang -1 );
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang }
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang EgeSelectOneAction* act = ege_select_one_action_new(tool_is_pencil ?
6c8dc7ab7cb52a12cba748fe0f6b8d8d17a95eb9Heng Jiang "FreehandModeActionPencil" :
6c8dc7ab7cb52a12cba748fe0f6b8d8d17a95eb9Heng Jiang "FreehandModeActionPen",
6c8dc7ab7cb52a12cba748fe0f6b8d8d17a95eb9Heng Jiang (_("Mode:")), (_("Mode of new lines drawn by this tool")), NULL, GTK_TREE_MODEL(model) );
6c8dc7ab7cb52a12cba748fe0f6b8d8d17a95eb9Heng Jiang gtk_action_group_add_action( mainActions, GTK_ACTION(act) );
6c8dc7ab7cb52a12cba748fe0f6b8d8d17a95eb9Heng Jiang
6c8dc7ab7cb52a12cba748fe0f6b8d8d17a95eb9Heng Jiang ege_select_one_action_set_appearance( act, "full" );
6c8dc7ab7cb52a12cba748fe0f6b8d8d17a95eb9Heng Jiang ege_select_one_action_set_radio_action_type( act, INK_RADIO_ACTION_TYPE );
6c8dc7ab7cb52a12cba748fe0f6b8d8d17a95eb9Heng Jiang g_object_set( G_OBJECT(act), "icon-property", "iconId", NULL );
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang ege_select_one_action_set_icon_column( act, 2 );
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang ege_select_one_action_set_icon_size( act, secondarySize );
6c8dc7ab7cb52a12cba748fe0f6b8d8d17a95eb9Heng Jiang ege_select_one_action_set_tooltip_column( act, 1 );
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang ege_select_one_action_set_active( act, freehandMode);
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang g_signal_connect_after( G_OBJECT(act), "changed", G_CALLBACK(freehand_mode_changed), holder);
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang }
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang }
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang}
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiangstatic void freehand_change_shape(EgeSelectOneAction* act, GObject *dataKludge) {
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang gint shape = ege_select_one_action_get_active( act );
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang Inkscape::Preferences *prefs = Inkscape::Preferences::get();
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang prefs->setInt(freehand_tool_name(dataKludge) + "/shape", shape);
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang}
806bce66335c88260a63e7524b1efc68d8dfacc1Heng Jiang
806bce66335c88260a63e7524b1efc68d8dfacc1Heng Jiangstatic void freehand_simplify_lpe(InkToggleAction* itact, GObject *dataKludge) {
806bce66335c88260a63e7524b1efc68d8dfacc1Heng Jiang gint simplify = gtk_toggle_action_get_active( GTK_TOGGLE_ACTION(itact) );
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang Inkscape::Preferences *prefs = Inkscape::Preferences::get();
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang prefs->setInt(freehand_tool_name(dataKludge) + "/simplify", simplify);
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang}
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang/**
f0a4ace924cef940ca4cc646fa180df70ef405d8Klaus Luettich * Generate the list of freehand advanced shape option entries.
f0a4ace924cef940ca4cc646fa180df70ef405d8Klaus Luettich */
f0a4ace924cef940ca4cc646fa180df70ef405d8Klaus Luettichstatic GList * freehand_shape_dropdown_items_list() {
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang GList *glist = NULL;
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang glist = g_list_append (glist, const_cast<gchar *>(C_("Freehand shape", "None")));
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang glist = g_list_append (glist, _("Triangle in"));
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang glist = g_list_append (glist, _("Triangle out"));
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang glist = g_list_append (glist, _("Ellipse"));
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang glist = g_list_append (glist, _("From clipboard"));
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang glist = g_list_append (glist, _("Last applied"));
6c8dc7ab7cb52a12cba748fe0f6b8d8d17a95eb9Heng Jiang
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang return glist;
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang}
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiangstatic void freehand_add_advanced_shape_options(GtkActionGroup* mainActions, GObject* holder, bool tool_is_pencil)
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang{
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang /*advanced shape options */
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang {
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang Inkscape::Preferences *prefs = Inkscape::Preferences::get();
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang GtkListStore* model = gtk_list_store_new( 2, G_TYPE_STRING, G_TYPE_INT );
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang GList* items = 0;
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang gint count = 0;
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang for ( items = freehand_shape_dropdown_items_list(); items ; items = g_list_next(items) )
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang {
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang GtkTreeIter iter;
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang gtk_list_store_append( model, &iter );
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang gtk_list_store_set( model, &iter, 0, reinterpret_cast<gchar*>(items->data), 1, count, -1 );
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang count++;
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang }
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang g_list_free( items );
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang items = 0;
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang EgeSelectOneAction* act1 = ege_select_one_action_new(
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang tool_is_pencil ? "SetPencilShapeAction" : "SetPenShapeAction",
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang _("Shape:"), (_("Shape of new paths drawn by this tool")), NULL, GTK_TREE_MODEL(model));
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang g_object_set( act1, "short_label", _("Shape:"), NULL );
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang ege_select_one_action_set_appearance( act1, "compact" );
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang ege_select_one_action_set_active( act1, prefs->getInt(( tool_is_pencil ? "/tools/freehand/pencil/shape" : "/tools/freehand/pen/shape" ), 0) );
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang g_signal_connect( G_OBJECT(act1), "changed", G_CALLBACK(freehand_change_shape), holder );
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang gtk_action_group_add_action( mainActions, GTK_ACTION(act1) );
36089fe7ad5167b48f702514056071fd8739faeaHeng Jiang g_object_set_data( holder, "shape_action", act1 );
175c9e5fde43fc804a8d25198133288669b9d54cKlaus Luettich }
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang}
175c9e5fde43fc804a8d25198133288669b9d54cKlaus Luettich
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiangvoid sp_pen_toolbox_prep(SPDesktop * /*desktop*/, GtkActionGroup* mainActions, GObject* holder)
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang{
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang sp_add_freehand_mode_toggle(mainActions, holder, false);
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang freehand_add_advanced_shape_options(mainActions, holder, false);
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang}
b91c4dbd00294ce29ab1ae84ad4e8c93ca5ad943Heng Jiang
b91c4dbd00294ce29ab1ae84ad4e8c93ca5ad943Heng Jiang
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiangstatic void sp_pencil_tb_defaults(GtkWidget * /*widget*/, GObject *obj)
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang{
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang GtkWidget *tbl = GTK_WIDGET(obj);
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang GtkAdjustment *adj;
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang
b91c4dbd00294ce29ab1ae84ad4e8c93ca5ad943Heng Jiang // fixme: make settable
b91c4dbd00294ce29ab1ae84ad4e8c93ca5ad943Heng Jiang gdouble tolerance = 4;
b91c4dbd00294ce29ab1ae84ad4e8c93ca5ad943Heng Jiang
b91c4dbd00294ce29ab1ae84ad4e8c93ca5ad943Heng Jiang adj = GTK_ADJUSTMENT(g_object_get_data(obj, "tolerance"));
b91c4dbd00294ce29ab1ae84ad4e8c93ca5ad943Heng Jiang gtk_adjustment_set_value(adj, tolerance);
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang gtk_adjustment_value_changed(adj);
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang
b91c4dbd00294ce29ab1ae84ad4e8c93ca5ad943Heng Jiang spinbutton_defocus(tbl);
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang}
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiangstatic void sp_simplify_flatten(GtkWidget * /*widget*/, GObject *obj)
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang{
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang SPDesktop *desktop = static_cast<SPDesktop *>(g_object_get_data(obj, "desktop"));
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang std::vector<SPItem *> selected = desktop->getSelection()->itemList();
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang for (std::vector<SPItem *>::iterator it(selected.begin()); it != selected.end(); ++it){
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang SPLPEItem* lpeitem = dynamic_cast<SPLPEItem*>(*it);
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang if (lpeitem && lpeitem->hasPathEffect()){
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang PathEffectList lpelist = lpeitem->getEffectList();
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang std::list<Inkscape::LivePathEffect::LPEObjectReference *>::iterator i;
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang for (i = lpelist.begin(); i != lpelist.end(); ++i) {
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang LivePathEffectObject *lpeobj = (*i)->lpeobject;
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang if (lpeobj) {
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang Inkscape::LivePathEffect::Effect *lpe = lpeobj->get_lpe();
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang if (dynamic_cast<Inkscape::LivePathEffect::LPESimplify *>(lpe)) {
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang SPShape * shape = dynamic_cast<SPShape *>(lpeitem);
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang if(shape){
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang SPCurve * c = shape->getCurveBeforeLPE();
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang lpe->doEffect(c);
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang lpeitem->setCurrentPathEffect(*i);
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang if (lpelist.size() > 1){
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang lpeitem->removeCurrentPathEffect(true);
f4152ab9d084afebd592edfcde4bf5a0d8556eddKlaus Luettich shape->setCurveBeforeLPE(c);
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang } else {
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang lpeitem->removeCurrentPathEffect(false);
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang shape->setCurve(c,0);
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang }
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang break;
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang }
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang }
c51b5677113ce7260c44afb3c5932eea6c875e27Heng Jiang }
67d5e49547d78aa56a8f9ba5e64a950b730eba66Till Mossakowski }
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang }
67d5e49547d78aa56a8f9ba5e64a950b730eba66Till Mossakowski }
67d5e49547d78aa56a8f9ba5e64a950b730eba66Till Mossakowski}
67d5e49547d78aa56a8f9ba5e64a950b730eba66Till Mossakowski
67d5e49547d78aa56a8f9ba5e64a950b730eba66Till Mossakowskistatic void sp_pencil_tb_tolerance_value_changed(GtkAdjustment *adj, GObject *tbl)
67d5e49547d78aa56a8f9ba5e64a950b730eba66Till Mossakowski{
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang // quit if run by the attr_changed listener
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang if (g_object_get_data( tbl, "freeze" )) {
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang return;
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang }
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang // in turn, prevent listener from responding
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang Inkscape::Preferences *prefs = Inkscape::Preferences::get();
67d5e49547d78aa56a8f9ba5e64a950b730eba66Till Mossakowski g_object_set_data( tbl, "freeze", GINT_TO_POINTER(TRUE) );
67d5e49547d78aa56a8f9ba5e64a950b730eba66Till Mossakowski prefs->setDouble("/tools/freehand/pencil/tolerance",
67d5e49547d78aa56a8f9ba5e64a950b730eba66Till Mossakowski gtk_adjustment_get_value(adj));
67d5e49547d78aa56a8f9ba5e64a950b730eba66Till Mossakowski g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
67d5e49547d78aa56a8f9ba5e64a950b730eba66Till Mossakowski SPDesktop *desktop = static_cast<SPDesktop *>(g_object_get_data(tbl, "desktop"));
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang std::vector<SPItem *> selected = desktop->getSelection()->itemList();
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang for (std::vector<SPItem *>::iterator it(selected.begin()); it != selected.end(); ++it){
67d5e49547d78aa56a8f9ba5e64a950b730eba66Till Mossakowski SPLPEItem* lpeitem = dynamic_cast<SPLPEItem*>(*it);
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang if (lpeitem && lpeitem->hasPathEffect()){
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang Inkscape::LivePathEffect::Effect* thisEffect = lpeitem->getPathEffectOfType(Inkscape::LivePathEffect::SIMPLIFY);
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang if(thisEffect){
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang Inkscape::LivePathEffect::LPESimplify *lpe = dynamic_cast<Inkscape::LivePathEffect::LPESimplify*>(thisEffect->getLPEObj()->get_lpe());
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang if (lpe) {
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang double tol = prefs->getDoubleLimited("/tools/freehand/pencil/tolerance", 10.0, 1.0, 100.0);
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang tol = tol/(100.0*(102.0-tol));
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang std::ostringstream ss;
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ss << tol;
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang lpe->getRepr()->setAttribute("threshold", ss.str());
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang }
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang }
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang }
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang }
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang}
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang/*
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiangclass PencilToleranceObserver : public Inkscape::Preferences::Observer {
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiangpublic:
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang PencilToleranceObserver(Glib::ustring const &path, GObject *x) : Observer(path), _obj(x)
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang {
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang g_object_set_data(_obj, "prefobserver", this);
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang }
f4152ab9d084afebd592edfcde4bf5a0d8556eddKlaus Luettich virtual ~PencilToleranceObserver() {
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang if (g_object_get_data(_obj, "prefobserver") == this) {
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang g_object_set_data(_obj, "prefobserver", NULL);
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang }
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang }
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang virtual void notify(Inkscape::Preferences::Entry const &val) {
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang GObject* tbl = _obj;
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang if (g_object_get_data( tbl, "freeze" )) {
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang return;
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang }
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang g_object_set_data( tbl, "freeze", GINT_TO_POINTER(TRUE) );
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang GtkAdjustment * adj = GTK_ADJUSTMENT(g_object_get_data(tbl, "tolerance"));
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang double v = val.getDouble(adj->value);
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang gtk_adjustment_set_value(adj, v);
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang }
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiangprivate:
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang GObject *_obj;
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang};
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang*/
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiangvoid sp_pencil_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder)
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang{
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang sp_add_freehand_mode_toggle(mainActions, holder, true);
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang EgeAdjustmentAction* eact = 0;
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang /* Tolerance */
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang {
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang gchar const* labels[] = {_("(many nodes, rough)"), _("(default)"), 0, 0, 0, 0, _("(few nodes, smooth)")};
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang gdouble values[] = {1, 10, 20, 30, 50, 75, 100};
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang eact = create_adjustment_action( "PencilToleranceAction",
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang _("Smoothing:"), _("Smoothing: "),
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang _("How much smoothing (simplifying) is applied to the line"),
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang "/tools/freehand/pencil/tolerance",
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang 3.0,
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang GTK_WIDGET(desktop->canvas),
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang holder, TRUE, "altx-pencil",
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang 1, 100.0, 0.5, 1.0,
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang labels, values, G_N_ELEMENTS(labels),
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang sp_pencil_tb_tolerance_value_changed,
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang NULL /*unit tracker*/,
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang 1, 2);
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang ege_adjustment_action_set_appearance( eact, TOOLBAR_SLIDER_HINT );
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang }
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang /* advanced shape options */
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang freehand_add_advanced_shape_options(mainActions, holder, true);
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang /* Reset */
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang {
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang InkAction* inky = ink_action_new( "PencilResetAction",
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang _("Defaults"),
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang _("Reset pencil parameters to defaults (use Inkscape Preferences > Tools to change defaults)"),
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang INKSCAPE_ICON("edit-clear"),
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang Inkscape::ICON_SIZE_SMALL_TOOLBAR );
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang g_signal_connect_after( G_OBJECT(inky), "activate", G_CALLBACK(sp_pencil_tb_defaults), holder );
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang gtk_action_group_add_action( mainActions, GTK_ACTION(inky) );
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang }
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang /* LPE simplify based tolerance */
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang {
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang Inkscape::Preferences *prefs = Inkscape::Preferences::get();
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang InkToggleAction* itact = ink_toggle_action_new( "PencilLpeSimplify",
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang _("LPE based interactive simplify"),
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang _("LPE based interactive simplify"),
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang INKSCAPE_ICON("interactive_simplify"),
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang Inkscape::ICON_SIZE_SMALL_TOOLBAR );
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(itact), prefs->getInt("/tools/freehand/pencil/simplify", 0) );
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang g_signal_connect_after( G_OBJECT(itact), "toggled", G_CALLBACK(freehand_simplify_lpe), holder) ;
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang gtk_action_group_add_action( mainActions, GTK_ACTION(itact) );
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang }
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang /* LPE simplify flatten */
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang {
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang InkAction* inky = ink_action_new( "PencilLpeSimplifyFlatten",
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang _("LPE simplify flatten"),
6c8dc7ab7cb52a12cba748fe0f6b8d8d17a95eb9Heng Jiang _("LPE simplify flatten"),
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang INKSCAPE_ICON("flatten_simplify"),
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang Inkscape::ICON_SIZE_SMALL_TOOLBAR );
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang g_signal_connect_after( G_OBJECT(inky), "activate", G_CALLBACK(sp_simplify_flatten), holder );
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang gtk_action_group_add_action( mainActions, GTK_ACTION(inky) );
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang }
67d5e49547d78aa56a8f9ba5e64a950b730eba66Till Mossakowski
67d5e49547d78aa56a8f9ba5e64a950b730eba66Till Mossakowski g_signal_connect( holder, "destroy", G_CALLBACK(purge_repr_listener), holder );
b91c4dbd00294ce29ab1ae84ad4e8c93ca5ad943Heng Jiang
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang}
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang/*
c10df434f8e16b46ccf703bf2e38b799f7bcb38bHeng Jiang Local Variables:
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang mode:c++
44ea7e3effe9200ccc6abd3231ae56cf5cfb0fb8Heng Jiang c-file-style:"stroustrup"
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang indent-tabs-mode:nil
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang fill-column:99
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang End:
3d59ee7815197f19948fc512cd90f9f26fd4d78fHeng Jiang*/
b3c65285705f6d184b5f8b00b1a328d96b6b19c5Heng Jiang// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
95242ab07e9aa13b37c16cac36a75d190e1766e4Heng Jiang