5#include "testing/testing.h"
39TEST(greasepencil, create_grease_pencil_id)
44 EXPECT_EQ(grease_pencil.drawings().size(), 0);
45 EXPECT_EQ(grease_pencil.root_group().num_nodes_total(), 0);
51TEST(greasepencil, add_empty_drawings)
55 grease_pencil.add_empty_drawings(3);
56 EXPECT_EQ(grease_pencil.drawings().size(), 3);
59TEST(greasepencil, remove_drawings)
63 grease_pencil.add_empty_drawings(3);
66 drawing->wrap().strokes_for_write().resize(0, 10);
68 Layer &layer1 = grease_pencil.add_layer(
"Layer1");
69 Layer &layer2 = grease_pencil.add_layer(
"Layer2");
76 drawing->wrap().add_user();
78 grease_pencil.remove_frames(layer1, {10});
79 grease_pencil.remove_frames(layer2, {0});
80 EXPECT_EQ(grease_pencil.drawings().size(), 2);
82 static int expected_frames_size[] = {2, 0};
83 static int expected_frames_pairs_layer0[][2] = {{0, 0}, {20, 1}};
86 EXPECT_EQ(layers[0]->frames().
size(), expected_frames_size[0]);
87 EXPECT_EQ(layers[1]->frames().
size(), expected_frames_size[1]);
88 EXPECT_EQ(layers[0]->frames().lookup(expected_frames_pairs_layer0[0][0]).drawing_index,
89 expected_frames_pairs_layer0[0][1]);
90 EXPECT_EQ(layers[0]->frames().lookup(expected_frames_pairs_layer0[1][0]).drawing_index,
91 expected_frames_pairs_layer0[1][1]);
94TEST(greasepencil, remove_drawings_last_unused)
101 grease_pencil->add_empty_drawings(2);
105 Layer &layer_a = grease_pencil->add_layer(
"LayerA");
108 grease_pencil->update_drawing_users_for_layer(layer_a);
117 grease_pencil->remove_drawings_with_no_users();
118 EXPECT_EQ(grease_pencil->drawings().size(), 1);
119 EXPECT_EQ(grease_pencil->drawings()[0], used_drawing);
130 this->
root_group_ptr = MEM_new<greasepencil::LayerGroup>(__func__);
138 this->
runtime = MEM_new<GreasePencilRuntime>(__func__);
144 MEM_delete(&this->root_group());
150TEST(greasepencil, layer_tree_empty)
153 EXPECT_EQ(grease_pencil.root_group().num_nodes_total(), 0);
156TEST(greasepencil, layer_tree_build_simple)
160 LayerGroup &group = grease_pencil.add_layer_group(grease_pencil.root_group(),
"Group1");
161 grease_pencil.add_layer(group,
"Layer1");
162 grease_pencil.add_layer(group,
"Layer2");
163 EXPECT_EQ(grease_pencil.root_group().num_nodes_total(), 3);
168 const bool is_layer[7] = {
false,
true,
true,
false,
true,
true,
true};
185TEST(greasepencil, layer_tree_pre_order_iteration)
191 const TreeNode &child = *children[i];
196TEST(greasepencil, layer_tree_pre_order_iteration2)
202 for (
const int i : layers.index_range()) {
203 const Layer &layer = *layers[i];
204 SNPRINTF(name,
"%s%d",
"Layer", i + 1);
205 EXPECT_STREQ(layer.name().data(), name);
209TEST(greasepencil, layer_tree_total_size)
215TEST(greasepencil, layer_tree_node_types)
220 const TreeNode &child = *children[i];
226TEST(greasepencil, layer_tree_remove_active_node)
234 EXPECT_TRUE(node !=
nullptr);
235 EXPECT_TRUE(node->is_layer());
236 EXPECT_TRUE(node->as_layer().name() ==
"Layer1");
240 EXPECT_TRUE(node !=
nullptr);
241 EXPECT_TRUE(node->is_group());
242 EXPECT_TRUE(node->as_group().name() ==
"Group2");
246 EXPECT_TRUE(node !=
nullptr);
247 EXPECT_TRUE(node->is_group());
248 EXPECT_TRUE(node->as_group().name() ==
"Group1");
252 EXPECT_TRUE(node !=
nullptr);
253 EXPECT_TRUE(node->is_layer());
254 EXPECT_TRUE(node->as_layer().name() ==
"Layer5");
258 EXPECT_TRUE(node ==
nullptr);
261TEST(greasepencil, layer_tree_is_child_of)
273 EXPECT_TRUE(layer1.is_child_of(ex.
grease_pencil.root_group()));
274 EXPECT_TRUE(layer1.is_child_of(group1));
275 EXPECT_TRUE(layer3.is_child_of(group1));
276 EXPECT_FALSE(layer5.is_child_of(group1));
278 EXPECT_TRUE(layer3.is_child_of(group2));
279 EXPECT_FALSE(layer1.is_child_of(group2));
281 EXPECT_TRUE(layer5.is_child_of(ex.
grease_pencil.root_group()));
284TEST(greasepencil, layer_tree_remove_group)
288 LayerGroup &group1 = grease_pencil.add_layer_group(grease_pencil.root_group(),
"Group1");
289 LayerGroup &group2 = grease_pencil.add_layer_group(group1,
"Group2");
290 LayerGroup &group3 = grease_pencil.add_layer_group(group2,
"Group3");
291 grease_pencil.add_layer(group3,
"Layer");
292 grease_pencil.add_layer(
"Layer2");
295 grease_pencil.remove_group(group1,
false);
296 EXPECT_EQ(grease_pencil.nodes().size(), 1);
297 EXPECT_EQ(grease_pencil.layers().size(), 1);
298 EXPECT_TRUE(grease_pencil.find_node_by_name(
"Layer2") !=
nullptr);
316 for (
int i = 0; i < 5; i++) {
317 layer.frames_for_write().add(this->sorted_keys[i], this->sorted_values[i]);
324TEST(greasepencil, frame_is_end)
330TEST(greasepencil, frame_is_implicit_hold)
336TEST(greasepencil, drawing_index_at)
356TEST(greasepencil, add_frame_duration_fail)
362TEST(greasepencil, add_frame_duration_override_start_null_frame)
371TEST(greasepencil, add_frame_duration_check_duration)
377 EXPECT_EQ(sorted_keys[6] - sorted_keys[5], 10);
380TEST(greasepencil, get_frame_duration_at)
402TEST(greasepencil, add_frame_duration_override_null_frames)
406 layer.frames_for_write().add(1, {-1});
407 layer.frames_for_write().add(2, {-1});
408 layer.frames_for_write().add(3, {-1});
410 layer.add_frame(1, 10)->drawing_index = 3;
413 EXPECT_EQ(layer.drawing_index_at(11), -1);
421TEST(greasepencil, remove_frame_single)
425 layer.remove_frame(0);
429TEST(greasepencil, remove_frame_first)
433 layer.add_frame(5)->drawing_index = 2;
434 layer.remove_frame(0);
436 EXPECT_EQ(layer.frames().lookup(5).drawing_index, 2);
439TEST(greasepencil, remove_frame_last)
443 layer.add_frame(5)->drawing_index = 2;
444 layer.remove_frame(5);
446 EXPECT_EQ(layer.frames().lookup(0).drawing_index, 1);
449TEST(greasepencil, remove_frame_implicit_hold)
453 layer.add_frame(5)->drawing_index = 2;
454 layer.remove_frame(5);
456 EXPECT_EQ(layer.frames().lookup(0).drawing_index, 1);
457 EXPECT_TRUE(layer.frames().lookup(4).is_end());
460TEST(greasepencil, remove_frame_fixed_duration_end)
464 layer.add_frame(5)->drawing_index = 2;
465 layer.remove_frame(0);
467 EXPECT_EQ(layer.frames().lookup(5).drawing_index, 2);
470TEST(greasepencil, remove_frame_fixed_duration_overwrite_end)
474 layer.add_frame(5)->drawing_index = 2;
475 layer.remove_frame(5);
477 EXPECT_EQ(layer.frames().lookup(0).drawing_index, 1);
478 EXPECT_TRUE(layer.frames().lookup(5).is_end());
481TEST(greasepencil, remove_drawings_no_change)
486 grease_pencil->add_empty_drawings(3);
488 Layer &layer_a = grease_pencil->add_layer(
"LayerA");
489 Layer &layer_b = grease_pencil->add_layer(
"LayerB");
508 grease_pencil->remove_layer(layer_a);
523TEST(greasepencil, remove_drawings_with_no_users)
531 grease_pencil->add_empty_drawings(5);
533 Layer &layer_a = grease_pencil->add_layer(
"LayerA");
537 Layer &layer_b = grease_pencil->add_layer(
"LayerB");
560 grease_pencil->remove_layer(layer_a);
Low-level operations for curves.
CustomData interface, see also DNA_customdata_types.h.
void CustomData_reset(CustomData *data)
void CustomData_free(CustomData *data, int totelem)
Low-level operations for grease pencil.
void BKE_id_free(Main *bmain, void *idv)
void * BKE_id_new(Main *bmain, short type, const char *name)
void * BKE_id_new_nomain(short type, const char *name)
Main * BKE_main_new(void)
void BKE_main_free(Main *bmain)
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
#define SNPRINTF(dst, format,...)
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
bool add(const Key &key, const Value &value)
const Value & lookup(const Key &key) const
constexpr int64_t size() const
constexpr IndexRange index_range() const
constexpr const char * data() const
const Map< FramesMapKeyT, GreasePencilFrame > & frames() const
GreasePencilFrame * add_frame(FramesMapKeyT key, int duration=0)
int drawing_index_at(const int frame_number) const
int get_frame_duration_at(const int frame_number) const
Span< FramesMapKeyT > sorted_keys() const
void prepare_for_dna_write()
Map< FramesMapKeyT, GreasePencilFrame > & frames_for_write()
TEST(greasepencil, create_grease_pencil_id)
float wrap(float value, float max, float min)
GreasePencilFrame * values
GreasePencilLayerFramesMapStorage frames_storage
GreasePencilLayerTreeNode * active_node
GreasePencilLayerTreeGroup * root_group_ptr
GreasePencilRuntimeHandle * runtime
GreasePencilDrawingBase ** drawing_array
GreasePencilIDTestContext()
~GreasePencilIDTestContext()
const FramesMapKeyT sorted_keys[5]
GreasePencilFrame sorted_values[5]
GreasePencilLayerFramesExample()
GreasePencilHelper grease_pencil
GreasePencilLayerTreeExample()