summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2014-03-16 00:55:18 +0000
committerDavid Robillard <d@drobilla.net>2014-03-16 00:55:18 +0000
commite9a2fb845bf1fb99daa62168e03989c48c97d33f (patch)
treeb5d686b8512c00bf049a9c834b455b83c99bfea5
parent6064fdb066e6be8aa2776f22d8b0eaf28b92dc54 (diff)
downloadganv-e9a2fb845bf1fb99daa62168e03989c48c97d33f.tar.gz
ganv-e9a2fb845bf1fb99daa62168e03989c48c97d33f.tar.bz2
ganv-e9a2fb845bf1fb99daa62168e03989c48c97d33f.zip
Allow user to enable or disable sprung layout.
This setting is saved with the patch so sprung patches remain sprung when loaded again, but manually arranged patches won't be mangled. git-svn-id: http://svn.drobilla.net/lad/trunk/ganv@5340 a436a847-0d15-0410-975c-d299462d15a1
-rw-r--r--ganv/canvas.h17
-rw-r--r--src/Canvas.cpp31
-rw-r--r--wscript2
3 files changed, 47 insertions, 3 deletions
diff --git a/ganv/canvas.h b/ganv/canvas.h
index b776b74..57781dc 100644
--- a/ganv/canvas.h
+++ b/ganv/canvas.h
@@ -368,6 +368,23 @@ ganv_canvas_arrange(GanvCanvas* canvas);
void
ganv_canvas_export_dot(GanvCanvas* canvas, const char* filename);
+/**
+ * ganv_canvas_supports_sprung_layout:
+ *
+ * Returns: true iff ganv is compiled with sprung layout support.
+ */
+gboolean
+ganv_canvas_supports_sprung_layout(GanvCanvas* canvas);
+
+/**
+ * ganv_canvas_set_sprung_layout:
+ *
+ * Enable or disable "live" force-directed canvas layout.
+ *
+ * Returns: true iff sprung layout was enabled.
+ */
+gboolean
+ganv_canvas_set_sprung_layout(GanvCanvas* canvas, gboolean sprung_layout);
/**
* ganv_canvas_get_locked:
diff --git a/src/Canvas.cpp b/src/Canvas.cpp
index 24cfaf4..7ab8577 100644
--- a/src/Canvas.cpp
+++ b/src/Canvas.cpp
@@ -247,6 +247,7 @@ struct GanvCanvasImpl {
#ifdef GANV_FDGL
this->layout_idle_id = 0;
+ this->sprung_layout = FALSE;
#endif
_animate_idle_id = g_timeout_add(120, on_animate_timeout, this);
@@ -444,7 +445,8 @@ struct GanvCanvasImpl {
gboolean locked;
#ifdef GANV_FDGL
- guint layout_idle_id;
+ guint layout_idle_id;
+ gboolean sprung_layout;
#endif
};
@@ -789,6 +791,9 @@ GanvCanvasImpl::layout_iteration()
if (_drag_state == EDGE) {
return FALSE; // Canvas is locked, halt layout process
}
+ if (!sprung_layout) {
+ return FALSE; // We shouldn't be running at all
+ }
static const double T_PER_US = .0001; // Sym time per real microsecond
@@ -1948,7 +1953,7 @@ void
ganv_canvas_contents_changed(GanvCanvas* canvas)
{
#ifdef GANV_FDGL
- if (!canvas->impl->layout_idle_id) {
+ if (!canvas->impl->layout_idle_id && canvas->impl->sprung_layout) {
canvas->impl->layout_idle_id = g_timeout_add_full(
G_PRIORITY_DEFAULT_IDLE,
33,
@@ -2554,6 +2559,28 @@ ganv_canvas_export_dot(GanvCanvas* canvas, const char* filename)
}
gboolean
+ganv_canvas_supports_sprung_layout(GanvCanvas* canvas)
+{
+#ifdef GANV_FDGL
+ return TRUE;
+#else
+ return FALSE;
+#endif
+}
+
+gboolean
+ganv_canvas_set_sprung_layout(GanvCanvas* canvas, gboolean sprung_layout)
+{
+#ifndef GANV_FDGL
+ return FALSE;
+#else
+ canvas->impl->sprung_layout = sprung_layout;
+ ganv_canvas_contents_changed(canvas);
+ return TRUE;
+#endif
+}
+
+gboolean
ganv_canvas_get_locked(GanvCanvas* canvas)
{
return canvas->impl->locked;
diff --git a/wscript b/wscript
index 08c6956..ed61364 100644
--- a/wscript
+++ b/wscript
@@ -8,7 +8,7 @@ import waflib.extras.autowaf as autowaf
# major increment <=> incompatible changes
# minor increment <=> compatible changes (additions)
# micro increment <=> no interface changes
-GANV_VERSION = '1.2.1'
+GANV_VERSION = '1.2.3'
GANV_MAJOR_VERSION = '1'
# Mandatory waf variables