@@ -1532,7 +1532,7 @@ RendererAgg::_draw_gouraud_triangle(const GCAgg& gc,
15321532 theRasterizer.reset_clipping ();
15331533 rendererBase.reset_clipping (true );
15341534 set_clipbox (gc.cliprect , theRasterizer);
1535- /* TODO: Support clip paths */
1535+ bool has_clippath = render_clippath (gc. clippath , gc. clippath_trans );
15361536
15371537 trans *= agg::trans_affine_scaling (1.0 , -1.0 );
15381538 trans *= agg::trans_affine_translation (0.0 , (double )height);
@@ -1560,7 +1560,19 @@ RendererAgg::_draw_gouraud_triangle(const GCAgg& gc,
15601560
15611561 theRasterizer.add_path (span_gen);
15621562
1563- agg::render_scanlines_aa (theRasterizer, slineP8, rendererBase, span_alloc, span_gen);
1563+ if (has_clippath) {
1564+ typedef agg::pixfmt_amask_adaptor<pixfmt, alpha_mask_type> pixfmt_amask_type;
1565+ typedef agg::renderer_base<pixfmt_amask_type> amask_ren_type;
1566+ typedef agg::renderer_scanline_aa<amask_ren_type, span_alloc_t , span_gen_t >
1567+ amask_aa_renderer_type;
1568+
1569+ pixfmt_amask_type pfa (pixFmt, alphaMask);
1570+ amask_ren_type r (pfa);
1571+ amask_aa_renderer_type ren (r, span_alloc, span_gen);
1572+ agg::render_scanlines (theRasterizer, slineP8, ren);
1573+ } else {
1574+ agg::render_scanlines_aa (theRasterizer, slineP8, rendererBase, span_alloc, span_gen);
1575+ }
15641576}
15651577
15661578Py::Object
0 commit comments