atome 0.4.7.0 → 0.5.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (258) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/README.md +7 -4
  4. data/Rakefile +22 -13
  5. data/app_builder_helpers/Rakefile +63 -21
  6. data/exe/atome +91 -45
  7. data/lib/atome/atome_meta_engine.rb +132 -0
  8. data/lib/atome/extensions/atome.rb +41 -0
  9. data/lib/atome/{kernel/helpers → extensions}/geolocation.rb +0 -0
  10. data/lib/atome/{kernel/helpers → extensions}/ping.rb +0 -0
  11. data/lib/atome/{kernel/helpers → extensions}/sha.rb +3 -1
  12. data/lib/atome/genesis/generators/atome.rb +13 -0
  13. data/lib/atome/{renderers/headless/properties/generator.rb → genesis/generators/communication.rb} +2 -0
  14. data/lib/atome/genesis/generators/effect.rb +6 -0
  15. data/lib/atome/genesis/generators/event.rb +5 -0
  16. data/lib/atome/genesis/generators/geometry.rb +6 -0
  17. data/lib/atome/genesis/generators/identity.rb +15 -0
  18. data/lib/atome/genesis/generators/material.rb +10 -0
  19. data/lib/atome/genesis/generators/spatial.rb +12 -0
  20. data/lib/atome/genesis/generators/utility.rb +14 -0
  21. data/lib/atome/genesis/genesis.rb +51 -0
  22. data/lib/atome/genesis/sparkle.rb +58 -0
  23. data/lib/atome/helpers/color_helper/color/cmyk.rb +263 -0
  24. data/lib/atome/helpers/color_helper/color/css.rb +7 -0
  25. data/lib/atome/helpers/color_helper/color/grayscale.rb +197 -0
  26. data/lib/atome/helpers/color_helper/color/hsl.rb +240 -0
  27. data/lib/atome/helpers/color_helper/color/palette/adobecolor.rb +260 -0
  28. data/lib/atome/helpers/color_helper/color/palette/gimp.rb +104 -0
  29. data/lib/atome/helpers/color_helper/color/palette/monocontrast.rb +164 -0
  30. data/lib/atome/helpers/color_helper/color/palette.rb +4 -0
  31. data/lib/atome/helpers/color_helper/color/rgb/colors.rb +167 -0
  32. data/lib/atome/helpers/color_helper/color/rgb/contrast.rb +57 -0
  33. data/lib/atome/helpers/color_helper/color/rgb/metallic.rb +28 -0
  34. data/lib/atome/helpers/color_helper/color/rgb.rb +715 -0
  35. data/lib/atome/helpers/color_helper/color/yiq.rb +62 -0
  36. data/lib/atome/helpers/color_helper/color.rb +196 -0
  37. data/lib/atome/helpers/essentials.rb +42 -0
  38. data/lib/atome/helpers/sanitizer.rb +42 -0
  39. data/lib/atome/helpers/utilities.rb +57 -0
  40. data/lib/atome/kernel/essentials.rb +30 -0
  41. data/lib/atome/kernel/universe.rb +75 -26
  42. data/lib/atome/presets/atome.rb +66 -0
  43. data/lib/atome/processors/utilities.rb +10 -0
  44. data/lib/atome/renderers/browser/atome.rb +95 -0
  45. data/lib/atome/renderers/browser/browser.rb +158 -0
  46. data/lib/atome/renderers/browser/effect.rb +23 -0
  47. data/lib/atome/renderers/browser/event.rb +9 -0
  48. data/lib/atome/renderers/browser/geometry.rb +11 -0
  49. data/lib/atome/renderers/browser/identity.rb +20 -0
  50. data/lib/atome/renderers/browser/material.rb +43 -0
  51. data/lib/atome/renderers/{opal → browser}/opal_browser.rb +0 -2
  52. data/lib/atome/renderers/browser/spatial.rb +22 -0
  53. data/lib/atome/renderers/browser/utility.rb +26 -0
  54. data/lib/atome/renderers/html/atome.rb +47 -0
  55. data/lib/atome/renderers/html/effect.rb +19 -0
  56. data/lib/atome/renderers/html/event.rb +9 -0
  57. data/lib/atome/renderers/html/geometry.rb +11 -0
  58. data/lib/atome/renderers/html/html.rb +42 -0
  59. data/lib/atome/renderers/html/identity.rb +14 -0
  60. data/lib/atome/renderers/html/opal_browser.rb +6 -0
  61. data/lib/atome/renderers/html/spatial.rb +28 -0
  62. data/lib/atome/renderers/html/utility.rb +15 -0
  63. data/lib/atome/renderers/opal/atome_opal_extensions.rb +1 -1
  64. data/lib/atome/renderers/opal/extensions/atome.rb +29 -0
  65. data/lib/atome/renderers/opal/opal.rb +4 -0
  66. data/lib/atome/version.rb +1 -2
  67. data/lib/atome.rb +22 -45
  68. data/vendor/assets/application/index.rb +3 -1
  69. data/vendor/assets/application/required_example.rb +1 -0
  70. data/{lib/atome/renderers/headless/headless.rb → vendor/assets/aui.rb} +0 -0
  71. data/vendor/assets/build/css/style.css +51 -0
  72. data/vendor/assets/build/index.html +10 -7
  73. data/vendor/assets/build/js/atome/atome.js +61 -61
  74. data/{lib/atome/renderers/server/server.rb → vendor/assets/build/medias/rubies/examples/_animation.rb} +0 -0
  75. data/vendor/assets/build/medias/rubies/examples/_code.rb +12 -0
  76. data/vendor/assets/build/medias/rubies/examples/_id.rb +14 -0
  77. data/vendor/assets/build/medias/rubies/examples/_link.rb +17 -0
  78. data/vendor/assets/build/medias/rubies/examples/{on.rb → _on.rb} +3 -1
  79. data/vendor/assets/build/medias/rubies/examples/{read.rb → _read.rb} +2 -0
  80. data/vendor/assets/build/medias/rubies/examples/_refresh.rb +9 -0
  81. data/vendor/assets/build/medias/rubies/examples/atome.new.rb +13 -10
  82. data/vendor/assets/build/medias/rubies/examples/auto_height.rb +2 -0
  83. data/vendor/assets/build/medias/rubies/examples/auto_width.rb +2 -0
  84. data/vendor/assets/build/medias/rubies/examples/blur.rb +4 -0
  85. data/vendor/assets/build/medias/rubies/examples/bottom.rb +3 -1
  86. data/vendor/assets/build/medias/rubies/examples/box.rb +15 -8
  87. data/vendor/assets/build/medias/rubies/examples/circle.rb +2 -0
  88. data/vendor/assets/build/medias/rubies/examples/clear.rb +2 -1
  89. data/vendor/assets/build/medias/rubies/examples/color.rb +47 -8
  90. data/vendor/assets/build/medias/rubies/examples/create_atome_in_atome.rb +2 -0
  91. data/vendor/assets/build/medias/rubies/examples/delete.rb +7 -0
  92. data/vendor/assets/build/medias/rubies/examples/drag.rb +1 -0
  93. data/vendor/assets/build/medias/rubies/examples/element.rb +6 -0
  94. data/vendor/assets/build/medias/rubies/examples/get_renderer_list.rb +3 -1
  95. data/vendor/assets/build/medias/rubies/examples/grab.rb +2 -0
  96. data/vendor/assets/build/medias/rubies/examples/height.rb +2 -0
  97. data/vendor/assets/build/medias/rubies/examples/image.rb +6 -2
  98. data/vendor/assets/build/medias/rubies/examples/left.rb +2 -0
  99. data/vendor/assets/build/medias/rubies/examples/monitoring.rb +20 -0
  100. data/vendor/assets/build/medias/rubies/examples/parent.rb +7 -5
  101. data/vendor/assets/build/medias/rubies/examples/repeat.rb +2 -0
  102. data/vendor/assets/build/medias/rubies/examples/right.rb +3 -1
  103. data/vendor/assets/build/medias/rubies/examples/schedule.rb +0 -4
  104. data/vendor/assets/build/medias/rubies/examples/shadow.rb +30 -0
  105. data/vendor/assets/build/medias/rubies/examples/text.rb +21 -7
  106. data/vendor/assets/build/medias/rubies/examples/touch.rb +2 -0
  107. data/vendor/assets/build/medias/rubies/examples/video.rb +2 -2
  108. data/vendor/assets/build/medias/rubies/examples/web.rb +2 -2
  109. data/vendor/assets/server/atome_server.rb +3 -5
  110. metadata +74 -174
  111. data/lib/atome/atome_native_extensions.rb +0 -5
  112. data/lib/atome/extensions/helper.rb +0 -112
  113. data/lib/atome/kernel/atome.rb +0 -99
  114. data/lib/atome/kernel/generators/generator.rb +0 -517
  115. data/lib/atome/kernel/generators/genesis.rb +0 -277
  116. data/lib/atome/kernel/generators/sanitizer.rb +0 -73
  117. data/lib/atome/kernel/generators/shapes.rb +0 -55
  118. data/lib/atome/kernel/helpers/internal_methods.rb +0 -173
  119. data/lib/atome/kernel/helpers/utilities.rb +0 -39
  120. data/lib/atome/kernel/properties/essential.rb +0 -77
  121. data/lib/atome/kernel/sparkle.rb +0 -38
  122. data/lib/atome/renderers/opal/properties/generator.rb +0 -1
  123. data/lib/atome/renderers/renderer.rb +0 -13
  124. data/lib/atome/renderers/server/properties/generator.rb +0 -9
  125. data/vendor/assets/build/js/application.js +0 -0
  126. data/vendor/assets/build/medias/audios/guitar.wav +0 -0
  127. data/vendor/assets/build/medias/images/beach.jpg +0 -0
  128. data/vendor/assets/build/medias/rubies/examples/Old_examples/!demos.rb +0 -111
  129. data/vendor/assets/build/medias/rubies/examples/Old_examples/action.rb +0 -12
  130. data/vendor/assets/build/medias/rubies/examples/Old_examples/add.rb +0 -26
  131. data/vendor/assets/build/medias/rubies/examples/Old_examples/alignment.rb +0 -27
  132. data/vendor/assets/build/medias/rubies/examples/Old_examples/animation.rb +0 -92
  133. data/vendor/assets/build/medias/rubies/examples/Old_examples/atome_as_property.rb +0 -20
  134. data/vendor/assets/build/medias/rubies/examples/Old_examples/atome_list.rb +0 -4
  135. data/vendor/assets/build/medias/rubies/examples/Old_examples/atomiser.rb +0 -17
  136. data/vendor/assets/build/medias/rubies/examples/Old_examples/attach_extract.rb +0 -13
  137. data/vendor/assets/build/medias/rubies/examples/Old_examples/authorisation.rb +0 -22
  138. data/vendor/assets/build/medias/rubies/examples/Old_examples/batch.rb +0 -6
  139. data/vendor/assets/build/medias/rubies/examples/Old_examples/blend.rb +0 -15
  140. data/vendor/assets/build/medias/rubies/examples/Old_examples/blur.rb +0 -9
  141. data/vendor/assets/build/medias/rubies/examples/Old_examples/border.rb +0 -9
  142. data/vendor/assets/build/medias/rubies/examples/Old_examples/calendar.rb +0 -5
  143. data/vendor/assets/build/medias/rubies/examples/Old_examples/capture.rb +0 -57
  144. data/vendor/assets/build/medias/rubies/examples/Old_examples/center.rb +0 -21
  145. data/vendor/assets/build/medias/rubies/examples/Old_examples/child.rb +0 -18
  146. data/vendor/assets/build/medias/rubies/examples/Old_examples/clear.rb +0 -21
  147. data/vendor/assets/build/medias/rubies/examples/Old_examples/clip.rb +0 -11
  148. data/vendor/assets/build/medias/rubies/examples/Old_examples/code.rb +0 -7
  149. data/vendor/assets/build/medias/rubies/examples/Old_examples/code_editor.rb +0 -26
  150. data/vendor/assets/build/medias/rubies/examples/Old_examples/collaborate.rb +0 -115
  151. data/vendor/assets/build/medias/rubies/examples/Old_examples/convert_to_px.rb +0 -14
  152. data/vendor/assets/build/medias/rubies/examples/Old_examples/copy_paste.rb +0 -35
  153. data/vendor/assets/build/medias/rubies/examples/Old_examples/current_code.rb +0 -14
  154. data/vendor/assets/build/medias/rubies/examples/Old_examples/cursor.rb +0 -3
  155. data/vendor/assets/build/medias/rubies/examples/Old_examples/data.rb +0 -11
  156. data/vendor/assets/build/medias/rubies/examples/Old_examples/database.rb +0 -29
  157. data/vendor/assets/build/medias/rubies/examples/Old_examples/delete.rb +0 -12
  158. data/vendor/assets/build/medias/rubies/examples/Old_examples/display.rb +0 -19
  159. data/vendor/assets/build/medias/rubies/examples/Old_examples/disposition.rb +0 -10
  160. data/vendor/assets/build/medias/rubies/examples/Old_examples/double_and_long_touch.rb +0 -23
  161. data/vendor/assets/build/medias/rubies/examples/Old_examples/drag.rb +0 -61
  162. data/vendor/assets/build/medias/rubies/examples/Old_examples/drag_and_drop_import.rb +0 -1
  163. data/vendor/assets/build/medias/rubies/examples/Old_examples/drop.rb +0 -23
  164. data/vendor/assets/build/medias/rubies/examples/Old_examples/duplicate.rb +0 -11
  165. data/vendor/assets/build/medias/rubies/examples/Old_examples/edit.rb +0 -6
  166. data/vendor/assets/build/medias/rubies/examples/Old_examples/eval.rb +0 -9
  167. data/vendor/assets/build/medias/rubies/examples/Old_examples/extract_detach.rb +0 -23
  168. data/vendor/assets/build/medias/rubies/examples/Old_examples/fill.rb +0 -10
  169. data/vendor/assets/build/medias/rubies/examples/Old_examples/find.rb +0 -37
  170. data/vendor/assets/build/medias/rubies/examples/Old_examples/fit.rb +0 -44
  171. data/vendor/assets/build/medias/rubies/examples/Old_examples/fullscreen.rb +0 -28
  172. data/vendor/assets/build/medias/rubies/examples/Old_examples/generate.rb +0 -7
  173. data/vendor/assets/build/medias/rubies/examples/Old_examples/gradient.rb +0 -24
  174. data/vendor/assets/build/medias/rubies/examples/Old_examples/group.rb +0 -21
  175. data/vendor/assets/build/medias/rubies/examples/Old_examples/helper.rb +0 -64
  176. data/vendor/assets/build/medias/rubies/examples/Old_examples/history.rb +0 -7
  177. data/vendor/assets/build/medias/rubies/examples/Old_examples/hue.rb +0 -10
  178. data/vendor/assets/build/medias/rubies/examples/Old_examples/input_text.rb +0 -54
  179. data/vendor/assets/build/medias/rubies/examples/Old_examples/insert_attach.rb +0 -13
  180. data/vendor/assets/build/medias/rubies/examples/Old_examples/internationalisation.rb +0 -10
  181. data/vendor/assets/build/medias/rubies/examples/Old_examples/key.rb +0 -19
  182. data/vendor/assets/build/medias/rubies/examples/Old_examples/keyboard_shortcut.rb +0 -69
  183. data/vendor/assets/build/medias/rubies/examples/Old_examples/list_methods.rb +0 -4
  184. data/vendor/assets/build/medias/rubies/examples/Old_examples/list_types.rb +0 -4
  185. data/vendor/assets/build/medias/rubies/examples/Old_examples/listen.rb +0 -47
  186. data/vendor/assets/build/medias/rubies/examples/Old_examples/mail.rb +0 -9
  187. data/vendor/assets/build/medias/rubies/examples/Old_examples/map.rb +0 -6
  188. data/vendor/assets/build/medias/rubies/examples/Old_examples/mask.rb +0 -15
  189. data/vendor/assets/build/medias/rubies/examples/Old_examples/media_recorder.rb +0 -24
  190. data/vendor/assets/build/medias/rubies/examples/Old_examples/media_streaming.rb +0 -41
  191. data/vendor/assets/build/medias/rubies/examples/Old_examples/meteo.rb +0 -41
  192. data/vendor/assets/build/medias/rubies/examples/Old_examples/methods_chaining.rb +0 -8
  193. data/vendor/assets/build/medias/rubies/examples/Old_examples/midi.rb +0 -37
  194. data/vendor/assets/build/medias/rubies/examples/Old_examples/monitoring.rb +0 -47
  195. data/vendor/assets/build/medias/rubies/examples/Old_examples/mulitrendering.rb +0 -7
  196. data/vendor/assets/build/medias/rubies/examples/Old_examples/noise_gradient_texture.rb +0 -26
  197. data/vendor/assets/build/medias/rubies/examples/Old_examples/notification.rb +0 -9
  198. data/vendor/assets/build/medias/rubies/examples/Old_examples/object_in_object.rb +0 -13
  199. data/vendor/assets/build/medias/rubies/examples/Old_examples/on_resize.rb +0 -12
  200. data/vendor/assets/build/medias/rubies/examples/Old_examples/over.rb +0 -15
  201. data/vendor/assets/build/medias/rubies/examples/Old_examples/overflow.rb +0 -22
  202. data/vendor/assets/build/medias/rubies/examples/Old_examples/parameter.rb +0 -14
  203. data/vendor/assets/build/medias/rubies/examples/Old_examples/parent.rb +0 -19
  204. data/vendor/assets/build/medias/rubies/examples/Old_examples/particle.rb +0 -15
  205. data/vendor/assets/build/medias/rubies/examples/Old_examples/pay.rb +0 -7
  206. data/vendor/assets/build/medias/rubies/examples/Old_examples/ping.rb +0 -7
  207. data/vendor/assets/build/medias/rubies/examples/Old_examples/play.rb +0 -24
  208. data/vendor/assets/build/medias/rubies/examples/Old_examples/play_audio.rb +0 -6
  209. data/vendor/assets/build/medias/rubies/examples/Old_examples/position.rb +0 -7
  210. data/vendor/assets/build/medias/rubies/examples/Old_examples/read_file.rb +0 -9
  211. data/vendor/assets/build/medias/rubies/examples/Old_examples/reboot.rb +0 -15
  212. data/vendor/assets/build/medias/rubies/examples/Old_examples/refresh.rb +0 -17
  213. data/vendor/assets/build/medias/rubies/examples/Old_examples/remote_server.rb +0 -31
  214. data/vendor/assets/build/medias/rubies/examples/Old_examples/render.rb +0 -17
  215. data/vendor/assets/build/medias/rubies/examples/Old_examples/repeat.rb +0 -19
  216. data/vendor/assets/build/medias/rubies/examples/Old_examples/require_remote.rb +0 -3
  217. data/vendor/assets/build/medias/rubies/examples/Old_examples/restore_atome.rb +0 -11
  218. data/vendor/assets/build/medias/rubies/examples/Old_examples/resurect.rb +0 -30
  219. data/vendor/assets/build/medias/rubies/examples/Old_examples/ruby_version.rb +0 -1
  220. data/vendor/assets/build/medias/rubies/examples/Old_examples/say.rb +0 -3
  221. data/vendor/assets/build/medias/rubies/examples/Old_examples/scale.rb +0 -41
  222. data/vendor/assets/build/medias/rubies/examples/Old_examples/schedule.rb +0 -39
  223. data/vendor/assets/build/medias/rubies/examples/Old_examples/scroll.rb +0 -9
  224. data/vendor/assets/build/medias/rubies/examples/Old_examples/select.rb +0 -32
  225. data/vendor/assets/build/medias/rubies/examples/Old_examples/selector.rb +0 -6
  226. data/vendor/assets/build/medias/rubies/examples/Old_examples/shadow.rb +0 -30
  227. data/vendor/assets/build/medias/rubies/examples/Old_examples/shape_with_path.rb +0 -7
  228. data/vendor/assets/build/medias/rubies/examples/Old_examples/size.rb +0 -109
  229. data/vendor/assets/build/medias/rubies/examples/Old_examples/smooth.rb +0 -5
  230. data/vendor/assets/build/medias/rubies/examples/Old_examples/speech_renderer.rb +0 -5
  231. data/vendor/assets/build/medias/rubies/examples/Old_examples/synth.rb +0 -6
  232. data/vendor/assets/build/medias/rubies/examples/Old_examples/system.rb +0 -3
  233. data/vendor/assets/build/medias/rubies/examples/Old_examples/tags.rb +0 -18
  234. data/vendor/assets/build/medias/rubies/examples/Old_examples/text.rb +0 -33
  235. data/vendor/assets/build/medias/rubies/examples/Old_examples/text_selection.rb +0 -33
  236. data/vendor/assets/build/medias/rubies/examples/Old_examples/text_to_midi.rb +0 -22
  237. data/vendor/assets/build/medias/rubies/examples/Old_examples/touch.rb +0 -23
  238. data/vendor/assets/build/medias/rubies/examples/Old_examples/touch_stop_propagation.rb +0 -27
  239. data/vendor/assets/build/medias/rubies/examples/Old_examples/treat_object_in_object.rb +0 -26
  240. data/vendor/assets/build/medias/rubies/examples/Old_examples/type_mutations.rb +0 -27
  241. data/vendor/assets/build/medias/rubies/examples/Old_examples/video_callback.rb +0 -46
  242. data/vendor/assets/build/medias/rubies/examples/Old_examples/view_mode.rb +0 -29
  243. data/vendor/assets/build/medias/rubies/examples/Old_examples/virtual_events.rb +0 -17
  244. data/vendor/assets/build/medias/rubies/examples/Old_examples/visual.rb +0 -23
  245. data/vendor/assets/build/medias/rubies/examples/Old_examples/vr_display.rb +0 -5
  246. data/vendor/assets/build/medias/rubies/examples/Old_examples/wait.rb +0 -21
  247. data/vendor/assets/build/medias/rubies/examples/Old_examples/web.rb +0 -10
  248. data/vendor/assets/build/medias/rubies/examples/Old_examples/web_address_bar.rb +0 -14
  249. data/vendor/assets/build/medias/rubies/examples/Old_examples/websocket.rb +0 -16
  250. data/vendor/assets/build/medias/rubies/examples/Old_examples/webstate.rb +0 -10
  251. data/vendor/assets/build/medias/rubies/examples/animation.rb +0 -0
  252. data/vendor/assets/build/medias/rubies/examples/code.rb +0 -5
  253. data/vendor/assets/build/medias/rubies/examples/link.rb +0 -11
  254. data/vendor/assets/build/medias/videos/avengers.mp4 +0 -0
  255. data/vendor/assets/build/medias/videos/lion_king.mp4 +0 -0
  256. data/vendor/assets/build/medias/videos/madmax.mp4 +0 -0
  257. data/vendor/assets/build/medias/videos/starwars.mov +0 -0
  258. data/vendor/assets/build/medias/videos/superman.mp4 +0 -0
