summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTavmjong Bah <tavmjong@free.fr>2018-11-29 12:35:01 +0000
committerTavmjong Bah <tavmjong@free.fr>2018-11-29 12:35:01 +0000
commit04bb2839ce56feefb18fa5b2eb053501ef8f6edf (patch)
treea36e53c9bb58111475687c80b2e45ff45f6147db /src
parentUpdate/correct README. (diff)
downloadinkscape-04bb2839ce56feefb18fa5b2eb053501ef8f6edf.tar.gz
inkscape-04bb2839ce56feefb18fa5b2eb053501ef8f6edf.zip
Start of making View independent of GUI.
Diffstat (limited to 'src')
-rw-r--r--src/object/sp-anchor.cpp24
-rw-r--r--src/object/sp-item.h26
-rw-r--r--src/ui/view/svg-view.cpp57
3 files changed, 63 insertions, 44 deletions
diff --git a/src/object/sp-anchor.cpp b/src/object/sp-anchor.cpp
index 9fd556945..d4361a4ef 100644
--- a/src/object/sp-anchor.cpp
+++ b/src/object/sp-anchor.cpp
@@ -20,7 +20,7 @@
#include "xml/repr.h"
#include "attributes.h"
#include "sp-anchor.h"
-#include "ui/view/view.h"
+#include "ui/view/svg-view.h"
#include "document.h"
SPAnchor::SPAnchor() : SPGroup() {
@@ -153,22 +153,34 @@ gchar* SPAnchor::description() const {
}
/* fixme: We should forward event to appropriate container/view */
+/* The only use of SPEvent appears to be here, to change the cursor in Inkview when over a link (and
+ * which hasn't worked since at least 0.48). */
gint SPAnchor::event(SPEvent* event) {
switch (event->type) {
- case SP_EVENT_ACTIVATE:
+ case SPEvent::ACTIVATE:
if (this->href) {
g_print("Activated xlink:href=\"%s\"\n", this->href);
return TRUE;
}
break;
- case SP_EVENT_MOUSEOVER:
- (static_cast<Inkscape::UI::View::View*>(event->data))->mouseover();
+ case SPEvent::MOUSEOVER:
+ {
+ auto view = dynamic_cast<Inkscape::UI::View::SVGView*>(event->view);
+ if (view) {
+ view->mouseover();
+ }
break;
+ }
- case SP_EVENT_MOUSEOUT:
- (static_cast<Inkscape::UI::View::View*>(event->data))->mouseout();
+ case SPEvent::MOUSEOUT:
+ {
+ auto view = dynamic_cast<Inkscape::UI::View::SVGView*>(event->view);
+ if (view) {
+ view->mouseout();
+ }
break;
+ }
default:
break;
diff --git a/src/object/sp-item.h b/src/object/sp-item.h
index 2bd8f2215..068571d85 100644
--- a/src/object/sp-item.h
+++ b/src/object/sp-item.h
@@ -46,15 +46,12 @@ class Drawing;
class DrawingItem;
class URIReference;
+namespace UI {
+namespace View {
+class View;
+}
+}
}
-
-enum {
- SP_EVENT_INVALID,
- SP_EVENT_NONE,
- SP_EVENT_ACTIVATE,
- SP_EVENT_MOUSEOVER,
- SP_EVENT_MOUSEOUT
-};
// TODO make a completely new function that transforms either the fill or
// stroke of any SPItem without adding an extra parameter to adjust_pattern.
@@ -75,9 +72,18 @@ enum PatternTransform {
*
*/
class SPEvent {
+
public:
- unsigned int type;
- void* data;
+ enum Type {
+ INVALID,
+ NONE,
+ ACTIVATE,
+ MOUSEOVER,
+ MOUSEOUT
+ };
+
+ Type type;
+ Inkscape::UI::View::View* view;
};
class SPItemView {
diff --git a/src/ui/view/svg-view.cpp b/src/ui/view/svg-view.cpp
index 6db3fa2a4..e86228322 100644
--- a/src/ui/view/svg-view.cpp
+++ b/src/ui/view/svg-view.cpp
@@ -130,11 +130,12 @@ void SVGView::mouseout()
gdk_window_set_cursor(window, nullptr);
}
+
//----------------------------------------------------------------
/**
* Callback connected with arena_event.
*/
-/// \todo fixme.
+/// \todo fixme. This hasn't worked since at least 0.48. It should result in a cursor change over <a></a> links.
static gint arena_handler(SPCanvasArena */*arena*/, Inkscape::DrawingItem *ai, GdkEvent *event, SVGView *svgview)
{
static gdouble x, y;
@@ -144,46 +145,46 @@ static gint arena_handler(SPCanvasArena */*arena*/, Inkscape::DrawingItem *ai, G
SPItem *spitem = (ai) ? (static_cast<SPItem*>(ai->data())) : nullptr;
switch (event->type) {
- case GDK_BUTTON_PRESS:
- if (event->button.button == 1) {
- active = TRUE;
- x = event->button.x;
- y = event->button.y;
- }
- break;
- case GDK_BUTTON_RELEASE:
- if (event->button.button == 1) {
- if (active && (event->button.x == x) &&
- (event->button.y == y)) {
- spev.type = SP_EVENT_ACTIVATE;
- if ( spitem != nullptr )
- {
- spitem->emitEvent (spev);
- }
- }
+ case GDK_BUTTON_PRESS:
+ if (event->button.button == 1) {
+ active = TRUE;
+ x = event->button.x;
+ y = event->button.y;
+ }
+ break;
+ case GDK_BUTTON_RELEASE:
+ if (event->button.button == 1) {
+ if (active && (event->button.x == x) &&
+ (event->button.y == y)) {
+ spev.type = SPEvent::ACTIVATE;
+ if ( spitem != nullptr )
+ {
+ spitem->emitEvent (spev);
+ }
+ }
}
active = FALSE;
break;
- case GDK_MOTION_NOTIFY:
+ case GDK_MOTION_NOTIFY:
active = FALSE;
break;
- case GDK_ENTER_NOTIFY:
- spev.type = SP_EVENT_MOUSEOVER;
- spev.data = svgview;
+ case GDK_ENTER_NOTIFY:
+ spev.type = SPEvent::MOUSEOVER;
+ spev.view = svgview;
if ( spitem != nullptr )
{
- spitem->emitEvent (spev);
+ spitem->emitEvent (spev);
}
break;
- case GDK_LEAVE_NOTIFY:
- spev.type = SP_EVENT_MOUSEOUT;
- spev.data = svgview;
+ case GDK_LEAVE_NOTIFY:
+ spev.type = SPEvent::MOUSEOUT;
+ spev.view = svgview;
if ( spitem != nullptr )
{
- spitem->emitEvent (spev);
+ spitem->emitEvent (spev);
}
break;
- default:
+ default:
break;
}