diff --git a/third_party/agg23/agg_rasterizer_scanline_aa.cpp b/third_party/agg23/agg_rasterizer_scanline_aa.cpp index c90bdafdd..1fe9a0c32 100644 --- a/third_party/agg23/agg_rasterizer_scanline_aa.cpp +++ b/third_party/agg23/agg_rasterizer_scanline_aa.cpp @@ -495,4 +495,11 @@ void outline_aa::sort_cells() } m_sorted = true; } +// static +int rasterizer_scanline_aa::calculate_area(int cover, int shift) +{ + unsigned int result = cover; + result <<= shift; + return result; +} } diff --git a/third_party/agg23/agg_rasterizer_scanline_aa.h b/third_party/agg23/agg_rasterizer_scanline_aa.h index c747ee379..281933710 100644 --- a/third_party/agg23/agg_rasterizer_scanline_aa.h +++ b/third_party/agg23/agg_rasterizer_scanline_aa.h @@ -338,7 +338,6 @@ public: const cell_aa* cur_cell = *cells; int x = cur_cell->x; int area = cur_cell->area; - unsigned alpha; cover += cur_cell->cover; while(--num_cells) { cur_cell = *++cells; @@ -349,14 +348,14 @@ public: cover += cur_cell->cover; } if(area) { - alpha = calculate_alpha((cover << (poly_base_shift + 1)) - area, no_smooth); + unsigned alpha = calculate_alpha(calculate_area(cover, poly_base_shift + 1) - area, no_smooth); if(alpha) { sl.add_cell(x, alpha); } x++; } if(num_cells && cur_cell->x > x) { - alpha = calculate_alpha(cover << (poly_base_shift + 1), no_smooth); + unsigned alpha = calculate_alpha(calculate_area(cover, poly_base_shift + 1), no_smooth); if(alpha) { sl.add_span(x, cur_cell->x - x, alpha); } @@ -459,6 +458,8 @@ private: m_prev_y = y; } private: + static int calculate_area(int cover, int shift); + outline_aa m_outline; filling_rule_e m_filling_rule; int m_clipped_start_x;