summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/device-manager.cpp9
-rw-r--r--src/display/drawing-context.h2
-rw-r--r--src/display/drawing-item.cpp29
-rw-r--r--src/display/nr-filter-primitive.cpp3
-rw-r--r--src/extension/internal/pdf-input-cairo.cpp8
-rw-r--r--src/extension/internal/pdfinput/pdf-input.cpp8
-rw-r--r--src/extension/param/enum.cpp4
-rw-r--r--src/extension/param/radiobutton.cpp4
-rw-r--r--src/gradient-chemistry.cpp18
-rw-r--r--src/gradient-chemistry.h2
-rw-r--r--src/gradient-drag.cpp8
-rw-r--r--src/inkscape.cpp4
-rw-r--r--src/inkview.cpp63
-rw-r--r--src/io/sys.cpp34
-rw-r--r--src/io/sys.h2
-rw-r--r--src/main.cpp87
-rw-r--r--src/object-edit.cpp2
-rw-r--r--src/preferences.cpp11
-rw-r--r--src/preferences.h7
-rw-r--r--src/registrytool.cpp3
-rw-r--r--src/spray-context.cpp6
-rw-r--r--src/tools-switch.cpp2
-rw-r--r--src/ui/dialog/align-and-distribute.cpp19
-rw-r--r--src/ui/dialog/calligraphic-profile-rename.cpp39
-rw-r--r--src/ui/dialog/calligraphic-profile-rename.h8
-rw-r--r--src/ui/dialog/document-properties.cpp12
-rw-r--r--src/ui/dialog/filedialogimpl-gtkmm.cpp12
-rw-r--r--src/ui/dialog/filter-effects-dialog.cpp117
-rw-r--r--src/ui/dialog/glyphs.cpp8
-rw-r--r--src/ui/dialog/inkscape-preferences.cpp12
-rw-r--r--src/ui/dialog/input.cpp21
-rw-r--r--src/ui/dialog/ocaldialogs.cpp4
-rw-r--r--src/ui/dialog/spellcheck.cpp14
-rw-r--r--src/ui/dialog/svg-fonts-dialog.cpp11
-rw-r--r--src/ui/dialog/swatches.cpp34
-rw-r--r--src/ui/dialog/symbols.cpp31
-rw-r--r--src/ui/dialog/text-edit.cpp27
-rw-r--r--src/ui/widget/frame.cpp2
-rw-r--r--src/ui/widget/gimpspinscale.c28
-rw-r--r--src/ui/widget/preferences-widget.cpp13
-rw-r--r--src/ui/widget/unit-menu.cpp14
-rw-r--r--src/widgets/CMakeLists.txt2
-rw-r--r--src/widgets/Makefile_insert2
-rw-r--r--src/widgets/calligraphy-toolbar.cpp85
-rw-r--r--src/widgets/eek-preview.cpp7
-rw-r--r--src/widgets/font-selector.cpp17
-rw-r--r--src/widgets/gradient-selector.cpp75
-rw-r--r--src/widgets/gradient-selector.h2
-rw-r--r--src/widgets/icon.cpp9
-rw-r--r--src/widgets/ruler.cpp7
-rw-r--r--src/widgets/sp-color-gtkselector.cpp153
-rw-r--r--src/widgets/sp-color-gtkselector.h55
-rw-r--r--src/widgets/sp-color-icc-selector.cpp90
-rw-r--r--src/widgets/sp-color-notebook.cpp40
-rw-r--r--src/widgets/sp-color-scales.cpp40
-rw-r--r--src/widgets/sp-color-slider.cpp13
-rw-r--r--src/widgets/sp-color-wheel-selector.cpp55
-rw-r--r--src/widgets/toolbox.cpp1
58 files changed, 758 insertions, 637 deletions
diff --git a/src/device-manager.cpp b/src/device-manager.cpp
index 5c7048613..29efa2627 100644
--- a/src/device-manager.cpp
+++ b/src/device-manager.cpp
@@ -173,14 +173,7 @@ public:
virtual bool hasCursor() const {return gdk_device_get_has_cursor (device);}
virtual gint getNumKeys() const {
-// Backward-compatibility: The GSEAL-compliant
-// gdk_device_get_n_keys function was only introduced
-// with GTK 2.24
-#if GTK_CHECK_VERSION(2, 24, 0)
- return gdk_device_get_n_keys (device);
-#else
- return device->num_keys;
-#endif // GTK_CHECK_VERSION
+ return gdk_device_get_n_keys (device);
}
virtual Glib::ustring getLink() const {return link;}
virtual void setLink( Glib::ustring const& link ) {this->link = link;}
diff --git a/src/display/drawing-context.h b/src/display/drawing-context.h
index fb6662202..b8c4667c2 100644
--- a/src/display/drawing-context.h
+++ b/src/display/drawing-context.h
@@ -101,6 +101,8 @@ public:
cairo_t *raw() { return _ct; }
cairo_surface_t *rawTarget() { return cairo_get_group_target(_ct); }
+ DrawingSurface *surface() { return _surface; } // Needed to find scale in drawing-item.cpp
+
private:
DrawingContext(cairo_t *ct, DrawingSurface *surface, bool destroy);
diff --git a/src/display/drawing-item.cpp b/src/display/drawing-item.cpp
index 0fb1f0018..b443ad22a 100644
--- a/src/display/drawing-item.cpp
+++ b/src/display/drawing-item.cpp
@@ -20,6 +20,7 @@
#include "nr-filter.h"
#include "preferences.h"
#include "style.h"
+#include "2geom/rect.h"
namespace Inkscape {
@@ -540,8 +541,17 @@ DrawingItem::render(DrawingContext &ct, Geom::IntRect const &area, unsigned flag
iarea.intersectWith(_drawbox);
}
- DrawingSurface intermediate(*iarea);
+ // Must use same scale factor between "logical space" (coordinates in the
+ // rendering) and "physical space" (surface pixels). See drawing-surface.cpp.
+ // See bug 955141.
+ // There must be a better lib2geom way of finding sarea.
+ DrawingSurface* ds = ct.surface();
+ Geom::Scale scale = ds->scale();
+ Geom::Rect rarea( *iarea );
+ Geom::Point sarea( rarea.dimensions() * scale );
+ DrawingSurface intermediate( *iarea, sarea.ceil() );
DrawingContext ict(intermediate);
+
unsigned render_result = RENDER_OK;
// 1. Render clipping path with alpha = opacity.
@@ -614,9 +624,24 @@ DrawingItem::render(DrawingContext &ct, Geom::IntRect const &area, unsigned flag
cachect.fill();
_cache->markClean(*carea);
}
- ct.rectangle(*carea);
+
+ ct.rectangle(*carea); // Area to be filled
+
+ // Account for difference between logical and physical spaces.
+ ct.scale( intermediate.scale().inverse() );
+
+ // Must shift origin to compensate for scaling.
+ Geom::Point factor( Geom::Point(1,1) - intermediate.scale().vector() );
+ Geom::Point origin( intermediate.origin() );
+ Geom::Point shift( origin[Geom::X] * factor[Geom::X], origin[Geom::Y] * factor[Geom::Y] );
+ ct.translate( -shift );
+
ct.setSource(&intermediate);
ct.fill();
+
+ ct.translate( shift );
+ ct.scale( intermediate.scale() );
+
ct.setSource(0,0,0,0);
// the call above is to clear a ref on the intermediate surface held by ct
diff --git a/src/display/nr-filter-primitive.cpp b/src/display/nr-filter-primitive.cpp
index 93c6d4d6e..ce562668a 100644
--- a/src/display/nr-filter-primitive.cpp
+++ b/src/display/nr-filter-primitive.cpp
@@ -111,8 +111,7 @@ Geom::Rect FilterPrimitive::filter_primitive_area(FilterUnits const &units)
// This is definitely a hack... but what else to do?
// Current viewport might not be document viewport... but how to find?
- SPDesktop* desktop = inkscape_active_desktop();
- SPDocument* document = sp_desktop_document(desktop);
+ SPDocument* document = inkscape_active_document();
SPRoot* root = document->getRoot();
Geom::Rect viewport;
if( root->viewBox_set ) {
diff --git a/src/extension/internal/pdf-input-cairo.cpp b/src/extension/internal/pdf-input-cairo.cpp
index eee1b43bf..03b7c0a90 100644
--- a/src/extension/internal/pdf-input-cairo.cpp
+++ b/src/extension/internal/pdf-input-cairo.cpp
@@ -95,11 +95,7 @@ PdfImportCairoDialog::PdfImportCairoDialog(PopplerDocument *doc)
_cropTypeCombo = Gtk::manage(new class Gtk::ComboBoxText());
int num_crop_choices = sizeof(crop_setting_choices) / sizeof(crop_setting_choices[0]);
for ( int i = 0 ; i < num_crop_choices ; i++ ) {
-#if WITH_GTKMM_2_24
_cropTypeCombo->append(_(crop_setting_choices[i]));
-#else
- _cropTypeCombo->append_text(_(crop_setting_choices[i]));
-#endif
}
_cropTypeCombo->set_active_text(_(crop_setting_choices[0]));
_cropTypeCombo->set_sensitive(false);
@@ -124,11 +120,7 @@ PdfImportCairoDialog::PdfImportCairoDialog(PopplerDocument *doc)
// Text options
_labelText = Gtk::manage(new class Gtk::Label(_("Text handling:")));
_textHandlingCombo = Gtk::manage(new class Gtk::ComboBoxText());
-#if WITH_GTKMM_2_24
_textHandlingCombo->append(_("Import text as text"));
-#else
- _textHandlingCombo->append_text(_("Import text as text"));
-#endif
_textHandlingCombo->set_active_text(_("Import text as text"));
_localFontsCheck = Gtk::manage(new class Gtk::CheckButton(_("Replace PDF fonts by closest-named installed fonts")));
diff --git a/src/extension/internal/pdfinput/pdf-input.cpp b/src/extension/internal/pdfinput/pdf-input.cpp
index d2d594017..688e3f612 100644
--- a/src/extension/internal/pdfinput/pdf-input.cpp
+++ b/src/extension/internal/pdfinput/pdf-input.cpp
@@ -111,11 +111,7 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar */*uri*/)
_cropTypeCombo = Gtk::manage(new class Gtk::ComboBoxText());
int num_crop_choices = sizeof(crop_setting_choices) / sizeof(crop_setting_choices[0]);
for ( int i = 0 ; i < num_crop_choices ; i++ ) {
-#if WITH_GTKMM_2_24
_cropTypeCombo->append(_(crop_setting_choices[i]));
-#else
- _cropTypeCombo->append_text(_(crop_setting_choices[i]));
-#endif
}
_cropTypeCombo->set_active_text(_(crop_setting_choices[0]));
_cropTypeCombo->set_sensitive(false);
@@ -140,11 +136,7 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar */*uri*/)
// Text options
_labelText = Gtk::manage(new class Gtk::Label(_("Text handling:")));
_textHandlingCombo = Gtk::manage(new class Gtk::ComboBoxText());
-#if WITH_GTKMM_2_24
_textHandlingCombo->append(_("Import text as text"));
-#else
- _textHandlingCombo->append_text(_("Import text as text"));
-#endif
_textHandlingCombo->set_active_text(_("Import text as text"));
_localFontsCheck = Gtk::manage(new class Gtk::CheckButton(_("Replace PDF fonts by closest-named installed fonts")));
diff --git a/src/extension/param/enum.cpp b/src/extension/param/enum.cpp
index b1968a4d6..18a73beb6 100644
--- a/src/extension/param/enum.cpp
+++ b/src/extension/param/enum.cpp
@@ -242,11 +242,7 @@ Gtk::Widget *ParamComboBox::get_widget(SPDocument * doc, Inkscape::XML::Node * n
for (GSList * list = choices; list != NULL; list = g_slist_next(list)) {
enumentry * entr = reinterpret_cast<enumentry *>(list->data);
Glib::ustring text = entr->guitext;
-#if WITH_GTKMM_2_24
combo->append(text);
-#else
- combo->append_text(text);
-#endif
if ( _value && !entr->value.compare(_value) ) {
settext = entr->guitext;
diff --git a/src/extension/param/radiobutton.cpp b/src/extension/param/radiobutton.cpp
index 5b5e179d2..921c322b6 100644
--- a/src/extension/param/radiobutton.cpp
+++ b/src/extension/param/radiobutton.cpp
@@ -305,11 +305,7 @@ Gtk::Widget * ParamRadioButton::get_widget(SPDocument * doc, Inkscape::XML::Node
switch ( _mode ) {
case MINIMAL:
{
-#if WITH_GTKMM_2_24
cbt->append(*text);
-#else
- cbt->append_text(*text);
-#endif
if (!entr->value->compare(_value)) {
cbt->set_active_text(*text);
comboSet = true;
diff --git a/src/gradient-chemistry.cpp b/src/gradient-chemistry.cpp
index 0038e9325..6b019ad2a 100644
--- a/src/gradient-chemistry.cpp
+++ b/src/gradient-chemistry.cpp
@@ -27,6 +27,7 @@
#include "style.h"
#include "document-private.h"
#include "document-undo.h"
+#include "desktop.h"
#include "desktop-style.h"
#include "desktop-handles.h"
#include "event-context.h"
@@ -1592,6 +1593,23 @@ void sp_gradient_reverse_selected_gradients(SPDesktop *desktop)
_("Reverse gradient"));
}
+void sp_gradient_unset_swatch(SPDesktop *desktop, std::string id)
+{
+ SPDocument *doc = desktop ? desktop->doc() : 0;
+
+ if (doc) {
+ const GSList *gradients = doc->getResourceList("gradient");
+ for (const GSList *item = gradients; item; item = item->next) {
+ SPGradient* grad = SP_GRADIENT(item->data);
+ if ( id == grad->getId() ) {
+ grad->setSwatch(false);
+ DocumentUndo::done(doc, SP_VERB_CONTEXT_GRADIENT,
+ _("Delete swatch"));
+ break;
+ }
+ }
+ }
+}
/*
Local Variables:
mode:c++
diff --git a/src/gradient-chemistry.h b/src/gradient-chemistry.h
index 50422458c..66a8e5281 100644
--- a/src/gradient-chemistry.h
+++ b/src/gradient-chemistry.h
@@ -74,6 +74,8 @@ void sp_gradient_reverse_selected_gradients(SPDesktop *desktop);
void sp_gradient_invert_selected_gradients(SPDesktop *desktop, Inkscape::PaintTarget fill_or_stroke);
+void sp_gradient_unset_swatch(SPDesktop *desktop, std::string id);
+
/**
* Fetches either the fill or the stroke gradient from the given item.
*
diff --git a/src/gradient-drag.cpp b/src/gradient-drag.cpp
index c775a19d7..69b9db92d 100644
--- a/src/gradient-drag.cpp
+++ b/src/gradient-drag.cpp
@@ -2080,7 +2080,7 @@ void GrDrag::updateDraggers()
if (style && (style->fill.isPaintserver())) {
SPPaintServer *server = style->getFillPaintServer();
- if ( server && server->isSolid() ) {
+ if ( server && (server->isSolid() || SP_GRADIENT(server)->getVector()->isSolid()) ) {
// Suppress "gradientness" of solid paint
} else if ( SP_IS_LINEARGRADIENT(server) ) {
addDraggersLinear( SP_LINEARGRADIENT(server), item, Inkscape::FOR_FILL );
@@ -2094,7 +2094,7 @@ void GrDrag::updateDraggers()
if (style && (style->stroke.isPaintserver())) {
SPPaintServer *server = style->getStrokePaintServer();
- if ( server && server->isSolid() ) {
+ if ( server && (server->isSolid() || SP_GRADIENT(server)->getVector()->isSolid()) ) {
// Suppress "gradientness" of solid paint
} else if ( SP_IS_LINEARGRADIENT(server) ) {
addDraggersLinear( SP_LINEARGRADIENT(server), item, Inkscape::FOR_STROKE );
@@ -2145,7 +2145,7 @@ void GrDrag::updateLines()
if (style && (style->fill.isPaintserver())) {
SPPaintServer *server = item->style->getFillPaintServer();
- if ( server && server->isSolid() ) {
+ if ( server && (server->isSolid() || SP_GRADIENT(server)->getVector()->isSolid()) ) {
// Suppress "gradientness" of solid paint
} else if ( SP_IS_LINEARGRADIENT(server) ) {
addLine(item, getGradientCoords(item, POINT_LG_BEGIN, 0, Inkscape::FOR_FILL), getGradientCoords(item, POINT_LG_END, 0, Inkscape::FOR_FILL), Inkscape::FOR_FILL);
@@ -2204,7 +2204,7 @@ void GrDrag::updateLines()
if (style && (style->stroke.isPaintserver())) {
SPPaintServer *server = item->style->getStrokePaintServer();
- if ( server && server->isSolid() ) {
+ if ( server && (server->isSolid() || SP_GRADIENT(server)->getVector()->isSolid()) ) {
// Suppress "gradientness" of solid paint
} else if ( SP_IS_LINEARGRADIENT(server) ) {
addLine(item, getGradientCoords(item, POINT_LG_BEGIN, 0, Inkscape::FOR_STROKE), getGradientCoords(item, POINT_LG_END, 0, Inkscape::FOR_STROKE), Inkscape::FOR_STROKE);
diff --git a/src/inkscape.cpp b/src/inkscape.cpp
index fc9a9783f..fc823f8b7 100644
--- a/src/inkscape.cpp
+++ b/src/inkscape.cpp
@@ -1270,6 +1270,10 @@ inkscape_active_document (void)
{
if (SP_ACTIVE_DESKTOP) {
return sp_desktop_document (SP_ACTIVE_DESKTOP);
+ } else if (!inkscape->document_set.empty()) {
+ // If called from the command line there will be no desktop
+ // So 'fall back' to take the first listed document in the Inkscape instance
+ return inkscape->document_set.begin()->first;
}
return NULL;
diff --git a/src/inkview.cpp b/src/inkview.cpp
index 3831cab95..ee93b4134 100644
--- a/src/inkview.cpp
+++ b/src/inkview.cpp
@@ -337,44 +337,37 @@ sp_svgview_ctrlwin_delete (GtkWidget */*widget*/, GdkEvent */*event*/, void */*d
return FALSE;
}
-static GtkWidget *
-sp_svgview_control_show (struct SPSlideShow *ss)
+static GtkWidget* sp_svgview_control_show(struct SPSlideShow *ss)
{
if (!ctrlwin) {
- GtkWidget *t, *b;
- ctrlwin = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_window_set_transient_for (GTK_WINDOW(ctrlwin), GTK_WINDOW(ss->window));
- g_signal_connect (G_OBJECT (ctrlwin), "key_press_event", (GCallback) sp_svgview_main_key_press, ss);
- g_signal_connect (G_OBJECT (ctrlwin), "delete_event", (GCallback) sp_svgview_ctrlwin_delete, NULL);
- t = gtk_table_new (1, 4, TRUE);
- gtk_container_add ((GtkContainer *) ctrlwin, t);
- b = gtk_button_new_from_stock (GTK_STOCK_GOTO_FIRST);
- gtk_table_attach ((GtkTable *) t, b, 0, 1, 0, 1,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- 0, 0);
- g_signal_connect ((GObject *) b, "clicked", (GCallback) sp_svgview_goto_first_cb, ss);
- b = gtk_button_new_from_stock (GTK_STOCK_GO_BACK);
- gtk_table_attach ((GtkTable *) t, b, 1, 2, 0, 1,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- 0, 0);
- g_signal_connect (G_OBJECT(b), "clicked", (GCallback) sp_svgview_show_prev_cb, ss);
- b = gtk_button_new_from_stock (GTK_STOCK_GO_FORWARD);
- gtk_table_attach ((GtkTable *) t, b, 2, 3, 0, 1,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- 0, 0);
- g_signal_connect (G_OBJECT(b), "clicked", (GCallback) sp_svgview_show_next_cb, ss);
- b = gtk_button_new_from_stock (GTK_STOCK_GOTO_LAST);
- gtk_table_attach ((GtkTable *) t, b, 3, 4, 0, 1,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
- 0, 0);
- g_signal_connect (G_OBJECT(b), "clicked", (GCallback) sp_svgview_goto_last_cb, ss);
- gtk_widget_show_all (ctrlwin);
+ ctrlwin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_resizable(GTK_WINDOW(ctrlwin), FALSE);
+ gtk_window_set_transient_for(GTK_WINDOW(ctrlwin), GTK_WINDOW(ss->window));
+ g_signal_connect(G_OBJECT (ctrlwin), "key_press_event", (GCallback) sp_svgview_main_key_press, ss);
+ g_signal_connect(G_OBJECT (ctrlwin), "delete_event", (GCallback) sp_svgview_ctrlwin_delete, NULL);
+
+#if GTK_CHECK_VERSION(3,0,0)
+ GtkWidget *t = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
+#else
+ GtkWidget *t = gtk_hbutton_box_new();
+#endif
+
+ gtk_container_add(GTK_CONTAINER(ctrlwin), t);
+ GtkWidget *b = gtk_button_new_from_stock(GTK_STOCK_GOTO_FIRST);
+ gtk_container_add(GTK_CONTAINER(t), b);
+ g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_goto_first_cb, ss);
+ b = gtk_button_new_from_stock(GTK_STOCK_GO_BACK);
+ gtk_container_add(GTK_CONTAINER(t), b);
+ g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_show_prev_cb, ss);
+ b = gtk_button_new_from_stock(GTK_STOCK_GO_FORWARD);
+ gtk_container_add(GTK_CONTAINER(t), b);
+ g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_show_next_cb, ss);
+ b = gtk_button_new_from_stock(GTK_STOCK_GOTO_LAST);
+ gtk_container_add(GTK_CONTAINER(t), b);
+ g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_goto_last_cb, ss);
+ gtk_widget_show_all(ctrlwin);
} else {
- gtk_window_present ((GtkWindow *) ctrlwin);
+ gtk_window_present(GTK_WINDOW(ctrlwin));
}
return NULL;
diff --git a/src/io/sys.cpp b/src/io/sys.cpp
index 5f19ee5db..26c1993a7 100644
--- a/src/io/sys.cpp
+++ b/src/io/sys.cpp
@@ -239,6 +239,40 @@ bool Inkscape::IO::file_is_writable( char const *utf8name)
return success;
}
+/**Checks if directory of file exists, useful
+ * because inkscape doesn't create directories.*/
+bool Inkscape::IO::file_directory_exists( char const *utf8name ){
+ bool exists = true;
+
+ if ( utf8name) {
+ gchar *filename = NULL;
+ if (utf8name && !g_utf8_validate(utf8name, -1, NULL)) {
+ /* FIXME: Trying to guess whether or not a filename is already in utf8 is unreliable.
+ If any callers pass non-utf8 data (e.g. using g_get_home_dir), then change caller to
+ use simple g_file_test. Then add g_return_val_if_fail(g_utf_validate(...), false)
+ to beginning of this function. */
+ filename = g_strdup(utf8name);
+ // Looks like g_get_home_dir isn't safe.
+ //g_warning("invalid UTF-8 detected internally. HUNT IT DOWN AND KILL IT!!!");
+ } else {
+ filename = g_filename_from_utf8 ( utf8name, -1, NULL, NULL, NULL );
+ }
+ if ( filename ) {
+ gchar *dirname = g_path_get_dirname(filename);
+ exists = Inkscape::IO::file_test( dirname, G_FILE_TEST_EXISTS);
+ g_free(filename);
+ g_free(dirname);
+ filename = NULL;
+ dirname = NULL;
+ } else {
+ g_warning( "Unable to convert filename in IO:file_test" );
+ }
+ }
+
+ return exists;
+
+}
+
/** Wrapper around g_dir_open, but taking a utf8name as first argument. */
GDir *
Inkscape::IO::dir_open(gchar const *const utf8name, guint const flags, GError **const error)
diff --git a/src/io/sys.h b/src/io/sys.h
index fbfe4d4c4..78d25afa3 100644
--- a/src/io/sys.h
+++ b/src/io/sys.h
@@ -36,6 +36,8 @@ int file_open_tmp( std::string& name_used, const std::string& prefix );
bool file_test( char const *utf8name, GFileTest test );
+bool file_directory_exists( char const *utf8name );
+
bool file_is_writable( char const *utf8name);
GDir *dir_open(gchar const *utf8name, guint flags, GError **error);
diff --git a/src/main.cpp b/src/main.cpp
index 844aded56..20330edbb 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -169,10 +169,10 @@ enum {
int sp_main_gui(int argc, char const **argv);
int sp_main_console(int argc, char const **argv);
-static void sp_do_export_png(SPDocument *doc);
-static void do_export_ps_pdf(SPDocument* doc, gchar const* uri, char const *mime);
+static int sp_do_export_png(SPDocument *doc);
+static int do_export_ps_pdf(SPDocument* doc, gchar const* uri, char const *mime);
#ifdef WIN32
-static void do_export_emf(SPDocument* doc, gchar const* uri, char const *mime);
+static int do_export_emf(SPDocument* doc, gchar const* uri, char const *mime);
#endif //WIN32
static void do_query_dimension (SPDocument *doc, bool extent, Geom::Dim2 const axis, const gchar *id);
static void do_query_all (SPDocument *doc);
@@ -1032,6 +1032,9 @@ static int sp_process_file_list(GSList *fl)
g_warning("Specified document %s cannot be opened (does not exist or not a valid SVG file)", filename);
retVal++;
} else {
+
+ inkscape_add_document(doc);
+
if (sp_vacuum_defs) {
doc->vacuumDocument();
}
@@ -1043,7 +1046,7 @@ static int sp_process_file_list(GSList *fl)
sp_print_document_to_file(doc, sp_global_printer);
}
if (sp_export_png || (sp_export_id && sp_export_use_hints)) {
- sp_do_export_png(doc);
+ retVal |= sp_do_export_png(doc);
}
if (sp_export_svg) {
if (sp_export_text_to_path) {
@@ -1078,17 +1081,17 @@ static int sp_process_file_list(GSList *fl)
doc->getBase(), sp_export_svg);
}
if (sp_export_ps) {
- do_export_ps_pdf(doc, sp_export_ps, "image/x-postscript");
+ retVal |= do_export_ps_pdf(doc, sp_export_ps, "image/x-postscript");
}
if (sp_export_eps) {
- do_export_ps_pdf(doc, sp_export_eps, "image/x-e-postscript");
+ retVal |= do_export_ps_pdf(doc, sp_export_eps, "image/x-e-postscript");
}
if (sp_export_pdf) {
- do_export_ps_pdf(doc, sp_export_pdf, "application/pdf");
+ retVal |= do_export_ps_pdf(doc, sp_export_pdf, "application/pdf");
}
#ifdef WIN32
if (sp_export_emf) {
- do_export_emf(doc, sp_export_emf, "image/x-emf");
+ retVal |= do_export_emf(doc, sp_export_emf, "image/x-emf");
}
#endif //WIN32
if (sp_query_all) {
@@ -1099,6 +1102,8 @@ static int sp_process_file_list(GSList *fl)
do_query_dimension (doc, false, sp_query_x? Geom::X : Geom::Y, sp_query_id);
}
+ inkscape_remove_document(doc);
+
delete doc;
}
fl = g_slist_remove(fl, fl->data);
@@ -1294,7 +1299,7 @@ do_query_all_recurse (SPObject *o)
}
-static void sp_do_export_png(SPDocument *doc)
+static int sp_do_export_png(SPDocument *doc)
{
Glib::ustring filename;
bool filename_from_hint = false;
@@ -1325,7 +1330,7 @@ static void sp_do_export_png(SPDocument *doc)
if (o) {
if (!SP_IS_ITEM (o)) {
g_warning("Object with id=\"%s\" is not a visible item. Nothing exported.", sp_export_id);
- return;
+ return 1;
}
items = g_slist_prepend (items, SP_ITEM(o));
@@ -1372,11 +1377,11 @@ static void sp_do_export_png(SPDocument *doc)
area = *areaMaybe;
} else {
g_warning("Unable to determine a valid bounding box. Nothing exported.");
- return;
+ return 1;
}
} else {
g_warning("Object with id=\"%s\" was not found in the document. Nothing exported.", sp_export_id);
- return;
+ return 1;
}
}
@@ -1385,7 +1390,7 @@ static void sp_do_export_png(SPDocument *doc)
gdouble x0,y0,x1,y1;
if (sscanf(sp_export_area, "%lg:%lg:%lg:%lg", &x0, &y0, &x1, &y1) != 4) {
g_warning("Cannot parse export area '%s'; use 'x0:y0:x1:y1'. Nothing exported.", sp_export_area);
- return;
+ return 1;
}
area = Geom::Rect(Geom::Interval(x0,x1), Geom::Interval(y0,y1));
} else if (sp_export_area_page || !(sp_export_id || sp_export_area_drawing)) {
@@ -1399,7 +1404,7 @@ static void sp_do_export_png(SPDocument *doc)
if (filename.empty()) {
if (!sp_export_png) {
g_warning ("No export filename given and no filename hint. Nothing exported.");
- return;
+ return 1;
}
filename = sp_export_png;
}
@@ -1408,7 +1413,7 @@ static void sp_do_export_png(SPDocument *doc)
dpi = atof(sp_export_dpi);
if ((dpi < 0.1) || (dpi > 10000.0)) {
g_warning("DPI value %s out of range [0.1 - 10000.0]. Nothing exported.", sp_export_dpi);
- return;
+ return 1;
}
g_print("DPI: %g\n", dpi);
}
@@ -1430,7 +1435,7 @@ static void sp_do_export_png(SPDocument *doc)
width = strtoul(sp_export_width, NULL, 0);
if ((width < 1) || (width > PNG_UINT_31_MAX) || (errno == ERANGE) ) {
g_warning("Export width %lu out of range (1 - %lu). Nothing exported.", width, (unsigned long int)PNG_UINT_31_MAX);
- return;
+ return 1;
}
dpi = (gdouble) width * PX_PER_IN / area.width();
}
@@ -1440,7 +1445,7 @@ static void sp_do_export_png(SPDocument *doc)
height = strtoul(sp_export_height, NULL, 0);
if ((height < 1) || (height > PNG_UINT_31_MAX)) {
g_warning("Export height %lu out of range (1 - %lu). Nothing exported.", height, (unsigned long int)PNG_UINT_31_MAX);
- return;
+ return 1;
}
dpi = (gdouble) height * PX_PER_IN / area.height();
}
@@ -1503,19 +1508,28 @@ static void sp_do_export_png(SPDocument *doc)
path = filename;
}
- g_print("Background RRGGBBAA: %08x\n", bgcolor);
+ int retcode = 0;
+ //check if specified directory exists
+
+ if (!Inkscape::IO::file_directory_exists(filename.c_str())) {
+ g_warning("File path \"%s\" includes directory that doesn't exist.\n", filename.c_str());
+ retcode = 1;
+ } else {
+ g_print("Background RRGGBBAA: %08x\n", bgcolor);
- g_print("Area %g:%g:%g:%g exported to %lu x %lu pixels (%g dpi)\n", area[Geom::X][0], area[Geom::Y][0], area[Geom::X][1], area[Geom::Y][1], width, height, dpi);
+ g_print("Area %g:%g:%g:%g exported to %lu x %lu pixels (%g dpi)\n", area[Geom::X][0], area[Geom::Y][0], area[Geom::X][1], area[Geom::Y][1], width, height, dpi);
- g_print("Bitmap saved as: %s\n", filename.c_str());
+ g_print("Bitmap saved as: %s\n", filename.c_str());
- if ((width >= 1) && (height >= 1) && (width <= PNG_UINT_31_MAX) && (height <= PNG_UINT_31_MAX)) {
- sp_export_png_file(doc, path.c_str(), area, width, height, dpi, dpi, bgcolor, NULL, NULL, true, sp_export_id_only ? items : NULL);
- } else {
- g_warning("Calculated bitmap dimensions %lu %lu are out of range (1 - %lu). Nothing exported.", width, height, (unsigned long int)PNG_UINT_31_MAX);
+ if ((width >= 1) && (height >= 1) && (width <= PNG_UINT_31_MAX) && (height <= PNG_UINT_31_MAX)) {
+ sp_export_png_file(doc, path.c_str(), area, width, height, dpi, dpi, bgcolor, NULL, NULL, true, sp_export_id_only ? items : NULL);
+ } else {
+ g_warning("Calculated bitmap dimensions %lu %lu are out of range (1 - %lu). Nothing exported.", width, height, (unsigned long int)PNG_UINT_31_MAX);
+ }
}
g_slist_free (items);
+ return retcode;
}
@@ -1527,7 +1541,7 @@ static void sp_do_export_png(SPDocument *doc)
* \param mime MIME type to export as.
*/
-static void do_export_ps_pdf(SPDocument* doc, gchar const* uri, char const* mime)
+static int do_export_ps_pdf(SPDocument* doc, gchar const* uri, char const* mime)
{
Inkscape::Extension::DB::OutputList o;
Inkscape::Extension::db.get_output_list(o);
@@ -1539,14 +1553,14 @@ static void do_export_ps_pdf(SPDocument* doc, gchar const* uri, char const* mime
if (i == o.end())
{
g_warning ("Could not find an extension to export to MIME type %s.", mime);
- return;
+ return 1;
}
if (sp_export_id) {
SPObject *o = doc->getObjectById(sp_export_id);
if (o == NULL) {
g_warning("Object with id=\"%s\" was not found in the document. Nothing exported.", sp_export_id);
- return;
+ return 1;
}
(*i)->set_param_string ("exportId", sp_export_id);
} else {
@@ -1607,7 +1621,14 @@ static void do_export_ps_pdf(SPDocument* doc, gchar const* uri, char const* mime
(*i)->set_param_int("resolution", (int) dpi);
}
+ //check if specified directory exists
+ if (!Inkscape::IO::file_directory_exists(uri)) {
+ g_warning("File path \"%s\" includes directory that doesn't exist.\n", uri);
+ return 1;
+ }
+
(*i)->save(doc, uri);
+ return 0;
}
#ifdef WIN32
@@ -1619,7 +1640,7 @@ static void do_export_ps_pdf(SPDocument* doc, gchar const* uri, char const* mime
* \param mime MIME type to export as (should be "image/x-emf")
*/
-static void do_export_emf(SPDocument* doc, gchar const* uri, char const* mime)
+static int do_export_emf(SPDocument* doc, gchar const* uri, char const* mime)
{
Inkscape::Extension::DB::OutputList o;
Inkscape::Extension::db.get_output_list(o);
@@ -1631,10 +1652,18 @@ static void do_export_emf(SPDocument* doc, gchar const* uri, char const* mime)
if (i == o.end())
{
g_warning ("Could not find an extension to export to MIME type %s.", mime);
- return;
+ return 1;
+ }
+
+ //check if specified directory exists
+ if (!Inkscape::IO::file_directory_exists(uri)){
+ g_warning("File path \"%s\" includes directory that doesn't exist.\n",
+ uri);
+ return 1;
}
(*i)->save(doc, uri);
+ return 0;
}
#endif //WIN32
diff --git a/src/object-edit.cpp b/src/object-edit.cpp
index 989d84c7f..1c7f76a7f 100644
--- a/src/object-edit.cpp
+++ b/src/object-edit.cpp
@@ -1305,7 +1305,7 @@ SpiralKnotHolder::SpiralKnotHolder(SPDesktop *desktop, SPItem *item, SPKnotHolde
entity_outer->create(desktop, item, this, Inkscape::CTRL_TYPE_SHAPER,
_("Roll/unroll the spiral from <b>outside</b>; with <b>Ctrl</b> to snap angle; "
- "with <b>Shift</b> to scale/rotate"));
+ "with <b>Shift</b> to scale/rotate; with <b>Alt</b> to lock radius"));
entity.push_back(entity_inner);
entity.push_back(entity_outer);
diff --git a/src/preferences.cpp b/src/preferences.cpp
index 1f985a629..3f12c4f64 100644
--- a/src/preferences.cpp
+++ b/src/preferences.cpp
@@ -504,6 +504,17 @@ void Preferences::mergeStyle(Glib::ustring const &pref_path, SPCSSAttr *style)
sp_repr_css_attr_unref(current);
}
+/**
+ * Remove an entry
+ * Make sure observers have been removed before calling
+ */
+void Preferences::remove(Glib::ustring const &pref_path)
+{
+ Inkscape::XML::Node *node = _getNode(pref_path, false);
+ if (node && node->parent()) {
+ node->parent()->removeChild(node);
+ }
+}
/**
* Class that holds additional information for registered Observers.
diff --git a/src/preferences.h b/src/preferences.h
index 5dcf4524d..66fa11542 100644
--- a/src/preferences.h
+++ b/src/preferences.h
@@ -503,6 +503,13 @@ public:
static void unload(bool save=true);
/*@}*/
+ /**
+ * Remove a node from prefs
+ * @param pref_path Path to entry
+ *
+ */
+ void remove(Glib::ustring const &pref_path);
+
protected:
/* helper methods used by Entry
* This will enable using the same Entry class with different backends.
diff --git a/src/registrytool.cpp b/src/registrytool.cpp
index d2cec0080..72b53821e 100644
--- a/src/registrytool.cpp
+++ b/src/registrytool.cpp
@@ -70,6 +70,7 @@ bool RegistryTool::setStringValue(const Glib::ustring &keyNameArg,
//Get or create the key
gunichar2 *keyw = g_utf8_to_utf16(keyName.data(), -1, 0,0,0);
gunichar2 *valuenamew = g_utf8_to_utf16(valueName.data(), -1, 0,0,0);
+ gunichar2 *valuew = g_utf8_to_utf16(value.data(), -1, 0,0,0);
HKEY key;
if (RegCreateKeyExW(rootKey, (WCHAR*) keyw,
@@ -82,7 +83,7 @@ bool RegistryTool::setStringValue(const Glib::ustring &keyNameArg,
// Set the value
if (RegSetValueExW(key, (WCHAR*) valuenamew,
- 0, REG_SZ, (LPBYTE) value.data(), (DWORD) (value.size() + 1)))
+ 0, REG_SZ, (LPBYTE) valuew, (DWORD) (2*value.size() + 2)))
{
fprintf(stderr, "RegistryTool: Could not set the value '%s'\n", value.c_str());
goto failkey;
diff --git a/src/spray-context.cpp b/src/spray-context.cpp
index fe478583c..07539a080 100644
--- a/src/spray-context.cpp
+++ b/src/spray-context.cpp
@@ -232,13 +232,13 @@ static void sp_spray_update_cursor(SPSprayContext *tc, bool /*with_shift*/)
switch (tc->mode) {
case SPRAY_MODE_COPY:
- tc->_message_context->setF(Inkscape::NORMAL_MESSAGE, _("%s. Drag, click or scroll to spray <b>copies</b> of the initial selection."), sel_message);
+ tc->_message_context->setF(Inkscape::NORMAL_MESSAGE, _("%s. Drag, click or click and scroll to spray <b>copies</b> of the initial selection."), sel_message);
break;
case SPRAY_MODE_CLONE:
- tc->_message_context->setF(Inkscape::NORMAL_MESSAGE, _("%s. Drag, click or scroll to spray <b>clones</b> of the initial selection."), sel_message);
+ tc->_message_context->setF(Inkscape::NORMAL_MESSAGE, _("%s. Drag, click or click and scroll to spray <b>clones</b> of the initial selection."), sel_message);
break;
case SPRAY_MODE_SINGLE_PATH:
- tc->_message_context->setF(Inkscape::NORMAL_MESSAGE, _("%s. Drag, click or scroll to spray in a <b>single path</b> of the initial selection."), sel_message);
+ tc->_message_context->setF(Inkscape::NORMAL_MESSAGE, _("%s. Drag, click or click and scroll to spray in a <b>single path</b> of the initial selection."), sel_message);
break;
default:
break;
diff --git a/src/tools-switch.cpp b/src/tools-switch.cpp
index cbf269387..f0535e2ff 100644
--- a/src/tools-switch.cpp
+++ b/src/tools-switch.cpp
@@ -144,7 +144,7 @@ tools_switch(SPDesktop *dt, int num)
dt->set_event_context(SP_TYPE_SPRAY_CONTEXT, tool_names[num]);
dt->activate_guides(true);
inkscape_eventcontext_set(sp_desktop_event_context(dt));
- dt->tipsMessageContext()->set(Inkscape::NORMAL_MESSAGE, _("<b>Drag</b>, <b>click</b> or <b>scroll</b> to spray the selected objects."));
+ dt->tipsMessageContext()->set(Inkscape::NORMAL_MESSAGE, _("<b>Drag</b>, <b>click</b> or <b>click and scroll</b> to spray the selected objects."));
break;
case TOOLS_SHAPES_RECT:
dt->set_event_context(SP_TYPE_RECT_CONTEXT, tool_names[num]);
diff --git a/src/ui/dialog/align-and-distribute.cpp b/src/ui/dialog/align-and-distribute.cpp
index cd1ce1471..dbd06d9e8 100644
--- a/src/ui/dialog/align-and-distribute.cpp
+++ b/src/ui/dialog/align-and-distribute.cpp
@@ -1040,7 +1040,6 @@ AlignAndDistribute::AlignAndDistribute()
//Rest of the widgetry
-#if WITH_GTKMM_2_24
_combo.append(_("Last selected"));
_combo.append(_("First selected"));
_combo.append(_("Biggest object"));
@@ -1048,15 +1047,6 @@ AlignAndDistribute::AlignAndDistribute()
_combo.append(_("Page"));
_combo.append(_("Drawing"));
_combo.append(_("Selection"));
-#else
- _combo.append_text(_("Last selected"));
- _combo.append_text(_("First selected"));
- _combo.append_text(_("Biggest object"));
- _combo.append_text(_("Smallest object"));
- _combo.append_text(_("Page"));
- _combo.append_text(_("Drawing"));
- _combo.append_text(_("Selection"));
-#endif
_combo.set_active(prefs->getInt("/dialogs/align/align-to", 6));
_combo.signal_changed().connect(sigc::mem_fun(*this, &AlignAndDistribute::on_ref_change));
@@ -1154,21 +1144,12 @@ void AlignAndDistribute::on_selgrp_toggled(){
void AlignAndDistribute::setMode(bool nodeEdit)
{
//Act on widgets used in node mode
-#if WITH_GTKMM_2_24
void ( Gtk::Widget::*mNode) () = nodeEdit ?
&Gtk::Widget::show_all : &Gtk::Widget::hide;
//Act on widgets used in selection mode
void ( Gtk::Widget::*mSel) () = nodeEdit ?
&Gtk::Widget::hide : &Gtk::Widget::show_all;
-#else
- void ( Gtk::Widget::*mNode) () = nodeEdit ?
- &Gtk::Widget::show_all : &Gtk::Widget::hide_all;
-
- //Act on widgets used in selection mode
- void ( Gtk::Widget::*mSel) () = nodeEdit ?
- &Gtk::Widget::hide_all : &Gtk::Widget::show_all;
-#endif
((_alignFrame).*(mSel))();
((_distributeFrame).*(mSel))();
diff --git a/src/ui/dialog/calligraphic-profile-rename.cpp b/src/ui/dialog/calligraphic-profile-rename.cpp
index c6633df0b..77a4f4f03 100644
--- a/src/ui/dialog/calligraphic-profile-rename.cpp
+++ b/src/ui/dialog/calligraphic-profile-rename.cpp
@@ -30,6 +30,8 @@ namespace Dialog {
CalligraphicProfileRename::CalligraphicProfileRename() :
_applied(false)
{
+ set_title(_("Edit profile"));
+
Gtk::Box *mainVBox = get_vbox();
_layout_table.set_spacings(4);
_layout_table.resize (1, 2);
@@ -49,19 +51,27 @@ CalligraphicProfileRename::CalligraphicProfileRename() :
_close_button.set_label(Gtk::Stock::CANCEL.id);
_close_button.set_can_default();
+ _delete_button.set_use_underline(true);
+ _delete_button.set_label(_("Delete"));
+ _delete_button.set_can_default();
+ _delete_button.set_visible(false);
+
_apply_button.set_use_underline(true);
_apply_button.set_label(_("Save"));
_apply_button.set_can_default();
_close_button.signal_clicked()
- .connect(sigc::mem_fun(*this, &CalligraphicProfileRename::_close));
+ .connect(sigc::mem_fun(*this, &CalligraphicProfileRename::_close));
+ _delete_button.signal_clicked()
+ .connect(sigc::mem_fun(*this, &CalligraphicProfileRename::_delete));
_apply_button.signal_clicked()
- .connect(sigc::mem_fun(*this, &CalligraphicProfileRename::_apply));
+ .connect(sigc::mem_fun(*this, &CalligraphicProfileRename::_apply));
signal_delete_event().connect( sigc::bind_return(
sigc::hide(sigc::mem_fun(*this, &CalligraphicProfileRename::_close)), true ) );
add_action_widget(_close_button, Gtk::RESPONSE_CLOSE);
+ add_action_widget(_delete_button, Gtk::RESPONSE_DELETE_EVENT);
add_action_widget(_apply_button, Gtk::RESPONSE_APPLY);
_apply_button.grab_default();
@@ -73,6 +83,15 @@ void CalligraphicProfileRename::_apply()
{
_profile_name = _profile_name_entry.get_text();
_applied = true;
+ _deleted = false;
+ _close();
+}
+
+void CalligraphicProfileRename::_delete()
+{
+ _profile_name = _profile_name_entry.get_text();
+ _applied = true;
+ _deleted = true;
_close();
}
@@ -81,11 +100,25 @@ void CalligraphicProfileRename::_close()
this->Gtk::Dialog::hide();
}
-void CalligraphicProfileRename::show(SPDesktop *desktop)
+void CalligraphicProfileRename::show(SPDesktop *desktop, const Glib::ustring profile_name)
{
CalligraphicProfileRename &dial = instance();
dial._applied=false;
+ dial._deleted=false;
dial.set_modal(true);
+
+ dial._profile_name = profile_name;
+ dial._profile_name_entry.set_text(profile_name);
+
+ if (profile_name.empty()) {
+ dial.set_title(_("Add profile"));
+ dial._delete_button.set_visible(false);
+
+ } else {
+ dial.set_title(_("Edit profile"));
+ dial._delete_button.set_visible(true);
+ }
+
desktop->setWindowTransient (dial.gobj());
dial.property_destroy_with_parent() = true;
// dial.Gtk::Dialog::show();
diff --git a/src/ui/dialog/calligraphic-profile-rename.h b/src/ui/dialog/calligraphic-profile-rename.h
index f0eb0b491..8fe82d7bb 100644
--- a/src/ui/dialog/calligraphic-profile-rename.h
+++ b/src/ui/dialog/calligraphic-profile-rename.h
@@ -29,10 +29,13 @@ public:
return "CalligraphicProfileRename";
}
- static void show(SPDesktop *desktop);
+ static void show(SPDesktop *desktop, const Glib::ustring profile_name);
static bool applied() {
return instance()._applied;
}
+ static bool deleted() {
+ return instance()._deleted;
+ }
static Glib::ustring getProfileName() {
return instance()._profile_name;
}
@@ -40,14 +43,17 @@ public:
protected:
void _close();
void _apply();
+ void _delete();
Gtk::Label _profile_name_label;
Gtk::Entry _profile_name_entry;
Gtk::Table _layout_table;
Gtk::Button _close_button;
+ Gtk::Button _delete_button;
Gtk::Button _apply_button;
Glib::ustring _profile_name;
bool _applied;
+ bool _deleted;
private:
static CalligraphicProfileRename &instance() {
static CalligraphicProfileRename instance_;
diff --git a/src/ui/dialog/document-properties.cpp b/src/ui/dialog/document-properties.cpp
index e681147aa..ab1e8fbd8 100644
--- a/src/ui/dialog/document-properties.cpp
+++ b/src/ui/dialog/document-properties.cpp
@@ -333,21 +333,13 @@ void DocumentProperties::build_snap()
#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
/// Populates the available color profiles combo box
void DocumentProperties::populate_available_profiles(){
-#if WITH_GTKMM_2_24
_combo_avail.remove_all(); // Clear any existing items in the combo box
-#else
- _combo_avail.clear_items(); // Clear any existing items in the combo box
-#endif
// Iterate through the list of profiles and add the name to the combo box.
std::vector<std::pair<Glib::ustring, Glib::ustring> > pairs = ColorProfile::getProfileFilesWithNames();
for ( std::vector<std::pair<Glib::ustring, Glib::ustring> >::const_iterator it = pairs.begin(); it != pairs.end(); ++it ) {
Glib::ustring name = it->second;
-#if WITH_GTKMM_2_24
_combo_avail.append(name);
-#else
- _combo_avail.append_text(name);
-#endif
}
}
@@ -1160,11 +1152,7 @@ void DocumentProperties::build_gridspage()
_grids_hbox_crea.pack_start(_grids_button_new, true, true);
for (gint t = 0; t <= GRID_MAXTYPENR; t++) {
-#if WITH_GTKMM_2_24
_grids_combo_gridtype.append( CanvasGrid::getName( (GridType) t ) );
-#else
- _grids_combo_gridtype.append_text( CanvasGrid::getName( (GridType) t ) );
-#endif
}
_grids_combo_gridtype.set_active_text( CanvasGrid::getName(GRID_RECTANGULAR) );
diff --git a/src/ui/dialog/filedialogimpl-gtkmm.cpp b/src/ui/dialog/filedialogimpl-gtkmm.cpp
index 90d9855ec..553acac84 100644
--- a/src/ui/dialog/filedialogimpl-gtkmm.cpp
+++ b/src/ui/dialog/filedialogimpl-gtkmm.cpp
@@ -1183,11 +1183,7 @@ void FileSaveDialogImplGtk::addFileType(Glib::ustring name, Glib::ustring patter
guessType.name = name;
guessType.pattern = pattern;
guessType.extension = NULL;
- #if WITH_GTKMM_2_24
fileTypeComboBox.append(guessType.name);
- #else
- fileTypeComboBox.append_text(guessType.name);
- #endif
fileTypes.push_back(guessType);
@@ -1216,11 +1212,7 @@ void FileSaveDialogImplGtk::createFileTypeMenu()
knownExtensions.insert( extension.casefold() );
fileDialogExtensionToPattern (type.pattern, extension);
type.extension= omod;
-#if WITH_GTKMM_2_24
fileTypeComboBox.append(type.name);
-#else
- fileTypeComboBox.append_text(type.name);
-#endif
fileTypes.push_back(type);
}
@@ -1229,11 +1221,7 @@ void FileSaveDialogImplGtk::createFileTypeMenu()
guessType.name = _("Guess from extension");
guessType.pattern = "*";
guessType.extension = NULL;
-#if WITH_GTKMM_2_24
fileTypeComboBox.append(guessType.name);
-#else
- fileTypeComboBox.append_text(guessType.name);
-#endif
fileTypes.push_back(guessType);
diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp
index b00dd042f..ddafcd481 100644
--- a/src/ui/dialog/filter-effects-dialog.cpp
+++ b/src/ui/dialog/filter-effects-dialog.cpp
@@ -1058,11 +1058,7 @@ private:
void update()
{
-#if WITH_GTKMM_2_24
- _box.hide();
-#else
- _box.hide_all();
-#endif
+ _box.hide();
_box.show();
_light_box.show_all();
@@ -1128,13 +1124,8 @@ FilterEffectsDialog::FilterModifier::FilterModifier(FilterEffectsDialog& d)
if(col)
col->add_attribute(_cell_toggle.property_active(), _columns.sel);
_list.append_column_editable(_("_Filter"), _columns.label);
-#if WITH_GTKMM_2_24
((Gtk::CellRendererText*)_list.get_column(1)->get_first_cell())->
signal_edited().connect(sigc::mem_fun(*this, &FilterEffectsDialog::FilterModifier::on_name_edited));
-#else
- ((Gtk::CellRendererText*)_list.get_column(1)->get_first_cell_renderer())->
- signal_edited().connect(sigc::mem_fun(*this, &FilterEffectsDialog::FilterModifier::on_name_edited));
-#endif
sw->set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
sw->set_shadow_type(Gtk::SHADOW_IN);
@@ -1669,8 +1660,30 @@ bool FilterEffectsDialog::PrimitiveList::on_draw(const Cairo::RefPtr<Cairo::Cont
{
cr->set_line_width(1.0);
- // TODO: Use Gtk::StyleContext instead
+#if GTK_CHECK_VERSION(3,0,0)
+ GtkStyleContext *sc = gtk_widget_get_style_context(GTK_WIDGET(gobj()));
+ GdkRGBA bg_color, fg_color;
+ gtk_style_context_get_background_color(sc, GTK_STATE_FLAG_NORMAL, &bg_color);
+ gtk_style_context_get_color(sc, GTK_STATE_FLAG_NORMAL, &fg_color);
+
+ GdkRGBA mid_color = {(bg_color.red + fg_color.red)/2.0,
+ (bg_color.green + fg_color.green)/2.0,
+ (bg_color.blue + fg_color.blue)/2.0,
+ (bg_color.alpha + fg_color.alpha)/2.0};
+
+ GdkRGBA bg_color_active, fg_color_active;
+ gtk_style_context_get_background_color(sc, GTK_STATE_FLAG_ACTIVE, &bg_color_active);
+ gtk_style_context_get_color(sc, GTK_STATE_FLAG_ACTIVE, &fg_color_active);
+
+ GdkRGBA mid_color_active = {(bg_color_active.red + fg_color_active.red)/2.0,
+ (bg_color_active.green + fg_color_active.green)/2.0,
+ (bg_color_active.blue + fg_color_active.blue)/2.0,
+ (bg_color_active.alpha + fg_color_active.alpha)/2.0};
+
+ GdkRGBA black = {0,0,0,1};
+#else
GtkStyle *style = gtk_widget_get_style(GTK_WIDGET(gobj()));
+#endif
SPFilterPrimitive* prim = get_selected();
int row_count = get_model()->children().size();
@@ -1689,13 +1702,25 @@ bool FilterEffectsDialog::PrimitiveList::on_draw(const Cairo::RefPtr<Cairo::Cont
const int x = text_start_x + get_input_type_width() * i;
cr->save();
cr->rectangle(x, 0, get_input_type_width(), vis.get_height());
+#if GTK_CHECK_VERSION(3,0,0)
+ gdk_cairo_set_source_rgba(cr->cobj(), &bg_color);
+ cr->fill_preserve();
+
+ gdk_cairo_set_source_rgba(cr->cobj(), &fg_color);
+#else
gdk_cairo_set_source_color(cr->cobj(), &(style->bg[GTK_STATE_NORMAL]));
cr->fill_preserve();
gdk_cairo_set_source_color(cr->cobj(), &(style->text[GTK_STATE_NORMAL]));
+#endif
cr->move_to(x+get_input_type_width(), 0);
cr->rotate_degrees(90);
_vertical_layout->show_in_cairo_context(cr);
+
+#if GTK_CHECK_VERSION(3,0,0)
+ gdk_cairo_set_source_rgba(cr->cobj(), &mid_color);
+#else
gdk_cairo_set_source_color(cr->cobj(), &(style->dark[GTK_STATE_NORMAL]));
+#endif
cr->move_to(x, 0);
cr->line_to(x, vis.get_height());
cr->stroke();
@@ -1716,7 +1741,13 @@ bool FilterEffectsDialog::PrimitiveList::on_draw(const Cairo::RefPtr<Cairo::Cont
// Outline the bottom of the connection area
const int outline_x = x + fheight * (row_count - row_index);
cr->save();
+
+#if GTK_CHECK_VERSION(3,0,0)
+ gdk_cairo_set_source_rgba(cr->cobj(), &mid_color);
+#else
gdk_cairo_set_source_color(cr->cobj(), &(style->dark[GTK_STATE_NORMAL]));
+#endif
+
cr->move_to(x, y + h);
cr->line_to(outline_x, y + h);
// Side outline
@@ -1737,10 +1768,17 @@ bool FilterEffectsDialog::PrimitiveList::on_draw(const Cairo::RefPtr<Cairo::Cont
cr->save();
+#if GTK_CHECK_VERSION(3,0,0)
+ gdk_cairo_set_source_rgba(cr->cobj(),
+ inside && mask & GDK_BUTTON1_MASK ?
+ &mid_color :
+ &mid_color_active);
+#else
gdk_cairo_set_source_color(cr->cobj(),
inside && mask & GDK_BUTTON1_MASK ?
&(style->dark[GTK_STATE_NORMAL]) :
&(style->dark[GTK_STATE_ACTIVE]));
+#endif
draw_connection_node(cr, con_poly, inside);
@@ -1760,10 +1798,17 @@ bool FilterEffectsDialog::PrimitiveList::on_draw(const Cairo::RefPtr<Cairo::Cont
cr->save();
+#if GTK_CHECK_VERSION(3,0,0)
+ gdk_cairo_set_source_rgba(cr->cobj(),
+ inside && mask & GDK_BUTTON1_MASK ?
+ &mid_color :
+ &mid_color_active);
+#else
gdk_cairo_set_source_color(cr->cobj(),
inside && mask & GDK_BUTTON1_MASK ?
&(style->dark[GTK_STATE_NORMAL]) :
&(style->dark[GTK_STATE_ACTIVE]));
+#endif
draw_connection_node(cr, con_poly, inside);
@@ -1781,10 +1826,17 @@ bool FilterEffectsDialog::PrimitiveList::on_draw(const Cairo::RefPtr<Cairo::Cont
cr->save();
+#if GTK_CHECK_VERSION(3,0,0)
+ gdk_cairo_set_source_rgba(cr->cobj(),
+ inside && mask & GDK_BUTTON1_MASK ?
+ &mid_color :
+ &mid_color_active);
+#else
gdk_cairo_set_source_color(cr->cobj(),
inside && mask & GDK_BUTTON1_MASK ?
&(style->dark[GTK_STATE_NORMAL]) :
&(style->dark[GTK_STATE_ACTIVE]));
+#endif
draw_connection_node(cr, con_poly, inside);
@@ -1799,7 +1851,11 @@ bool FilterEffectsDialog::PrimitiveList::on_draw(const Cairo::RefPtr<Cairo::Cont
// Draw drag connection
if(row_prim == prim && _in_drag) {
cr->save();
+#if GTK_CHECK_VERSION(3,0,0)
+ gdk_cairo_set_source_rgba(cr->cobj(), &black);
+#else
gdk_cairo_set_source_color(cr->cobj(), &(style->black));
+#endif
cr->move_to(outline_x, con_drag_y);
cr->line_to(mx, con_drag_y);
cr->line_to(mx, my);
@@ -1818,8 +1874,22 @@ void FilterEffectsDialog::PrimitiveList::draw_connection(const Cairo::RefPtr<Cai
{
cr->save();
- // TODO: Use Gtk::StyleContext instead
+#if GTK_CHECK_VERSION(3,0,0)
+ GtkStyleContext *sc = gtk_widget_get_style_context(GTK_WIDGET(gobj()));
+
+ GdkRGBA bg_color, fg_color;
+ gtk_style_context_get_background_color(sc, GTK_STATE_FLAG_NORMAL, &bg_color);
+ gtk_style_context_get_color(sc, GTK_STATE_FLAG_NORMAL, &fg_color);
+
+ GdkRGBA mid_color = {(bg_color.red + fg_color.red)/2.0,
+ (bg_color.green + fg_color.green)/2.0,
+ (bg_color.blue + fg_color.blue)/2.0,
+ (bg_color.alpha + fg_color.alpha)/2.0};
+
+ GdkRGBA black = {0,0,0,1};
+#else
GtkStyle *style = gtk_widget_get_style(GTK_WIDGET(gobj()));
+#endif
int src_id = 0;
Gtk::TreeIter res = find_result(input, attr, src_id);
@@ -1834,10 +1904,17 @@ void FilterEffectsDialog::PrimitiveList::draw_connection(const Cairo::RefPtr<Cai
const int tw = get_input_type_width();
gint end_x = text_start_x + tw * src_id + (int)(tw * 0.5f) + 1;
+#if GTK_CHECK_VERSION(3,0,0)
+ if(use_default && is_first)
+ gdk_cairo_set_source_rgba(cr->cobj(), &mid_color);
+ else
+ gdk_cairo_set_source_rgba(cr->cobj(), &black);
+#else
if(use_default && is_first)
gdk_cairo_set_source_color(cr->cobj(), &(style->dark[GTK_STATE_NORMAL]));
else
gdk_cairo_set_source_color(cr->cobj(), &(style->black));
+#endif
cr->rectangle(end_x-2, y1-2, 5, 5);
cr->fill_preserve();
@@ -1865,7 +1942,11 @@ void FilterEffectsDialog::PrimitiveList::draw_connection(const Cairo::RefPtr<Cai
const int y2 = rct.get_y() + rct.get_height();
// Draw a bevelled 'L'-shaped connection
+#if GTK_CHECK_VERSION(3,0,0)
+ gdk_cairo_set_source_rgba(cr->cobj(), &black);
+#else
gdk_cairo_set_source_color(cr->cobj(), &(style->black));
+#endif
cr->move_to(x1, y1);
cr->line_to(x2-fheight/4, y1);
cr->line_to(x2, y1-fheight/4);
@@ -2648,11 +2729,7 @@ void FilterEffectsDialog::update_filter_general_settings_view()
}
else {
std::vector<Gtk::Widget*> vect = _settings_tab2.get_children();
-#if WITH_GTKMM_2_24
vect[0]->hide();
-#else
- vect[0]->hide_all();
-#endif
_no_filter_selected.show();
}
@@ -2671,11 +2748,7 @@ void FilterEffectsDialog::update_settings_view()
std::vector<Gtk::Widget*> vect1 = _settings_tab1.get_children();
for(unsigned int i=0; i<vect1.size(); i++)
-#if WITH_GTKMM_2_24
vect1[i]->hide();
-#else
- vect1[i]->hide_all();
-#endif
_empty_settings.show();
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
@@ -2699,11 +2772,7 @@ void FilterEffectsDialog::update_settings_view()
//Second Tab
std::vector<Gtk::Widget*> vect2 = _settings_tab2.get_children();
-#if WITH_GTKMM_2_24
vect2[0]->hide();
-#else
- vect2[0]->hide_all();
-#endif
_no_filter_selected.show();
SPFilter* filter = _filter_modifier.get_selected_filter();
diff --git a/src/ui/dialog/glyphs.cpp b/src/ui/dialog/glyphs.cpp
index 1eed8d804..eec904ee4 100644
--- a/src/ui/dialog/glyphs.cpp
+++ b/src/ui/dialog/glyphs.cpp
@@ -364,11 +364,7 @@ GlyphsPanel::GlyphsPanel(gchar const *prefsPath) :
scriptCombo = new Gtk::ComboBoxText();
for (std::map<GUnicodeScript, Glib::ustring>::iterator it = getScriptToName().begin(); it != getScriptToName().end(); ++it)
{
-#if WITH_GTKMM_2_24
scriptCombo->append(it->second);
-#else
- scriptCombo->append_text(it->second);
-#endif
}
scriptCombo->set_active_text(getScriptToName()[G_UNICODE_SCRIPT_INVALID_CODE]);
@@ -393,11 +389,7 @@ GlyphsPanel::GlyphsPanel(gchar const *prefsPath) :
rangeCombo = new Gtk::ComboBoxText();
for ( std::vector<NamedRange>::iterator it = getRanges().begin(); it != getRanges().end(); ++it ) {
-#if WITH_GTKMM_2_24
rangeCombo->append(it->second);
-#else
- rangeCombo->append_text(it->second);
-#endif
}
rangeCombo->set_active_text(getRanges()[1].second);
diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp
index 03366a0c3..291059999 100644
--- a/src/ui/dialog/inkscape-preferences.cpp
+++ b/src/ui/dialog/inkscape-preferences.cpp
@@ -986,18 +986,10 @@ void InkscapePreferences::initPageIO()
Glib::ustring current = prefs->getString( "/options/displayprofile/uri" );
gint index = 0;
-#if WITH_GTKMM_2_24
_cms_display_profile.append(_("<none>"));
-#else
- _cms_display_profile.append_text(_("<none>"));
-#endif
index++;
for ( std::vector<Glib::ustring>::iterator it = names.begin(); it != names.end(); ++it ) {
-#if WITH_GTKMM_2_24
_cms_display_profile.append( *it );
-#else
- _cms_display_profile.append_text( *it );
-#endif
Glib::ustring path = CMSSystem::getPathForProfile(*it);
if ( !path.empty() && path == current ) {
_cms_display_profile.set_active(index);
@@ -1012,11 +1004,7 @@ void InkscapePreferences::initPageIO()
current = prefs->getString("/options/softproof/uri");
index = 0;
for ( std::vector<Glib::ustring>::iterator it = names.begin(); it != names.end(); ++it ) {
-#if WITH_GTKMM_2_24
_cms_proof_profile.append( *it );
-#else
- _cms_proof_profile.append_text( *it );
-#endif
Glib::ustring path = CMSSystem::getPathForProfile(*it);
if ( !path.empty() && path == current ) {
_cms_proof_profile.set_active(index);
diff --git a/src/ui/dialog/input.cpp b/src/ui/dialog/input.cpp
index b3c1bddfd..7e2b0a1e1 100644
--- a/src/ui/dialog/input.cpp
+++ b/src/ui/dialog/input.cpp
@@ -609,11 +609,7 @@ InputDialogImpl::InputDialogImpl() :
::Gtk::FILL,
::Gtk::SHRINK);
-#if WITH_GTKMM_2_24
linkCombo.append(_("None"));
-#else
- linkCombo.append_text(_("None"));
-#endif
linkCombo.set_active_text(_("None"));
linkCombo.set_sensitive(false);
linkConnection = linkCombo.signal_changed().connect(sigc::mem_fun(*this, &InputDialogImpl::linkComboChanged));
@@ -1282,24 +1278,15 @@ void InputDialogImpl::resyncToSelection() {
devDetails.set_sensitive(true);
linkConnection.block();
-#if WITH_GTKMM_2_24
linkCombo.remove_all();
linkCombo.append(_("None"));
-#else
- linkCombo.clear_items();
- linkCombo.append_text(_("None"));
-#endif
linkCombo.set_active(0);
if ( dev->getSource() != Gdk::SOURCE_MOUSE ) {
Glib::ustring linked = dev->getLink();
std::list<Glib::RefPtr<InputDevice const> > devList = Inkscape::DeviceManager::getManager().getDevices();
for ( std::list<Glib::RefPtr<InputDevice const> >::const_iterator it = devList.begin(); it != devList.end(); ++it ) {
if ( ((*it)->getSource() != Gdk::SOURCE_MOUSE) && ((*it) != dev) ) {
-#if WITH_GTKMM_2_24
linkCombo.append((*it)->getName().c_str());
-#else
- linkCombo.append_text((*it)->getName().c_str());
-#endif
if ( (linked.length() > 0) && (linked == (*it)->getId()) ) {
linkCombo.set_active_text((*it)->getName().c_str());
}
@@ -1334,18 +1321,10 @@ void InputDialogImpl::setupValueAndCombo( gint reported, gint actual, Gtk::Label
label.set_label(tmp);
g_free(tmp);
-#if WITH_GTKMM_2_24
combo.remove_all();
-#else
- combo.clear_items();
-#endif
for ( gint i = 1; i <= reported; ++i ) {
tmp = g_strdup_printf("%d", i);
-#if WITH_GTKMM_2_24
combo.append(tmp);
-#else
- combo.append_text(tmp);
-#endif
g_free(tmp);
}
diff --git a/src/ui/dialog/ocaldialogs.cpp b/src/ui/dialog/ocaldialogs.cpp
index bb06e3e79..174f361fd 100644
--- a/src/ui/dialog/ocaldialogs.cpp
+++ b/src/ui/dialog/ocaldialogs.cpp
@@ -963,11 +963,7 @@ void SearchResultList::populate_from_xml(xmlNode * a_node)
{
if (!strcmp((const char*)cur_node->name, "title"))
{
-#if WITH_GTKMM_2_24
row_num = append("");
-#else
- row_num = append_text("");
-#endif
xmlChar *xml_title = xmlNodeGetContent(cur_node);
char* title = (char*) xml_title;
diff --git a/src/ui/dialog/spellcheck.cpp b/src/ui/dialog/spellcheck.cpp
index 0f2c53f99..9cc18c02c 100644
--- a/src/ui/dialog/spellcheck.cpp
+++ b/src/ui/dialog/spellcheck.cpp
@@ -109,10 +109,6 @@ SpellCheck::SpellCheck (void) :
tree_view.append_column(_("Suggestions:"), tree_columns.suggestions);
{
-// Backward compatibility fix: The GtkComboBoxText API was introduced with
-// GTK+ 2.24. This check should eventually be dropped when we bump our
-// GTK dependency.
-#if GTK_CHECK_VERSION(2, 24, 0)
dictionary_combo = gtk_combo_box_text_new();
gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (dictionary_combo), _lang.c_str());
if (_lang2 != "") {
@@ -121,16 +117,6 @@ SpellCheck::SpellCheck (void) :
if (_lang3 != "") {
gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (dictionary_combo), _lang3.c_str());
}
-#else
- dictionary_combo = gtk_combo_box_new_text();
- gtk_combo_box_append_text (GTK_COMBO_BOX (dictionary_combo), _lang.c_str());
- if (_lang2 != "") {
- gtk_combo_box_append_text (GTK_COMBO_BOX (dictionary_combo), _lang2.c_str());
- }
- if (_lang3 != "") {
- gtk_combo_box_append_text (GTK_COMBO_BOX (dictionary_combo), _lang3.c_str());
- }
-#endif
gtk_combo_box_set_active (GTK_COMBO_BOX (dictionary_combo), 0);
gtk_widget_show_all (dictionary_combo);
}
diff --git a/src/ui/dialog/svg-fonts-dialog.cpp b/src/ui/dialog/svg-fonts-dialog.cpp
index f296ad030..be69635e8 100644
--- a/src/ui/dialog/svg-fonts-dialog.cpp
+++ b/src/ui/dialog/svg-fonts-dialog.cpp
@@ -163,23 +163,14 @@ GlyphComboBox::GlyphComboBox(){
void GlyphComboBox::update(SPFont* spfont){
if (!spfont) return
-//TODO: figure out why do we need to append_text("") before clearing items properly...
+//TODO: figure out why do we need to append("") before clearing items properly...
-#if WITH_GTKMM_2_24
this->append(""); //Gtk is refusing to clear the combobox when I comment out this line
this->remove_all();
-#else
- this->append_text(""); //Gtk is refusing to clear the combobox when I comment out this line
- this->clear_items();
-#endif
for(SPObject* node = spfont->children; node; node=node->next){
if (SP_IS_GLYPH(node)){
-#if WITH_GTKMM_2_24
this->append((static_cast<SPGlyph*>(node))->unicode);
-#else
- this->append_text((static_cast<SPGlyph*>(node))->unicode);
-#endif
}
}
}
diff --git a/src/ui/dialog/swatches.cpp b/src/ui/dialog/swatches.cpp
index 9d5a2ac28..43b88e5c6 100644
--- a/src/ui/dialog/swatches.cpp
+++ b/src/ui/dialog/swatches.cpp
@@ -54,6 +54,8 @@
#include "dialog-manager.h"
#include "selection.h"
#include "verbs.h"
+#include "gradient-chemistry.h"
+#include "helper/action.h"
namespace Inkscape {
namespace UI {
@@ -142,8 +144,21 @@ static void editGradientImpl( SPDesktop* desktop, SPGradient* gr )
}
if (!shown) {
- GtkWidget *dialog = sp_gradient_vector_editor_new( gr );
- gtk_widget_show( dialog );
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ if (prefs->getBool("/dialogs/gradienteditor/showlegacy", false)) {
+ // Legacy gradient dialog
+ GtkWidget *dialog = sp_gradient_vector_editor_new( gr );
+ gtk_widget_show( dialog );
+ } else {
+ // Invoke the gradient tool
+ Inkscape::Verb *verb = Inkscape::Verb::get( SP_VERB_CONTEXT_GRADIENT );
+ if ( verb ) {
+ SPAction *action = verb->get_action( ( Inkscape::UI::View::View * ) SP_ACTIVE_DESKTOP);
+ if ( action ) {
+ sp_action_perform( action, NULL );
+ }
+ }
+ }
}
}
}
@@ -197,20 +212,7 @@ void SwatchesPanelHook::deleteGradient( GtkMenuItem */*menuitem*/, gpointer /*us
if ( bounceTarget ) {
SwatchesPanel* swp = bouncePanel;
SPDesktop* desktop = swp ? swp->getDesktop() : 0;
- SPDocument *doc = desktop ? desktop->doc() : 0;
- if (doc) {
- std::string targetName(bounceTarget->def.descr);
- const GSList *gradients = doc->getResourceList("gradient");
- for (const GSList *item = gradients; item; item = item->next) {
- SPGradient* grad = SP_GRADIENT(item->data);
- if ( targetName == grad->getId() ) {
- grad->setSwatch(false);
- DocumentUndo::done(doc, SP_VERB_CONTEXT_GRADIENT,
- _("Delete"));
- break;
- }
- }
- }
+ sp_gradient_unset_swatch(desktop, bounceTarget->def.descr);
}
}
diff --git a/src/ui/dialog/symbols.cpp b/src/ui/dialog/symbols.cpp
index 8cf48f827..9d4ab5d8a 100644
--- a/src/ui/dialog/symbols.cpp
+++ b/src/ui/dialog/symbols.cpp
@@ -15,6 +15,8 @@
#include <iostream>
#include <algorithm>
+#include <glibmm/i18n.h>
+
#include <gtkmm/buttonbox.h>
#include <gtkmm/label.h>
#include <gtkmm/table.h>
@@ -97,16 +99,12 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) :
guint row = 0;
/******************** Symbol Sets *************************/
- Gtk::Label* labelSet = new Gtk::Label("Symbol set: ");
+ Gtk::Label* labelSet = new Gtk::Label(_("Symbol set: "));
table->attach(*Gtk::manage(labelSet),0,1,row,row+1,Gtk::SHRINK,Gtk::SHRINK);
symbolSet = new Gtk::ComboBoxText(); // Fill in later
-#if WITH_GTKMM_2_24
- symbolSet->append("Current Document");
-#else
- symbolSet->append_text("Current Document");
-#endif
- symbolSet->set_active_text("Current Document");
+ symbolSet->append(_("Current Document"));
+ symbolSet->set_active_text(_("Current Document"));
table->attach(*Gtk::manage(symbolSet),1,2,row,row+1,Gtk::FILL|Gtk::EXPAND,Gtk::SHRINK);
sigc::connection connSet =
@@ -142,18 +140,14 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) :
++row;
/******************** Preview Scale ***********************/
- Gtk::Label* labelScale = new Gtk::Label("Preview scale: ");
+ Gtk::Label* labelScale = new Gtk::Label(_("Preview scale: "));
table->attach(*Gtk::manage(labelScale),0,1,row,row+1,Gtk::SHRINK,Gtk::SHRINK);
previewScale = new Gtk::ComboBoxText();
const gchar *scales[] =
- {"Fit", "Fit to width", "Fit to height", "0.1", "0.2", "0.5", "1.0", "2.0", "5.0", NULL};
+ {_("Fit"), _("Fit to width"), _("Fit to height"), "0.1", "0.2", "0.5", "1.0", "2.0", "5.0", NULL};
for( int i = 0; scales[i]; ++i ) {
-#if WITH_GTKMM_2_24
previewScale->append(scales[i]);
-#else
- previewScale->append_text(scales[i]);
-#endif
}
previewScale->set_active_text(scales[0]);
table->attach(*Gtk::manage(previewScale),1,2,row,row+1,Gtk::FILL|Gtk::EXPAND,Gtk::SHRINK);
@@ -165,18 +159,13 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) :
++row;
/******************** Preview Size ************************/
- Gtk::Label* labelSize = new Gtk::Label("Preview size: ");
+ Gtk::Label* labelSize = new Gtk::Label(_("Preview size: "));
table->attach(*Gtk::manage(labelSize),0,1,row,row+1,Gtk::SHRINK,Gtk::SHRINK);
previewSize = new Gtk::ComboBoxText();
const gchar *sizes[] = {"16", "24", "32", "48", "64", NULL};
for( int i = 0; sizes[i]; ++i ) {
-#if WITH_GTKMM_2_24
previewSize->append(sizes[i]);
-#else
- previewSize->append_text(sizes[i]);
-#endif
-
}
previewSize->set_active_text(sizes[2]);
table->attach(*Gtk::manage(previewSize),1,2,row,row+1,Gtk::FILL|Gtk::EXPAND,Gtk::SHRINK);
@@ -331,11 +320,7 @@ void SymbolsDialog::get_symbols() {
SPDocument* symbol_doc = SPDocument::createNewDoc( fullname, FALSE );
if( symbol_doc ) {
symbolSets[Glib::ustring(filename)]= symbol_doc;
-#if WITH_GTKMM_2_24
symbolSet->append(filename);
-#else
- symbolSet->append_text(filename);
-#endif
}
}
g_free( fullname );
diff --git a/src/ui/dialog/text-edit.cpp b/src/ui/dialog/text-edit.cpp
index 033571bb4..6696db083 100644
--- a/src/ui/dialog/text-edit.cpp
+++ b/src/ui/dialog/text-edit.cpp
@@ -106,30 +106,12 @@ TextEdit::TextEdit()
GtkWidget *px = sp_icon_new( Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_ICON("text_line_spacing") );
layout_hbox.pack_start(*Gtk::manage(Glib::wrap(px)), false, false);
-/*
-This would introduce dependency on gtk version 2.24 which is currently not available in
-Trisquel GNU/Linux 4.5.1 (released on May 25th, 2011)
-This conditional and its #else block can be deleted in the future.
-*/
-#if GTK_CHECK_VERSION(2, 24,0)
spacing_combo = gtk_combo_box_text_new_with_entry ();
-#else
- spacing_combo = gtk_combo_box_entry_new_text ();
-#endif
gtk_widget_set_size_request (spacing_combo, 90, -1);
const gchar *spacings[] = {"50%", "80%", "90%", "100%", "110%", "120%", "130%", "140%", "150%", "200%", "300%", NULL};
for (int i = 0; spacings[i]; i++) {
-/*
-This would introduce dependency on gtk version 2.24 which is currently not available in
-Trisquel GNU/Linux 4.5.1 (released on May 25th, 2011)
-This conditional and its #else block can be deleted in the future.
-*/
-#if GTK_CHECK_VERSION(2, 24,0)
gtk_combo_box_text_append_text((GtkComboBoxText *) spacing_combo, spacings[i]);
-#else
- gtk_combo_box_append_text((GtkComboBox *) spacing_combo, spacings[i]);
-#endif
}
gtk_widget_set_tooltip_text (px, _("Spacing between lines (percent of font size)"));
@@ -505,16 +487,7 @@ SPCSSAttr *TextEdit::getTextStyle ()
// Note that CSS 1.1 does not support line-height; we set it for consistency, but also set
// sodipodi:linespacing for backwards compatibility; in 1.2 we use line-height for flowtext
-/*
-This would introduce dependency on gtk version 2.24 which is currently not available in
-Trisquel GNU/Linux 4.5.1 (released on May 25th, 2011)
-This conditional and its #else block can be deleted in the future.
-*/
-#if GTK_CHECK_VERSION(2, 24,0)
const gchar *sstr = gtk_combo_box_text_get_active_text ((GtkComboBoxText *) spacing_combo);
-#else
- const gchar *sstr = gtk_entry_get_text ((GtkEntry *) (gtk_bin_get_child (GTK_BIN (spacing_combo))));
-#endif
sp_repr_css_set_property (css, "line-height", sstr);
return css;
diff --git a/src/ui/widget/frame.cpp b/src/ui/widget/frame.cpp
index b2968f806..eaa4336bb 100644
--- a/src/ui/widget/frame.cpp
+++ b/src/ui/widget/frame.cpp
@@ -56,9 +56,7 @@ Frame::set_label(const Glib::ustring &label_text, gboolean label_bold /*= TRUE*/
void
Frame::set_padding (guint padding_top, guint padding_bottom, guint padding_left, guint padding_right)
{
-#if WITH_GTKMM_2_24
_alignment.set_padding(padding_top, padding_bottom, padding_left, padding_right);
-#endif
}
Gtk::Label const *
diff --git a/src/ui/widget/gimpspinscale.c b/src/ui/widget/gimpspinscale.c
index df39b9644..f9f9a3807 100644
--- a/src/ui/widget/gimpspinscale.c
+++ b/src/ui/widget/gimpspinscale.c
@@ -408,21 +408,20 @@ static gboolean
gimp_spin_scale_expose (GtkWidget *widget, GdkEventExpose *event)
#endif
{
- GimpSpinScalePrivate *private = GET_PRIVATE (widget);
- GtkStyle *style = gtk_widget_get_style (widget);
-
+ GimpSpinScalePrivate *private = GET_PRIVATE (widget);
#if WITH_GTKMM_3_0
+ GtkStyleContext *style = gtk_widget_get_style_context(widget);
GtkAllocation allocation;
+ GdkRGBA color;
cairo_save (cr);
GTK_WIDGET_CLASS (parent_class)->draw (widget, cr);
cairo_restore (cr);
gtk_widget_get_allocation (widget, &allocation);
-
-
#else
+ GtkStyle *style = gtk_widget_get_style (widget);
cairo_t *cr;
gint w;
@@ -432,12 +431,7 @@ static gboolean
gdk_cairo_region (cr, event->region);
cairo_clip (cr);
-#if GTK_CHECK_VERSION(2, 24,0)
w = gdk_window_get_width (event->window);
-#else
- gdk_drawable_get_size (event->window, &w, NULL);
-#endif
-
#endif
cairo_set_line_width (cr, 1.0);
@@ -504,12 +498,17 @@ static gboolean
#if WITH_GTKMM_3_0
cairo_move_to (cr, layout_offset_x, text_area.y + layout_offset_y-3);
+
+ gtk_style_context_get_color (style, gtk_widget_get_state_flags (widget),
+ &color);
+
+ gdk_cairo_set_source_rgba (cr, &color);
#else
cairo_move_to (cr, layout_offset_x, layout_offset_y-3);
-#endif
-
+
gdk_cairo_set_source_color (cr,
&style->text[gtk_widget_get_state (widget)]);
+#endif
pango_cairo_show_layout (cr, private->layout);
}
@@ -687,12 +686,7 @@ gimp_spin_scale_change_value (GtkWidget *widget,
gimp_spin_scale_get_limits (GIMP_SPIN_SCALE (widget), &lower, &upper);
-#if GTK_CHECK_VERSION(2, 24,0)
width = gdk_window_get_width (text_window);
-#else
- gdk_drawable_get_size (text_window, &width, NULL);
-#endif
-
#endif
diff --git a/src/ui/widget/preferences-widget.cpp b/src/ui/widget/preferences-widget.cpp
index b793893c7..e7e317d11 100644
--- a/src/ui/widget/preferences-widget.cpp
+++ b/src/ui/widget/preferences-widget.cpp
@@ -378,12 +378,7 @@ ZoomCorrRuler::redraw() {
Glib::RefPtr<Gdk::Window> window = get_window();
Cairo::RefPtr<Cairo::Context> cr = window->create_cairo_context();
-#if WITH_GTKMM_2_24
int w = window->get_width();
-#else
- int w, h;
- window->get_size(w, h);
-#endif
_drawing_width = w - _border * 2;
cr->set_source_rgb(1.0, 1.0, 1.0);
@@ -597,11 +592,7 @@ void PrefCombo::init(Glib::ustring const &prefs_path,
for (int i = 0 ; i < num_items; ++i)
{
-#if WITH_GTKMM_2_24
this->append(labels[i]);
-#else
- this->append_text(labels[i]);
-#endif
_values.push_back(values[i]);
if (value == values[i])
row = i;
@@ -623,11 +614,7 @@ void PrefCombo::init(Glib::ustring const &prefs_path,
for (int i = 0 ; i < num_items; ++i)
{
-#if WITH_GTKMM_2_24
this->append(labels[i]);
-#else
- this->append_text(labels[i]);
-#endif
_ustr_values.push_back(values[i]);
if (value == values[i])
row = i;
diff --git a/src/ui/widget/unit-menu.cpp b/src/ui/widget/unit-menu.cpp
index 86e8c9e58..18b7bcab9 100644
--- a/src/ui/widget/unit-menu.cpp
+++ b/src/ui/widget/unit-menu.cpp
@@ -34,11 +34,7 @@ bool UnitMenu::setUnitType(UnitType unit_type)
UnitTable::UnitMap::iterator iter = m.begin();
while(iter != m.end()) {
Glib::ustring text = (*iter).first;
-#if WITH_GTKMM_2_24
append(text);
-#else
- append_text(text);
-#endif
++iter;
}
_type = unit_type;
@@ -49,11 +45,7 @@ bool UnitMenu::setUnitType(UnitType unit_type)
bool UnitMenu::resetUnitType(UnitType unit_type)
{
-#if WITH_GTKMM_2_24
- remove_all();
-#else
- clear_items();
-#endif
+ remove_all();
return setUnitType(unit_type);
}
@@ -61,11 +53,7 @@ bool UnitMenu::resetUnitType(UnitType unit_type)
void UnitMenu::addUnit(Unit const& u)
{
_unit_table.addUnit(u, false);
-#if WITH_GTKMM_2_24
append(u.abbr);
-#else
- append_text(u.abbr);
-#endif
}
Unit UnitMenu::getUnit() const
diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt
index 38180bd69..19410ee1d 100644
--- a/src/widgets/CMakeLists.txt
+++ b/src/widgets/CMakeLists.txt
@@ -36,7 +36,6 @@ set(widgets_SRC
select-toolbar.cpp
shrink-wrap-button.cpp
sp-attribute-widget.cpp
- sp-color-gtkselector.cpp
sp-color-icc-selector.cpp
sp-color-notebook.cpp
sp-color-scales.cpp
@@ -94,7 +93,6 @@ set(widgets_SRC
select-toolbar.h
shrink-wrap-button.h
sp-attribute-widget.h
- sp-color-gtkselector.h
sp-color-icc-selector.h
sp-color-notebook.h
sp-color-scales.h
diff --git a/src/widgets/Makefile_insert b/src/widgets/Makefile_insert
index 7d6b413bd..46f0bd645 100644
--- a/src/widgets/Makefile_insert
+++ b/src/widgets/Makefile_insert
@@ -66,8 +66,6 @@ ink_common_sources += \
widgets/spiral-toolbar.h \
widgets/sp-attribute-widget.cpp \
widgets/sp-attribute-widget.h \
- widgets/sp-color-gtkselector.cpp \
- widgets/sp-color-gtkselector.h \
widgets/sp-color-icc-selector.cpp \
widgets/sp-color-icc-selector.h \
widgets/sp-color-notebook.cpp \
diff --git a/src/widgets/calligraphy-toolbar.cpp b/src/widgets/calligraphy-toolbar.cpp
index 1c39cd9e5..287deb815 100644
--- a/src/widgets/calligraphy-toolbar.cpp
+++ b/src/widgets/calligraphy-toolbar.cpp
@@ -74,6 +74,16 @@ using Inkscape::UI::PrefPusher;
//########################
//## Calligraphy ##
//########################
+
+std::vector<Glib::ustring> get_presets_list() {
+
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+
+ std::vector<Glib::ustring> presets = prefs->getAllDirs("/tools/calligraphic/preset");
+
+ return presets;
+}
+
void update_presets_list(GObject *tbl)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
@@ -88,7 +98,7 @@ void update_presets_list(GObject *tbl)
return;
}
- std::vector<Glib::ustring> presets = prefs->getAllDirs("/tools/calligraphic/preset");
+ std::vector<Glib::ustring> presets = get_presets_list();
int ege_index = 1;
for (std::vector<Glib::ustring>::iterator i = presets.begin(); i != presets.end(); ++i, ++ege_index) {
@@ -233,22 +243,24 @@ static void sp_dcc_build_presets_list(GObject *tbl)
// iterate over all presets to populate the list
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- std::vector<Glib::ustring> presets = prefs->getAllDirs("/tools/calligraphic/preset");
+ std::vector<Glib::ustring> presets = get_presets_list();
int ii=1;
for (std::vector<Glib::ustring>::iterator i = presets.begin(); i != presets.end(); ++i) {
GtkTreeIter iter;
Glib::ustring preset_name = prefs->getString(*i + "/name");
- gtk_list_store_append( model, &iter );
- gtk_list_store_set( model, &iter, 0, _(preset_name.data()), 1, ii++, -1 );
+ if (!preset_name.empty()) {
+ gtk_list_store_append( model, &iter );
+ gtk_list_store_set( model, &iter, 0, _(preset_name.data()), 1, ii++, -1 );
+ }
}
- {
+/* {
GtkTreeIter iter;
gtk_list_store_append( model, &iter );
gtk_list_store_set( model, &iter, 0, _("Save..."), 1, ii, -1 );
g_object_set_data(tbl, "save_presets_index", GINT_TO_POINTER(ii));
- }
+ }*/
g_object_set_data(tbl, "presets_blocked", GINT_TO_POINTER(FALSE));
@@ -268,15 +280,25 @@ static void sp_dcc_save_profile(GtkWidget * /*widget*/, GObject *tbl)
return;
}
- CalligraphicProfileRename::show(desktop);
+ EgeSelectOneAction *sel = static_cast<EgeSelectOneAction *>(g_object_get_data(tbl, "profile_selector"));
+ //gint preset_index = ege_select_one_action_get_active( sel );
+ Glib::ustring current_profile_name = _("No preset");
+ if (ege_select_one_action_get_active_text( sel )) {
+ current_profile_name = ege_select_one_action_get_active_text( sel );
+ }
+
+ if (current_profile_name == _("No preset")) {
+ current_profile_name = "";
+ }
+ CalligraphicProfileRename::show(desktop, current_profile_name);
if ( !CalligraphicProfileRename::applied()) {
// dialog cancelled
update_presets_list (tbl);
return;
}
- Glib::ustring profile_name = CalligraphicProfileRename::getProfileName();
+ Glib::ustring new_profile_name = CalligraphicProfileRename::getProfileName();
- if (profile_name.empty()) {
+ if (new_profile_name.empty()) {
// empty name entered
update_presets_list (tbl);
return;
@@ -285,7 +307,7 @@ static void sp_dcc_save_profile(GtkWidget * /*widget*/, GObject *tbl)
g_object_set_data(tbl, "presets_blocked", GINT_TO_POINTER(TRUE));
// If there's a preset with the given name, find it and set save_path appropriately
- std::vector<Glib::ustring> presets = prefs->getAllDirs("/tools/calligraphic/preset");
+ std::vector<Glib::ustring> presets = get_presets_list();
int total_presets = presets.size();
int new_index = -1;
Glib::ustring save_path; // profile pref path without a trailing slash
@@ -293,13 +315,21 @@ static void sp_dcc_save_profile(GtkWidget * /*widget*/, GObject *tbl)
int temp_index = 0;
for (std::vector<Glib::ustring>::iterator i = presets.begin(); i != presets.end(); ++i, ++temp_index) {
Glib::ustring name = prefs->getString(*i + "/name");
- if (!name.empty() && profile_name == name) {
+ if (!name.empty() && (new_profile_name == name || current_profile_name == name)) {
new_index = temp_index;
save_path = *i;
break;
}
}
+
+ if ( CalligraphicProfileRename::deleted() && new_index != -1) {
+ prefs->remove(save_path);
+ g_object_set_data(tbl, "presets_blocked", GINT_TO_POINTER(FALSE));
+ sp_dcc_build_presets_list (tbl);
+ return;
+ }
+
if (new_index == -1) {
// no preset with this name, create
new_index = total_presets + 1;
@@ -327,7 +357,7 @@ static void sp_dcc_save_profile(GtkWidget * /*widget*/, GObject *tbl)
g_warning("Bad key when writing preset: %s\n", widget_name);
}
}
- prefs->setString(save_path + "/name", profile_name);
+ prefs->setString(save_path + "/name", new_profile_name);
g_object_set_data(tbl, "presets_blocked", GINT_TO_POINTER(FALSE));
sp_dcc_build_presets_list (tbl);
@@ -338,7 +368,7 @@ static void sp_ddc_change_profile(EgeSelectOneAction* act, GObject* tbl)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- gint preset_index = ege_select_one_action_get_active( act );
+ guint preset_index = ege_select_one_action_get_active( act );
// This is necessary because EgeSelectOneAction spams us with GObject "changed" signal calls
// even when the preset is not changed. It would be good to replace it with something more
// modern. Index 0 means "No preset", so we don't do anything.
@@ -346,6 +376,7 @@ static void sp_ddc_change_profile(EgeSelectOneAction* act, GObject* tbl)
return;
}
+/*
gint save_presets_index = GPOINTER_TO_INT(g_object_get_data(tbl, "save_presets_index"));
if (preset_index == save_presets_index) {
@@ -353,14 +384,19 @@ static void sp_ddc_change_profile(EgeSelectOneAction* act, GObject* tbl)
sp_dcc_save_profile(NULL, tbl);
return;
}
+*/
if (g_object_get_data(tbl, "presets_blocked")) {
return;
}
// preset_index is one-based so we subtract 1
- std::vector<Glib::ustring> presets = prefs->getAllDirs("/tools/calligraphic/preset");
- Glib::ustring preset_path = presets.at(preset_index - 1);
+ std::vector<Glib::ustring> presets = get_presets_list();
+
+ Glib::ustring preset_path = "";
+ if (preset_index - 1 < presets.size()) {
+ preset_path = presets.at(preset_index - 1);
+ }
if (!preset_path.empty()) {
g_object_set_data(tbl, "presets_blocked", GINT_TO_POINTER(TRUE)); //temporarily block the selector so no one will updadte it while we're reading it
@@ -391,9 +427,16 @@ static void sp_ddc_change_profile(EgeSelectOneAction* act, GObject* tbl)
}
}
g_object_set_data(tbl, "presets_blocked", GINT_TO_POINTER(FALSE));
+ } else {
+ ege_select_one_action_set_active(act, 0);
}
}
+static void sp_ddc_edit_profile(GtkAction * /*act*/, GObject* tbl)
+{
+ sp_dcc_save_profile(NULL, tbl);
+}
+
void sp_calligraphy_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
@@ -595,6 +638,18 @@ void sp_calligraphy_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions
g_signal_connect(G_OBJECT(act1), "changed", G_CALLBACK(sp_ddc_change_profile), holder);
gtk_action_group_add_action(mainActions, GTK_ACTION(act1));
}
+
+ /*calligraphic profile editor */
+ {
+ InkAction* inky = ink_action_new( "ProfileEditAction",
+ _("Add/Edit Profile"),
+ _("Add or edit calligraphic profile"),
+ GTK_STOCK_PROPERTIES,
+ Inkscape::ICON_SIZE_DECORATION );
+ g_object_set( inky, "short_label", _("Edit"), NULL );
+ g_signal_connect_after( G_OBJECT(inky), "activate", G_CALLBACK(sp_ddc_edit_profile), (GObject*)holder );
+ gtk_action_group_add_action( mainActions, GTK_ACTION(inky) );
+ }
}
}
diff --git a/src/widgets/eek-preview.cpp b/src/widgets/eek-preview.cpp
index 72db91373..535a5d101 100644
--- a/src/widgets/eek-preview.cpp
+++ b/src/widgets/eek-preview.cpp
@@ -296,15 +296,8 @@ static gboolean eek_preview_draw(GtkWidget* widget, cairo_t* cr)
GdkWindow *da_window = gtk_widget_get_window(GTK_WIDGET(da));
cairo_t *cr = gdk_cairo_create(da_window);
-#if GTK_CHECK_VERSION(2,24,0)
gint w = gdk_window_get_width(da_window);
gint h = gdk_window_get_height(da_window);
-#else
- gint w = 0;
- gint h = 0;
- gdk_drawable_get_size(da_window, &w, &h);
-#endif
-
if ((w != preview->_scaledW) || (h != preview->_scaledH)) {
if (preview->_scaled) {
diff --git a/src/widgets/font-selector.cpp b/src/widgets/font-selector.cpp
index c7f28fb9c..dde511612 100644
--- a/src/widgets/font-selector.cpp
+++ b/src/widgets/font-selector.cpp
@@ -218,16 +218,7 @@ static void sp_font_selector_init(SPFontSelector *fsel)
gtk_widget_show(hb);
gtk_box_pack_start(GTK_BOX(vb), hb, FALSE, FALSE, 0);
-/*
-This would introduce dependency on gtk version 2.24 which is currently not available in
-Trisquel GNU/Linux 4.5.1 (released on May 25th, 2011)
-This conditional and its #else block can be deleted in the future.
-*/
-#if GTK_CHECK_VERSION(2, 24,0)
fsel->size = gtk_combo_box_text_new_with_entry ();
-#else
- fsel->size = gtk_combo_box_entry_new_text ();
-#endif
sp_font_selector_set_size_tooltip(fsel);
gtk_widget_set_size_request(fsel->size, 90, -1);
@@ -346,11 +337,7 @@ static void sp_font_selector_set_sizes( SPFontSelector *fsel )
{
double size = sizes[n] / ratios[unit];
-#if GTK_CHECK_VERSION(2, 24,0)
gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(fsel->size), Glib::ustring::format(size).c_str());
-#else
- gtk_combo_box_append_text (GTK_COMBO_BOX(fsel->size), Glib::ustring::format(size).c_str());
-#endif
}
}
@@ -358,11 +345,7 @@ static void sp_font_selector_set_sizes( SPFontSelector *fsel )
static void sp_font_selector_size_changed( GtkComboBox */*cbox*/, SPFontSelector *fsel )
{
char *text = NULL;
-#if GTK_CHECK_VERSION(2, 24,0)
text = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (fsel->size));
-#else
- text = gtk_combo_box_get_active_text (GTK_COMBO_BOX (fsel->size));
-#endif
gfloat old_size = fsel->fontsize;
gchar *endptr;
diff --git a/src/widgets/gradient-selector.cpp b/src/widgets/gradient-selector.cpp
index 33388a0c1..89a891284 100644
--- a/src/widgets/gradient-selector.cpp
+++ b/src/widgets/gradient-selector.cpp
@@ -53,6 +53,8 @@ static void sp_gradient_selector_dispose(GObject *object);
static void sp_gradient_selector_vector_set (SPGradientVectorSelector *gvs, SPGradient *gr, SPGradientSelector *sel);
static void sp_gradient_selector_edit_vector_clicked (GtkWidget *w, SPGradientSelector *sel);
static void sp_gradient_selector_add_vector_clicked (GtkWidget *w, SPGradientSelector *sel);
+static void sp_gradient_selector_delete_vector_clicked (GtkWidget *w, SPGradientSelector *sel);
+
static GtkVBoxClass *parent_class;
static guint signals[LAST_SIGNAL] = {0};
@@ -125,6 +127,7 @@ static void sp_gradient_selector_init(SPGradientSelector *sel)
sel->safelyInit = true;
sel->blocked = false;
new (&sel->nonsolid) std::vector<GtkWidget*>();
+ new (&sel->swatch_widgets) std::vector<GtkWidget*>();
sel->mode = SPGradientSelector::MODE_LINEAR;
@@ -189,7 +192,7 @@ static void sp_gradient_selector_init(SPGradientSelector *sel)
#else
GtkWidget *hb = gtk_hbox_new( FALSE, 2 );
#endif
- sel->nonsolid.push_back(hb);
+ //sel->nonsolid.push_back(hb);
gtk_box_pack_start( GTK_BOX(sel), hb, FALSE, FALSE, 0 );
sel->add = gtk_button_new ();
@@ -213,6 +216,16 @@ static void sp_gradient_selector_init(SPGradientSelector *sel)
gtk_button_set_relief(GTK_BUTTON(sel->edit), GTK_RELIEF_NONE);
gtk_widget_set_tooltip_text( sel->edit, _("Edit gradient"));
+ sel->del = gtk_button_new ();
+ gtk_button_set_image((GtkButton*)sel->del , gtk_image_new_from_stock ( GTK_STOCK_REMOVE, GTK_ICON_SIZE_SMALL_TOOLBAR ) );
+
+ sel->swatch_widgets.push_back(sel->del);
+ gtk_box_pack_start (GTK_BOX (hb), sel->del, FALSE, FALSE, 0);
+ g_signal_connect (G_OBJECT (sel->del), "clicked", G_CALLBACK (sp_gradient_selector_delete_vector_clicked), sel);
+ gtk_widget_set_sensitive (sel->del, FALSE);
+ gtk_button_set_relief(GTK_BUTTON(sel->del), GTK_RELIEF_NONE);
+ gtk_widget_set_tooltip_text( sel->del, _("Delete swatch"));
+
gtk_widget_show_all(hb);
@@ -226,6 +239,7 @@ static void sp_gradient_selector_dispose(GObject *object)
sel->safelyInit = false;
using std::vector;
sel->nonsolid.~vector<GtkWidget*>();
+ sel->swatch_widgets.~vector<GtkWidget*>();
}
if (sel->icon_renderer) {
@@ -265,9 +279,28 @@ void SPGradientSelector::setMode(SelectorMode mode)
{
gtk_widget_hide(*it);
}
+ for (std::vector<GtkWidget*>::iterator it = swatch_widgets.begin(); it != swatch_widgets.end(); ++it)
+ {
+ gtk_widget_show_all(*it);
+ }
+
+ Gtk::TreeView::Column* icon_column = treeview->get_column(0);
+ icon_column->set_title(_("Swatch"));
SPGradientVectorSelector* vs = SP_GRADIENT_VECTOR_SELECTOR(vectors);
vs->setSwatched();
+ } else {
+ for (std::vector<GtkWidget*>::iterator it = nonsolid.begin(); it != nonsolid.end(); ++it)
+ {
+ gtk_widget_show_all(*it);
+ }
+ for (std::vector<GtkWidget*>::iterator it = swatch_widgets.begin(); it != swatch_widgets.end(); ++it)
+ {
+ gtk_widget_hide(*it);
+ }
+ Gtk::TreeView::Column* icon_column = treeview->get_column(0);
+ icon_column->set_title(_("Gradient"));
+
}
}
}
@@ -412,6 +445,17 @@ void SPGradientSelector::setVector(SPDocument *doc, SPGradient *vector)
gtk_widget_show_all(*it);
}
}
+ } else if (mode != MODE_SWATCH) {
+
+ for (std::vector<GtkWidget*>::iterator it = swatch_widgets.begin(); it != swatch_widgets.end(); ++it)
+ {
+ gtk_widget_hide(*it);
+ }
+ for (std::vector<GtkWidget*>::iterator it = nonsolid.begin(); it != nonsolid.end(); ++it)
+ {
+ gtk_widget_show_all(*it);
+ }
+
}
if (edit) {
@@ -420,6 +464,9 @@ void SPGradientSelector::setVector(SPDocument *doc, SPGradient *vector)
if (add) {
gtk_widget_set_sensitive(add, TRUE);
}
+ if (del) {
+ gtk_widget_set_sensitive(del, TRUE);
+ }
} else {
if (edit) {
gtk_widget_set_sensitive(edit, FALSE);
@@ -427,6 +474,9 @@ void SPGradientSelector::setVector(SPDocument *doc, SPGradient *vector)
if (add) {
gtk_widget_set_sensitive(add, (doc != NULL));
}
+ if (del) {
+ gtk_widget_set_sensitive(del, FALSE);
+ }
}
}
@@ -451,6 +501,29 @@ sp_gradient_selector_vector_set (SPGradientVectorSelector *gvs, SPGradient *gr,
}
}
+
+static void
+sp_gradient_selector_delete_vector_clicked (GtkWidget */*w*/, SPGradientSelector *sel)
+{
+ const Glib::RefPtr<Gtk::TreeSelection> selection = sel->treeview->get_selection();
+ if (!selection) {
+ return;
+ }
+
+ SPGradient *obj = NULL;
+ /* Single selection */
+ Gtk::TreeModel::iterator iter = selection->get_selected();
+ if ( iter ) {
+ Gtk::TreeModel::Row row = *iter;
+ obj = row[sel->columns->data];
+ }
+
+ if (obj) {
+ sp_gradient_unset_swatch(SP_ACTIVE_DESKTOP, obj->getId());
+ }
+
+}
+
static void
sp_gradient_selector_edit_vector_clicked (GtkWidget */*w*/, SPGradientSelector *sel)
{
diff --git a/src/widgets/gradient-selector.h b/src/widgets/gradient-selector.h
index 01c18a48d..ea83ff819 100644
--- a/src/widgets/gradient-selector.h
+++ b/src/widgets/gradient-selector.h
@@ -97,6 +97,7 @@ struct SPGradientSelector {
/* Editing buttons */
GtkWidget *edit;
GtkWidget *add;
+ GtkWidget *del;
GtkWidget *merge;
/* Position widget */
@@ -106,6 +107,7 @@ struct SPGradientSelector {
bool blocked;
std::vector<GtkWidget*> nonsolid;
+ std::vector<GtkWidget*> swatch_widgets;
void setMode(SelectorMode mode);
void setUnits(SPGradientUnits units);
diff --git a/src/widgets/icon.cpp b/src/widgets/icon.cpp
index c7ddc2352..d3b7e2dbb 100644
--- a/src/widgets/icon.cpp
+++ b/src/widgets/icon.cpp
@@ -40,15 +40,6 @@
#include "icon.h"
-// Bring in work-around for Glib versions missing GStatBuf
-#if !GLIB_CHECK_VERSION(2,25,0)
-#if defined (_MSC_VER) && !defined(_WIN64)
-typedef struct _stat32 GStatBuf;
-#else //defined (_MSC_VER) && !defined(_WIN64)
-typedef struct stat GStatBuf;
-#endif //defined (_MSC_VER) && !defined(_WIN64)
-#endif //!GLIB_CHECK_VERSION(2,25,0)
-
struct IconImpl {
static void classInit(SPIconClass *klass);
static void init(SPIcon *icon);
diff --git a/src/widgets/ruler.cpp b/src/widgets/ruler.cpp
index 72c839b19..5104d5a9d 100644
--- a/src/widgets/ruler.cpp
+++ b/src/widgets/ruler.cpp
@@ -690,7 +690,14 @@ static void sp_ruler_real_draw_pos(SPRuler *ruler,
y = ROUND ((priv->position - priv->lower) * increment) + (ythickness - bs_height) / 2 - 1;
}
+#if GTK_CHECK_VERSION(3,0,0)
+ GtkStyleContext *sc = gtk_widget_get_style_context(widget);
+ GdkRGBA color;
+ gtk_style_context_get_color(sc, gtk_widget_get_state_flags(widget), &color);
+ gdk_cairo_set_source_rgba(cr, &color);
+#else
gdk_cairo_set_source_color(cr, &style->fg[gtk_widget_get_state(widget)]);
+#endif
cairo_move_to (cr, x, y);
diff --git a/src/widgets/sp-color-gtkselector.cpp b/src/widgets/sp-color-gtkselector.cpp
deleted file mode 100644
index b19685c66..000000000
--- a/src/widgets/sp-color-gtkselector.cpp
+++ /dev/null
@@ -1,153 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-#include <glibmm/i18n.h>
-#include "sp-color-gtkselector.h"
-
-
-static void sp_color_gtkselector_class_init (SPColorGtkselectorClass *klass);
-static void sp_color_gtkselector_init (SPColorGtkselector *csel);
-static void sp_color_gtkselector_dispose(GObject *object);
-
-static void sp_color_gtkselector_show_all (GtkWidget *widget);
-static void sp_color_gtkselector_hide(GtkWidget *widget);
-
-
-static SPColorSelectorClass *parent_class;
-
-#define XPAD 4
-#define YPAD 1
-
-GType
-sp_color_gtkselector_get_type (void)
-{
- static GType type = 0;
- if (!type) {
- static const GTypeInfo info = {
- sizeof (SPColorGtkselectorClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) sp_color_gtkselector_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (SPColorGtkselector),
- 0, /* n_preallocs */
- (GInstanceInitFunc) sp_color_gtkselector_init,
- NULL,
- };
-
- type = g_type_register_static (SP_TYPE_COLOR_SELECTOR,
- "SPColorGtkselector",
- &info,
- static_cast< GTypeFlags > (0) );
- }
- return type;
-}
-
-static void
-sp_color_gtkselector_class_init (SPColorGtkselectorClass *klass)
-{
- static const gchar* nameset[] = {N_("System"), 0};
- GObjectClass *object_class = (GObjectClass *) klass;
- GtkWidgetClass *widget_class;
- SPColorSelectorClass *selector_class;
-
- widget_class = (GtkWidgetClass *) klass;
- selector_class = SP_COLOR_SELECTOR_CLASS (klass);
-
- parent_class = SP_COLOR_SELECTOR_CLASS (g_type_class_peek_parent (klass));
-
- selector_class->name = nameset;
- selector_class->submode_count = 1;
-
- object_class->dispose = sp_color_gtkselector_dispose;
-
- widget_class->show_all = sp_color_gtkselector_show_all;
- widget_class->hide = sp_color_gtkselector_hide;
-}
-
-void sp_color_gtkselector_init (SPColorGtkselector *csel)
-{
- SP_COLOR_SELECTOR(csel)->base = new ColorGtkselector( SP_COLOR_SELECTOR(csel) );
-
- if ( SP_COLOR_SELECTOR(csel)->base )
- {
- SP_COLOR_SELECTOR(csel)->base->init();
- }
-}
-
-void ColorGtkselector::init()
-{
- GtkWidget *gtksel = gtk_color_selection_new();
- gtk_widget_show (gtksel);
- _gtkThing = GTK_COLOR_SELECTION (gtksel);
- gtk_box_pack_start (GTK_BOX (_csel), gtksel, TRUE, TRUE, 0);
-
- _sigId = g_signal_connect(gtksel, "color-changed", G_CALLBACK( _gtkChanged ), _csel);
-}
-
-static void sp_color_gtkselector_dispose(GObject *object)
-{
- if (((GObjectClass *) (parent_class))->dispose)
- (* ((GObjectClass *) (parent_class))->dispose) (object);
-}
-
-static void
-sp_color_gtkselector_show_all (GtkWidget *widget)
-{
- gtk_widget_show (widget);
-}
-
-static void sp_color_gtkselector_hide(GtkWidget *widget)
-{
- gtk_widget_hide(widget);
-}
-
-GtkWidget *
-sp_color_gtkselector_new( GType )
-{
- SPColorGtkselector *csel = SP_COLOR_GTKSELECTOR(g_object_new (SP_TYPE_COLOR_GTKSELECTOR, NULL));
-
- return GTK_WIDGET (csel);
-}
-
-ColorGtkselector::ColorGtkselector( SPColorSelector* csel )
- : ColorSelector( csel ),
- _gtkThing(0)
-{
-}
-
-ColorGtkselector::~ColorGtkselector()
-{
-}
-
-void ColorGtkselector::_colorChanged()
-{
- GdkColor gcolor;
-
- gcolor.pixel = 0;
- gcolor.red = static_cast< guint16 >(_color.v.c[0] * 65535);
- gcolor.green = static_cast< guint16 >(_color.v.c[1] * 65535);
- gcolor.blue = static_cast< guint16 >(_color.v.c[2] * 65535);
-
-// g_message( "***** _colorChanged %04x %04x %04x", gcolor.red, gcolor.green, gcolor.blue );
- g_signal_handler_block( _gtkThing, _sigId );
- gtk_color_selection_set_current_alpha( _gtkThing, static_cast<guint16>(65535 * _alpha) );
- gtk_color_selection_set_current_color( _gtkThing, &gcolor );
- g_signal_handler_unblock(_gtkThing, _sigId );
-}
-
-void ColorGtkselector::_gtkChanged( GtkColorSelection *colorselection, SPColorGtkselector *gtksel )
-{
- GdkColor color;
- gtk_color_selection_get_current_color (colorselection, &color);
-
- guint16 alpha = gtk_color_selection_get_current_alpha (colorselection);
-
- SPColor ourColor( (color.red / 65535.0), (color.green / 65535.0), (color.blue / 65535.0) );
-
-// g_message( "***** _gtkChanged %04x %04x %04x", color.red, color.green, color.blue );
-
- ColorGtkselector* gtkInst = static_cast<ColorGtkselector *>(SP_COLOR_SELECTOR(gtksel)->base);
- gtkInst->_updateInternals( ourColor, static_cast< gfloat > (alpha) / 65535.0, gtk_color_selection_is_adjusting(colorselection) );
-}
diff --git a/src/widgets/sp-color-gtkselector.h b/src/widgets/sp-color-gtkselector.h
deleted file mode 100644
index 3142406c1..000000000
--- a/src/widgets/sp-color-gtkselector.h
+++ /dev/null
@@ -1,55 +0,0 @@
-#ifndef SEEN_SP_COLOR_GTKSELECTOR_H
-#define SEEN_SP_COLOR_GTKSELECTOR_H
-
-#include <gtk/gtk.h>
-#include "../color.h"
-#include "sp-color-selector.h"
-
-#include <glib.h>
-
-
-
-struct SPColorGtkselector;
-
-
-
-class ColorGtkselector: public ColorSelector
-{
-public:
- ColorGtkselector( SPColorSelector* csel );
- virtual ~ColorGtkselector();
-
- virtual void init();
-
-protected:
- static void _gtkChanged( GtkColorSelection *colorselection, SPColorGtkselector *gtksel );
-
- virtual void _colorChanged();
-
- GtkColorSelection* _gtkThing;
- gulong _sigId;
-};
-
-
-
-#define SP_TYPE_COLOR_GTKSELECTOR (sp_color_gtkselector_get_type ())
-#define SP_COLOR_GTKSELECTOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SP_TYPE_COLOR_GTKSELECTOR, SPColorGtkselector))
-#define SP_COLOR_GTKSELECTOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SP_TYPE_COLOR_GTKSELECTOR, SPColorGtkselectorClass))
-#define SP_IS_COLOR_GTKSELECTOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SP_TYPE_COLOR_GTKSELECTOR))
-#define SP_IS_COLOR_GTKSELECTOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SP_TYPE_COLOR_GTKSELECTOR))
-
-struct SPColorGtkselector {
- SPColorSelector base;
-};
-
-struct SPColorGtkselectorClass {
- SPColorSelectorClass parent_class;
-};
-
-GType sp_color_gtkselector_get_type (void);
-
-GtkWidget *sp_color_gtkselector_new( GType selector_type );
-
-
-
-#endif // SEEN_SP_COLOR_GTKSELECTOR_H
diff --git a/src/widgets/sp-color-icc-selector.cpp b/src/widgets/sp-color-icc-selector.cpp
index b021ac43d..80974c2e4 100644
--- a/src/widgets/sp-color-icc-selector.cpp
+++ b/src/widgets/sp-color-icc-selector.cpp
@@ -272,13 +272,17 @@ void getThings( Inkscape::ColorProfile *prof, gchar const**& namers, gchar const
void ColorICCSelector::init()
{
- GtkWidget *t;
gint row = 0;
_updating = FALSE;
_dragging = FALSE;
- t = gtk_table_new (5, 3, FALSE);
+#if GTK_CHECK_VERSION(3,0,0)
+ GtkWidget *t = gtk_grid_new();
+#else
+ GtkWidget *t = gtk_table_new(5, 3, FALSE);
+#endif
+
gtk_widget_show (t);
gtk_box_pack_start (GTK_BOX (_csel), t, TRUE, TRUE, 4);
@@ -299,7 +303,16 @@ void ColorICCSelector::init()
gtk_widget_set_tooltip_text( _fixupBtn, _("Fix RGB fallback to match icc-color() value.") );
//gtk_misc_set_alignment( GTK_MISC (_fixupBtn), 1.0, 0.5 );
gtk_widget_show( _fixupBtn );
+
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_margin_left(_fixupBtn, XPAD);
+ gtk_widget_set_margin_right(_fixupBtn, XPAD);
+ gtk_widget_set_margin_top(_fixupBtn, YPAD);
+ gtk_widget_set_margin_bottom(_fixupBtn, YPAD);
+ gtk_grid_attach(GTK_GRID(t), _fixupBtn, 0, row, 1, 1);
+#else
gtk_table_attach( GTK_TABLE (t), _fixupBtn, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, XPAD, YPAD );
+#endif
// Combobox and store with 2 columns : label (0) and full name (1)
GtkListStore *store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
@@ -315,7 +328,16 @@ void ColorICCSelector::init()
gtk_widget_show( _profileSel );
gtk_combo_box_set_active( GTK_COMBO_BOX(_profileSel), 0 );
+
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_margin_left(_profileSel, XPAD);
+ gtk_widget_set_margin_right(_profileSel, XPAD);
+ gtk_widget_set_margin_top(_profileSel, YPAD);
+ gtk_widget_set_margin_bottom(_profileSel, YPAD);
+ gtk_grid_attach(GTK_GRID(t), _profileSel, 1, row, 1, 1);
+#else
gtk_table_attach( GTK_TABLE(t), _profileSel, 1, 2, row, row + 1, GTK_FILL, GTK_FILL, XPAD, YPAD );
+#endif
#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
_profChangedID = g_signal_connect( G_OBJECT(_profileSel), "changed", G_CALLBACK(_profileSelected), (gpointer)this );
@@ -342,7 +364,16 @@ void ColorICCSelector::init()
#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
gtk_misc_set_alignment( GTK_MISC (_fooLabel[i]), 1.0, 0.5 );
gtk_widget_show( _fooLabel[i] );
+
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_margin_left(_fooLabel[i], XPAD);
+ gtk_widget_set_margin_right(_fooLabel[i], XPAD);
+ gtk_widget_set_margin_top(_fooLabel[i], YPAD);
+ gtk_widget_set_margin_bottom(_fooLabel[i], YPAD);
+ gtk_grid_attach(GTK_GRID(t), _fooLabel[i], 0, row, 1, 1);
+#else
gtk_table_attach( GTK_TABLE (t), _fooLabel[i], 0, 1, row, row + 1, GTK_FILL, GTK_FILL, XPAD, YPAD );
+#endif
/* Adjustment */
gdouble step = static_cast<gdouble>(_fooScales[i]) / 100.0;
@@ -358,7 +389,17 @@ void ColorICCSelector::init()
gtk_widget_set_tooltip_text( _fooSlider[i], "." );
#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
gtk_widget_show( _fooSlider[i] );
- gtk_table_attach( GTK_TABLE (t), _fooSlider[i], 1, 2, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)GTK_FILL, XPAD, YPAD );
+
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_margin_left(_fooSlider[i], XPAD);
+ gtk_widget_set_margin_right(_fooSlider[i], XPAD);
+ gtk_widget_set_margin_top(_fooSlider[i], YPAD);
+ gtk_widget_set_margin_bottom(_fooSlider[i], YPAD);
+ gtk_widget_set_hexpand(_fooSlider[i], TRUE);
+ gtk_grid_attach(GTK_GRID(t), _fooSlider[i], 1, row, 1, 1);
+#else
+ gtk_table_attach( GTK_TABLE (t), _fooSlider[i], 1, 2, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_FILL, XPAD, YPAD );
+#endif
_fooBtn[i] = gtk_spin_button_new( _fooAdj[i], step, digits );
#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
@@ -369,7 +410,18 @@ void ColorICCSelector::init()
sp_dialog_defocus_on_enter( _fooBtn[i] );
gtk_label_set_mnemonic_widget( GTK_LABEL(_fooLabel[i]), _fooBtn[i] );
gtk_widget_show( _fooBtn[i] );
+
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_margin_left(_fooBtn[i], XPAD);
+ gtk_widget_set_margin_right(_fooBtn[i], XPAD);
+ gtk_widget_set_margin_top(_fooBtn[i], YPAD);
+ gtk_widget_set_margin_bottom(_fooBtn[i], YPAD);
+ gtk_widget_set_halign(_fooBtn[i], GTK_ALIGN_CENTER);
+ gtk_widget_set_valign(_fooBtn[i], GTK_ALIGN_CENTER);
+ gtk_grid_attach(GTK_GRID(t), _fooBtn[i], 2, row, 1, 1);
+#else
gtk_table_attach( GTK_TABLE (t), _fooBtn[i], 2, 3, row, row + 1, (GtkAttachOptions)0, (GtkAttachOptions)0, XPAD, YPAD );
+#endif
_fooMap[i] = g_new( guchar, 4 * 1024 );
memset( _fooMap[i], 0x0ff, 1024 * 4 );
@@ -389,7 +441,16 @@ void ColorICCSelector::init()
_label = gtk_label_new_with_mnemonic (_("_A:"));
gtk_misc_set_alignment (GTK_MISC (_label), 1.0, 0.5);
gtk_widget_show (_label);
+
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_margin_left(_label, XPAD);
+ gtk_widget_set_margin_right(_label, XPAD);
+ gtk_widget_set_margin_top(_label, YPAD);
+ gtk_widget_set_margin_bottom(_label, YPAD);
+ gtk_grid_attach(GTK_GRID(t), _label, 0, row, 1, 1);
+#else
gtk_table_attach (GTK_TABLE (t), _label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, XPAD, YPAD);
+#endif
/* Adjustment */
_adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 0.0, 255.0, 1.0, 10.0, 10.0);
@@ -398,7 +459,17 @@ void ColorICCSelector::init()
_slider = sp_color_slider_new (_adj);
gtk_widget_set_tooltip_text (_slider, _("Alpha (opacity)"));
gtk_widget_show (_slider);
- gtk_table_attach (GTK_TABLE (t), _slider, 1, 2, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)GTK_FILL, XPAD, YPAD);
+
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_margin_left(_slider, XPAD);
+ gtk_widget_set_margin_right(_slider, XPAD);
+ gtk_widget_set_margin_top(_slider, YPAD);
+ gtk_widget_set_margin_bottom(_slider, YPAD);
+ gtk_widget_set_hexpand(_slider, TRUE);
+ gtk_grid_attach(GTK_GRID(t), _slider, 1, row, 1, 1);
+#else
+ gtk_table_attach (GTK_TABLE (t), _slider, 1, 2, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_FILL, XPAD, YPAD);
+#endif
sp_color_slider_set_colors( SP_COLOR_SLIDER( _slider ),
SP_RGBA32_F_COMPOSE( 1.0, 1.0, 1.0, 0.0 ),
@@ -412,7 +483,18 @@ void ColorICCSelector::init()
sp_dialog_defocus_on_enter (_sbtn);
gtk_label_set_mnemonic_widget (GTK_LABEL(_label), _sbtn);
gtk_widget_show (_sbtn);
+
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_margin_left(_sbtn, XPAD);
+ gtk_widget_set_margin_right(_sbtn, XPAD);
+ gtk_widget_set_margin_top(_sbtn, YPAD);
+ gtk_widget_set_margin_bottom(_sbtn, YPAD);
+ gtk_widget_set_halign(_sbtn, GTK_ALIGN_CENTER);
+ gtk_widget_set_valign(_sbtn, GTK_ALIGN_CENTER);
+ gtk_grid_attach(GTK_GRID(t), _sbtn, 2, row, 1, 1);
+#else
gtk_table_attach (GTK_TABLE (t), _sbtn, 2, 3, row, row + 1, (GtkAttachOptions)0, (GtkAttachOptions)0, XPAD, YPAD);
+#endif
/* Signals */
g_signal_connect (G_OBJECT (_adj), "value_changed",
diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp
index 0856fd86b..fa586ce5f 100644
--- a/src/widgets/sp-color-notebook.cpp
+++ b/src/widgets/sp-color-notebook.cpp
@@ -195,7 +195,6 @@ sp_color_notebook_init (SPColorNotebook *colorbook)
void ColorNotebook::init()
{
- GtkWidget* table = 0;
guint row = 0;
guint i = 0;
guint j = 0;
@@ -279,22 +278,49 @@ void ColorNotebook::init()
}
}
- table = gtk_table_new (2, 3, FALSE);
+#if GTK_CHECK_VERSION(3,0,0)
+ GtkWidget* table = gtk_grid_new();
+#else
+ GtkWidget* table = gtk_table_new(2, 3, FALSE);
+#endif
+
gtk_widget_show (table);
gtk_box_pack_start (GTK_BOX (_csel), table, TRUE, TRUE, 0);
sp_set_font_size_smaller (_buttonbox);
+
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_margin_left(_buttonbox, XPAD);
+ gtk_widget_set_margin_right(_buttonbox, XPAD);
+ gtk_widget_set_margin_top(_buttonbox, YPAD);
+ gtk_widget_set_margin_bottom(_buttonbox, YPAD);
+ gtk_widget_set_hexpand(_buttonbox, TRUE);
+ gtk_widget_set_valign(_buttonbox, GTK_ALIGN_CENTER);
+ gtk_grid_attach(GTK_GRID(table), _buttonbox, 0, row, 2, 1);
+#else
gtk_table_attach (GTK_TABLE (table), _buttonbox, 0, 2, row, row + 1,
static_cast<GtkAttachOptions>(GTK_EXPAND|GTK_FILL),
static_cast<GtkAttachOptions>(0),
XPAD, YPAD);
+#endif
+
row++;
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_margin_left(_book, XPAD*2);
+ gtk_widget_set_margin_right(_book, XPAD*2);
+ gtk_widget_set_margin_top(_book, YPAD);
+ gtk_widget_set_margin_bottom(_book, YPAD);
+ gtk_widget_set_hexpand(_book, TRUE);
+ gtk_widget_set_vexpand(_book, TRUE);
+ gtk_grid_attach(GTK_GRID(table), _book, 0, row, 2, 1);
+#else
gtk_table_attach (GTK_TABLE (table), _book, 0, 2, row, row + 1,
static_cast<GtkAttachOptions>(GTK_EXPAND|GTK_FILL),
static_cast<GtkAttachOptions>(GTK_EXPAND|GTK_FILL),
XPAD*2, YPAD);
+#endif
// restore the last active page
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
@@ -349,7 +375,6 @@ void ColorNotebook::init()
#if GTK_CHECK_VERSION(3,0,0)
GtkWidget *rgbabox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
- gtk_box_set_homogeneous(GTK_BOX(rgbabox), FALSE);
#else
GtkWidget *rgbabox = gtk_hbox_new (FALSE, 0);
#endif
@@ -376,7 +401,6 @@ void ColorNotebook::init()
gtk_widget_set_tooltip_text (_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 //defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
@@ -411,7 +435,15 @@ void ColorNotebook::init()
gtk_widget_hide(GTK_WIDGET(_box_toomuchink));
#endif //defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_margin_left(rgbabox, XPAD);
+ gtk_widget_set_margin_right(rgbabox, XPAD);
+ gtk_widget_set_margin_top(rgbabox, YPAD);
+ gtk_widget_set_margin_bottom(rgbabox, YPAD);
+ gtk_grid_attach(GTK_GRID(table), rgbabox, 0, row, 2, 1);
+#else
gtk_table_attach (GTK_TABLE (table), rgbabox, 0, 2, row, row + 1, GTK_FILL, GTK_SHRINK, XPAD, YPAD);
+#endif
#ifdef SPCS_PREVIEW
_p = sp_color_preview_new (0xffffffff);
diff --git a/src/widgets/sp-color-scales.cpp b/src/widgets/sp-color-scales.cpp
index 159fc96e5..95c6d341d 100644
--- a/src/widgets/sp-color-scales.cpp
+++ b/src/widgets/sp-color-scales.cpp
@@ -133,13 +133,16 @@ void sp_color_scales_init (SPColorScales *cs)
void ColorScales::init()
{
- GtkWidget *t;
gint i;
_updating = FALSE;
_dragging = FALSE;
- t = gtk_table_new (5, 3, FALSE);
+#if GTK_CHECK_VERSION(3,0,0)
+ GtkWidget *t = gtk_grid_new();
+#else
+ GtkWidget *t = gtk_table_new (5, 3, FALSE);
+#endif
gtk_widget_show (t);
gtk_box_pack_start (GTK_BOX (_csel), t, TRUE, TRUE, 4);
@@ -149,20 +152,51 @@ void ColorScales::init()
_l[i] = gtk_label_new("");
gtk_misc_set_alignment (GTK_MISC (_l[i]), 1.0, 0.5);
gtk_widget_show (_l[i]);
+
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_margin_left(_l[i], XPAD);
+ gtk_widget_set_margin_right(_l[i], XPAD);
+ gtk_widget_set_margin_top(_l[i], YPAD);
+ gtk_widget_set_margin_bottom(_l[i], YPAD);
+ gtk_grid_attach(GTK_GRID(t), _l[i], 0, i, 1, 1);
+#else
gtk_table_attach (GTK_TABLE (t), _l[i], 0, 1, i, i + 1, GTK_FILL, GTK_FILL, XPAD, YPAD);
+#endif
+
/* Adjustment */
_a[i] = (GtkAdjustment *) gtk_adjustment_new (0.0, 0.0, _rangeLimit, 1.0, 10.0, 10.0);
/* Slider */
_s[i] = sp_color_slider_new (_a[i]);
gtk_widget_show (_s[i]);
- gtk_table_attach (GTK_TABLE (t), _s[i], 1, 2, i, i + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)GTK_FILL, XPAD, YPAD);
+
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_margin_left(_s[i], XPAD);
+ gtk_widget_set_margin_right(_s[i], XPAD);
+ gtk_widget_set_margin_top(_s[i], YPAD);
+ gtk_widget_set_margin_bottom(_s[i], YPAD);
+ gtk_widget_set_hexpand(_s[i], TRUE);
+ gtk_grid_attach(GTK_GRID(t), _s[i], 1, i, 1, 1);
+#else
+ gtk_table_attach (GTK_TABLE (t), _s[i], 1, 2, i, i + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_FILL, XPAD, YPAD);
+#endif
/* Spinbutton */
_b[i] = gtk_spin_button_new (GTK_ADJUSTMENT (_a[i]), 1.0, 0);
sp_dialog_defocus_on_enter (_b[i]);
gtk_label_set_mnemonic_widget (GTK_LABEL(_l[i]), _b[i]);
gtk_widget_show (_b[i]);
+
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_margin_left(_b[i], XPAD);
+ gtk_widget_set_margin_right(_b[i], XPAD);
+ gtk_widget_set_margin_top(_b[i], YPAD);
+ gtk_widget_set_margin_bottom(_b[i], YPAD);
+ gtk_widget_set_halign(_b[i], GTK_ALIGN_CENTER);
+ gtk_widget_set_valign(_b[i], GTK_ALIGN_CENTER);
+ gtk_grid_attach(GTK_GRID(t), _b[i], 2, i, 1, 1);
+#else
gtk_table_attach (GTK_TABLE (t), _b[i], 2, 3, i, i + 1, (GtkAttachOptions)0, (GtkAttachOptions)0, XPAD, YPAD);
+#endif
/* Attach channel value to adjustment */
g_object_set_data (G_OBJECT (_a[i]), "channel", GINT_TO_POINTER (i));
diff --git a/src/widgets/sp-color-slider.cpp b/src/widgets/sp-color-slider.cpp
index 37b9e022a..3ba748f2b 100644
--- a/src/widgets/sp-color-slider.cpp
+++ b/src/widgets/sp-color-slider.cpp
@@ -648,13 +648,22 @@ static gboolean sp_color_slider_draw(GtkWidget *widget, cairo_t *cr)
gint w = ARROW_SIZE;
cairo_set_line_width(cr, 1.0);
+#if GTK_CHECK_VERSION(3,0,0)
+ GdkRGBA white = {1,1,1,1};
+ GdkRGBA black = {0,0,0,1};
+#else
GdkColor white, black;
gdk_color_parse("#fff", &white);
gdk_color_parse("#000", &black);
+#endif
while ( w > 0 )
{
+#if GTK_CHECK_VERSION(3,0,0)
+ gdk_cairo_set_source_rgba(cr, &white);
+#else
gdk_cairo_set_source_color(cr, &white);
+#endif
cairo_move_to(cr, x - 0.5, y1 + 0.5);
cairo_line_to(cr, x + w - 1 + 0.5, y1 + 0.5);
cairo_move_to(cr, x - 0.5, y2 + 0.5);
@@ -664,7 +673,11 @@ static gboolean sp_color_slider_draw(GtkWidget *widget, cairo_t *cr)
x++;
if ( w > 0 )
{
+#if GTK_CHECK_VERSION(3,0,0)
+ gdk_cairo_set_source_rgba(cr, &black);
+#else
gdk_cairo_set_source_color(cr, &black);
+#endif
cairo_move_to(cr, x - 0.5, y1 + 0.5);
cairo_line_to(cr, x + w - 1 + 0.5, y1 + 0.5);
cairo_move_to(cr, x - 0.5, y2 + 0.5);
diff --git a/src/widgets/sp-color-wheel-selector.cpp b/src/widgets/sp-color-wheel-selector.cpp
index fe168b403..a979a168a 100644
--- a/src/widgets/sp-color-wheel-selector.cpp
+++ b/src/widgets/sp-color-wheel-selector.cpp
@@ -146,13 +146,17 @@ static void handleWheelAllocation(GtkHSV *hsv, GtkAllocation *allocation, gpoint
void ColorWheelSelector::init()
{
- GtkWidget *t;
gint row = 0;
_updating = FALSE;
_dragging = FALSE;
- t = gtk_table_new (5, 3, FALSE);
+#if GTK_CHECK_VERSION(3,0,0)
+ GtkWidget *t = gtk_grid_new();
+#else
+ GtkWidget *t = gtk_table_new (5, 3, FALSE);
+#endif
+
gtk_widget_show (t);
gtk_box_pack_start (GTK_BOX (_csel), t, TRUE, TRUE, 0);
@@ -162,7 +166,16 @@ void ColorWheelSelector::init()
_wheel = gtk_hsv_new();
gtk_hsv_set_metrics( GTK_HSV(_wheel), 48, 8 );
gtk_widget_show( _wheel );
- gtk_table_attach( GTK_TABLE(t), _wheel, 0, 3, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0);
+
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_halign(_wheel, GTK_ALIGN_FILL);
+ gtk_widget_set_valign(_wheel, GTK_ALIGN_FILL);
+ gtk_widget_set_hexpand(_wheel, TRUE);
+ gtk_widget_set_vexpand(_wheel, TRUE);
+ gtk_grid_attach(GTK_GRID(t), _wheel, 0, row, 3, 1);
+#else
+ gtk_table_attach(GTK_TABLE(t), _wheel, 0, 3, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0);
+#endif
row++;
@@ -170,7 +183,18 @@ void ColorWheelSelector::init()
_label = gtk_label_new_with_mnemonic (_("_A:"));
gtk_misc_set_alignment (GTK_MISC (_label), 1.0, 0.5);
gtk_widget_show (_label);
+
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_margin_left(_label, XPAD);
+ gtk_widget_set_margin_right(_label, XPAD);
+ gtk_widget_set_margin_top(_label, YPAD);
+ gtk_widget_set_margin_bottom(_label, YPAD);
+ gtk_widget_set_halign(_label, GTK_ALIGN_FILL);
+ gtk_widget_set_valign(_label, GTK_ALIGN_FILL);
+ gtk_grid_attach(GTK_GRID(t), _label, 0, row, 1, 1);
+#else
gtk_table_attach (GTK_TABLE (t), _label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, XPAD, YPAD);
+#endif
/* Adjustment */
_adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 0.0, 255.0, 1.0, 10.0, 10.0);
@@ -179,7 +203,19 @@ void ColorWheelSelector::init()
_slider = sp_color_slider_new (_adj);
gtk_widget_set_tooltip_text (_slider, _("Alpha (opacity)"));
gtk_widget_show (_slider);
- gtk_table_attach (GTK_TABLE (t), _slider, 1, 2, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)GTK_FILL, XPAD, YPAD);
+
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_margin_left(_slider, XPAD);
+ gtk_widget_set_margin_right(_slider, XPAD);
+ gtk_widget_set_margin_top(_slider, YPAD);
+ gtk_widget_set_margin_bottom(_slider, YPAD);
+ gtk_widget_set_hexpand(_slider, TRUE);
+ gtk_widget_set_halign(_slider, GTK_ALIGN_FILL);
+ gtk_widget_set_valign(_slider, GTK_ALIGN_FILL);
+ gtk_grid_attach(GTK_GRID(t), _slider, 1, row, 1, 1);
+#else
+ gtk_table_attach(GTK_TABLE (t), _slider, 1, 2, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_FILL, XPAD, YPAD);
+#endif
sp_color_slider_set_colors (SP_COLOR_SLIDER (_slider),
SP_RGBA32_F_COMPOSE (1.0, 1.0, 1.0, 0.0),
@@ -193,7 +229,18 @@ void ColorWheelSelector::init()
sp_dialog_defocus_on_enter (_sbtn);
gtk_label_set_mnemonic_widget (GTK_LABEL(_label), _sbtn);
gtk_widget_show (_sbtn);
+
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_margin_left(_sbtn, XPAD);
+ gtk_widget_set_margin_right(_sbtn, XPAD);
+ gtk_widget_set_margin_top(_sbtn, YPAD);
+ gtk_widget_set_margin_bottom(_sbtn, YPAD);
+ gtk_widget_set_halign(_sbtn, GTK_ALIGN_CENTER);
+ gtk_widget_set_valign(_sbtn, GTK_ALIGN_CENTER);
+ gtk_grid_attach(GTK_GRID(t), _sbtn, 2, row, 1, 1);
+#else
gtk_table_attach (GTK_TABLE (t), _sbtn, 2, 3, row, row + 1, (GtkAttachOptions)0, (GtkAttachOptions)0, XPAD, YPAD);
+#endif
/* Signals */
g_signal_connect (G_OBJECT (_adj), "value_changed",
diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp
index b758e4f0f..a5e929c7d 100644
--- a/src/widgets/toolbox.cpp
+++ b/src/widgets/toolbox.cpp
@@ -407,6 +407,7 @@ static gchar const * ui_descr =
" <toolbar name='CalligraphyToolbar'>"
" <separator />"
" <toolitem action='SetProfileAction'/>"
+ " <toolitem action='ProfileEditAction'/>"
" <separator />"
" <toolitem action='CalligraphyWidthAction' />"
" <toolitem action='PressureAction' />"