+sub CLONE_SKIP { 1 }
+
+# Lifted from Graphics::Color::RGB
+# Thank you very much
+sub hsv {
+ my( $self ) = @_;
+
+ my( $red, $green, $blue, $alpha ) = $self->rgba;
+ my $max = $red;
+ my $maxc = 'r';
+ my $min = $red;
+
+ if($green > $max) {
+ $max = $green;
+ $maxc = 'g';
+ }
+ if($blue > $max) {
+ $max = $blue;
+ $maxc = 'b';
+ }
+
+ if($green < $min) {
+ $min = $green;
+ }
+ if($blue < $min) {
+ $min = $blue;
+ }
+
+ my ($h, $s, $v);
+
+ if($max == $min) {
+ $h = 0;
+ }
+ elsif($maxc eq 'r') {
+ $h = 60 * (($green - $blue) / ($max - $min)) % 360;
+ }
+ elsif($maxc eq 'g') {
+ $h = (60 * (($blue - $red) / ($max - $min)) + 120);
+ }
+ elsif($maxc eq 'b') {
+ $h = (60 * (($red - $green) / ($max - $min)) + 240);
+ }
+
+ $v = $max/255;
+ if($max == 0) {
+ $s = 0;
+ }
+ else {
+ $s = 1 - ($min / $max);
+ }
+
+ return int($h), $s, $v, $alpha;
+
+}
+