[gegl] docs: Improve journal specification a bit
- From: Jon Nordby <jonnor src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] docs: Improve journal specification a bit
- Date: Fri, 8 Jun 2012 12:20:19 +0000 (UTC)
commit d31ea35c3ac8cc6a625eb1b9f7b0182c01aecf55
Author: Jon Nordby <jononor gmail com>
Date: Fri Jun 8 14:15:16 2012 +0200
docs: Improve journal specification a bit
Add an abstract and fix the proposed API to include
a reference to the GeglGraph being operated on.
docs/journal.txt | 45 +++++++++++++++++++++++++++++++--------------
1 files changed, 31 insertions(+), 14 deletions(-)
---
diff --git a/docs/journal.txt b/docs/journal.txt
index 7dc2fc5..9b38a37 100644
--- a/docs/journal.txt
+++ b/docs/journal.txt
@@ -1,10 +1,16 @@
Journal / transaction log
+The journal stores the changes done to a GEGL graph as a set of transactions.
+This journal can be used as a syncronization point for multiple users of
+a GEGL graph, and can be stored as a file. This file can be embedded into
+a higher level file format to persist undo/redo history across saves/loads
+of a document.
+A program using GEGL may use several independent GEGL graphs, and thus several
+independent journals.
+
== Usecases ==
-* Base for undo/redo stacks
-* Automated testing
- * of view widgets
- * graph manipulation API
+* Base for undo/redo stacks in GEGL based applications
+* Automated testing of GEGL graph manipulation API and interactive view widgets
* Sharing and manipulation of a GEGL graph between multiple programs
== Operations ==
@@ -17,8 +23,6 @@ Journal / transaction log
- Change property. int node_id, char *key, char *value (using property-type specific serialization serialized)
- Change operation. int node_id, char *new_operation_name
-- Recall state. (go back to a previous transaction). Specified using the block number for the transaction_start.
-
Node references:
- GEGL to maintain an (graph) unique identifier for each node: Add an integer identifier to node when added to the graph.
- The identifier must be be maintained when changing operations.
@@ -30,6 +34,11 @@ If no transaction is explicitly opened, an implicit transaction for the duration
After a add node operation, one or mor change property and change operation operations must follow.
+Transaction operation:
+- Recall state. int block_no
+ The block_no must be for a transaction start
+ Sets the graph state back to that of a previous transaction
+
== File format ==
Append only file format consisting of a series of entries.
@@ -88,31 +97,39 @@ Each entry (see above list) has a format depending on its type.
== Public API ==
-void gegl_graph_transaction_start(const char *description);
+void gegl_graph_transaction_start(GeglGraph *graph, const char *description);
+ @graph: top-level node in a GEGL graph
@description a human readable description of the change. UTF-8 encoded
-void gegl_graph_transaction_end(void);
+void gegl_graph_transaction_end(GeglGraph *graph);
+ @graph: top-level node in a GEGL graph
-int gegl_graph_transaction_previous (int block_no);
+int gegl_graph_transaction_previous(GeglGraph *graph, int block_no);
+ @graph: top-level node in a GEGL graph
@block_no <= 0 means end of journal. Only block numbers for transaction start entries are valid
@return -1 on invalid block_no, else the block number of the previous transaction
-int gegl_graph_transaction_recall(int block_no);
+int gegl_graph_transaction_recall(GeglGraph *graph, int block_no);
+ @graph: top-level node in a GEGL graph
@block_no <= 0 means end of journal. Only block numbers for transaction start entries are valid
@return -1 on invalid block_no,
-char *gegl_graph_transaction_get_description(int block_no);
+char *gegl_graph_transaction_get_description(GeglGraph *graph, int block_no);
+ @graph: top-level node in a GEGL graph
@block_no Only block numbers for transaction start entries are valid
@return NULL on invalid block_no, else the human readable description passed to transaction_start
== Implementation notes ==
-TODO
+The implementation could be based on the GeglBuffer file format implementation.
+It is suggested to keep the implementations separate, to risk avoid introducing
+regressions in exist code and because it is possible that GeglBuffer will be
+moved to a separate library at some point.
== Ideas ==
* Add a non-blocking version of transactions.
Note: not guaranteed to succeed. Applications must gracefully handle the transaction being rejected.
- gegl_graph_transaction_new(const char *description);
- gboolean gegl_graph_transaction_commit();
+ void gegl_graph_transaction_open(GeglGraph *graph, const char *description);
+ gboolean gegl_graph_transaction_commit(GeglGraph *graph);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]