summaryrefslogtreecommitdiffstats
path: root/src/widgets/desktop-widget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets/desktop-widget.cpp')
-rw-r--r--src/widgets/desktop-widget.cpp80
1 files changed, 70 insertions, 10 deletions
diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp
index e19f56e48..1fdd3ca6d 100644
--- a/src/widgets/desktop-widget.cpp
+++ b/src/widgets/desktop-widget.cpp
@@ -70,6 +70,9 @@
#include "widget-sizes.h"
#include "verbs.h"
+#if GTK_CHECK_VERSION(3,0,0)
+# include <gtkmm/cssprovider.h>
+#endif
#include <gtkmm/paned.h>
#include <gtkmm/messagedialog.h>
@@ -107,6 +110,7 @@ static void sp_desktop_widget_realize (GtkWidget *widget);
static gint sp_desktop_widget_event (GtkWidget *widget, GdkEvent *event, SPDesktopWidget *dtw);
static void sp_dtw_color_profile_event(EgeColorProfTracker *widget, SPDesktopWidget *dtw);
+static void sp_update_guides_lock( GtkWidget *button, gpointer data );
#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
static void cms_adjust_toggled( GtkWidget *button, gpointer data );
#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
@@ -390,6 +394,19 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw )
dtw->tool_toolbox = ToolboxFactory::createToolToolbox();
ToolboxFactory::setOrientation( dtw->tool_toolbox, GTK_ORIENTATION_VERTICAL );
gtk_box_pack_start( GTK_BOX(dtw->hbox), dtw->tool_toolbox, FALSE, TRUE, 0 );
+ // Lock guides button
+ dtw->guides_lock = sp_button_new_from_data( Inkscape::ICON_SIZE_DECORATION,
+ SP_BUTTON_TYPE_TOGGLE,
+ NULL,
+ INKSCAPE_ICON("object-locked"),
+ _("Toggle lock of all guides in the document"));
+#if GTK_CHECK_VERSION(3,0,0)
+ Glib::RefPtr<Gtk::CssProvider> guides_lock_style_provider = Gtk::CssProvider::create();
+ guides_lock_style_provider->load_from_data("GtkWidget { padding-left: 0; padding-right: 0; padding-top: 0; padding-bottom: 0; }");
+ Gtk::Widget * wnd = Glib::wrap(dtw->guides_lock);
+ Glib::RefPtr<Gtk::StyleContext> context = wnd->get_style_context();
+ context->add_provider(guides_lock_style_provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+#endif
/* Horizontal ruler */
GtkWidget *eventbox = gtk_event_box_new ();
@@ -407,23 +424,31 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw )
GtkWidget *tbl = gtk_grid_new();
dtw->canvas_tbl = gtk_grid_new();
+ gtk_grid_attach(GTK_GRID(dtw->canvas_tbl), dtw->guides_lock, 0, 0, 1, 1);
gtk_grid_attach(GTK_GRID(dtw->canvas_tbl), eventbox, 1, 0, 1, 1);
#else
GtkWidget *tbl = gtk_table_new(2, 3, FALSE);
dtw->canvas_tbl = gtk_table_new(3, 3, FALSE);
gtk_table_attach(GTK_TABLE(dtw->canvas_tbl),
- eventbox,
- 1, 2, 0, 1,
+ dtw->guides_lock,
+ 0, 1, 0, 1,
GTK_FILL, GTK_FILL,
0, 0);
+ gtk_table_attach(GTK_TABLE(dtw->canvas_tbl),
+ eventbox,
+ 1, 2, 0, 1,
+ GTK_FILL, GTK_FILL,
+ 0, 0);
#endif
-
+ g_signal_connect (G_OBJECT (dtw->guides_lock), "toggled", G_CALLBACK (sp_update_guides_lock), dtw);
gtk_box_pack_start( GTK_BOX(dtw->hbox), tbl, TRUE, TRUE, 1 );
/* Vertical ruler */
eventbox = gtk_event_box_new ();
dtw->vruler = sp_ruler_new(GTK_ORIENTATION_VERTICAL);
+
+ /* Vertical ruler */
dtw->vruler_box = eventbox;
sp_ruler_set_unit (SP_RULER (dtw->vruler), pt);
gtk_widget_set_tooltip_text (dtw->vruler_box, gettext(pt->name_plural.c_str()));
@@ -446,6 +471,9 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw )
// Horizontal scrollbar
dtw->hadj = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, -4000.0, 4000.0, 10.0, 100.0, 4.0));
+
+
+
#if GTK_CHECK_VERSION(3,0,0)
dtw->hscrollbar = gtk_scrollbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_ADJUSTMENT (dtw->hadj));
gtk_grid_attach(GTK_GRID(dtw->canvas_tbl), dtw->hscrollbar, 1, 2, 1, 1);
@@ -1015,6 +1043,7 @@ sp_desktop_widget_event (GtkWidget *widget, GdkEvent *event, SPDesktopWidget *dt
return FALSE;
}
+
#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
void sp_dtw_color_profile_event(EgeColorProfTracker */*tracker*/, SPDesktopWidget *dtw)
{
@@ -1036,6 +1065,27 @@ void sp_dtw_color_profile_event(EgeColorProfTracker */*tracker*/, SPDesktopWidge
}
#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
+void sp_update_guides_lock( GtkWidget */*button*/, gpointer data )
+{
+ SPDesktopWidget *dtw = SP_DESKTOP_WIDGET(data);
+
+ bool down = SP_BUTTON_IS_DOWN(dtw->guides_lock);
+
+ SPDocument *doc = dtw->desktop->getDocument();
+ SPNamedView *nv = dtw->desktop->getNamedView();
+ Inkscape::XML::Node *repr = nv->getRepr();
+
+ if ( down != nv->lockguides ) {
+ nv->lockguides = down;
+ sp_namedview_guides_toggle_lock(doc, repr);
+ if (down) {
+ dtw->setMessage (Inkscape::NORMAL_MESSAGE, _("Locked all guides"));
+ } else {
+ dtw->setMessage (Inkscape::NORMAL_MESSAGE, _("Unlocked all guides"));
+ }
+ }
+}
+
#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
void cms_adjust_toggled( GtkWidget */*button*/, gpointer data )
{
@@ -1450,7 +1500,6 @@ sp_desktop_widget_maximize(SPDesktopWidget *dtw)
void
sp_desktop_widget_fullscreen(SPDesktopWidget *dtw)
{
-#ifdef HAVE_GTK_WINDOW_FULLSCREEN
GtkWindow *topw = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(dtw->canvas)));
if (GTK_IS_WINDOW(topw)) {
if (dtw->desktop->is_fullscreen()) {
@@ -1474,7 +1523,6 @@ sp_desktop_widget_fullscreen(SPDesktopWidget *dtw)
// widget layout is triggered by the resulting window_state_event
}
}
-#endif /* HAVE_GTK_WINDOW_FULLSCREEN */
}
/**
@@ -1549,9 +1597,11 @@ void SPDesktopWidget::layoutWidgets()
}
if (!prefs->getBool(pref_root + "rulers/state", true)) {
+ gtk_widget_hide (dtw->guides_lock);
gtk_widget_hide (dtw->hruler);
gtk_widget_hide (dtw->vruler);
} else {
+ gtk_widget_show_all (dtw->guides_lock);
gtk_widget_show_all (dtw->hruler);
gtk_widget_show_all (dtw->vruler);
}
@@ -1684,6 +1734,7 @@ SPDesktopWidget* SPDesktopWidget::createInstance(SPNamedView *namedview)
/* Once desktop is set, we can update rulers */
sp_desktop_widget_update_rulers (dtw);
+ sp_button_toggle_set_down( SP_BUTTON(dtw->guides_lock), namedview->lockguides );
sp_view_widget_set_view (SP_VIEW_WIDGET (dtw), dtw->desktop);
@@ -1813,9 +1864,9 @@ bool SPDesktopWidget::onFocusInEvent(GdkEventFocus*)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
if (prefs->getBool("/options/bitmapautoreload/value", true)) {
- GSList const *imageList = (desktop->doc())->getResourceList("image");
- for (GSList const *p = imageList; p; p = p->next) {
- SPImage* image = SP_IMAGE(p->data);
+ std::set<SPObject *> imageList = (desktop->doc())->getResourceList("image");
+ for (std::set<SPObject *>::const_iterator it = imageList.begin(); it != imageList.end(); ++it) {
+ SPImage* image = SP_IMAGE(*it);
sp_image_refresh_if_outdated( image );
}
}
@@ -2039,11 +2090,13 @@ void
sp_desktop_widget_toggle_rulers (SPDesktopWidget *dtw)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- if (gtk_widget_get_visible (dtw->hruler)) {
+ if (gtk_widget_get_visible (dtw->guides_lock)) {
+ gtk_widget_hide (dtw->guides_lock);
gtk_widget_hide (dtw->hruler);
gtk_widget_hide (dtw->vruler);
prefs->setBool(dtw->desktop->is_fullscreen() ? "/fullscreen/rulers/state" : "/window/rulers/state", false);
} else {
+ gtk_widget_show_all (dtw->guides_lock);
gtk_widget_show_all (dtw->hruler);
gtk_widget_show_all (dtw->vruler);
prefs->setBool(dtw->desktop->is_fullscreen() ? "/fullscreen/rulers/state" : "/window/rulers/state", true);
@@ -2075,7 +2128,6 @@ bool sp_desktop_widget_color_prof_adj_enabled( SPDesktopWidget *dtw )
void sp_desktop_widget_toggle_color_prof_adj( SPDesktopWidget *dtw )
{
-
if ( gtk_widget_get_sensitive( dtw->cms_adjust ) ) {
if ( SP_BUTTON_IS_DOWN(dtw->cms_adjust) ) {
sp_button_toggle_set_down( SP_BUTTON(dtw->cms_adjust), FALSE );
@@ -2085,6 +2137,14 @@ void sp_desktop_widget_toggle_color_prof_adj( SPDesktopWidget *dtw )
}
}
+void sp_desktop_widget_toggle_guides_lock( SPDesktopWidget *dtw )
+{
+ if ( SP_BUTTON_IS_DOWN(dtw->guides_lock) ) {
+ sp_button_toggle_set_down( SP_BUTTON(dtw->guides_lock), FALSE );
+ } else {
+ sp_button_toggle_set_down( SP_BUTTON(dtw->guides_lock), TRUE );
+ }
+}
/* Unused
void
sp_spw_toggle_menubar (SPDesktopWidget *dtw, bool is_fullscreen)