color.monkey2 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. Namespace std.graphics
  2. #rem monkeydoc The Color type provides support for manipulating red, green blue, alpha colors.
  3. #end
  4. Struct Color
  5. #rem monkeydoc Transparent black.
  6. #end
  7. Const None:=New Color( 0,0,0,0 )
  8. #rem monkeydoc Black.
  9. #end
  10. Const Black:=New Color( 0,0,0 )
  11. #rem monkeydoc Grey.
  12. #end
  13. Const Grey:=New Color( .5,.5,.5 )
  14. #rem monkeydoc Light Grey.
  15. #end
  16. Const LightGrey:=New Color( .75,.75,.75 )
  17. #rem monkeydoc Dark Grey.
  18. #end
  19. Const DarkGrey:=New Color( .25,.25,.25 )
  20. #rem monkeydoc White.
  21. #end
  22. Const White:=New Color( 1,1,1 )
  23. #rem monkeydoc Red.
  24. #end
  25. Const Red:=New Color( 1,0,0 )
  26. #rem monkeydoc Green.
  27. #end
  28. Const Green:=New Color( 0,1,0 )
  29. #rem monkeydoc Blue.
  30. #end
  31. Const Blue:=New Color( 0,0,1 )
  32. #rem monkeydoc Brown.
  33. #end
  34. Const Brown:=New Color( .7,.4,.1 )
  35. #rem monkeydoc Orange.
  36. #end
  37. Const Orange:=New Color( 1,.5,0 )
  38. #rem monkeydoc Yellow.
  39. #end
  40. Const Yellow:=New Color( 1,1,0 )
  41. #rem monkeydoc Lime.
  42. #end
  43. Const Lime:=New Color( .7,1,0 )
  44. #rem monkeydoc Pine.
  45. #end
  46. Const Pine:=New Color( 0,.5,0 )
  47. #rem monkeydoc Aqua.
  48. #end
  49. Const Aqua:=New Color( 0,.9,.4 )
  50. #rem monkeydoc Cyan.
  51. #end
  52. Const Cyan:=New Color( 0,1,1 )
  53. #rem monkeydoc Sky.
  54. #end
  55. Const Sky:=New Color( 0,.5,1 )
  56. #rem monkeydoc Steel.
  57. #end
  58. Const Steel:=New Color( .2,.2,.7 )
  59. #rem monkeydoc Violet.
  60. #end
  61. Const Violet:=New Color( .7,0,1 )
  62. #rem monkeydoc Magenta.
  63. #end
  64. Const Magenta:=New Color( 1,0,1 )
  65. #rem monkeydoc Puce.
  66. #end
  67. Const Puce:=New Color( 1,0,.4 )
  68. #rem monkeydoc Skin.
  69. #end
  70. Const Skin:=New Color( .8,.5,.6 )
  71. #rem monkeydoc Pink.
  72. #end
  73. Const Pink:=New Color( 1,.75,.8 )
  74. #rem monkeydoc HotPink!
  75. #end
  76. Const HotPink:=New Color( 1,.41,.71 )
  77. #rem
  78. #rem monkeydoc Transparent black.
  79. #end
  80. Const None:=New Color( 0,0,0,0 )
  81. #rem monkeydoc Red.
  82. #end
  83. Const Red:=New Color( 1,0,0 )
  84. #rem monkeydoc Green.
  85. #end
  86. Const Green:=New Color( 0,1,0 )
  87. #rem monkeydoc Blue.
  88. #end
  89. Const Blue:=New Color( 0,0,1 )
  90. #rem monkeydoc Yellow.
  91. #end
  92. Const Yellow:=New Color( 1,1,0 )
  93. #rem monkeydoc Magenta.
  94. #end
  95. Const Magenta:=New Color( 1,0,1 )
  96. #rem monkeydoc Cyan.
  97. #end
  98. Const Cyan:=New Color( 0,1,1 )
  99. #rem monkeydoc Black.
  100. #end
  101. Const Black:=New Color( 0,0,0 )
  102. #rem monkeydoc White.
  103. #end
  104. Const White:=New Color( 1,1,1 )
  105. #rem monkeydoc Grey.
  106. #end
  107. Const Grey:=New Color( .5,.5,.5 )
  108. #rem monkeydoc Light Grey.
  109. #end
  110. Const LightGrey:=New Color( .75,.75,.75 )
  111. #rem monkeydoc Dark Grey.
  112. #end
  113. Const DarkGrey:=New Color( .25,.25,.25 )
  114. #end
  115. #rem monkeydoc Red component of color.
  116. #end
  117. Field r:Float
  118. #rem monkeydoc Green component of color.
  119. #end
  120. Field g:Float
  121. #rem monkeydoc Blue component of color.
  122. #end
  123. Field b:Float
  124. #rem monkeydoc Alpha component of color.
  125. #end
  126. Field a:Float
  127. #rem monkeydoc Creates a new color.
  128. #end
  129. Method New( a:Float=1 )
  130. Self.a=a
  131. End
  132. Method New( i:Float,a:Float=1 )
  133. Self.r=i
  134. Self.g=i
  135. Self.b=i
  136. Self.a=1
  137. End
  138. Method New( r:Float,g:Float,b:Float,a:Float=1 )
  139. Self.r=r
  140. Self.g=g
  141. Self.b=b
  142. Self.a=a
  143. End
  144. #rem monkeydoc Converts the color to printable string.
  145. #end
  146. Operator To:String()
  147. Return "Color("+r+","+g+","+b+","+a+")"
  148. End
  149. #rem monkeydoc The Red color component.
  150. #end
  151. Property R:Float()
  152. Return r
  153. Setter( r:Float )
  154. Self.r=r
  155. End
  156. #rem monkeydoc The green color component.
  157. #end
  158. Property G:Float()
  159. Return g
  160. Setter( g:Float )
  161. Self.g=g
  162. End
  163. #rem monkeydoc The blue color component.
  164. #end
  165. Property B:Float()
  166. Return b
  167. Setter( b:Float )
  168. Self.b=b
  169. End
  170. #rem monkeydoc The alpha color component.
  171. #end
  172. Property A:Float()
  173. Return a
  174. Setter( a:Float )
  175. Self.a=a
  176. End
  177. #rem monkeydoc Multiplies the color by another color or value and returns the result.
  178. #end
  179. Operator*:Color( color:Color )
  180. Return New Color( r*color.r,g*color.g,b*color.b,a*color.a )
  181. End
  182. Operator*:Color( scale:Float )
  183. Return New Color( r*scale,g*scale,b*scale,a*scale )
  184. End
  185. #rem monkeydoc Divides the color by another color or value and returns the result.
  186. #end
  187. Operator/:Color( color:Color )
  188. Return New Color( r/color.r,g/color.g,b/color.b,a/color.a )
  189. End
  190. Operator/:Color( scale:Float )
  191. Return New Color( r/scale,g/scale,b/scale,a/scale )
  192. End
  193. #rem monkeydoc Adds another color or value to the color and returns the result.
  194. #end
  195. Operator+:Color( color:Color )
  196. Return New Color( r+color.r,g+color.g,b+color.b,a+color.a )
  197. End
  198. Operator+:Color( offset:Float )
  199. Return New Color( r+offset,g+offset,b+offset,a+offset )
  200. End
  201. #rem monkeydoc Subtracts another color or value from the color and returns the result.
  202. #end
  203. Operator-:Color( color:Color )
  204. Return New Color( r-color.r,g-color.g,b-color.b,a-color.a )
  205. End
  206. Operator-:Color( offset:Float )
  207. Return New Color( r-offset,g-offset,b-offset,a-offset )
  208. End
  209. #rem monkeydoc Blends the color with another color and returns the result.
  210. #end
  211. Method Blend:Color( color:Color,delta:Float )
  212. Local idelta:=1-delta
  213. Return New Color( r*idelta+color.r*delta,g*idelta+color.g*delta,b*idelta+color.b*delta,a*idelta+color.a*delta )
  214. End
  215. #rem monkeydoc Converts the color to 32 bit ARGB format.
  216. #end
  217. Method ToARGB:UInt()
  218. Return UInt(a*255) Shl 24 | UInt(r*255) Shl 16 | UInt(g*255) Shl 8 | UInt(b*255)
  219. End
  220. #rem monkeydoc Converts the color to printable string.
  221. #end
  222. Method ToString:String()
  223. Return Self
  224. End
  225. #rem monkeydoc Creates a color from hue, saturation and value.
  226. #end
  227. Function FromHSV:Color( h:Float,s:Float,v:Float,a:Float=1 )
  228. h*=6
  229. Local f:=h-Floor( h )
  230. Local p:=v * ( 1 - s )
  231. Local q:=v * ( 1 - ( s * f ) )
  232. Local t:=v * ( 1 - ( s * ( 1-f ) ) )
  233. Local r:Float,g:Float,b:Float
  234. Select Int( h ) Mod 6
  235. Case 0 r=v ; g=t ; b=p
  236. Case 1 r=q ; g=v ; b=p
  237. Case 2 r=p ; g=v ; b=t
  238. Case 3 r=p ; g=q ; b=v
  239. Case 4 r=t ; g=p ; b=v
  240. Case 5 r=v ; g=p ; b=q
  241. End
  242. Return New Color( r,g,b,a )
  243. End
  244. #rem monkeydoc Creates a color from a 32 bit ARGB color.
  245. #end
  246. Function FromARGB:Color( argb:UInt )
  247. Local a:=(argb Shr 24 & $ff)/255.0
  248. Local r:=(argb Shr 16 & $ff)/255.0
  249. Local g:=(argb Shr 8 & $ff)/255.0
  250. Local b:=(argb & $ff)/255.0
  251. Return New Color( r,g,b,a )
  252. End
  253. End