summaryrefslogtreecommitdiffstats
path: root/src/ui
diff options
context:
space:
mode:
authorKrzysztof Kosi??ski <tweenk.pl@gmail.com>2010-01-14 08:13:09 +0000
committerKrzysztof Kosiński <tweenk.pl@gmail.com>2010-01-14 08:13:09 +0000
commit7f7da4643d6909af5cd58b2f24846774e3af509b (patch)
tree1fec13b3616ecc90fb251bb9e643aefc43c80c43 /src/ui
parentSome additional docs (diff)
parentInitial cut of disabling floating windows on window managers with problems. (diff)
downloadinkscape-7f7da4643d6909af5cd58b2f24846774e3af509b.tar.gz
inkscape-7f7da4643d6909af5cd58b2f24846774e3af509b.zip
* Merge from trunk
* Update to new snapping API * Modify the join action slightly (bzr r8846.2.11)
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/Makefile_insert4
-rw-r--r--src/ui/dialog/Makefile_insert2
-rw-r--r--src/ui/dialog/align-and-distribute.cpp33
-rw-r--r--src/ui/dialog/dialog-manager.cpp6
-rw-r--r--src/ui/dialog/document-properties.cpp6
-rw-r--r--src/ui/dialog/filter-effects-dialog.cpp2
-rw-r--r--src/ui/dialog/inkscape-preferences.cpp22
-rw-r--r--src/ui/dialog/inkscape-preferences.h4
-rw-r--r--src/ui/dialog/print-colors-preview-dialog.cpp100
-rw-r--r--src/ui/dialog/print-colors-preview-dialog.h48
-rw-r--r--src/ui/dialog/print.cpp14
-rw-r--r--src/ui/dialog/svg-fonts-dialog.cpp2
-rw-r--r--src/ui/dialog/svg-fonts-dialog.h2
-rw-r--r--src/ui/dialog/swatches.cpp2
-rw-r--r--src/ui/icon-names.h18
-rw-r--r--src/ui/tool/multi-path-manipulator.cpp8
-rw-r--r--src/ui/tool/node.cpp15
-rw-r--r--src/ui/uxmanager.cpp156
-rw-r--r--src/ui/uxmanager.h65
-rw-r--r--src/ui/widget/page-sizer.cpp69
-rw-r--r--src/ui/widget/page-sizer.h26
-rw-r--r--src/ui/widget/spin-slider.cpp2
22 files changed, 538 insertions, 68 deletions
diff --git a/src/ui/Makefile_insert b/src/ui/Makefile_insert
index 3eb6c6b13..eb8966d11 100644
--- a/src/ui/Makefile_insert
+++ b/src/ui/Makefile_insert
@@ -9,4 +9,6 @@ ink_common_sources += \
ui/previewable.h \
ui/previewfillable.h \
ui/previewholder.cpp \
- ui/previewholder.h
+ ui/previewholder.h \
+ ui/uxmanager.cpp \
+ ui/uxmanager.h
diff --git a/src/ui/dialog/Makefile_insert b/src/ui/dialog/Makefile_insert
index 565a24ecc..76cdd3517 100644
--- a/src/ui/dialog/Makefile_insert
+++ b/src/ui/dialog/Makefile_insert
@@ -71,6 +71,8 @@ ink_common_sources += \
ui/dialog/panel-dialog.h \
ui/dialog/print.cpp \
ui/dialog/print.h \
+ ui/dialog/print-colors-preview-dialog.cpp \
+ ui/dialog/print-colors-preview-dialog.h \
ui/dialog/scriptdialog.cpp \
ui/dialog/scriptdialog.h \
ui/dialog/svg-fonts-dialog.cpp \
diff --git a/src/ui/dialog/align-and-distribute.cpp b/src/ui/dialog/align-and-distribute.cpp
index f38d674fd..8c8d64ec0 100644
--- a/src/ui/dialog/align-and-distribute.cpp
+++ b/src/ui/dialog/align-and-distribute.cpp
@@ -706,14 +706,16 @@ private :
{
if (SP_IS_TEXT (*it) || SP_IS_FLOWTEXT (*it)) {
Inkscape::Text::Layout const *layout = te_get_layout(*it);
- Geom::Point base = layout->characterAnchorPoint(layout->begin()) * sp_item_i2d_affine(*it);
- if (base[Geom::X] < b_min[Geom::X]) b_min[Geom::X] = base[Geom::X];
- if (base[Geom::Y] < b_min[Geom::Y]) b_min[Geom::Y] = base[Geom::Y];
- if (base[Geom::X] > b_max[Geom::X]) b_max[Geom::X] = base[Geom::X];
- if (base[Geom::Y] > b_max[Geom::Y]) b_max[Geom::Y] = base[Geom::Y];
-
- Baselines b (*it, base, _orientation);
- sorted.push_back(b);
+ boost::optional<Geom::Point> pt = layout->baselineAnchorPoint();
+ if (pt) {
+ Geom::Point base = *pt * sp_item_i2d_affine(*it);
+ if (base[Geom::X] < b_min[Geom::X]) b_min[Geom::X] = base[Geom::X];
+ if (base[Geom::Y] < b_min[Geom::Y]) b_min[Geom::Y] = base[Geom::Y];
+ if (base[Geom::X] > b_max[Geom::X]) b_max[Geom::X] = base[Geom::X];
+ if (base[Geom::Y] > b_max[Geom::Y]) b_max[Geom::Y] = base[Geom::Y];
+ Baselines b (*it, base, _orientation);
+ sorted.push_back(b);
+ }
}
}
@@ -747,11 +749,14 @@ private :
{
if (SP_IS_TEXT (*it) || SP_IS_FLOWTEXT (*it)) {
Inkscape::Text::Layout const *layout = te_get_layout(*it);
- Geom::Point base = layout->characterAnchorPoint(layout->begin()) * sp_item_i2d_affine(*it);
- Geom::Point t(0.0, 0.0);
- t[_orientation] = b_min[_orientation] - base[_orientation];
- sp_item_move_rel(*it, Geom::Translate(t));
- changed = true;
+ boost::optional<Geom::Point> pt = layout->baselineAnchorPoint();
+ if (pt) {
+ Geom::Point base = *pt * sp_item_i2d_affine(*it);
+ Geom::Point t(0.0, 0.0);
+ t[_orientation] = b_min[_orientation] - base[_orientation];
+ sp_item_move_rel(*it, Geom::Translate(t));
+ changed = true;
+ }
}
}
@@ -808,7 +813,7 @@ AlignAndDistribute::AlignAndDistribute()
_("Align left edges"),
0, 1);
addAlignButton(INKSCAPE_ICON_ALIGN_HORIZONTAL_CENTER,
- _("Center objects horizontally"),
+ _("Center on vertical axis"),
0, 2);
addAlignButton(INKSCAPE_ICON_ALIGN_HORIZONTAL_RIGHT,
_("Align right sides"),
diff --git a/src/ui/dialog/dialog-manager.cpp b/src/ui/dialog/dialog-manager.cpp
index d1b818d23..30cbed649 100644
--- a/src/ui/dialog/dialog-manager.cpp
+++ b/src/ui/dialog/dialog-manager.cpp
@@ -40,6 +40,7 @@
#include "ui/dialog/icon-preview.h"
#include "ui/dialog/floating-behavior.h"
#include "ui/dialog/dock-behavior.h"
+#include "ui/dialog/print-colors-preview-dialog.h"
#include "preferences.h"
#ifdef ENABLE_SVG_FONTS
@@ -88,7 +89,6 @@ DialogManager::DialogManager() {
int dialogs_type = prefs->getIntLimited("/options/dialogtype/value", DOCK, 0, 1);
if (dialogs_type == FLOATING) {
-
registerFactory("AlignAndDistribute", &create<AlignAndDistribute, FloatingBehavior>);
registerFactory("DocumentMetadata", &create<DocumentMetadata, FloatingBehavior>);
registerFactory("DocumentProperties", &create<DocumentProperties, FloatingBehavior>);
@@ -102,6 +102,7 @@ DialogManager::DialogManager() {
registerFactory("LivePathEffect", &create<LivePathEffectEditor, FloatingBehavior>);
registerFactory("Memory", &create<Memory, FloatingBehavior>);
registerFactory("Messages", &create<Messages, FloatingBehavior>);
+ registerFactory("PrintColorsPreviewDialog", &create<PrintColorsPreviewDialog, FloatingBehavior>);
registerFactory("Script", &create<ScriptDialog, FloatingBehavior>);
#ifdef ENABLE_SVG_FONTS
registerFactory("SvgFontsDialog", &create<SvgFontsDialog, FloatingBehavior>);
@@ -111,7 +112,7 @@ DialogManager::DialogManager() {
registerFactory("Trace", &create<TraceDialog, FloatingBehavior>);
registerFactory("Transformation", &create<Transformation, FloatingBehavior>);
registerFactory("UndoHistory", &create<UndoHistory, FloatingBehavior>);
- registerFactory("InputDevices", &create<InputDialog, FloatingBehavior>);
+ registerFactory("InputDevices", &create<InputDialog, FloatingBehavior>);
} else {
@@ -128,6 +129,7 @@ DialogManager::DialogManager() {
registerFactory("LivePathEffect", &create<LivePathEffectEditor, DockBehavior>);
registerFactory("Memory", &create<Memory, DockBehavior>);
registerFactory("Messages", &create<Messages, DockBehavior>);
+ registerFactory("PrintColorsPreviewDialog", &create<PrintColorsPreviewDialog, DockBehavior>);
registerFactory("Script", &create<ScriptDialog, DockBehavior>);
#ifdef ENABLE_SVG_FONTS
registerFactory("SvgFontsDialog", &create<SvgFontsDialog, DockBehavior>);
diff --git a/src/ui/dialog/document-properties.cpp b/src/ui/dialog/document-properties.cpp
index 7e31b874a..86baa85cd 100644
--- a/src/ui/dialog/document-properties.cpp
+++ b/src/ui/dialog/document-properties.cpp
@@ -222,7 +222,7 @@ DocumentProperties::build_page()
Gtk::Label* label_bor = manage (new Gtk::Label);
label_bor->set_markup (_("<b>Border</b>"));
Gtk::Label *label_for = manage (new Gtk::Label);
- label_for->set_markup (_("<b>Format</b>"));
+ label_for->set_markup (_("<b>Page Size</b>"));
_page_sizer.init();
Gtk::Widget *const widget_array[] =
@@ -353,6 +353,7 @@ DocumentProperties::populate_available_profiles(){
while ((filename = (gchar *)g_dir_read_name(directory)) != NULL) {
gchar* full = g_build_filename(it->c_str(), filename, NULL);
if ( !Inkscape::IO::file_test( full, G_FILE_TEST_IS_DIR ) ) {
+ cmsErrorAction( LCMS_ERROR_SHOW );
cmsHPROFILE hProfile = cmsOpenProfileFromFile(full, "r");
if (hProfile != NULL){
const gchar* name;
@@ -414,7 +415,8 @@ static void sanitizeName( Glib::ustring& str )
}
}
-void DocumentProperties::linkSelectedProfile()
+void
+DocumentProperties::linkSelectedProfile()
{
//store this profile in the SVG document (create <color-profile> element in the XML)
// TODO remove use of 'active' desktop
diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp
index c7f505046..1345ffe55 100644
--- a/src/ui/dialog/filter-effects-dialog.cpp
+++ b/src/ui/dialog/filter-effects-dialog.cpp
@@ -4,7 +4,7 @@
/* Authors:
* Nicholas Bishop <nicholasbishop@gmail.org>
* Rodrigo Kumpera <kumpera@gmail.com>
- * Felipe C. da S. Sanches <felipe.sanches@gmail.com>
+ * Felipe C. da S. Sanches <juca@members.fsf.org>
*
* Copyright (C) 2007 Authors
*
diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp
index b81c98b0f..11850cffc 100644
--- a/src/ui/dialog/inkscape-preferences.cpp
+++ b/src/ui/dialog/inkscape-preferences.cpp
@@ -458,6 +458,12 @@ void InkscapePreferences::initPageTools()
AddSelcueCheckbox(_page_tweak, "/tools/tweak", true);
AddGradientCheckbox(_page_tweak, "/tools/tweak", false);
+ //Spray
+ this->AddPage(_page_spray, _("Spray"), iter_tools, PREFS_PAGE_TOOLS_SPRAY);
+ this->AddNewObjectsStyle(_page_spray, "/tools/spray", _("Paint objects with:"));
+ AddSelcueCheckbox(_page_spray, "/tools/spray", true);
+ AddGradientCheckbox(_page_spray, "/tools/spray", false);
+
//Zoom
this->AddPage(_page_zoom, _("Zoom"), iter_tools, PREFS_PAGE_TOOLS_ZOOM);
AddSelcueCheckbox(_page_zoom, "/tools/zoom", true);
@@ -479,15 +485,15 @@ void InkscapePreferences::initPageTools()
this->AddNewObjectsStyle(_page_3dbox, "/tools/shapes/3dbox");
this->AddConvertGuidesCheckbox(_page_3dbox, "/tools/shapes/3dbox", true);
- //ellipse
+ //Ellipse
this->AddPage(_page_ellipse, _("Ellipse"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_ELLIPSE);
this->AddNewObjectsStyle(_page_ellipse, "/tools/shapes/arc");
- //star
+ //Star
this->AddPage(_page_star, _("Star"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_STAR);
this->AddNewObjectsStyle(_page_star, "/tools/shapes/star");
- //spiral
+ //Spiral
this->AddPage(_page_spiral, _("Spiral"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_SPIRAL);
this->AddNewObjectsStyle(_page_spiral, "/tools/shapes/spiral");
@@ -531,6 +537,11 @@ void InkscapePreferences::initPageTools()
this->AddPage(_page_text, _("Text"), iter_tools, PREFS_PAGE_TOOLS_TEXT);
this->AddSelcueCheckbox(_page_text, "/tools/text", true);
this->AddGradientCheckbox(_page_text, "/tools/text", true);
+ {
+ PrefCheckButton* cb = Gtk::manage( new PrefCheckButton);
+ cb->init ( _("Show font samples in the drop-down list"), "/tools/text/show_sample_in_list", 1);
+ _page_text.add_line( false, "", *cb, "", _("Show font samples alongside font names in the drop-down list in Text bar"));
+ }
this->AddNewObjectsStyle(_page_text, "/tools/text");
//Gradient
@@ -739,6 +750,11 @@ void InkscapePreferences::initPageFilters()
_page_filters.add_line(true, "", _show_filters_info_box, "",
_("Show icons and descriptions for the filter primitives available at the filter effects dialog."));
+ /* threaded blur */ //related comments/widgets/functions should be renamed and option should be moved elsewhere when inkscape is fully multi-threaded
+ _filter_multi_threaded.init("/options/threading/numthreads", 1.0, 8.0, 1.0, 2.0, 4.0, true, false);
+ _page_filters.add_line( false, _("Number of Threads:"), _filter_multi_threaded, _("(requires restart)"),
+ _("Configure number of processors/threads to use with rendering of gaussian blur."), false);
+
this->AddPage(_page_filters, _("Filters"), PREFS_PAGE_FILTERS);
}
diff --git a/src/ui/dialog/inkscape-preferences.h b/src/ui/dialog/inkscape-preferences.h
index 8ac63dd7c..638c84598 100644
--- a/src/ui/dialog/inkscape-preferences.h
+++ b/src/ui/dialog/inkscape-preferences.h
@@ -43,6 +43,7 @@ enum {
PREFS_PAGE_TOOLS_SELECTOR,
PREFS_PAGE_TOOLS_NODE,
PREFS_PAGE_TOOLS_TWEAK,
+ PREFS_PAGE_TOOLS_SPRAY,
PREFS_PAGE_TOOLS_ZOOM,
PREFS_PAGE_TOOLS_SHAPES,
PREFS_PAGE_TOOLS_SHAPES_RECT,
@@ -118,7 +119,7 @@ protected:
_page_clones, _page_mask, _page_transforms, _page_filters, _page_select,
_page_importexport, _page_cms, _page_grids, _page_svgoutput, _page_misc,
_page_ui, _page_save, _page_bitmaps, _page_spellcheck;
- DialogPage _page_selector, _page_node, _page_tweak, _page_zoom, _page_shapes, _page_pencil, _page_pen,
+ DialogPage _page_selector, _page_node, _page_tweak, _page_spray, _page_zoom, _page_shapes, _page_pencil, _page_pen,
_page_calligraphy, _page_text, _page_gradient, _page_connector, _page_dropper, _page_lpetool;
DialogPage _page_rectangle, _page_3dbox, _page_ellipse, _page_star, _page_spiral, _page_paintbucket, _page_eraser;
@@ -174,6 +175,7 @@ protected:
PrefRadioButton _blur_quality_best, _blur_quality_better, _blur_quality_normal, _blur_quality_worse, _blur_quality_worst;
PrefRadioButton _filter_quality_best, _filter_quality_better, _filter_quality_normal, _filter_quality_worse, _filter_quality_worst;
PrefCheckButton _show_filters_info_box;
+ PrefSpinButton _filter_multi_threaded;
PrefCheckButton _trans_scale_stroke, _trans_scale_corner, _trans_gradient,_trans_pattern;
PrefRadioButton _trans_optimized, _trans_preserved;
diff --git a/src/ui/dialog/print-colors-preview-dialog.cpp b/src/ui/dialog/print-colors-preview-dialog.cpp
new file mode 100644
index 000000000..f4d83c271
--- /dev/null
+++ b/src/ui/dialog/print-colors-preview-dialog.cpp
@@ -0,0 +1,100 @@
+/** @file
+ * @brief Print Colors Preview dialog - implementation
+ */
+/* Authors:
+ * Felipe C. da S. Sanches <juca@members.fsf.org>
+ *
+ * Copyright (C) 2009 Authors
+ * Released under GNU GPLv2 (or later). Read the file 'COPYING' for more information.
+ */
+
+#include "desktop.h"
+#include "print-colors-preview-dialog.h"
+#include "preferences.h"
+#include <glibmm/i18n.h>
+
+namespace Inkscape {
+namespace UI {
+namespace Dialog {
+
+//Yes, I know we shouldn't hardcode CMYK. This class needs to be refactored
+// in order to accomodate spot colors and color components defined using
+// ICC colors. --Juca
+
+void PrintColorsPreviewDialog::toggle_cyan(){
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setBool("/options/printcolorspreview/cyan", cyan->get_active());
+
+ SPDesktop *desktop = getDesktop();
+ desktop->setDisplayModePrintColorsPreview();
+}
+
+void PrintColorsPreviewDialog::toggle_magenta(){
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setBool("/options/printcolorspreview/magenta", magenta->get_active());
+
+ SPDesktop *desktop = getDesktop();
+ desktop->setDisplayModePrintColorsPreview();
+}
+
+void PrintColorsPreviewDialog::toggle_yellow(){
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setBool("/options/printcolorspreview/yellow", yellow->get_active());
+
+ SPDesktop *desktop = getDesktop();
+ desktop->setDisplayModePrintColorsPreview();
+}
+
+void PrintColorsPreviewDialog::toggle_black(){
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setBool("/options/printcolorspreview/black", black->get_active());
+
+ SPDesktop *desktop = getDesktop();
+ desktop->setDisplayModePrintColorsPreview();
+}
+
+PrintColorsPreviewDialog::PrintColorsPreviewDialog()
+ : UI::Widget::Panel("", "/dialogs/printcolorspreview", SP_VERB_DIALOG_PRINT_COLORS_PREVIEW)
+{
+ Gtk::VBox* vbox = Gtk::manage(new Gtk::VBox());
+
+ cyan = new Gtk::ToggleButton(_("Cyan"));
+ vbox->pack_start( *cyan, false, false );
+// tips.set_tip((*cyan), _("Render cyan separation"));
+ cyan->signal_clicked().connect( sigc::mem_fun(*this, &PrintColorsPreviewDialog::toggle_cyan) );
+
+ magenta = new Gtk::ToggleButton(_("Magenta"));
+ vbox->pack_start( *magenta, false, false );
+// tips.set_tip((*magenta), _("Render magenta separation"));
+ magenta->signal_clicked().connect( sigc::mem_fun(*this, &PrintColorsPreviewDialog::toggle_magenta) );
+
+ yellow = new Gtk::ToggleButton(_("Yellow"));
+ vbox->pack_start( *yellow, false, false );
+// tips.set_tip((*yellow), _("Render yellow separation"));
+ yellow->signal_clicked().connect( sigc::mem_fun(*this, &PrintColorsPreviewDialog::toggle_yellow) );
+
+ black = new Gtk::ToggleButton(_("Black"));
+ vbox->pack_start( *black, false, false );
+// tips.set_tip((*black), _("Render black separation"));
+ black->signal_clicked().connect( sigc::mem_fun(*this, &PrintColorsPreviewDialog::toggle_black) );
+
+ gint val;
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ val = prefs->getBool("/options/printcolorspreview/cyan");
+ cyan->set_active( val != 0 );
+ val = prefs->getBool("/options/printcolorspreview/magenta");
+ magenta->set_active( val != 0 );
+ val = prefs->getBool("/options/printcolorspreview/yellow");
+ yellow->set_active( val != 0 );
+ val = prefs->getBool("/options/printcolorspreview/black");
+ black->set_active( val != 0 );
+
+ _getContents()->add(*vbox);
+ _getContents()->show_all();
+}
+
+PrintColorsPreviewDialog::~PrintColorsPreviewDialog(){}
+
+} // namespace Dialog
+} // namespace UI
+} // namespace Inkscape
diff --git a/src/ui/dialog/print-colors-preview-dialog.h b/src/ui/dialog/print-colors-preview-dialog.h
new file mode 100644
index 000000000..246908556
--- /dev/null
+++ b/src/ui/dialog/print-colors-preview-dialog.h
@@ -0,0 +1,48 @@
+/** @file
+ * @brief Print Colors Preview dialog
+ */
+/* Authors:
+ * Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
+ *
+ * Copyright (C) 2009 Authors
+ * Released under GNU GPLv2 (or later). Read the file 'COPYING' for more information.
+ */
+
+#ifndef INKSCAPE_UI_DIALOG_PRINT_COLORS_PREVIEW_H
+#define INKSCAPE_UI_DIALOG_PRINT_COLORS_PREVIEW_H
+
+#include "ui/widget/panel.h"
+#include "verbs.h"
+
+#include <gtkmm.h>
+#include <gtkmm/box.h>
+
+namespace Inkscape {
+namespace UI {
+namespace Dialog {
+
+class PrintColorsPreviewDialog : public UI::Widget::Panel {
+public:
+ PrintColorsPreviewDialog();
+ ~PrintColorsPreviewDialog();
+
+ static PrintColorsPreviewDialog &getInstance()
+ { return *new PrintColorsPreviewDialog(); }
+
+private:
+ void toggle_cyan();
+ void toggle_magenta();
+ void toggle_yellow();
+ void toggle_black();
+
+ Gtk::ToggleButton* cyan;
+ Gtk::ToggleButton* magenta;
+ Gtk::ToggleButton* yellow;
+ Gtk::ToggleButton* black;
+};
+
+} // namespace Dialog
+} // namespace UI
+} // namespace Inkscape
+
+#endif //#ifndef INKSCAPE_UI_PRINT_COLORS_PREVIEW_H
diff --git a/src/ui/dialog/print.cpp b/src/ui/dialog/print.cpp
index f9db265d6..60cab06a2 100644
--- a/src/ui/dialog/print.cpp
+++ b/src/ui/dialog/print.cpp
@@ -31,11 +31,15 @@
-static void
-draw_page (GtkPrintOperation *operation,
- GtkPrintContext *context,
- gint /*page_nr*/,
- gpointer user_data)
+static void draw_page(
+#ifdef WIN32
+ GtkPrintOperation *operation,
+#else
+ GtkPrintOperation *,
+#endif
+ GtkPrintContext *context,
+ gint /*page_nr*/,
+ gpointer user_data)
{
struct workaround_gtkmm *junk = (struct workaround_gtkmm*)user_data;
//printf("%s %d\n",__FUNCTION__, page_nr);
diff --git a/src/ui/dialog/svg-fonts-dialog.cpp b/src/ui/dialog/svg-fonts-dialog.cpp
index 5f86196b1..cb22e029b 100644
--- a/src/ui/dialog/svg-fonts-dialog.cpp
+++ b/src/ui/dialog/svg-fonts-dialog.cpp
@@ -2,7 +2,7 @@
* @brief SVG Fonts dialog - implementation
*/
/* Authors:
- * Felipe C. da S. Sanches <felipe.sanches@gmail.com>
+ * Felipe C. da S. Sanches <juca@members.fsf.org>
*
* Copyright (C) 2008 Authors
* Released under GNU GPLv2 (or later). Read the file 'COPYING' for more information.
diff --git a/src/ui/dialog/svg-fonts-dialog.h b/src/ui/dialog/svg-fonts-dialog.h
index e6042ed42..e819187a1 100644
--- a/src/ui/dialog/svg-fonts-dialog.h
+++ b/src/ui/dialog/svg-fonts-dialog.h
@@ -2,7 +2,7 @@
* @brief SVG Fonts dialog
*/
/* Authors:
- * Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ * Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
*
* Copyright (C) 2008 Authors
* Released under GNU GPLv2 (or later). Read the file 'COPYING' for more information.
diff --git a/src/ui/dialog/swatches.cpp b/src/ui/dialog/swatches.cpp
index 1f708e3de..450d4202d 100644
--- a/src/ui/dialog/swatches.cpp
+++ b/src/ui/dialog/swatches.cpp
@@ -47,7 +47,7 @@
#include "display/nr-plain-stuff.h"
#include "sp-gradient-reference.h"
-//#define USE_DOCUMENT_PALETTE 1
+#define USE_DOCUMENT_PALETTE 1
namespace Inkscape {
namespace UI {
diff --git a/src/ui/icon-names.h b/src/ui/icon-names.h
index f9a6f2a7d..76e76ea34 100644
--- a/src/ui/icon-names.h
+++ b/src/ui/icon-names.h
@@ -56,10 +56,18 @@
"color-picker"
#define INKSCAPE_ICON_COLOR_REMOVE \
"color-remove"
+#define INKSCAPE_ICON_CONNECTOR_EDIT \
+ "connector-edit"
#define INKSCAPE_ICON_CONNECTOR_AVOID \
"connector-avoid"
#define INKSCAPE_ICON_CONNECTOR_IGNORE \
"connector-ignore"
+#define INKSCAPE_ICON_CONNECTOR_ORTHOGONAL \
+ "connector-orthogonal"
+#define INKSCAPE_ICON_CONNECTOR_NEW_CONNPOINT \
+ "connector-new-connpoint"
+#define INKSCAPE_ICON_CONNECTOR_REMOVE_CONNPOINT \
+ "connector-remove-connpoint"
#define INKSCAPE_ICON_DIALOG_ALIGN_AND_DISTRIBUTE \
"dialog-align-and-distribute"
#define INKSCAPE_ICON_DIALOG_FILL_AND_STROKE \
@@ -456,6 +464,14 @@
"snap-nodes-smooth"
#define INKSCAPE_ICON_SNAP_PAGE \
"snap-page"
+#define INKSCAPE_ICON_SPRAY_COPY_MODE \
+ "spray-copy-mode"
+#define INKSCAPE_ICON_SPRAY_CLONE_MODE \
+ "spray-clone-mode"
+#define INKSCAPE_ICON_SPRAY_UNION_MODE \
+ "spray-union-mode"
+#define INKSCAPE_ICON_DIALOG_SPRAY_OPTIONS \
+ "dialog-spray-options"
#define INKSCAPE_ICON_STROKE_CAP_BUTT \
"stroke-cap-butt"
#define INKSCAPE_ICON_STROKE_CAP_ROUND \
@@ -488,6 +504,8 @@
"tool-pointer"
#define INKSCAPE_ICON_TOOL_TWEAK \
"tool-tweak"
+#define INKSCAPE_ICON_TOOL_SPRAY \
+ "tool-spray"
#define INKSCAPE_ICON_TRANSFORM_AFFECT_GRADIENT \
"transform-affect-gradient"
#define INKSCAPE_ICON_TRANSFORM_AFFECT_PATTERN \
diff --git a/src/ui/tool/multi-path-manipulator.cpp b/src/ui/tool/multi-path-manipulator.cpp
index 33d96c706..2cc9bc97b 100644
--- a/src/ui/tool/multi-path-manipulator.cpp
+++ b/src/ui/tool/multi-path-manipulator.cpp
@@ -280,8 +280,12 @@ void MultiPathManipulator::joinNodes()
}
_selection.insert(i->first.ptr());
}
- // Second part replaces contiguous selections of nodes with single nodes
- invokeForAll(&PathManipulator::weldNodes, preserve_pos);
+
+ if (joins.empty()) {
+ // Second part replaces contiguous selections of nodes with single nodes
+ invokeForAll(&PathManipulator::weldNodes, preserve_pos);
+ }
+
_doneWithCleanup(_("Join nodes"));
}
diff --git a/src/ui/tool/node.cpp b/src/ui/tool/node.cpp
index 889f4a793..303c0fb75 100644
--- a/src/ui/tool/node.cpp
+++ b/src/ui/tool/node.cpp
@@ -849,14 +849,14 @@ void Node::_draggedHandler(Geom::Point &new_pos, GdkEventMotion *event)
SnapManager &sm = _desktop->namedview->snap_manager;
Inkscape::SnapPreferences::PointType t = Inkscape::SnapPreferences::SNAPPOINT_NODE;
bool snap = sm.someSnapperMightSnap();
- std::vector< std::pair<Geom::Point, int> > unselected;
+ std::vector<Inkscape::SnapCandidatePoint> unselected;
if (snap) {
/* setup
* TODO We are doing this every time a snap happens. It should once be done only once
* per drag - maybe in the grabbed handler?
* TODO Unselected nodes vector must be valid during the snap run, because it is not
* copied. Fix this in snap.h and snap.cpp, then the above.
- * TODO Snapping to unselected segments of selected paths doesn't work. */
+ * TODO Snapping to unselected segments of selected paths doesn't work yet. */
// Build the list of unselected nodes.
typedef ControlPointSelection::Set Set;
@@ -864,7 +864,8 @@ void Node::_draggedHandler(Geom::Point &new_pos, GdkEventMotion *event)
for (Set::iterator i = nodes.begin(); i != nodes.end(); ++i) {
if (!(*i)->selected()) {
Node *n = static_cast<Node*>(*i);
- unselected.push_back(std::make_pair((*i)->position(), (int) n->_snapTargetType()));
+ Inkscape::SnapCandidatePoint p(n->position(), n->_snapSourceType(), n->_snapTargetType());
+ unselected.push_back(p);
}
}
sm.setupIgnoreSelection(_desktop, true, &unselected);
@@ -881,8 +882,8 @@ void Node::_draggedHandler(Geom::Point &new_pos, GdkEventMotion *event)
// TODO: combine these two branches by modifying snap.h / snap.cpp
if (snap) {
Inkscape::SnappedPoint fp, bp;
- fp = sm.constrainedSnap(t, position(), _snapSourceType(), line_front);
- bp = sm.constrainedSnap(t, position(), _snapSourceType(), line_back);
+ fp = sm.constrainedSnap(t, Inkscape::SnapCandidatePoint(position(), _snapSourceType()), line_front);
+ bp = sm.constrainedSnap(t, Inkscape::SnapCandidatePoint(position(), _snapSourceType()), line_back);
if (fp.isOtherSnapBetter(bp, false)) {
bp.getPoint(new_pos);
@@ -905,8 +906,8 @@ void Node::_draggedHandler(Geom::Point &new_pos, GdkEventMotion *event)
Inkscape::SnappedPoint fp, bp;
Inkscape::Snapper::ConstraintLine line_x(origin, Geom::Point(1, 0));
Inkscape::Snapper::ConstraintLine line_y(origin, Geom::Point(0, 1));
- fp = sm.constrainedSnap(t, position(), _snapSourceType(), line_x);
- bp = sm.constrainedSnap(t, position(), _snapSourceType(), line_y);
+ fp = sm.constrainedSnap(t, Inkscape::SnapCandidatePoint(position(), _snapSourceType()), line_x);
+ bp = sm.constrainedSnap(t, Inkscape::SnapCandidatePoint(position(), _snapSourceType()), line_y);
if (fp.isOtherSnapBetter(bp, false)) {
fp = bp;
diff --git a/src/ui/uxmanager.cpp b/src/ui/uxmanager.cpp
new file mode 100644
index 000000000..ddc28a858
--- /dev/null
+++ b/src/ui/uxmanager.cpp
@@ -0,0 +1,156 @@
+/** \file
+ * Desktop widget implementation
+ */
+/* Authors:
+ * Jon A. Cruz <jon@joncruz.org>
+ *
+ * Copyright (C) 2010 Jon A. Cruz
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <algorithm>
+
+#include "uxmanager.h"
+#include "util/ege-tags.h"
+#include "widgets/toolbox.h"
+#include "widgets/desktop-widget.h"
+
+#ifdef GDK_WINDOWING_X11
+#include <gdk/gdkx.h>
+#endif // GDK_WINDOWING_X11
+
+using std::map;
+using std::vector;
+
+
+gchar const* KDE_WINDOW_MANAGER_NAME = "KWin";
+gchar const* UNKOWN_WINDOW_MANAGER_NAME = "unknown";
+
+
+static vector<SPDesktop*> desktops;
+static vector<SPDesktopWidget*> dtws;
+static map<SPDesktop*, vector<GtkWidget*> > trackedBoxes;
+
+
+
+namespace Inkscape {
+namespace UI {
+
+UXManager* instance = 0;
+
+UXManager* UXManager::getInstance()
+{
+ if (!instance) {
+ instance = new UXManager();
+ }
+ return instance;
+}
+
+
+UXManager::UXManager() :
+ floatwindowIssues(false)
+{
+ ege::TagSet tags;
+ tags.setLang("en");
+
+ tags.addTag(ege::Tag("General"));
+ tags.addTag(ege::Tag("Icons"));
+
+#ifdef GDK_WINDOWING_X11
+ char const* wmName = gdk_x11_screen_get_window_manager_name( gdk_screen_get_default() );
+ //g_message("Window manager is [%s]", wmName);
+
+ //if (g_ascii_strcasecmp( wmName, UNKOWN_WINDOW_MANAGER_NAME ) == 0) {
+ if (g_ascii_strcasecmp( wmName, KDE_WINDOW_MANAGER_NAME ) == 0) {
+ floatwindowIssues = true;
+ }
+#elif GDK_WINDOWING_WIN32
+ floatwindowIssues = true;
+#endif // GDK_WINDOWING_WIN32
+}
+
+UXManager::~UXManager()
+{
+}
+
+
+bool UXManager::isFloatWindowProblem() const
+{
+ return floatwindowIssues;
+}
+
+void UXManager::setTask(SPDesktop* dt, gint val)
+{
+ for (vector<SPDesktopWidget*>::iterator it = dtws.begin(); it != dtws.end(); ++it) {
+ SPDesktopWidget* dtw = *it;
+ if (dtw->desktop == dt) {
+ if (val == 0) {
+ dtw->setToolboxPosition("ToolToolbar", GTK_POS_LEFT);
+ dtw->setToolboxPosition("CommandsToolbar", GTK_POS_TOP);
+ dtw->setToolboxPosition("SnapToolbar", GTK_POS_TOP);
+ // for now skip "AuxToolbar";
+ } else {
+ dtw->setToolboxPosition("ToolToolbar", GTK_POS_TOP);
+ dtw->setToolboxPosition("CommandsToolbar", GTK_POS_LEFT);
+ dtw->setToolboxPosition("SnapToolbar", GTK_POS_RIGHT);
+ // for now skip "AuxToolbar";
+ }
+ break;
+ }
+ }
+}
+
+
+void UXManager::addTrack( SPDesktopWidget* dtw )
+{
+ if (std::find(dtws.begin(), dtws.end(), dtw) == dtws.end()) {
+ dtws.push_back(dtw);
+ }
+}
+
+void UXManager::delTrack( SPDesktopWidget* dtw )
+{
+ vector<SPDesktopWidget*>::iterator iter = std::find(dtws.begin(), dtws.end(), dtw);
+ if (iter != dtws.end()) {
+ dtws.erase(iter);
+ }
+}
+
+void UXManager::connectToDesktop( vector<GtkWidget *> const & toolboxes, SPDesktop *desktop )
+{
+//static map<SPDesktop*, vector<GtkWidget*> > trackedBoxes;
+
+ for (vector<GtkWidget*>::const_iterator it = toolboxes.begin(); it != toolboxes.end(); ++it ) {
+ GtkWidget* toolbox = *it;
+
+ ToolboxFactory::setToolboxDesktop( toolbox, desktop );
+ vector<GtkWidget*>& tracked = trackedBoxes[desktop];
+ if (find(tracked.begin(), tracked.end(), toolbox) == tracked.end()) {
+ tracked.push_back(toolbox);
+ }
+ }
+
+ if (std::find(desktops.begin(), desktops.end(), desktop) == desktops.end()) {
+ desktops.push_back(desktop);
+ }
+}
+
+
+} // namespace UI
+} // 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 :
diff --git a/src/ui/uxmanager.h b/src/ui/uxmanager.h
new file mode 100644
index 000000000..aecda2b5e
--- /dev/null
+++ b/src/ui/uxmanager.h
@@ -0,0 +1,65 @@
+#ifndef SEEN_UI_UXMANAGER_H
+#define SEEN_UI_UXMANAGER_H
+/*
+ * A simple interface for previewing representations.
+ *
+ * Authors:
+ * Jon A. Cruz <jon@joncruz.org>
+ *
+ * Copyright (C) 2010 Jon A. Cruz
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include <glib.h>
+#include <vector>
+
+extern "C"
+{
+ typedef struct _GObject GObject;
+ typedef struct _GtkWidget GtkWidget;
+}
+
+class SPDesktop;
+
+struct SPDesktopWidget;
+
+
+namespace Inkscape {
+namespace UI {
+
+class UXManager
+{
+public:
+ static UXManager* getInstance();
+ virtual ~UXManager();
+
+ void addTrack( SPDesktopWidget* dtw );
+ void delTrack( SPDesktopWidget* dtw );
+
+ void connectToDesktop( std::vector<GtkWidget *> const & toolboxes, SPDesktop *desktop );
+
+ void setTask(SPDesktop* dt, gint val);
+
+ bool isFloatWindowProblem() const;
+
+private:
+ UXManager();
+
+ bool floatwindowIssues;
+};
+
+} // namespace UI
+} // namespace Inkscape
+
+#endif // SEEN_UI_UXMANAGER_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 :
diff --git a/src/ui/widget/page-sizer.cpp b/src/ui/widget/page-sizer.cpp
index 68f26792a..e604a24ec 100644
--- a/src/ui/widget/page-sizer.cpp
+++ b/src/ui/widget/page-sizer.cpp
@@ -229,6 +229,11 @@ PageSizer::PageSizer(Registry & _wr)
_dimensionUnits( _("U_nits:"), "units", _wr ),
_dimensionWidth( _("_Width:"), _("Width of paper"), "width", _dimensionUnits, _wr ),
_dimensionHeight( _("_Height:"), _("Height of paper"), "height", _dimensionUnits, _wr ),
+ _marginTop( _("T_op margin:"), _("Top margin"), "fit-margin-top", _wr ),
+ _marginLeft( _("L_eft:"), _("Left margin"), "fit-margin-left", _wr),
+ _marginRight( _("Ri_ght:"), _("Right margin"), "fit-margin-right", _wr),
+ _marginBottom( _("Botto_m:"), _("Bottom margin"), "fit-margin-bottom", _wr),
+
_widgetRegistry(&_wr)
{
//# Set up the Paper Size combo box
@@ -273,16 +278,11 @@ PageSizer::PageSizer(Registry & _wr)
// _paperSizeListSelection->select(iter);
- pack_start (_paperSizeListBox, true, true, 0);
- _paperSizeListLabel.set_label(_("P_age size:"));
- _paperSizeListLabel.set_use_underline();
- _paperSizeListBox.pack_start (_paperSizeListLabel, false, false, 0);
- _paperSizeListLabel.set_mnemonic_widget (_paperSizeList);
- _paperSizeListBox.pack_start (_paperSizeListScroller, true, true, 0);
+ pack_start (_paperSizeListScroller, true, true, 0);
//## Set up orientation radio buttons
pack_start (_orientationBox, false, false, 0);
- _orientationLabel.set_label(_("Page orientation:"));
+ _orientationLabel.set_label(_("Orientation:"));
_orientationBox.pack_start(_orientationLabel, false, false, 0);
_landscapeButton.set_use_underline();
_landscapeButton.set_label(_("_Landscape"));
@@ -299,19 +299,48 @@ PageSizer::PageSizer(Registry & _wr)
//## Set up custom size frame
_customFrame.set_label(_("Custom size"));
pack_start (_customFrame, false, false, 0);
- _customTable.resize(2, 2);
- _customTable.set_border_width (4);
- _customTable.set_row_spacings (4);
- _customTable.set_col_spacings (4);
- _customTable.attach(_dimensionWidth, 0,1,0,1);
- _customTable.attach(_dimensionUnits, 1,2,0,1);
- _customTable.attach(_dimensionHeight, 0,1,1,2);
- _customTable.attach(_fitPageButton, 1,2,1,2);
- _customFrame.add(_customTable);
-
+ _customFrame.add(_customDimTable);
+
+ _customDimTable.resize(3, 2);
+ _customDimTable.set_border_width(4);
+ _customDimTable.set_row_spacings(4);
+ _customDimTable.set_col_spacings(4);
+ _customDimTable.attach(_dimensionWidth, 0,1, 0,1);
+ _customDimTable.attach(_dimensionUnits, 1,2, 0,1);
+ _customDimTable.attach(_dimensionHeight, 0,1, 1,2);
+ _customDimTable.attach(_fitPageMarginExpander, 0,2, 2,3);
+
+ //## Set up fit page expander
+ _fitPageMarginExpander.set_label(_("Resi_ze page to content..."));
+ _fitPageMarginExpander.set_use_underline();
+ _fitPageMarginExpander.add(_marginTable);
+
+ //## Set up margin settings
+ _marginTable.resize(4, 2);
+ _marginTable.set_border_width(4);
+ _marginTable.set_row_spacings(4);
+ _marginTable.set_col_spacings(4);
+ _marginTable.attach(_fitPageButtonAlign, 0,2, 0,1);
+ _marginTable.attach(_marginTopAlign, 0,2, 1,2);
+ _marginTable.attach(_marginLeftAlign, 0,1, 2,3);
+ _marginTable.attach(_marginRightAlign, 1,2, 2,3);
+ _marginTable.attach(_marginBottomAlign, 0,2, 3,4);
+
+ _marginTopAlign.set(0.5, 0.5, 0.0, 1.0);
+ _marginTopAlign.add(_marginTop);
+ _marginLeftAlign.set(0.0, 0.5, 0.0, 1.0);
+ _marginLeftAlign.add(_marginLeft);
+ _marginRightAlign.set(1.0, 0.5, 0.0, 1.0);
+ _marginRightAlign.add(_marginRight);
+ _marginBottomAlign.set(0.5, 0.5, 0.0, 1.0);
+ _marginBottomAlign.add(_marginBottom);
+
+ _fitPageButtonAlign.set(0.5, 0.5, 0.0, 1.0);
+ _fitPageButtonAlign.add(_fitPageButton);
_fitPageButton.set_use_underline();
- _fitPageButton.set_label(_("_Fit page to selection"));
+ _fitPageButton.set_label(_("_Resize page to drawing or selection"));
_tips.set_tip(_fitPageButton, _("Resize the page to fit the current selection, or the entire drawing if there is no selection"));
+
}
@@ -343,7 +372,7 @@ PageSizer::init ()
/**
* Set document dimensions (if not called by Doc prop's update()) and
* set the PageSizer's widgets and text entries accordingly. If
- * 'chageList' is true, then adjust the paperSizeList to show the closest
+ * 'changeList' is true, then adjust the paperSizeList to show the closest
* standard page size.
*
* \param w, h given in px
@@ -454,7 +483,7 @@ PageSizer::find_paper_size (double w, double h) const
/**
- * Tell the desktop to change the page size
+ * Tell the desktop to fit the page size to the selection or drawing.
*/
void
PageSizer::fire_fit_canvas_to_selection_or_drawing()
diff --git a/src/ui/widget/page-sizer.h b/src/ui/widget/page-sizer.h
index f970afe44..718eb95b5 100644
--- a/src/ui/widget/page-sizer.h
+++ b/src/ui/widget/page-sizer.h
@@ -183,24 +183,38 @@ protected:
Gtk::HBox _orientationBox;
Gtk::Label _orientationLabel;
Gtk::RadioButton _portraitButton;
- Gtk::RadioButton _landscapeButton;
+ Gtk::RadioButton _landscapeButton;
//callbacks
void on_portrait();
void on_landscape();
sigc::connection _portrait_connection;
- sigc::connection _landscape_connection;
+ sigc::connection _landscape_connection;
//### Custom size frame
Gtk::Frame _customFrame;
- Gtk::Table _customTable;
+ Gtk::Table _customDimTable;
RegisteredUnitMenu _dimensionUnits;
RegisteredScalarUnit _dimensionWidth;
- RegisteredScalarUnit _dimensionHeight;
- Gtk::Button _fitPageButton;
+ RegisteredScalarUnit _dimensionHeight;
+
+ //### Fit Page options
+ Gtk::Expander _fitPageMarginExpander;
+ Gtk::Table _marginTable;
+ Gtk::Alignment _marginTopAlign;
+ Gtk::Alignment _marginLeftAlign;
+ Gtk::Alignment _marginRightAlign;
+ Gtk::Alignment _marginBottomAlign;
+ RegisteredScalar _marginTop;
+ RegisteredScalar _marginLeft;
+ RegisteredScalar _marginRight;
+ RegisteredScalar _marginBottom;
+ Gtk::Alignment _fitPageButtonAlign;
+ Gtk::Button _fitPageButton;
+
//callback
void on_value_changed();
sigc::connection _changedw_connection;
- sigc::connection _changedh_connection;
+ sigc::connection _changedh_connection;
Registry *_widgetRegistry;
diff --git a/src/ui/widget/spin-slider.cpp b/src/ui/widget/spin-slider.cpp
index b610c1ee6..e3e73a51f 100644
--- a/src/ui/widget/spin-slider.cpp
+++ b/src/ui/widget/spin-slider.cpp
@@ -3,7 +3,7 @@
*
* Author:
* Nicholas Bishop <nicholasbishop@gmail.com>
- * Felipe C. da S. Sanches <felipe.sanches@gmail.com>
+ * Felipe C. da S. Sanches <juca@members.fsf.org>
*
* Copyright (C) 2007 Author
*