Esempio n. 1
0
static void
_cpml_method_put_extents(void)
{
    CpmlSegment segment;
    CpmlPrimitive primitive;
    CpmlExtents extents;

    cpml_segment_from_cairo(&segment, (cairo_path_t *) adg_test_path());

    /* Line */
    cpml_primitive_from_segment(&primitive, &segment);
    cpml_primitive_put_extents(&primitive, &extents);
    g_assert_true(extents.is_defined);
    adg_assert_isapprox(extents.org.x, 0);
    adg_assert_isapprox(extents.org.y, 1);
    adg_assert_isapprox(extents.size.x, 3);
    adg_assert_isapprox(extents.size.y, 0);

    /* Arc: the extents are computed precisely... let's ensure
     * at least all the 3 points are included */
    cpml_primitive_next(&primitive);
    cpml_primitive_put_extents(&primitive, &extents);
    g_assert_true(extents.is_defined);
    g_assert_cmpfloat(extents.org.x, <=, 3);
    g_assert_cmpfloat(extents.org.y, <=, 1);
    g_assert_cmpfloat(extents.size.x, >=, 3);
    g_assert_cmpfloat(extents.size.y, >=, 6);

    /* Curve: actually the extents are computed by using the
     * convex hull (hence the exact coordinates of the points) */
    cpml_primitive_next(&primitive);
    cpml_primitive_put_extents(&primitive, &extents);
    g_assert_true(extents.is_defined);
    adg_assert_isapprox(extents.org.x, -2);
    adg_assert_isapprox(extents.org.y, 2);
    adg_assert_isapprox(extents.size.x, 12);
    adg_assert_isapprox(extents.size.y, 9);

    /* Close */
    cpml_primitive_next(&primitive);
    cpml_primitive_put_extents(&primitive, &extents);
    g_assert_true(extents.is_defined);
    adg_assert_isapprox(extents.org.x, -2);
    adg_assert_isapprox(extents.org.y, 1);
    adg_assert_isapprox(extents.size.x, 2);
    adg_assert_isapprox(extents.size.y, 1);
}
Esempio n. 2
0
static void
_cpml_sanity_put_extents(gint i)
{
    CpmlSegment segment;
    CpmlPrimitive primitive;
    CpmlExtents extents;

    cpml_segment_from_cairo(&segment, (cairo_path_t *) adg_test_path());
    cpml_primitive_from_segment(&primitive, &segment);

    switch (i) {
    case 1:
        cpml_primitive_put_extents(NULL, &extents);
        break;
    case 2:
        cpml_primitive_put_extents(&primitive, NULL);
        break;
    default:
        g_test_trap_assert_failed();
        break;
    }
}
Esempio n. 3
0
/**
 * cpml_segment_put_extents:
 * @segment: a #CpmlSegment
 * @extents: where to store the extents
 *
 * Gets the whole extents of @segment.
 *
 * Since: 1.0
 **/
void
cpml_segment_put_extents(const CpmlSegment *segment, CpmlExtents *extents)
{
    CpmlPrimitive primitive;
    CpmlExtents primitive_extents;

    extents->is_defined = 0;

    cpml_primitive_from_segment(&primitive, (CpmlSegment *) segment);

    do {
        cpml_primitive_put_extents(&primitive, &primitive_extents);
        cpml_extents_add(extents, &primitive_extents);
    } while (cpml_primitive_next(&primitive));
}