[#34013] [video sequence editor] Offset and crop of strips are wrong
[blender.git] / source / blender / blenkernel / depsgraph_private.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2004 Blender Foundation.
19  * All rights reserved.
20  *
21  * Contributor(s): none yet.
22  *
23  * ***** END GPL LICENSE BLOCK *****
24  */
25
26 /** \file blender/blenkernel/depsgraph_private.h
27  *  \ingroup bke
28  */
29
30 #ifndef __DEPSGRAPH_PRIVATE_H__
31 #define __DEPSGRAPH_PRIVATE_H__
32
33 #include "BKE_depsgraph.h"
34 #include "DNA_constraint_types.h"
35 #include "BKE_constraint.h"
36
37
38 #define DEPSX   5.0f
39 #define DEPSY   1.8f
40
41 #define DAGQUEUEALLOC 50
42
43 enum {
44         DAG_WHITE = 0,
45         DAG_GRAY = 1,
46         DAG_BLACK = 2
47 };
48
49
50
51 typedef struct DagAdjList {
52         struct DagNode *node;
53         short type;
54         int count;  /* number of identical arcs */
55         unsigned int lay;   // for flushing redraw/rebuild events
56         const char *name;
57         struct DagAdjList *next;
58 } DagAdjList;
59
60
61 typedef struct DagNode {
62         int color;
63         short type;
64         float x, y, k;
65         void *ob;
66         void *first_ancestor;
67         int ancestor_count;
68         unsigned int lay;               /* accumulated layers of its relations + itself */
69         unsigned int scelay;            /* layers due to being in scene */
70         uint64_t customdata_mask;       /* customdata mask */
71         int lasttime;       /* if lasttime != DagForest->time, this node was not evaluated yet for flushing */
72         int BFS_dist;       /* BFS distance */
73         int DFS_dist;       /* DFS distance */
74         int DFS_dvtm;       /* DFS discovery time */
75         int DFS_fntm;       /* DFS Finishing time */
76         struct DagAdjList *child;
77         struct DagAdjList *parent;
78         struct DagNode *next;
79 } DagNode;
80
81 typedef struct DagNodeQueueElem {
82         struct DagNode *node;
83         struct DagNodeQueueElem *next;
84 } DagNodeQueueElem;
85
86 typedef struct DagNodeQueue {
87         DagNodeQueueElem *first;
88         DagNodeQueueElem *last;
89         int count;
90         int maxlevel;
91         struct DagNodeQueue *freenodes;
92 } DagNodeQueue;
93
94 // forest as we may have more than one DAG unnconected
95 typedef struct DagForest {
96         ListBase DagNode;
97         struct GHash *nodeHash;
98         int numNodes;
99         int is_acyclic;
100         int time;  /* for flushing/tagging, compare with node->lasttime */
101 } DagForest;
102
103
104 // queue operations
105 DagNodeQueue *queue_create(int slots);
106 void queue_raz(DagNodeQueue *queue);
107 void push_queue(DagNodeQueue *queue, DagNode *node);
108 void push_stack(DagNodeQueue *queue, DagNode *node);
109 DagNode *pop_queue(DagNodeQueue *queue);
110 DagNode *get_top_node_queue(DagNodeQueue *queue);
111
112 // Dag management
113 DagForest *getMainDag(void);
114 void setMainDag(DagForest *dag);
115 DagForest *dag_init(void);
116 DagNode *dag_find_node(DagForest *forest, void *fob);
117 DagNode *dag_add_node(DagForest *forest, void *fob);
118 DagNode *dag_get_node(DagForest *forest, void *fob);
119 DagNode *dag_get_sub_node(DagForest *forest, void *fob);
120 void dag_add_relation(DagForest *forest, DagNode *fob1, DagNode *fob2, short rel, const char *name);
121
122 void graph_bfs(void);
123
124 DagNodeQueue *graph_dfs(void);
125
126 void set_node_xy(DagNode *node, float x, float y);
127 void graph_print_queue(DagNodeQueue *nqueue);
128 void graph_print_queue_dist(DagNodeQueue *nqueue);
129 void graph_print_adj_list(void);
130
131 #endif /* __DEPSGRAPH_PRIVATE_H__ */