Colouring-In-XS

 view release on metacpan or  search on metacpan

lib/Colouring/In/XS.xs  view on Meta::CPAN

		int weight = 50;
		colouring_rgba_t c, out;
		if (items > 1 && SvOK(ST(1)) && SvIV(ST(1)) != 0) {
			weight = SvIV(ST(1));
		}
		colour = xs_ensure_obj(class, colour);
		c = xs_extract_rgba(colour);
		out = colouring_shade(c, weight);
		RETVAL = xs_rgba_to_obj(class, out);
	OUTPUT:
		RETVAL

SV *
saturate(colour, amt, ...)
	SV * colour
	SV * amt
	CODE:
		SV * class = sv_2mortal(newSVpv("Colouring::In::XS", 17));
		int relative = items > 2 && SvOK(ST(2)) && strcmp(SvPV_nolen(ST(2)), "relative") == 0;
		double amount = colouring_depercent(SvPV_nolen(amt));
		colouring_rgba_t c;
		colour = xs_ensure_obj(class, colour);
		c = xs_extract_rgba(colour);
		c = colouring_saturate(c.r, c.g, c.b, c.a, amount, relative);
		RETVAL = xs_rgba_to_obj(class, c);
	OUTPUT:
		RETVAL

SV *
desaturate(colour, amt, ...)
	SV * colour
	SV * amt
	CODE:
		SV * class = sv_2mortal(newSVpv("Colouring::In::XS", 17));
		int relative = items > 2 && SvOK(ST(2)) && strcmp(SvPV_nolen(ST(2)), "relative") == 0;
		double amount = colouring_depercent(SvPV_nolen(amt));
		colouring_rgba_t c;
		colour = xs_ensure_obj(class, colour);
		c = xs_extract_rgba(colour);
		c = colouring_desaturate(c.r, c.g, c.b, c.a, amount, relative);
		RETVAL = xs_rgba_to_obj(class, c);
	OUTPUT:
		RETVAL

SV *
greyscale(colour)
	SV * colour
	CODE:
		SV * class = sv_2mortal(newSVpv("Colouring::In::XS", 17));
		colouring_rgba_t c;
		colour = xs_ensure_obj(class, colour);
		c = xs_extract_rgba(colour);
		c = colouring_greyscale(c.r, c.g, c.b, c.a);
		RETVAL = xs_rgba_to_obj(class, c);
	OUTPUT:
		RETVAL

void
colour(self)
	SV * self
	PPCODE:
		int i;
		AV * colour = (AV*)SvRV(*hv_fetch((HV*)SvRV(self), "colour", 6, 0));
		int len = av_len(colour);
		EXTEND(SP, len + 1);
		for (i = 0; i <= len; i++) {
			PUSHs(sv_2mortal(newSVsv(*av_fetch(colour, i, 0))));
		}

SV *
get_message(msg)
	SV * msg
	CODE:
		HV * msgs = MESSAGES;
		STRLEN klen;
		const char * key = SvPV(msg, klen);
		SV ** slot = msgs ? hv_fetch(msgs, key, klen, 0) : NULL;
		RETVAL = (slot && *slot) ? newSVsv(*slot) : &PL_sv_undef;
	OUTPUT:
		RETVAL

BOOT:
	colouring_register_ops(aTHX);



( run in 0.486 second using v1.01-cache-2.11-cpan-71847e10f99 )