Merge branch 'master' of github.com:mapnik/mapnik

This commit is contained in:
Dane Springmeyer 2012-06-18 11:57:49 -04:00
commit b60c79c568
4 changed files with 54 additions and 1 deletions

View file

@ -1434,6 +1434,54 @@ namespace agg
}
};
// color spin
template <typename ColorT, typename Order>
struct comp_op_rgba_color_spin
{
typedef ColorT color_type;
typedef Order order_type;
typedef typename color_type::value_type value_type;
typedef typename color_type::calc_type calc_type;
typedef typename color_type::long_type long_type;
enum base_scale_e
{
base_shift = color_type::base_shift,
base_mask = color_type::base_mask
};
static AGG_INLINE void blend_pix(value_type* p,
// source rgb
unsigned sr, unsigned sg, unsigned sb,
// source alpha and opacity
unsigned sa, unsigned cover) {
if (cover < 255) {
sa = (sa * cover + 255) >> 8;
}
p[Order::R] = (value_type)(((0 + base_mask) >> base_shift));
p[Order::G] = (value_type)(((0 + base_mask) >> base_shift));
p[Order::B] = (value_type)(((0 + base_mask) >> base_shift));
p[Order::A] = (value_type)(sa + p[Order::A] - ((sa * p[Order::A] + base_mask) >> base_shift));
// http://en.wikipedia.org/wiki/File:HSV-RGB-comparison.svg
if (p[Order::A] < 64) {
p[Order::G] = ((p[Order::A] - 64) * 4);
p[Order::B] = 255;
}
if (p[Order::A] >= 64 && p[Order::A] < 128) {
p[Order::G] = 255;
p[Order::B] = 255 - ((p[Order::A] - 64) * 4);
}
if (p[Order::A] >= 128 && p[Order::A] < 192) {
p[Order::R] = ((p[Order::A] - 128) * 4);
p[Order::G] = 255;
}
if (p[Order::A] >= 192) {
p[Order::R] = 255;
p[Order::G] = 255 - ((p[Order::A] - 192) * 4);
}
}
};
// grain extract (GIMP)
// E = I - M + 128
@ -1723,6 +1771,7 @@ namespace agg
comp_op_rgba_saturation<ColorT,Order>::blend_pix,
comp_op_rgba_color<ColorT,Order>::blend_pix,
comp_op_rgba_luminosity<ColorT,Order>::blend_pix,
comp_op_rgba_color_spin<ColorT,Order>::blend_pix,
0
};
@ -1764,6 +1813,7 @@ namespace agg
comp_op_saturation, //----comp_op_saturation
comp_op_color, //----comp_op_color
comp_op_luminosity, //----comp_op_luminosity
comp_op_color_spin, //----comp_op_luminosity
end_of_comp_op_e
};

View file

@ -74,7 +74,8 @@ enum composite_mode_e
hue,
saturation,
_color,
luminosity
luminosity,
color_spin
};
MAPNIK_DECL boost::optional<composite_mode_e> comp_op_from_string(std::string const& name);

View file

@ -389,6 +389,7 @@ public:
case saturation:
case _color:
case luminosity:
case color_spin:
break;
}
}

View file

@ -74,6 +74,7 @@ static const comp_op_lookup_type comp_lookup = boost::assign::list_of<comp_op_lo
(saturation,"saturation")
(_color,"color")
(luminosity,"luminosity")
(color_spin,"color-spin")
;
boost::optional<composite_mode_e> comp_op_from_string(std::string const& name)