|
Packit |
bc1512 |
/*
|
|
Packit |
bc1512 |
* This program is free software; you can redistribute it and/or modify
|
|
Packit |
bc1512 |
* it under the terms of the GNU General Public License as published by
|
|
Packit |
bc1512 |
* the Free Software Foundation; either version 3 of the License, or
|
|
Packit |
bc1512 |
* (at your option) any later version.
|
|
Packit |
bc1512 |
*
|
|
Packit |
bc1512 |
* This program is distributed in the hope that it will be useful,
|
|
Packit |
bc1512 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
bc1512 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Packit |
bc1512 |
* GNU General Public License for more details.
|
|
Packit |
bc1512 |
*
|
|
Packit |
bc1512 |
* You should have received a copy of the GNU General Public License
|
|
Packit |
bc1512 |
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
Packit |
bc1512 |
*
|
|
Packit |
bc1512 |
* Copyright (C) 2009 Martin Nordholts
|
|
Packit |
bc1512 |
*/
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
#include "config.h"
|
|
Packit |
bc1512 |
#include <string.h>
|
|
Packit |
bc1512 |
#include <math.h>
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
#include "gegl.h"
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
#define SUCCESS 0
|
|
Packit |
bc1512 |
#define FAILURE -1
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
#define FLOATS_EQUAL(x,y) (fabs((x) - (y)) < 0.00001f)
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
static gboolean
|
|
Packit |
bc1512 |
test_change_processor_rect_do_test (GeglProcessor *processor,
|
|
Packit |
bc1512 |
const GeglRectangle *rect,
|
|
Packit |
bc1512 |
GeglNode *sink)
|
|
Packit |
bc1512 |
{
|
|
Packit |
bc1512 |
gint i = 0;
|
|
Packit |
bc1512 |
gboolean result = TRUE;
|
|
Packit |
bc1512 |
float expected_result_buffer[4] = { 1.0, 1.0, 1.0, 1.0 };
|
|
Packit |
bc1512 |
float result_buffer[4] = { 0, };
|
|
Packit |
bc1512 |
GeglBuffer *buffer = NULL;
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
gegl_node_set (sink,
|
|
Packit |
bc1512 |
"buffer", &buffer,
|
|
Packit |
bc1512 |
NULL);
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
gegl_processor_set_rectangle (processor, rect);
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
while (gegl_processor_work (processor, NULL));
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
gegl_buffer_get (buffer,
|
|
Packit |
bc1512 |
rect,
|
|
Packit |
bc1512 |
1.0,
|
|
Packit |
bc1512 |
babl_format ("RGBA float"),
|
|
Packit |
bc1512 |
result_buffer,
|
|
Packit |
bc1512 |
GEGL_AUTO_ROWSTRIDE,
|
|
Packit |
bc1512 |
GEGL_ABYSS_NONE);
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
/* Compare with a small epsilon to account for accumulated error */
|
|
Packit |
bc1512 |
for(i = 0; i < G_N_ELEMENTS (expected_result_buffer); i++)
|
|
Packit |
bc1512 |
result = result && FLOATS_EQUAL (expected_result_buffer[i], result_buffer[i]);
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
gegl_node_set (sink,
|
|
Packit |
bc1512 |
"buffer", NULL,
|
|
Packit |
bc1512 |
NULL);
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
g_object_unref (buffer);
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
return result;
|
|
Packit |
bc1512 |
}
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
int main(int argc, char *argv[])
|
|
Packit |
bc1512 |
{
|
|
Packit |
bc1512 |
gint result = SUCCESS;
|
|
Packit |
bc1512 |
GeglRectangle rect1 = { 0, 0, 1, 1 };
|
|
Packit |
bc1512 |
GeglRectangle rect2 = { 1, 0, 1, 1 };
|
|
Packit |
bc1512 |
GeglRectangle rect3 = { 1, 1, 1, 1 };
|
|
Packit |
bc1512 |
GeglRectangle rect4 = { 0, 1, 1, 1 };
|
|
Packit |
bc1512 |
GeglColor *common_color = NULL;
|
|
Packit |
bc1512 |
GeglNode *gegl = NULL;
|
|
Packit |
bc1512 |
GeglNode *color = NULL;
|
|
Packit |
bc1512 |
GeglNode *layer = NULL;
|
|
Packit |
bc1512 |
GeglNode *text = NULL;
|
|
Packit |
bc1512 |
GeglNode *sink = NULL;
|
|
Packit |
bc1512 |
GeglProcessor *processor = NULL;
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
/* Convenient line to keep around:
|
|
Packit |
bc1512 |
g_log_set_always_fatal (G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL);
|
|
Packit |
bc1512 |
*/
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
g_thread_init (NULL);
|
|
Packit |
bc1512 |
gegl_init (&argc, &argv);
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
common_color = gegl_color_new ("rgb(1.0, 1.0, 1.0)");
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
gegl = gegl_node_new ();
|
|
Packit |
bc1512 |
color = gegl_node_new_child (gegl,
|
|
Packit |
bc1512 |
"operation", "gegl:color",
|
|
Packit |
bc1512 |
"value", common_color,
|
|
Packit |
bc1512 |
NULL);
|
|
Packit |
bc1512 |
layer = gegl_node_new_child (gegl,
|
|
Packit |
bc1512 |
"operation", "gegl:layer",
|
|
Packit |
bc1512 |
"x", 0.0,
|
|
Packit |
bc1512 |
"y", 0.0,
|
|
Packit |
bc1512 |
NULL);
|
|
Packit |
bc1512 |
text = gegl_node_new_child (gegl,
|
|
Packit |
bc1512 |
"operation", "gegl:text",
|
|
Packit |
bc1512 |
"color", common_color,
|
|
Packit |
bc1512 |
"string", "█████████████████████████",
|
|
Packit |
bc1512 |
"size", 200.0,
|
|
Packit |
bc1512 |
NULL);
|
|
Packit |
bc1512 |
sink = gegl_node_new_child (gegl,
|
|
Packit |
bc1512 |
"operation", "gegl:buffer-sink",
|
|
Packit |
bc1512 |
NULL);
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
/* We build our graph for processing complexity, not for compositing
|
|
Packit |
bc1512 |
* complexity
|
|
Packit |
bc1512 |
*/
|
|
Packit |
bc1512 |
gegl_node_link_many (color, layer, sink, NULL);
|
|
Packit |
bc1512 |
gegl_node_connect_to (text, "output", layer, "aux");
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
/* Create a processor */
|
|
Packit |
bc1512 |
processor = gegl_node_new_processor (sink, NULL);
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
/* Do the tests */
|
|
Packit |
bc1512 |
if (!test_change_processor_rect_do_test (processor, &rect1, sink))
|
|
Packit |
bc1512 |
{
|
|
Packit |
bc1512 |
g_printerr ("test-change-processor-rect: First compare failed\n");
|
|
Packit |
bc1512 |
result = FAILURE;
|
|
Packit |
bc1512 |
goto abort;
|
|
Packit |
bc1512 |
}
|
|
Packit |
bc1512 |
if (!test_change_processor_rect_do_test (processor, &rect2, sink))
|
|
Packit |
bc1512 |
{
|
|
Packit |
bc1512 |
g_printerr ("test-change-processor-rect: Second compare failed\n");
|
|
Packit |
bc1512 |
result = FAILURE;
|
|
Packit |
bc1512 |
goto abort;
|
|
Packit |
bc1512 |
}
|
|
Packit |
bc1512 |
if (!test_change_processor_rect_do_test (processor, &rect3, sink))
|
|
Packit |
bc1512 |
{
|
|
Packit |
bc1512 |
g_printerr ("test-change-processor-rect: Third compare failed\n");
|
|
Packit |
bc1512 |
result = FAILURE;
|
|
Packit |
bc1512 |
goto abort;
|
|
Packit |
bc1512 |
}
|
|
Packit |
bc1512 |
if (!test_change_processor_rect_do_test (processor, &rect4, sink))
|
|
Packit |
bc1512 |
{
|
|
Packit |
bc1512 |
g_printerr ("test-change-processor-rect: Fourth compare failed\n");
|
|
Packit |
bc1512 |
result = FAILURE;
|
|
Packit |
bc1512 |
goto abort;
|
|
Packit |
bc1512 |
}
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
/* Cleanup */
|
|
Packit |
bc1512 |
abort:
|
|
Packit |
bc1512 |
g_object_unref (processor);
|
|
Packit |
bc1512 |
g_object_unref (common_color);
|
|
Packit |
bc1512 |
g_object_unref (gegl);
|
|
Packit |
bc1512 |
gegl_exit ();
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
return result;
|
|
Packit |
bc1512 |
}
|