From bf7925c4fde9cb28f5ae432478fd1be6a5bb8727 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Tue, 11 Dec 2018 14:23:47 +0100 Subject: Reduce code redundancy. --- src/display/nr-style.cpp | 127 +++++++++++++++-------------------------------- 1 file changed, 39 insertions(+), 88 deletions(-) (limited to 'src/display/nr-style.cpp') diff --git a/src/display/nr-style.cpp b/src/display/nr-style.cpp index b25cc80c6..8acc14421 100644 --- a/src/display/nr-style.cpp +++ b/src/display/nr-style.cpp @@ -342,93 +342,69 @@ void NRStyle::set(SPStyle *style, SPStyle *context_style) update(); } -bool NRStyle::prepareFill(Inkscape::DrawingContext &dc, Geom::OptRect const &paintbox, Inkscape::DrawingPattern *pattern) +cairo_pattern_t* NRStyle::preparePaint(Inkscape::DrawingContext &dc, Geom::OptRect const &paintbox, Inkscape::DrawingPattern *pattern, Paint& paint) { - // update fill pattern - if (!fill_pattern) { - switch (fill.type) { + cairo_pattern_t* cpattern = nullptr; + + switch (paint.type) { case PAINT_SERVER: if (pattern) { - fill_pattern = pattern->renderPattern(fill.opacity); + cpattern = pattern->renderPattern(paint.opacity); } else { - fill_pattern = fill.server->pattern_new(dc.raw(), paintbox, fill.opacity); + cpattern = paint.server->pattern_new(dc.raw(), paintbox, paint.opacity); } break; case PAINT_COLOR: { - SPColor const &c = fill.color; - fill_pattern = cairo_pattern_create_rgba( - c.v.c[0], c.v.c[1], c.v.c[2], fill.opacity); - } + SPColor const &c = paint.color; + cpattern = cairo_pattern_create_rgba( + c.v.c[0], c.v.c[1], c.v.c[2], paint.opacity); + double red = 0; + double green = 0; + double blue = 0; + double alpha = 0; + cairo_pattern_get_rgba(cpattern, &red, &green, &blue, &alpha); + } break; default: break; - } } - if (!fill_pattern) return false; - return true; + return cpattern; } -void NRStyle::applyFill(Inkscape::DrawingContext &dc) +bool NRStyle::prepareFill(Inkscape::DrawingContext &dc, Geom::OptRect const &paintbox, Inkscape::DrawingPattern *pattern) { - dc.setSource(fill_pattern); - dc.setFillRule(fill_rule); + if (!fill_pattern) fill_pattern = preparePaint(dc, paintbox, pattern, fill); + return fill_pattern != nullptr; +} + +bool NRStyle::prepareStroke(Inkscape::DrawingContext &dc, Geom::OptRect const &paintbox, Inkscape::DrawingPattern *pattern) +{ + if (!stroke_pattern) stroke_pattern = preparePaint(dc, paintbox, pattern, stroke); + return stroke_pattern != nullptr; } bool NRStyle::prepareTextDecorationFill(Inkscape::DrawingContext &dc, Geom::OptRect const &paintbox, Inkscape::DrawingPattern *pattern) { - // update text decoration pattern - if (!text_decoration_fill_pattern) { - switch (text_decoration_fill.type) { - case PAINT_SERVER: - if (pattern) { - text_decoration_fill_pattern = pattern->renderPattern( - text_decoration_fill.opacity); - } else { - text_decoration_fill_pattern = text_decoration_fill.server->pattern_new(dc.raw(), - paintbox, text_decoration_fill.opacity); - } - break; - case PAINT_COLOR: { - SPColor const &c = text_decoration_fill.color; - text_decoration_fill_pattern = cairo_pattern_create_rgba( - c.v.c[0], c.v.c[1], c.v.c[2], text_decoration_fill.opacity); - } break; - default: break; - } - } - if (!text_decoration_fill_pattern) return false; - return true; + if (!text_decoration_fill_pattern) text_decoration_fill_pattern = preparePaint(dc, paintbox, pattern, text_decoration_fill); + return text_decoration_fill_pattern != nullptr; } -void NRStyle::applyTextDecorationFill(Inkscape::DrawingContext &dc) +bool NRStyle::prepareTextDecorationStroke(Inkscape::DrawingContext &dc, Geom::OptRect const &paintbox, Inkscape::DrawingPattern *pattern) { - dc.setSource(text_decoration_fill_pattern); - // Fill rule does not matter, no intersections. + if (!text_decoration_stroke_pattern) text_decoration_stroke_pattern = preparePaint(dc, paintbox, pattern, text_decoration_stroke); + return text_decoration_stroke_pattern != nullptr; } -bool NRStyle::prepareStroke(Inkscape::DrawingContext &dc, Geom::OptRect const &paintbox, Inkscape::DrawingPattern *pattern) +void NRStyle::applyFill(Inkscape::DrawingContext &dc) { - if (!stroke_pattern) { - switch (stroke.type) { - case PAINT_SERVER: - if (pattern) { - stroke_pattern = pattern->renderPattern(stroke.opacity); - } else { - stroke_pattern = stroke.server->pattern_new(dc.raw(), paintbox, stroke.opacity); - } - break; - case PAINT_COLOR: { - SPColor const &c = stroke.color; - stroke_pattern = cairo_pattern_create_rgba(c.v.c[0], c.v.c[1], c.v.c[2], - stroke.opacity); - } - break; - default: - break; - } - } - if (!stroke_pattern) return false; - return true; + dc.setSource(fill_pattern); + dc.setFillRule(fill_rule); +} + +void NRStyle::applyTextDecorationFill(Inkscape::DrawingContext &dc) +{ + dc.setSource(text_decoration_fill_pattern); + // Fill rule does not matter, no intersections. } void NRStyle::applyStroke(Inkscape::DrawingContext &dc) @@ -441,31 +417,6 @@ void NRStyle::applyStroke(Inkscape::DrawingContext &dc) cairo_set_dash(dc.raw(), dash, n_dash, dash_offset); // fixme } -bool NRStyle::prepareTextDecorationStroke(Inkscape::DrawingContext &dc, Geom::OptRect const &paintbox, Inkscape::DrawingPattern *pattern) -{ - if (!text_decoration_stroke_pattern) { - switch (text_decoration_stroke.type) { - case PAINT_SERVER: - if (pattern) { - text_decoration_stroke_pattern = pattern->renderPattern( - text_decoration_stroke.opacity); - } else { - text_decoration_stroke_pattern = text_decoration_stroke.server->pattern_new( - dc.raw(), paintbox, text_decoration_stroke.opacity); - } - break; - case PAINT_COLOR: { - SPColor const &c = text_decoration_stroke.color; - text_decoration_stroke_pattern = cairo_pattern_create_rgba( - c.v.c[0], c.v.c[1], c.v.c[2], text_decoration_stroke.opacity); - } break; - default: break; - } - } - if (!text_decoration_stroke_pattern) return false; - return true; -} - void NRStyle::applyTextDecorationStroke(Inkscape::DrawingContext &dc) { dc.setSource(text_decoration_stroke_pattern); -- cgit v1.2.3