summaryrefslogtreecommitdiffstats
path: root/src/desktop.cpp
diff options
context:
space:
mode:
authorMatthew Petroff <matthew@mpetroff.net>2013-09-20 17:05:24 +0000
committerMatthew Petroff <matthew@mpetroff.net>2013-09-20 17:05:24 +0000
commit48b4ee48e518d65c3c5e49369a747c2aa4b0081b (patch)
tree7159f8bc67d3f96ae43c42c32cacec6f7813f6fa /src/desktop.cpp
parentFix bug in rectangle toolbar. (diff)
parentFix grids after C++ification. Patch from Markus Engel (diff)
downloadinkscape-48b4ee48e518d65c3c5e49369a747c2aa4b0081b.tar.gz
inkscape-48b4ee48e518d65c3c5e49369a747c2aa4b0081b.zip
Merge from trunk.
(bzr r12475.1.29)
Diffstat (limited to 'src/desktop.cpp')
-rw-r--r--src/desktop.cpp224
1 files changed, 163 insertions, 61 deletions
diff --git a/src/desktop.cpp b/src/desktop.cpp
index ea53b9cf7..d19a99da6 100644
--- a/src/desktop.cpp
+++ b/src/desktop.cpp
@@ -235,7 +235,9 @@ SPDesktop::init (SPNamedView *nv, SPCanvas *aCanvas, Inkscape::UI::View::EditWid
* call "set" instead of "push". Can we assume that there is only one
* context ever?
*/
- push_event_context (SP_TYPE_SELECT_CONTEXT, "/tools/select", SP_EVENT_CONTEXT_STATIC);
+ //push_event_context (SP_TYPE_SELECT_CONTEXT, "/tools/select", SP_EVENT_CONTEXT_STATIC);
+ //set_event_context(SP_TYPE_SELECT_CONTEXT, "/tools/select");
+ set_event_context2("/tools/select");
// display rect and zoom are now handled in sp_desktop_widget_realize()
@@ -359,11 +361,18 @@ void SPDesktop::destroy()
g_signal_handlers_disconnect_by_func(G_OBJECT (main), (gpointer) G_CALLBACK(sp_desktop_root_handler), this);
g_signal_handlers_disconnect_by_func(G_OBJECT (drawing), (gpointer) G_CALLBACK(_arena_handler), this);
- while (event_context) {
- SPEventContext *ec = event_context;
- event_context = ec->next;
- sp_event_context_finish (ec);
- g_object_unref (G_OBJECT (ec));
+// while (event_context) {
+// SPEventContext *ec = event_context;
+// event_context = ec->next;
+// sp_event_context_finish (ec);
+// g_object_unref (G_OBJECT (ec));
+// }
+ //sp_event_context_finish(event_context);
+ event_context->finish();
+ //g_object_unref(G_OBJECT(event_context));
+ if (event_context) {
+ delete event_context;
+ event_context = 0;
}
delete layers;
@@ -391,6 +400,65 @@ SPDesktop::~SPDesktop()
{
}
+
+SPEventContext* SPDesktop::getEventContext() const {
+ return event_context;
+}
+
+Inkscape::Selection* SPDesktop::getSelection() const {
+ return selection;
+}
+
+SPDocument* SPDesktop::getDocument() const {
+ return doc();
+}
+
+SPCanvas* SPDesktop::getCanvas() const {
+ return SP_CANVAS_ITEM(main)->canvas;
+}
+
+SPCanvasItem* SPDesktop::getAcetate() const {
+ return acetate;
+}
+
+SPCanvasGroup* SPDesktop::getMain() const {
+ return main;
+}
+
+SPCanvasGroup* SPDesktop::getGridGroup() const {
+ return gridgroup;
+}
+
+SPCanvasGroup* SPDesktop::getGuides() const {
+ return guides;
+}
+
+SPCanvasItem* SPDesktop::getDrawing() const {
+ return drawing;
+}
+
+SPCanvasGroup* SPDesktop::getSketch() const {
+ return sketch;
+}
+
+SPCanvasGroup* SPDesktop::getControls() const {
+ return controls;
+}
+
+SPCanvasGroup* SPDesktop::getTempGroup() const {
+ return tempgroup;
+}
+
+Inkscape::MessageStack* SPDesktop::getMessageStack() const {
+ return messageStack();
+}
+
+SPNamedView* SPDesktop::getNamedView() const {
+ return namedview;
+}
+
+
+
//--------------------------------------------------------------------
/* Public methods */
@@ -600,62 +668,89 @@ SPDesktop::change_document (SPDocument *theDocument)
_document_replaced_signal.emit (this, theDocument);
}
+
+#include "tool-factory.h"
+
+void SPDesktop::set_event_context2(const std::string& toolName) {
+ SPEventContext* ec_old = event_context;
+
+ if (ec_old) {
+ ec_old->deactivate();
+ }
+
+ SPEventContext* ec_new = ToolFactory::instance().createObject(toolName);
+ ec_new->desktop = this;
+ ec_new->message_context = new Inkscape::MessageContext(this->messageStack());
+ ec_new->setup();
+
+ event_context = ec_new;
+
+ if (ec_old) {
+ ec_old->finish();
+ delete ec_old;
+ }
+
+ sp_event_context_activate(event_context);
+
+ _event_context_changed_signal.emit(this, event_context);
+}
+
/**
* Make desktop switch event contexts.
*/
-void
-SPDesktop::set_event_context (GType type, const gchar *config)
-{
- SPEventContext *ec;
- while (event_context) {
- ec = event_context;
- sp_event_context_deactivate (ec);
- // we have to keep event_context valid during destruction - otherwise writing
- // destructors is next to impossible
- SPEventContext *next = ec->next;
- sp_event_context_finish (ec);
- g_object_unref (G_OBJECT (ec));
- event_context = next;
- }
-
- // The event_context will be null. This means that it will be impossible
- // to process any event invoked by the lines below. See for example bug
- // LP #622350. Cutting and undoing again in the node tool resets the event
- // context to the node tool. In this bug the line bellow invokes GDK_LEAVE_NOTIFY
- // events which cannot be handled and must be discarded.
- ec = sp_event_context_new (type, this, config, SP_EVENT_CONTEXT_STATIC);
- ec->next = event_context;
- event_context = ec;
- // Now the event_context has been set again and we can process all events again
- sp_event_context_activate (ec);
- _event_context_changed_signal.emit (this, ec);
-}
+//void
+//SPDesktop::set_event_context (GType type, const gchar *config)
+//{
+// //SPEventContext *ec;
+// //while (event_context) {
+// //ec = event_context;
+// sp_event_context_deactivate (event_context);
+// // we have to keep event_context valid during destruction - otherwise writing
+// // destructors is next to impossible
+// // SPEventContext *next = ec->next;
+// sp_event_context_finish (event_context);
+// g_object_unref (G_OBJECT (event_context));
+// // event_context = next;
+// //}
+//
+// // The event_context will be null. This means that it will be impossible
+// // to process any event invoked by the lines below. See for example bug
+// // LP #622350. Cutting and undoing again in the node tool resets the event
+// // context to the node tool. In this bug the line bellow invokes GDK_LEAVE_NOTIFY
+// // events which cannot be handled and must be discarded.
+// event_context = sp_event_context_new (type, this, config, SP_EVENT_CONTEXT_STATIC);
+// // ec->next = event_context;
+// //event_context = ec;
+// // Now the event_context has been set again and we can process all events again
+// sp_event_context_activate (event_context);
+// _event_context_changed_signal.emit (this, event_context);
+//}
/**
* Push event context onto desktop's context stack.
*/
-void
-SPDesktop::push_event_context (GType type, const gchar *config, unsigned int key)
-{
- SPEventContext *ref, *ec;
-
- if (event_context && event_context->key == key) return;
- ref = event_context;
- while (ref && ref->next && ref->next->key != key) ref = ref->next;
- if (ref && ref->next) {
- ec = ref->next;
- ref->next = ec->next;
- sp_event_context_finish (ec);
- g_object_unref (G_OBJECT (ec));
- }
-
- if (event_context) sp_event_context_deactivate (event_context);
- ec = sp_event_context_new (type, this, config, key);
- ec->next = event_context;
- event_context = ec;
- sp_event_context_activate (ec);
- _event_context_changed_signal.emit (this, ec);
-}
+//void
+//SPDesktop::push_event_context (GType type, const gchar *config, unsigned int key)
+//{
+// SPEventContext *ref, *ec;
+//
+// if (event_context && event_context->key == key) return;
+// ref = event_context;
+// while (ref && ref->next && ref->next->key != key) ref = ref->next;
+// if (ref && ref->next) {
+// ec = ref->next;
+// ref->next = ec->next;
+// sp_event_context_finish (ec);
+// g_object_unref (G_OBJECT (ec));
+// }
+//
+// if (event_context) sp_event_context_deactivate (event_context);
+// ec = sp_event_context_new (type, this, config, key);
+// ec->next = event_context;
+// event_context = ec;
+// sp_event_context_activate (ec);
+// _event_context_changed_signal.emit (this, ec);
+//}
/**
* Sets the coordinate status to a given point
@@ -786,7 +881,10 @@ SPDesktop::set_display_area (double x0, double y0, double x1, double y1, double
canvas->scrollTo(x0 * newscale - border, y1 * -newscale - border, clear);
/* update perspective lines if we are in the 3D box tool (so that infinite ones are shown correctly) */
- sp_box3d_context_update_lines(event_context);
+ //sp_box3d_context_update_lines(event_context);
+ if (SP_IS_BOX3D_CONTEXT(event_context)) {
+ SP_BOX3D_CONTEXT(event_context)->_vpdrag->updateLines();
+ }
_widget->updateRulers();
_widget->updateScrollbars(_d2w.descrim());
@@ -1107,7 +1205,10 @@ SPDesktop::scroll_world (double dx, double dy, bool is_scrolling)
canvas->scrollTo(viewbox.min()[Geom::X] - dx, viewbox.min()[Geom::Y] - dy, FALSE, is_scrolling);
/* update perspective lines if we are in the 3D box tool (so that infinite ones are shown correctly) */
- sp_box3d_context_update_lines(event_context);
+ //sp_box3d_context_update_lines(event_context);
+ if (SP_IS_BOX3D_CONTEXT(event_context)) {
+ SP_BOX3D_CONTEXT(event_context)->_vpdrag->updateLines();
+ }
_widget->updateRulers();
_widget->updateScrollbars(_d2w.descrim());
@@ -1407,10 +1508,10 @@ void SPDesktop::setWaitingCursor()
waiting_cursor = true;
}
-void SPDesktop::clearWaitingCursor()
-{
- if (waiting_cursor)
- sp_event_context_update_cursor(sp_desktop_event_context(this));
+void SPDesktop::clearWaitingCursor() {
+ if (waiting_cursor) {
+ this->event_context->sp_event_context_update_cursor();
+ }
}
void SPDesktop::toggleColorProfAdjust()
@@ -1822,6 +1923,7 @@ SPDesktop::show_dialogs()
mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_DISPLAY, "/dialogs/preferences") );
mapVerbPreference.insert(std::make_pair ((int)SP_VERB_SELECTION_GRIDTILE, "/dialogs/gridtiler") );
mapVerbPreference.insert(std::make_pair ((int)SP_VERB_SELECTION_TRACE, "/dialogs/trace") );
+ mapVerbPreference.insert(std::make_pair ((int)SP_VERB_SELECTION_PIXEL_ART, "/dialogs/pixelart") );
mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_TEXT, "/dialogs/textandfont") );
mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_EXPORT, "/dialogs/export") );
mapVerbPreference.insert(std::make_pair ((int)SP_VERB_DIALOG_XML_EDITOR, "/dialogs/xml") );