~ubuntu-branches/debian/squeeze/librsvg/squeeze

« back to all changes in this revision

Viewing changes to rsvg-cairo-draw.c

  • Committer: Bazaar Package Importer
  • Author(s): Sebastian Dröge
  • Date: 2010-05-01 14:23:09 UTC
  • mfrom: (1.1.22 upstream) (25.1.2 sid)
  • Revision ID: james.westby@ubuntu.com-20100501142309-f0otyldu6gyratt9
Tags: 2.26.3-1
New upstream bugfix release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* vim: set sw=4 sts=4: -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 
1
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
 
2
/* vim: set sw=4 sts=4 ts=4 expandtab: */
2
3
/*
3
4
   rsvg-shapes.c: Draw shapes with cairo
4
5
 
44
45
static void
45
46
_rsvg_cairo_set_shape_antialias (cairo_t * cr, ShapeRenderingProperty aa)
46
47
{
47
 
        if (SHAPE_RENDERING_AUTO == aa)
48
 
                cairo_set_antialias (cr, CAIRO_ANTIALIAS_DEFAULT);
49
 
        else if (SHAPE_RENDERING_OPTIMIZE_SPEED == aa)
50
 
                cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
51
 
        else if (SHAPE_RENDERING_CRISP_EDGES == aa)
52
 
                cairo_set_antialias (cr, CAIRO_ANTIALIAS_DEFAULT);
53
 
        else if (SHAPE_RENDERING_GEOMETRIC_PRECISION == aa)
54
 
                cairo_set_antialias (cr, CAIRO_ANTIALIAS_DEFAULT);
 
48
    if (SHAPE_RENDERING_AUTO == aa)
 
49
        cairo_set_antialias (cr, CAIRO_ANTIALIAS_DEFAULT);
 
50
    else if (SHAPE_RENDERING_OPTIMIZE_SPEED == aa)
 
51
        cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
 
52
    else if (SHAPE_RENDERING_CRISP_EDGES == aa)
 
53
        cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
 
54
    else if (SHAPE_RENDERING_GEOMETRIC_PRECISION == aa)
 
55
        cairo_set_antialias (cr, CAIRO_ANTIALIAS_DEFAULT);
55
56
}
56
57
 
57
58
static void
58
59
_rsvg_cairo_set_text_antialias (cairo_t * cr, TextRenderingProperty aa)
59
60
{
60
 
        if (TEXT_RENDERING_AUTO == aa)
61
 
                cairo_set_antialias (cr, CAIRO_ANTIALIAS_DEFAULT);
62
 
        else if (TEXT_RENDERING_OPTIMIZE_SPEED == aa)
63
 
                cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
64
 
        else if (TEXT_RENDERING_OPTIMIZE_LEGIBILITY == aa)
65
 
                cairo_set_antialias (cr, CAIRO_ANTIALIAS_DEFAULT);
66
 
        else if (TEXT_RENDERING_GEOMETRIC_PRECISION == aa)
67
 
                cairo_set_antialias (cr, CAIRO_ANTIALIAS_DEFAULT);
 
61
    if (TEXT_RENDERING_AUTO == aa)
 
62
        cairo_set_antialias (cr, CAIRO_ANTIALIAS_DEFAULT);
 
63
    else if (TEXT_RENDERING_OPTIMIZE_SPEED == aa)
 
64
        cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
 
65
    else if (TEXT_RENDERING_OPTIMIZE_LEGIBILITY == aa)
 
66
        cairo_set_antialias (cr, CAIRO_ANTIALIAS_DEFAULT);
 
67
    else if (TEXT_RENDERING_GEOMETRIC_PRECISION == aa)
 
68
        cairo_set_antialias (cr, CAIRO_ANTIALIAS_DEFAULT);
68
69
}
69
70
 
70
71
static void
107
108
        op = CAIRO_OPERATOR_XOR;
108
109
        break;
109
110
    case RSVG_COMP_OP_PLUS:
110
 
        op = CAIRO_OPERATOR_ADD;
111
 
        break;
 
111
        op = CAIRO_OPERATOR_ADD;
 
112
        break;
112
113
    case RSVG_COMP_OP_MULTIPLY:
113
114
    case RSVG_COMP_OP_SCREEN:
114
115
    case RSVG_COMP_OP_OVERLAY:
513
514
                                       state->stroke_opacity,
514
515
                                       bbox, rsvg_state_current (ctx)->current_color);
515
516
 
516
 
        cairo_set_line_width (render->cr, _rsvg_css_normalize_length (&state->stroke_width, ctx, 'h'));
 
517
        cairo_set_line_width (render->cr, _rsvg_css_normalize_length (&state->stroke_width, ctx, 'h'));
517
518
        cairo_stroke (render->cr);
518
519
    }
519
520
}
741
742
#if 1
742
743
    cairo_set_source_surface (render->cr, surface, pixbuf_x, pixbuf_y);
743
744
#else
744
 
        {
745
 
                cairo_pattern_t *pattern;
746
 
                cairo_matrix_t matrix;
747
 
 
748
 
                pattern = cairo_pattern_create_for_surface (surface);
749
 
                cairo_pattern_set_extend (pattern, CAIRO_EXTEND_PAD);
750
 
 
751
 
                cairo_matrix_init_translate (&matrix, -pixbuf_x, -pixbuf_y);
752
 
                cairo_pattern_set_matrix (pattern, &matrix);
753
 
 
754
 
                cairo_set_source (render->cr, pattern);
755
 
                cairo_pattern_destroy (pattern);
756
 
        }
 
745
    {
 
746
        cairo_pattern_t *pattern;
 
747
        cairo_matrix_t matrix;
 
748
 
 
749
        pattern = cairo_pattern_create_for_surface (surface);
 
750
        cairo_pattern_set_extend (pattern, CAIRO_EXTEND_PAD);
 
751
 
 
752
        cairo_matrix_init_translate (&matrix, -pixbuf_x, -pixbuf_y);
 
753
        cairo_pattern_set_matrix (pattern, &matrix);
 
754
 
 
755
        cairo_set_source (render->cr, pattern);
 
756
        cairo_pattern_destroy (pattern);
 
757
    }
757
758
#endif
758
759
 
759
760
    cairo_paint (render->cr);
987
988
 
988
989
 
989
990
        output = rsvg_filter_render (state->filter, pixbuf, bg, ctx, &render->bbox, "2103");
990
 
        g_object_unref (G_OBJECT (pixbuf));
991
 
        g_object_unref (G_OBJECT (bg));
 
991
        g_object_unref (pixbuf);
 
992
        g_object_unref (bg);
992
993
 
993
994
        surface = cairo_image_surface_create_for_data (gdk_pixbuf_get_pixels (output),
994
995
                                                       CAIRO_FORMAT_ARGB32,
1029
1030
    render->bb_stack = g_list_delete_link (render->bb_stack, render->bb_stack);
1030
1031
 
1031
1032
    if (state->filter) {
1032
 
        g_object_unref (G_OBJECT (output));
 
1033
        g_object_unref (output);
1033
1034
        cairo_surface_destroy (surface);
1034
1035
    }
1035
1036
}
1082
1083
    rsvg_node_draw (drawable, ctx, 0);
1083
1084
    rsvg_state_pop (ctx);
1084
1085
 
1085
 
        /* no colorspace conversion necessary. this is just a convenient
1086
 
           holder of ARGB data with a width, height, & stride */
 
1086
    /* no colorspace conversion necessary. this is just a convenient
 
1087
       holder of ARGB data with a width, height, & stride */
1087
1088
    img = gdk_pixbuf_new_from_data (pixels,
1088
1089
                                    GDK_COLORSPACE_RGB,
1089
1090
                                    TRUE,