@@ -0,0 +1,164 @@
1
+ require 'color/palette'
2
+
3
+ # Generates a monochromatic constrasting colour palette for background and
4
+ # foreground. What does this mean?
5
+ #
6
+ # Monochromatic: A single colour is used to generate the base palette, and
7
+ # this colour is lightened five times and darkened five times to provide
8
+ # eleven distinct colours.
9
+ #
10
+ # Contrasting: The foreground is also generated as a monochromatic colour
11
+ # palette; however, all generated colours are tested to see that they are
12
+ # appropriately contrasting to ensure maximum readability of the foreground
13
+ # against the background.
14
+ class Color::Palette::MonoContrast
15
+ # Hash of CSS background colour values.
16
+ #
17
+ # This is always 11 values:
18
+ #
19
+ # 0:: The starting colour.
20
+ # +1..+5:: Lighter colours.
21
+ # -1..-5:: Darker colours.
22
+ attr_reader :background
23
+ # Hash of CSS foreground colour values.
24
+ #
25
+ # This is always 11 values:
26
+ #
27
+ # 0:: The starting colour.
28
+ # +1..+5:: Lighter colours.
29
+ # -1..-5:: Darker colours.
30
+ attr_reader :foreground
31
+
32
+ DEFAULT_MINIMUM_BRIGHTNESS_DIFF = (125.0 / 255.0)
33
+
34
+ # The minimum brightness difference between the background and the
35
+ # foreground, and must be between 0..1. Setting this value will regenerate
36
+ # the palette based on the base colours. The default value for this is 125
37
+ # / 255.0. If this value is set to +nil+, it will be restored to the
38
+ # default.
39
+ attr_reader :minimum_brightness_diff
40
+ def minimum_brightness_diff=(bd) #:nodoc:
41
+ @minimum_brightness_diff = if bd.nil?
42
+ DEFAULT_MINIMUM_BRIGHTNESS_DIFF
43
+ elsif bd > 1.0
44
+ 1.0
45
+ elsif bd < 0.0
46
+ 0.0
47
+ else
48
+ bd
49
+ end
50
+ regenerate(@background[0], @foreground[0])
51
+ end
52
+
53
+ DEFAULT_MINIMUM_COLOR_DIFF = (500.0 / 255.0)
54
+
55
+ # The minimum colour difference between the background and the foreground,
56
+ # and must be between 0..3. Setting this value will regenerate the palette
57
+ # based on the base colours. The default value for this is 500 / 255.0.
58
+ attr_reader :minimum_color_diff
59
+ def minimum_color_diff=(cd) #:nodoc:
60
+ @minimum_color_diff = if cd.nil?
61
+ DEFAULT_MINIMUM_COLOR_DIFF
62
+ elsif cd > 3.0
63
+ 3.0
64
+ elsif cd < 0.0
65
+ 0.0
66
+ else
67
+ cd
68
+ end
69
+ regenerate(@background[0], @foreground[0])
70
+ end
71
+
72
+ # Generate the initial palette.
73
+ def initialize(background, foreground = nil)
74
+ @minimum_brightness_diff = DEFAULT_MINIMUM_BRIGHTNESS_DIFF
75
+ @minimum_color_diff = DEFAULT_MINIMUM_COLOR_DIFF
76
+ regenerate(background, foreground)
77
+ end
78
+
79
+ # Generate the colour palettes.
80
+ def regenerate(background, foreground = nil)
81
+ foreground ||= background
82
+ background = background.to_rgb
83
+ foreground = foreground.to_rgb
84
+
85
+ @background = {}
86
+ @foreground = {}
87
+
88
+ @background[-5] = background.darken_by(10)
89
+ @background[-4] = background.darken_by(25)
90
+ @background[-3] = background.darken_by(50)
91
+ @background[-2] = background.darken_by(75)
92
+ @background[-1] = background.darken_by(85)
93
+ @background[ 0] = background
94
+ @background[+1] = background.lighten_by(85)
95
+ @background[+2] = background.lighten_by(75)
96
+ @background[+3] = background.lighten_by(50)
97
+ @background[+4] = background.lighten_by(25)
98
+ @background[+5] = background.lighten_by(10)
99
+
100
+ @foreground[-5] = calculate_foreground(@background[-5], foreground)
101
+ @foreground[-4] = calculate_foreground(@background[-4], foreground)
102
+ @foreground[-3] = calculate_foreground(@background[-3], foreground)
103
+ @foreground[-2] = calculate_foreground(@background[-2], foreground)
104
+ @foreground[-1] = calculate_foreground(@background[-1], foreground)
105
+ @foreground[ 0] = calculate_foreground(@background[ 0], foreground)
106
+ @foreground[+1] = calculate_foreground(@background[+1], foreground)
107
+ @foreground[+2] = calculate_foreground(@background[+2], foreground)
108
+ @foreground[+3] = calculate_foreground(@background[+3], foreground)
109
+ @foreground[+4] = calculate_foreground(@background[+4], foreground)
110
+ @foreground[+5] = calculate_foreground(@background[+5], foreground)
111
+ end
112
+
113
+ # Given a background colour and a foreground colour, modifies the
114
+ # foreground colour so that it will have enough contrast to be seen
115
+ # against the background colour.
116
+ #
117
+ # Uses #mininum_brightness_diff and #minimum_color_diff.
118
+ def calculate_foreground(background, foreground)
119
+ nfg = nil
120
+ # Loop through brighter and darker versions of the foreground color. The
121
+ # numbers here represent the amount of foreground color to mix with
122
+ # black and white.
123
+ [100, 75, 50, 25, 0].each do |percent|
124
+ dfg = foreground.darken_by(percent)
125
+ lfg = foreground.lighten_by(percent)
126
+
127
+ dbd = brightness_diff(background, dfg)
128
+ lbd = brightness_diff(background, lfg)
129
+
130
+ if lbd > dbd
131
+ nfg = lfg
132
+ nbd = lbd
133
+ else
134
+ nfg = dfg
135
+ nbd = dbd
136
+ end
137
+
138
+ ncd = color_diff(background, nfg)
139
+
140
+ break if nbd >= @minimum_brightness_diff and ncd >= @minimum_color_diff
141
+ end
142
+ nfg
143
+ end
144
+
145
+ # Returns the absolute difference between the brightness levels of two
146
+ # colours. This will be a decimal value between 0 and 1. W3C accessibility
147
+ # guidelines for {colour contrast}[http://www.w3.org/TR/AERT#color-contrast]
148
+ # suggest that this value be at least approximately 0.49 (125 / 255.0) for
149
+ # proper contrast.
150
+ def brightness_diff(c1, c2)
151
+ (c1.brightness - c2.brightness).abs
152
+ end
153
+
154
+ # Returns the contrast between to colours, a decimal value between 0 and
155
+ # 3. W3C accessibility guidelines for {colour
156
+ # contrast}[http://www.w3.org/TR/AERT#color-contrast] suggest that this
157
+ # value be at least approximately 1.96 (500 / 255.0) for proper contrast.
158
+ def color_diff(c1, c2)
159
+ r = (c1.r - c2.r).abs
160
+ g = (c1.g - c2.g).abs
161
+ b = (c1.b - c2.b).abs
162
+ r + g + b
163
+ end
164
+ end
@@ -0,0 +1,4 @@
1
+ require 'color'
2
+
3
+ module Color::Palette
4
+ end
@@ -0,0 +1,167 @@
1
+ class Color::RGB
2
+ class << self
3
+ private
4
+ def named(rgb, *names)
5
+ __named_color(self, new(*rgb), *names)
6
+ end
7
+ end
8
+
9
+ named [0xf0, 0xf8, 0xff], :AliceBlue
10
+ named [0xfa, 0xeb, 0xd7], :AntiqueWhite
11
+ named [0x00, 0xff, 0xff], :Aqua
12
+ named [0x7f, 0xff, 0xd4], :Aquamarine
13
+ named [0xf0, 0xff, 0xff], :Azure
14
+ named [0xf5, 0xf5, 0xdc], :Beige
15
+ named [0xff, 0xe4, 0xc4], :Bisque
16
+ named [0x66, 0x33, 0x99], :RebeccaPurple, :BeccaPurple
17
+ named [0x00, 0x00, 0x00], :Black
18
+ named [0xff, 0xeb, 0xcd], :BlanchedAlmond
19
+ named [0x00, 0x00, 0xff], :Blue
20
+ named [0x8a, 0x2b, 0xe2], :BlueViolet
21
+ named [0xa5, 0x2a, 0x2a], :Brown
22
+ named [0xde, 0xb8, 0x87], :BurlyWood, :Burlywood
23
+ named [0x5f, 0x9e, 0xa0], :CadetBlue
24
+ named [0xff, 0x5e, 0xd0], :Carnation
25
+ named [0x8d, 0x00, 0x00], :Cayenne
26
+ named [0x7f, 0xff, 0x00], :Chartreuse
27
+ named [0xd2, 0x69, 0x1e], :Chocolate
28
+ named [0xff, 0x7f, 0x50], :Coral
29
+ named [0x64, 0x95, 0xed], :CornflowerBlue
30
+ named [0xff, 0xf8, 0xdc], :Cornsilk
31
+ named [0xdc, 0x14, 0x3c], :Crimson
32
+ named [0x00, 0xff, 0xff], :Cyan
33
+ named [0x00, 0x00, 0x8b], :DarkBlue
34
+ named [0x00, 0x8b, 0x8b], :DarkCyan
35
+ named [0xb8, 0x86, 0x0b], :DarkGoldenRod, :DarkGoldenrod
36
+ named [0xa9, 0xa9, 0xa9], :DarkGray, :DarkGrey
37
+ named [0x00, 0x64, 0x00], :DarkGreen
38
+ named [0xbd, 0xb7, 0x6b], :DarkKhaki
39
+ named [0x8b, 0x00, 0x8b], :DarkMagenta
40
+ named [0x55, 0x6b, 0x2f], :DarkOliveGreen, :DarkoliveGreen
41
+ named [0xff, 0x8c, 0x00], :DarkOrange
42
+ named [0x99, 0x32, 0xcc], :DarkOrchid
43
+ named [0x8b, 0x00, 0x00], :DarkRed
44
+ named [0xe9, 0x96, 0x7a], :DarkSalmon, :Darksalmon
45
+ named [0x8f, 0xbc, 0x8f], :DarkSeaGreen
46
+ named [0x48, 0x3d, 0x8b], :DarkSlateBlue
47
+ named [0x2f, 0x4f, 0x4f], :DarkSlateGray, :DarkSlateGrey
48
+ named [0x00, 0xce, 0xd1], :DarkTurquoise
49
+ named [0x94, 0x00, 0xd3], :DarkViolet
50
+ named [0xff, 0x8c, 0x00], :Darkorange
51
+ named [0xff, 0x14, 0x93], :DeepPink
52
+ named [0x00, 0xbf, 0xbf], :DeepSkyBlue
53
+ named [0x69, 0x69, 0x69], :DimGray, :DimGrey
54
+ named [0x1e, 0x90, 0xff], :DodgerBlue
55
+ named [0xd1, 0x92, 0x75], :Feldspar
56
+ named [0xb2, 0x22, 0x22], :FireBrick, :Firebrick
57
+ named [0xff, 0xfa, 0xf0], :FloralWhite
58
+ named [0x22, 0x8b, 0x22], :ForestGreen
59
+ named [0xff, 0x00, 0xff], :Fuchsia
60
+ named [0xdc, 0xdc, 0xdc], :Gainsboro
61
+ named [0xf8, 0xf8, 0xff], :GhostWhite
62
+ named [0xff, 0xd7, 0x00], :Gold
63
+ named [0xda, 0xa5, 0x20], :GoldenRod, :Goldenrod
64
+ named [0x80, 0x80, 0x80], :Gray, :Grey
65
+ named [10, 10, 10, 100.0], :Gray10, :Grey10
66
+ named [20, 20, 20, 100.0], :Gray20, :Grey20
67
+ named [30, 30, 30, 100.0], :Gray30, :Grey30
68
+ named [40, 40, 40, 100.0], :Gray40, :Grey40
69
+ named [50, 50, 50, 100.0], :Gray50, :Grey50
70
+ named [60, 60, 60, 100.0], :Gray60, :Grey60
71
+ named [70, 70, 70, 100.0], :Gray70, :Grey70
72
+ named [80, 80, 80, 100.0], :Gray80, :Grey80
73
+ named [90, 90, 90, 100.0], :Gray90, :Grey90
74
+ named [0x00, 0x80, 0x00], :Green
75
+ named [0xad, 0xff, 0x2f], :GreenYellow
76
+ named [0xf0, 0xff, 0xf0], :HoneyDew, :Honeydew
77
+ named [0xff, 0x69, 0xb4], :HotPink
78
+ named [0xcd, 0x5c, 0x5c], :IndianRed
79
+ named [0x4b, 0x00, 0x82], :Indigo
80
+ named [0xff, 0xff, 0xf0], :Ivory
81
+ named [0xf0, 0xe6, 0x8c], :Khaki
82
+ named [0xe6, 0xe6, 0xfa], :Lavender
83
+ named [0xff, 0xf0, 0xf5], :LavenderBlush
84
+ named [0x7c, 0xfc, 0x00], :LawnGreen
85
+ named [0xff, 0xfa, 0xcd], :LemonChiffon
86
+ named [0xad, 0xd8, 0xe6], :LightBlue
87
+ named [0xf0, 0x80, 0x80], :LightCoral
88
+ named [0xe0, 0xff, 0xff], :LightCyan
89
+ named [0xfa, 0xfa, 0xd2], :LightGoldenRodYellow, :LightGoldenrodYellow
90
+ named [0xd3, 0xd3, 0xd3], :LightGray, :LightGrey
91
+ named [0x90, 0xee, 0x90], :LightGreen
92
+ named [0xff, 0xb6, 0xc1], :LightPink
93
+ named [0xff, 0xa0, 0x7a], :LightSalmon, :Lightsalmon
94
+ named [0x20, 0xb2, 0xaa], :LightSeaGreen
95
+ named [0x87, 0xce, 0xfa], :LightSkyBlue
96
+ named [0x84, 0x70, 0xff], :LightSlateBlue
97
+ named [0x77, 0x88, 0x99], :LightSlateGray, :LightSlateGrey
98
+ named [0xb0, 0xc4, 0xde], :LightSteelBlue, :LightsteelBlue
99
+ named [0xff, 0xff, 0xe0], :LightYellow
100
+ named [0x00, 0xff, 0x00], :Lime
101
+ named [0x32, 0xcd, 0x32], :LimeGreen
102
+ named [0xfa, 0xf0, 0xe6], :Linen
103
+ named [0xff, 0x00, 0xff], :Magenta
104
+ named [0x80, 0x00, 0x00], :Maroon
105
+ named [0x66, 0xcd, 0xaa], :MediumAquaMarine, :MediumAquamarine
106
+ named [0x00, 0x00, 0xcd], :MediumBlue
107
+ named [0xba, 0x55, 0xd3], :MediumOrchid
108
+ named [0x93, 0x70, 0xdb], :MediumPurple
109
+ named [0x3c, 0xb3, 0x71], :MediumSeaGreen
110
+ named [0x7b, 0x68, 0xee], :MediumSlateBlue
111
+ named [0x00, 0xfa, 0x9a], :MediumSpringGreen
112
+ named [0x48, 0xd1, 0xcc], :MediumTurquoise
113
+ named [0xc7, 0x15, 0x85], :MediumVioletRed
114
+ named [0x19, 0x19, 0x70], :MidnightBlue
115
+ named [0xf5, 0xff, 0xfa], :MintCream
116
+ named [0xff, 0xe4, 0xe1], :MistyRose
117
+ named [0xff, 0xe4, 0xb5], :Moccasin
118
+ named [0xff, 0xde, 0xad], :NavajoWhite
119
+ named [0x00, 0x00, 0x80], :Navy
120
+ named [0xfd, 0xf5, 0xe6], :OldLace
121
+ named [0x80, 0x80, 0x00], :Olive
122
+ named [0x6b, 0x8e, 0x23], :OliveDrab, :Olivedrab
123
+ named [0xff, 0xa5, 0x00], :Orange
124
+ named [0xff, 0x45, 0x00], :OrangeRed
125
+ named [0xda, 0x70, 0xd6], :Orchid
126
+ named [0xee, 0xe8, 0xaa], :PaleGoldenRod, :PaleGoldenrod
127
+ named [0x98, 0xfb, 0x98], :PaleGreen
128
+ named [0xaf, 0xee, 0xee], :PaleTurquoise
129
+ named [0xdb, 0x70, 0x93], :PaleVioletRed
130
+ named [0xff, 0xef, 0xd5], :PapayaWhip
131
+ named [0xff, 0xda, 0xb9], :PeachPuff, :Peachpuff
132
+ named [0xcd, 0x85, 0x3f], :Peru
133
+ named [0xff, 0xc0, 0xcb], :Pink
134
+ named [0xdd, 0xa0, 0xdd], :Plum
135
+ named [0xb0, 0xe0, 0xe6], :PowderBlue
136
+ named [0x80, 0x00, 0x80], :Purple
137
+ named [0xff, 0x00, 0x00], :Red
138
+ named [0xbc, 0x8f, 0x8f], :RosyBrown
139
+ named [0x41, 0x69, 0xe1], :RoyalBlue
140
+ named [0x8b, 0x45, 0x13], :SaddleBrown
141
+ named [0xfa, 0x80, 0x72], :Salmon
142
+ named [0xf4, 0xa4, 0x60], :SandyBrown
143
+ named [0x2e, 0x8b, 0x57], :SeaGreen
144
+ named [0xff, 0xf5, 0xee], :SeaShell, :Seashell
145
+ named [0xa0, 0x52, 0x2d], :Sienna
146
+ named [0xc0, 0xc0, 0xc0], :Silver
147
+ named [0x87, 0xce, 0xeb], :SkyBlue
148
+ named [0x6a, 0x5a, 0xcd], :SlateBlue
149
+ named [0x70, 0x80, 0x90], :SlateGray, :SlateGrey
150
+ named [0xff, 0xfa, 0xfa], :Snow
151
+ named [0x00, 0xff, 0x7f], :SpringGreen
152
+ named [0x46, 0x82, 0xb4], :SteelBlue
153
+ named [0xd2, 0xb4, 0x8c], :Tan
154
+ named [0x00, 0x80, 0x80], :Teal
155
+ named [0xd8, 0xbf, 0xd8], :Thistle
156
+ named [0xff, 0x63, 0x47], :Tomato
157
+ named [0x40, 0xe0, 0xd0], :Turquoise
158
+ named [0xee, 0x82, 0xee], :Violet
159
+ named [0xd0, 0x20, 0x90], :VioletRed
160
+ named [0xf5, 0xde, 0xb3], :Wheat
161
+ named [0xff, 0xff, 0xff], :White
162
+ named [0xf5, 0xf5, 0xf5], :WhiteSmoke
163
+ named [0xff, 0xff, 0x00], :Yellow
164
+ named [0x9a, 0xcd, 0x32], :YellowGreen
165
+ end
166
+
167
+ require 'atome/helpers/color_helper/color/rgb/metallic'
@@ -0,0 +1,57 @@
1
+ # -*- ruby encoding: utf-8 -*-
2
+
3
+ class Color::RGB
4
+ # Outputs how much contrast this color has with another RGB color.
5
+ # Computes the same regardless of which one is considered foreground. If
6
+ # the other color does not have a #to_rgb method, this will throw an
7
+ # exception. Anything over about 0.22 should have a high likelihood of
8
+ # being legible, but the larger the difference, the more contrast.
9
+ # Otherwise, to be safe go with something > 0.3
10
+ def contrast(other)
11
+ other = coerce(other)
12
+
13
+ # The following numbers have been set with some care.
14
+ ((diff_brightness(other) * 0.65) +
15
+ (diff_hue(other) * 0.20) +
16
+ (diff_luminosity(other) * 0.15))
17
+ end
18
+
19
+ private
20
+ # Provides the luminosity difference between two rbg vals
21
+ def diff_luminosity(other)
22
+ other = coerce(other)
23
+ l1 = (0.2126 * (other.r) ** 2.2) +
24
+ (0.7152 * (other.b) ** 2.2) +
25
+ (0.0722 * (other.g) ** 2.2);
26
+
27
+ l2 = (0.2126 * (self.r) ** 2.2) +
28
+ (0.7152 * (self.b) ** 2.2) +
29
+ (0.0722 * (self.g) ** 2.2);
30
+
31
+ ((([l1, l2].max) + 0.05) / ( ([l1, l2].min) + 0.05 ) - 1) / 20.0
32
+ end
33
+
34
+ # Provides the brightness difference.
35
+ def diff_brightness(other)
36
+ other = other.to_rgb
37
+ br1 = (299 * other.r + 587 * other.g + 114 * other.b)
38
+ br2 = (299 * self.r + 587 * self.g + 114 * self.b)
39
+ (br1 - br2).abs / 1000.0;
40
+ end
41
+
42
+ # Provides the euclidean distance between the two color values
43
+ def diff_euclidean(other)
44
+ other = other.to_rgb
45
+ ((((other.r - self.r) ** 2) +
46
+ ((other.g - self.g) ** 2) +
47
+ ((other.b - self.b) ** 2)) ** 0.5) / 1.7320508075688772
48
+ end
49
+
50
+ # Difference in the two colors' hue
51
+ def diff_hue(other)
52
+ other = other.to_rgb
53
+ ((self.r - other.r).abs +
54
+ (self.g - other.g).abs +
55
+ (self.b - other.b).abs) / 3
56
+ end
57
+ end
@@ -0,0 +1,28 @@
1
+ # -*- ruby encoding: utf-8 -*-
2
+
3
+ class Color::RGB
4
+ # This namespace contains some RGB metallic colours suggested by Jim
5
+ # Freeze.
6
+ module Metallic; end
7
+
8
+ class << self
9
+ private
10
+ def metallic(rgb, *names)
11
+ __named_color(Metallic, new(*rgb), *names)
12
+ end
13
+ end
14
+
15
+ metallic [0x99, 0x99, 0x99], :Aluminum
16
+ metallic [0xd9, 0x87, 0x19], :CoolCopper
17
+ metallic [0xb8, 0x73, 0x33], :Copper
18
+ metallic [0x4c, 0x4c, 0x4c], :Iron
19
+ metallic [0x19, 0x19, 0x19], :Lead
20
+ metallic [0xb3, 0xb3, 0xb3], :Magnesium
21
+ metallic [0xe6, 0xe6, 0xe6], :Mercury
22
+ metallic [0x80, 0x80, 0x80], :Nickel
23
+ metallic [0x60, 0x00, 0x00], :PolySilicon, :Poly
24
+ metallic [0xcc, 0xcc, 0xcc], :Silver
25
+ metallic [0x66, 0x66, 0x66], :Steel
26
+ metallic [0x7f, 0x7f, 0x7f], :Tin
27
+ metallic [0x33, 0x33, 0x33], :Tungsten
28
+ end