! Copyright (C) 2008 Eduardo Cavazos.
! See http://factorcode.org/license.txt for BSD license.
-USING: accessors arrays colors combinators fry kernel locals
-math math.functions random sequences sorting ;
+USING: accessors colors combinators kernel math math.functions
+random sequences sorting ;
IN: colors.hsv
! h [0,360)
! s [0,1]
! v [0,1]
-TUPLE: hsva < color
+TUPLE: hsva
{ hue read-only }
{ saturation read-only }
{ value read-only }
C: <hsva> hsva
+INSTANCE: hsva color
+
<PRIVATE
-: Hi ( hsv -- Hi ) hue>> 60 / floor 6 mod ; inline
+: Hi ( hsv -- Hi ) hue>> 60 / floor 6 mod >integer ; inline
: f ( hsv -- f ) [ hue>> 60 / ] [ Hi ] bi - ; inline
PRIVATE>
-M: hsva >rgba ( hsva -- rgba )
+M: hsva >rgba
[
dup Hi
{
M: object >hsva >rgba >hsva ;
+M: hsva >hsva ; inline
+
M:: rgba >hsva ( rgba -- hsva )
rgba >rgba-components :> ( r g b a )
r g b sort-triple :> ( z y x )
] if ;
: complimentary-color ( color -- color' )
- dup hsva? [ >hsva ] unless
- {
+ >hsva {
[ hue>> 180 + 360 mod ]
[ saturation>> ]
[ value>> ]