bio-graphics 1.2 → 1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. data/doc/classes/Bio.html +4 -26
  2. data/doc/classes/Bio/Feature.html +350 -0
  3. data/doc/classes/Bio/Feature.src/M000010.html +21 -0
  4. data/doc/classes/Bio/Feature.src/M000011.html +20 -0
  5. data/doc/classes/Bio/Feature.src/M000012.html +19 -0
  6. data/doc/classes/Bio/Feature.src/M000014.html +21 -0
  7. data/doc/classes/Bio/Feature.src/M000016.html +21 -0
  8. data/doc/classes/Bio/Feature.src/M000034.html +21 -0
  9. data/doc/classes/Bio/Feature.src/M000035.html +20 -0
  10. data/doc/classes/Bio/Feature.src/M000036.html +19 -0
  11. data/doc/classes/Bio/Feature.src/M000038.html +21 -0
  12. data/doc/classes/Bio/Feature.src/M000040.html +21 -0
  13. data/doc/classes/Bio/Feature.src/M000042.html +21 -0
  14. data/doc/classes/Bio/Feature.src/M000043.html +20 -0
  15. data/doc/classes/Bio/Feature.src/M000044.html +21 -0
  16. data/doc/classes/Bio/Feature.src/M000045.html +20 -0
  17. data/doc/classes/Bio/Feature.src/M000046.html +19 -0
  18. data/doc/classes/Bio/Feature.src/M000048.html +21 -0
  19. data/doc/classes/Bio/Feature.src/M000050.html +21 -0
  20. data/doc/classes/Bio/Feature.src/M000074.html +21 -0
  21. data/doc/classes/Bio/Feature.src/M000075.html +20 -0
  22. data/doc/classes/Bio/Feature.src/M000076.html +19 -0
  23. data/doc/classes/Bio/Feature.src/M000078.html +21 -0
  24. data/doc/classes/Bio/Feature.src/M000080.html +21 -0
  25. data/doc/classes/Bio/Feature/Qualifier.html +189 -0
  26. data/doc/classes/Bio/Feature/Qualifier.src/M000017.html +18 -0
  27. data/doc/classes/Bio/Feature/Qualifier.src/M000041.html +18 -0
  28. data/doc/classes/Bio/Feature/Qualifier.src/M000049.html +18 -0
  29. data/doc/classes/Bio/Feature/Qualifier.src/M000051.html +18 -0
  30. data/doc/classes/Bio/Feature/Qualifier.src/M000081.html +18 -0
  31. data/doc/classes/Bio/Features.html +329 -0
  32. data/doc/classes/Bio/Features.src/M000004.html +18 -0
  33. data/doc/classes/Bio/Features.src/M000005.html +19 -0
  34. data/doc/classes/Bio/Features.src/M000006.html +21 -0
  35. data/doc/classes/Bio/Features.src/M000007.html +18 -0
  36. data/doc/classes/Bio/Features.src/M000008.html +18 -0
  37. data/doc/classes/Bio/Features.src/M000009.html +18 -0
  38. data/doc/classes/Bio/Features.src/M000028.html +18 -0
  39. data/doc/classes/Bio/Features.src/M000029.html +19 -0
  40. data/doc/classes/Bio/Features.src/M000030.html +21 -0
  41. data/doc/classes/Bio/Features.src/M000031.html +18 -0
  42. data/doc/classes/Bio/Features.src/M000032.html +18 -0
  43. data/doc/classes/Bio/Features.src/M000033.html +18 -0
  44. data/doc/classes/Bio/Features.src/M000036.html +18 -0
  45. data/doc/classes/Bio/Features.src/M000037.html +19 -0
  46. data/doc/classes/Bio/Features.src/M000038.html +18 -0
  47. data/doc/classes/Bio/Features.src/M000039.html +19 -0
  48. data/doc/classes/Bio/Features.src/M000040.html +21 -0
  49. data/doc/classes/Bio/Features.src/M000041.html +18 -0
  50. data/doc/classes/Bio/Features.src/M000042.html +18 -0
  51. data/doc/classes/Bio/Features.src/M000043.html +18 -0
  52. data/doc/classes/Bio/Features.src/M000068.html +18 -0
  53. data/doc/classes/Bio/Features.src/M000069.html +19 -0
  54. data/doc/classes/Bio/Features.src/M000070.html +21 -0
  55. data/doc/classes/Bio/Features.src/M000071.html +18 -0
  56. data/doc/classes/Bio/Features.src/M000072.html +18 -0
  57. data/doc/classes/Bio/Features.src/M000073.html +18 -0
  58. data/doc/classes/Bio/Graphics.html +28 -42
  59. data/doc/classes/Bio/Graphics/{Panel/Track/Feature.html → Feature.html} +98 -125
  60. data/doc/classes/Bio/Graphics/Feature.src/M000020.html +51 -0
  61. data/doc/classes/Bio/Graphics/Feature.src/M000021.html +65 -0
  62. data/doc/classes/Bio/Graphics/Feature.src/M000022.html +55 -0
  63. data/doc/classes/Bio/Graphics/Feature.src/M000023.html +66 -0
  64. data/doc/classes/Bio/Graphics/Feature.src/M000024.html +51 -0
  65. data/doc/classes/Bio/Graphics/Feature.src/M000025.html +65 -0
  66. data/doc/classes/Bio/Graphics/Feature.src/M000026.html +55 -0
  67. data/doc/classes/Bio/Graphics/Feature.src/M000054.html +51 -0
  68. data/doc/classes/Bio/Graphics/Feature.src/M000055.html +65 -0
  69. data/doc/classes/Bio/Graphics/Feature.src/M000056.html +55 -0
  70. data/doc/classes/Bio/Graphics/Feature/SubFeature.html +348 -0
  71. data/doc/classes/Bio/Graphics/Feature/SubFeature.src/M000025.html +68 -0
  72. data/doc/classes/Bio/Graphics/Feature/SubFeature.src/M000026.html +67 -0
  73. data/doc/classes/Bio/Graphics/Glyph.html +178 -0
  74. data/doc/classes/Bio/Graphics/Glyph/Box.html +139 -0
  75. data/doc/classes/Bio/Graphics/Glyph/Box.src/M000004.html +24 -0
  76. data/doc/classes/Bio/Graphics/Glyph/Box.src/M000032.html +24 -0
  77. data/doc/classes/Bio/Graphics/Glyph/Common.html +187 -0
  78. data/doc/classes/Bio/Graphics/Glyph/Common.src/M000004.html +18 -0
  79. data/doc/classes/Bio/Graphics/Glyph/Common.src/M000005.html +18 -0
  80. data/doc/classes/Bio/Graphics/Glyph/Common.src/M000006.html +24 -0
  81. data/doc/classes/Bio/Graphics/Glyph/Common.src/M000007.html +24 -0
  82. data/doc/classes/Bio/Graphics/Glyph/Common.src/M000033.html +18 -0
  83. data/doc/classes/Bio/Graphics/Glyph/Common.src/M000034.html +24 -0
  84. data/doc/classes/Bio/Graphics/Glyph/Common.src/M000035.html +24 -0
  85. data/doc/classes/Bio/Graphics/Glyph/CustomTestGlyph.html +139 -0
  86. data/doc/classes/Bio/Graphics/Glyph/CustomTestGlyph.src/M000037.html +22 -0
  87. data/doc/classes/Bio/Graphics/Glyph/CustomTestGlyphInFile.html +139 -0
  88. data/doc/classes/Bio/Graphics/Glyph/CustomTestGlyphInFile.src/M000038.html +22 -0
  89. data/doc/classes/Bio/Graphics/Glyph/DirectedBox.html +139 -0
  90. data/doc/classes/Bio/Graphics/Glyph/DirectedBox.src/M000009.html +31 -0
  91. data/doc/classes/Bio/Graphics/Glyph/DirectedBox.src/M000039.html +31 -0
  92. data/doc/classes/Bio/Graphics/Glyph/DirectedGeneric.html +139 -0
  93. data/doc/classes/Bio/Graphics/Glyph/DirectedGeneric.src/M000011.html +26 -0
  94. data/doc/classes/Bio/Graphics/Glyph/DirectedGeneric.src/M000013.html +26 -0
  95. data/doc/classes/Bio/Graphics/Glyph/DirectedGeneric.src/M000043.html +26 -0
  96. data/doc/classes/Bio/Graphics/Glyph/DirectedSpliced.html +139 -0
  97. data/doc/classes/Bio/Graphics/Glyph/DirectedSpliced.src/M000008.html +40 -0
  98. data/doc/classes/Bio/Graphics/Glyph/DirectedSpliced.src/M000010.html +40 -0
  99. data/doc/classes/Bio/Graphics/Glyph/DirectedSpliced.src/M000040.html +40 -0
  100. data/doc/classes/Bio/Graphics/{Panel/Track/Feature/PixelRange.html → Glyph/Dot.html} +16 -19
  101. data/doc/classes/Bio/Graphics/Glyph/Dot.src/M000013.html +22 -0
  102. data/doc/classes/Bio/Graphics/Glyph/Dot.src/M000015.html +22 -0
  103. data/doc/classes/Bio/Graphics/Glyph/Dot.src/M000045.html +22 -0
  104. data/doc/classes/Bio/Graphics/Glyph/Generic.html +139 -0
  105. data/doc/classes/Bio/Graphics/Glyph/Generic.src/M000009.html +18 -0
  106. data/doc/classes/Bio/Graphics/Glyph/Generic.src/M000011.html +18 -0
  107. data/doc/classes/Bio/Graphics/Glyph/Generic.src/M000041.html +18 -0
  108. data/doc/classes/Bio/Graphics/Glyph/Line.html +139 -0
  109. data/doc/classes/Bio/Graphics/Glyph/Line.src/M000012.html +20 -0
  110. data/doc/classes/Bio/Graphics/Glyph/Line.src/M000014.html +20 -0
  111. data/doc/classes/Bio/Graphics/Glyph/Line.src/M000044.html +20 -0
  112. data/doc/classes/Bio/Graphics/Glyph/LineWithHandles.html +139 -0
  113. data/doc/classes/Bio/Graphics/Glyph/LineWithHandles.src/M000014.html +28 -0
  114. data/doc/classes/Bio/Graphics/Glyph/LineWithHandles.src/M000016.html +28 -0
  115. data/doc/classes/Bio/Graphics/Glyph/LineWithHandles.src/M000046.html +28 -0
  116. data/doc/classes/Bio/Graphics/Glyph/Spliced.html +139 -0
  117. data/doc/classes/Bio/Graphics/Glyph/Spliced.src/M000010.html +19 -0
  118. data/doc/classes/Bio/Graphics/Glyph/Spliced.src/M000012.html +19 -0
  119. data/doc/classes/Bio/Graphics/Glyph/Spliced.src/M000042.html +19 -0
  120. data/doc/classes/Bio/Graphics/Glyph/Transcript.html +113 -0
  121. data/doc/classes/Bio/Graphics/Glyph/Triangle.html +139 -0
  122. data/doc/classes/Bio/Graphics/Glyph/Triangle.src/M000007.html +21 -0
  123. data/doc/classes/Bio/Graphics/Glyph/Triangle.src/M000008.html +21 -0
  124. data/doc/classes/Bio/Graphics/Glyph/Triangle.src/M000036.html +21 -0
  125. data/doc/classes/{ImageMap.html → Bio/Graphics/ImageMap.html} +50 -16
  126. data/doc/classes/{ImageMap.src/M000001.html → Bio/Graphics/ImageMap.src/M000030.html} +3 -3
  127. data/doc/classes/Bio/Graphics/ImageMap.src/M000031.html +18 -0
  128. data/doc/classes/Bio/Graphics/ImageMap.src/M000032.html +18 -0
  129. data/doc/classes/Bio/Graphics/ImageMap.src/M000033.html +18 -0
  130. data/doc/classes/{ImageMap.src/M000002.html → Bio/Graphics/ImageMap.src/M000034.html} +7 -4
  131. data/doc/classes/Bio/Graphics/ImageMap.src/M000035.html +24 -0
  132. data/doc/classes/Bio/Graphics/ImageMap.src/M000062.html +18 -0
  133. data/doc/classes/Bio/Graphics/ImageMap.src/M000063.html +18 -0
  134. data/doc/classes/Bio/Graphics/ImageMap.src/M000064.html +27 -0
  135. data/doc/classes/Bio/Graphics/ImageMap.src/M000065.html +24 -0
  136. data/doc/classes/{ImageMap/ImageMapElement.html → Bio/Graphics/ImageMap/Element.html} +14 -14
  137. data/doc/classes/{ImageMap/ImageMapElement.src/M000003.html → Bio/Graphics/ImageMap/Element.src/M000034.html} +3 -3
  138. data/doc/classes/{ImageMap/ImageMapElement.src/M000004.html → Bio/Graphics/ImageMap/Element.src/M000035.html} +6 -4
  139. data/doc/classes/Bio/Graphics/ImageMap/Element.src/M000036.html +19 -0
  140. data/doc/classes/Bio/Graphics/ImageMap/Element.src/M000037.html +22 -0
  141. data/doc/classes/Bio/Graphics/ImageMap/Element.src/M000066.html +19 -0
  142. data/doc/classes/Bio/Graphics/ImageMap/Element.src/M000067.html +22 -0
  143. data/doc/classes/Bio/Graphics/Panel.html +70 -69
  144. data/doc/classes/Bio/Graphics/Panel.src/M000025.html +52 -0
  145. data/doc/classes/Bio/Graphics/Panel.src/M000026.html +20 -0
  146. data/doc/classes/Bio/Graphics/Panel.src/M000027.html +98 -0
  147. data/doc/classes/Bio/Graphics/Panel.src/M000028.html +20 -0
  148. data/doc/classes/Bio/Graphics/Panel.src/M000029.html +52 -0
  149. data/doc/classes/Bio/Graphics/Panel.src/M000030.html +20 -0
  150. data/doc/classes/Bio/Graphics/Panel.src/M000031.html +98 -0
  151. data/doc/classes/Bio/Graphics/Panel.src/M000059.html +52 -0
  152. data/doc/classes/Bio/Graphics/Panel.src/M000060.html +20 -0
  153. data/doc/classes/Bio/Graphics/Panel.src/M000061.html +98 -0
  154. data/doc/classes/Bio/Graphics/{Panel/Ruler.html → Ruler.html} +50 -21
  155. data/doc/classes/Bio/Graphics/Ruler.src/M000015.html +30 -0
  156. data/doc/classes/Bio/Graphics/Ruler.src/M000016.html +20 -0
  157. data/doc/classes/Bio/Graphics/Ruler.src/M000017.html +30 -0
  158. data/doc/classes/Bio/Graphics/Ruler.src/M000018.html +20 -0
  159. data/doc/classes/Bio/Graphics/Ruler.src/M000019.html +26 -0
  160. data/doc/classes/Bio/Graphics/Ruler.src/M000020.html +45 -0
  161. data/doc/classes/Bio/Graphics/Ruler.src/M000047.html +30 -0
  162. data/doc/classes/Bio/Graphics/Ruler.src/M000048.html +20 -0
  163. data/doc/classes/Bio/Graphics/Ruler.src/M000049.html +26 -0
  164. data/doc/classes/Bio/Graphics/Ruler.src/M000050.html +45 -0
  165. data/doc/classes/Bio/Graphics/SubFeature.html +348 -0
  166. data/doc/classes/Bio/Graphics/SubFeature.src/M000001.html +73 -0
  167. data/doc/classes/Bio/Graphics/SubFeature.src/M000002.html +69 -0
  168. data/doc/classes/Bio/Graphics/SubFeature.src/M000023.html +73 -0
  169. data/doc/classes/Bio/Graphics/SubFeature.src/M000024.html +69 -0
  170. data/doc/classes/Bio/Graphics/SubFeature.src/M000027.html +73 -0
  171. data/doc/classes/Bio/Graphics/SubFeature.src/M000028.html +69 -0
  172. data/doc/classes/Bio/Graphics/SubFeature.src/M000057.html +73 -0
  173. data/doc/classes/Bio/Graphics/SubFeature.src/M000058.html +69 -0
  174. data/doc/classes/Bio/Graphics/{Panel/Track.html → Track.html} +67 -69
  175. data/doc/classes/Bio/Graphics/Track.src/M000017.html +39 -0
  176. data/doc/classes/Bio/Graphics/Track.src/M000018.html +37 -0
  177. data/doc/classes/Bio/Graphics/Track.src/M000019.html +45 -0
  178. data/doc/classes/Bio/Graphics/Track.src/M000020.html +41 -0
  179. data/doc/classes/Bio/Graphics/Track.src/M000021.html +39 -0
  180. data/doc/classes/Bio/Graphics/Track.src/M000022.html +37 -0
  181. data/doc/classes/Bio/Graphics/Track.src/M000023.html +45 -0
  182. data/doc/classes/Bio/Graphics/Track.src/M000051.html +39 -0
  183. data/doc/classes/Bio/Graphics/Track.src/M000052.html +37 -0
  184. data/doc/classes/Bio/Graphics/Track.src/M000053.html +45 -0
  185. data/doc/classes/Range.html +129 -0
  186. data/doc/classes/String.html +167 -0
  187. data/doc/classes/String.src/M000001.html +18 -0
  188. data/doc/classes/String.src/M000002.html +18 -0
  189. data/doc/classes/String.src/M000003.html +23 -0
  190. data/doc/classes/String.src/M000029.html +18 -0
  191. data/doc/classes/String.src/M000030.html +18 -0
  192. data/doc/classes/String.src/M000031.html +23 -0
  193. data/doc/classes/TestCustomGlyph.html +137 -0
  194. data/doc/classes/TestCustomGlyph.src/M000025.html +25 -0
  195. data/doc/classes/TestCustomGlyphInFile.html +167 -0
  196. data/doc/classes/TestCustomGlyphInFile.src/M000026.html +19 -0
  197. data/doc/classes/TestCustomGlyphInFile.src/M000027.html +25 -0
  198. data/doc/classes/TestCustomGlyphInFile.src/M000028.html +18 -0
  199. data/doc/classes/TestExtensions.html +152 -0
  200. data/doc/classes/TestExtensions.src/M000015.html +22 -0
  201. data/doc/classes/TestExtensions.src/M000016.html +25 -0
  202. data/doc/classes/TestFeature.html +152 -0
  203. data/doc/classes/TestFeature.src/M000017.html +19 -0
  204. data/doc/classes/TestFeature.src/M000018.html +21 -0
  205. data/doc/classes/TestImageMap.html +182 -0
  206. data/doc/classes/TestImageMap.src/M000019.html +22 -0
  207. data/doc/classes/TestImageMap.src/M000020.html +56 -0
  208. data/doc/classes/TestImageMap.src/M000021.html +56 -0
  209. data/doc/classes/TestImageMap.src/M000022.html +20 -0
  210. data/doc/classes/TestPanel.html +276 -0
  211. data/doc/classes/TestPanel.src/M000001.html +18 -0
  212. data/doc/classes/TestPanel.src/M000002.html +61 -0
  213. data/doc/classes/TestPanel.src/M000003.html +35 -0
  214. data/doc/classes/TestPanel.src/M000004.html +54 -0
  215. data/doc/classes/TestPanel.src/M000005.html +54 -0
  216. data/doc/classes/TestPanel.src/M000006.html +41 -0
  217. data/doc/classes/TestPanel.src/M000007.html +36 -0
  218. data/doc/classes/TestPanel.src/M000008.html +20 -0
  219. data/doc/classes/TestPanel.src/M000009.html +26 -0
  220. data/doc/classes/TestPanel.src/M000010.html +21 -0
  221. data/doc/classes/TestRuler.html +152 -0
  222. data/doc/classes/TestRuler.src/M000013.html +22 -0
  223. data/doc/classes/TestRuler.src/M000014.html +31 -0
  224. data/doc/classes/TestSubFeature.html +152 -0
  225. data/doc/classes/TestSubFeature.src/M000023.html +21 -0
  226. data/doc/classes/TestSubFeature.src/M000024.html +18 -0
  227. data/doc/classes/TestTrack.html +152 -0
  228. data/doc/classes/TestTrack.src/M000011.html +19 -0
  229. data/doc/classes/TestTrack.src/M000012.html +23 -0
  230. data/doc/created.rid +1 -1
  231. data/doc/files/README_DEV.html +399 -70
  232. data/doc/files/TUTORIAL.html +188 -67
  233. data/doc/files/lib/bio-graphics_rb.html +3 -2
  234. data/doc/files/lib/bio/graphics/feature_rb.html +12 -6
  235. data/doc/files/lib/bio/graphics/glyphs/box_rb.html +113 -0
  236. data/doc/files/lib/bio/graphics/glyphs/common_rb.html +113 -0
  237. data/doc/files/lib/bio/graphics/glyphs/directed_box_rb.html +113 -0
  238. data/doc/files/lib/bio/graphics/glyphs/directed_generic_rb.html +113 -0
  239. data/doc/files/lib/bio/graphics/glyphs/directed_spliced_rb.html +113 -0
  240. data/doc/files/lib/bio/graphics/glyphs/dot_rb.html +113 -0
  241. data/doc/files/lib/bio/graphics/glyphs/generic_rb.html +113 -0
  242. data/doc/files/lib/bio/graphics/glyphs/line_rb.html +113 -0
  243. data/doc/files/lib/bio/graphics/glyphs/line_with_handles_rb.html +113 -0
  244. data/doc/files/lib/bio/graphics/glyphs/spliced_rb.html +113 -0
  245. data/doc/files/lib/bio/graphics/glyphs/transcript_rb.html +113 -0
  246. data/doc/files/lib/bio/graphics/glyphs/triangle_rb.html +113 -0
  247. data/doc/files/lib/bio/graphics/image_map_rb.html +3 -2
  248. data/doc/files/lib/bio/graphics/panel_rb.html +10 -2
  249. data/doc/files/lib/bio/graphics/ruler_rb.html +3 -2
  250. data/doc/files/lib/bio/graphics/subfeature_rb.html +114 -0
  251. data/doc/files/lib/bio/graphics/track_rb.html +3 -2
  252. data/doc/files/lib/feature_rb.html +101 -0
  253. data/doc/files/samples/arkdb_features_rb.html +101 -0
  254. data/doc/files/samples/glyph_showcase_rb.html +108 -0
  255. data/doc/files/samples/protein_domains_rb.html +115 -0
  256. data/doc/files/samples/subfeatures_rb.html +108 -0
  257. data/doc/files/scripts/gff2png_rb.html +154 -0
  258. data/doc/files/test/unit/custom_glyph_in_file_rb.html +101 -0
  259. data/doc/files/test/unit/test_class_extensions_rb.html +108 -0
  260. data/doc/files/test/unit/test_creation_rb.html +108 -0
  261. data/doc/files/test/unit/test_custom_glyph_rb.html +108 -0
  262. data/doc/files/test/unit/test_draw_rb.html +108 -0
  263. data/doc/files/test/unit/test_imagemap_rb.html +108 -0
  264. data/doc/files/test/unit/test_subfeatures_rb.html +108 -0
  265. data/doc/fr_class_index.html +24 -6
  266. data/doc/fr_file_index.html +14 -0
  267. data/doc/fr_method_index.html +51 -19
  268. data/doc/images/glyph_showcase.png +0 -0
  269. data/doc/images/terms.svg +146 -132
  270. data/images/glyph_showcase.png +0 -0
  271. data/lib/bio-graphics.rb +38 -6
  272. data/lib/bio/graphics/feature.rb +212 -440
  273. data/lib/bio/graphics/glyphs/box.rb +21 -0
  274. data/lib/bio/graphics/glyphs/common.rb +149 -0
  275. data/lib/bio/graphics/glyphs/directed_box.rb +28 -0
  276. data/lib/bio/graphics/glyphs/directed_generic.rb +23 -0
  277. data/lib/bio/graphics/glyphs/directed_spliced.rb +39 -0
  278. data/lib/bio/graphics/glyphs/dot.rb +21 -0
  279. data/lib/bio/graphics/glyphs/generic.rb +15 -0
  280. data/lib/bio/graphics/glyphs/line.rb +17 -0
  281. data/lib/bio/graphics/glyphs/line_with_handles.rb +25 -0
  282. data/lib/bio/graphics/glyphs/spliced.rb +16 -0
  283. data/lib/bio/graphics/glyphs/transcript.rb +12 -0
  284. data/lib/bio/graphics/glyphs/triangle.rb +18 -0
  285. data/lib/bio/graphics/image_map.rb +25 -4
  286. data/lib/bio/graphics/panel.rb +266 -209
  287. data/lib/bio/graphics/ruler.rb +95 -96
  288. data/lib/bio/graphics/subfeature.rb +187 -0
  289. data/lib/bio/graphics/track.rb +155 -156
  290. data/lib/feature.rb +204 -0
  291. data/samples/arkdb_features.rb +10 -8
  292. data/samples/glyph_showcase.rb +58 -22
  293. data/samples/protein_domains.rb +19 -0
  294. data/samples/subfeatures.rb +31 -0
  295. data/test/unit/custom_glyph_in_file.rb +12 -0
  296. data/test/unit/data.txt +32 -0
  297. data/test/unit/test_class_extensions.rb +23 -0
  298. data/test/unit/test_creation.rb +43 -13
  299. data/test/unit/test_custom_glyph.rb +50 -0
  300. data/test/unit/test_draw.rb +211 -0
  301. data/test/unit/test_imagemap.rb +134 -0
  302. data/test/unit/test_subfeatures.rb +17 -0
  303. metadata +396 -119
  304. data/doc/classes/Bio/Graphics/Panel.src/M000005.html +0 -29
  305. data/doc/classes/Bio/Graphics/Panel.src/M000006.html +0 -19
  306. data/doc/classes/Bio/Graphics/Panel.src/M000007.html +0 -68
  307. data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000008.html +0 -20
  308. data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000009.html +0 -28
  309. data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000010.html +0 -54
  310. data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000013.html +0 -20
  311. data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000014.html +0 -20
  312. data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000015.html +0 -28
  313. data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000016.html +0 -59
  314. data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000017.html +0 -20
  315. data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000018.html +0 -28
  316. data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000019.html +0 -59
  317. data/doc/classes/Bio/Graphics/Panel/Track.src/M000008.html +0 -26
  318. data/doc/classes/Bio/Graphics/Panel/Track.src/M000009.html +0 -42
  319. data/doc/classes/Bio/Graphics/Panel/Track.src/M000010.html +0 -52
  320. data/doc/classes/Bio/Graphics/Panel/Track.src/M000011.html +0 -23
  321. data/doc/classes/Bio/Graphics/Panel/Track.src/M000012.html +0 -43
  322. data/doc/classes/Bio/Graphics/Panel/Track.src/M000013.html +0 -259
  323. data/doc/classes/Bio/Graphics/Panel/Track/Feature.src/M000011.html +0 -65
  324. data/doc/classes/Bio/Graphics/Panel/Track/Feature.src/M000012.html +0 -39
  325. data/doc/classes/Bio/Graphics/Panel/Track/Feature.src/M000013.html +0 -27
  326. data/doc/classes/Bio/Graphics/Panel/Track/Feature.src/M000014.html +0 -225
  327. data/doc/classes/Bio/Graphics/Panel/Track/Feature.src/M000015.html +0 -48
  328. data/doc/classes/Bio/Graphics/Panel/Track/Feature/PixelRange.src/M000012.html +0 -18
  329. data/doc/classes/Bio/Graphics/Panel/Track/Feature/PixelRange.src/M000013.html +0 -18
  330. data/doc/classes/Bio/Graphics/Panel/Track/Feature/PixelRange.src/M000015.html +0 -18
  331. data/doc/classes/Bio/Graphics/Panel/Track/Feature/PixelRange.src/M000016.html +0 -18
@@ -0,0 +1,51 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html>
7
+ <head>
8
+ <title>new (Bio::Graphics::Feature)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../../../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/bio/graphics/feature.rb, line 39</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">track</span>, <span class="ruby-identifier">feature_object</span>, <span class="ruby-identifier">opts</span> = {})
15
+ <span class="ruby-ivar">@track</span> = <span class="ruby-identifier">track</span>
16
+ <span class="ruby-ivar">@feature_object</span> = <span class="ruby-identifier">feature_object</span>
17
+ <span class="ruby-identifier">opts</span> = {
18
+ <span class="ruby-identifier">:label</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'anonymous'</span>,
19
+ <span class="ruby-identifier">:link</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
20
+ <span class="ruby-identifier">:glyph</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">glyph</span>,
21
+ <span class="ruby-identifier">:colour</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">colour</span>
22
+ }.<span class="ruby-identifier">merge</span>(<span class="ruby-identifier">opts</span>)
23
+
24
+ <span class="ruby-ivar">@label</span> = <span class="ruby-identifier">opts</span>[<span class="ruby-identifier">:label</span>]
25
+ <span class="ruby-ivar">@link</span> = <span class="ruby-identifier">opts</span>[<span class="ruby-identifier">:link</span>]
26
+ <span class="ruby-ivar">@glyph</span> = <span class="ruby-identifier">opts</span>[<span class="ruby-identifier">:glyph</span>]
27
+ <span class="ruby-ivar">@colour</span> = <span class="ruby-identifier">opts</span>[<span class="ruby-identifier">:colour</span>]
28
+
29
+ <span class="ruby-ivar">@locations</span> = <span class="ruby-ivar">@feature_object</span>.<span class="ruby-identifier">locations</span>
30
+
31
+ <span class="ruby-ivar">@start</span> = <span class="ruby-ivar">@locations</span>.<span class="ruby-identifier">collect</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">l</span><span class="ruby-operator">|</span> <span class="ruby-identifier">l</span>.<span class="ruby-identifier">from</span>}.<span class="ruby-identifier">min</span>.<span class="ruby-identifier">to_i</span>
32
+ <span class="ruby-ivar">@stop</span> = <span class="ruby-ivar">@locations</span>.<span class="ruby-identifier">collect</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">l</span><span class="ruby-operator">|</span> <span class="ruby-identifier">l</span>.<span class="ruby-identifier">to</span>}.<span class="ruby-identifier">max</span>.<span class="ruby-identifier">to_i</span>
33
+
34
+ <span class="ruby-comment cmt"># Create Bio::Graphics SubFeatures</span>
35
+ <span class="ruby-comment cmt"># The drawing is handled by subfeatures. If there are no defined, the</span>
36
+ <span class="ruby-comment cmt"># subfeatures array will just hold one element: the @feature_object of</span>
37
+ <span class="ruby-comment cmt"># self.</span>
38
+ <span class="ruby-ivar">@subfeatures</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
39
+ <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span> <span class="ruby-ivar">@feature_object</span>.<span class="ruby-identifier">subfeatures</span>.<span class="ruby-identifier">empty?</span>
40
+ <span class="ruby-ivar">@feature_object</span>.<span class="ruby-identifier">subfeatures</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">subfeature</span><span class="ruby-operator">|</span>
41
+ <span class="ruby-ivar">@subfeatures</span>.<span class="ruby-identifier">push</span>(<span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">SubFeature</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-identifier">subfeature</span>, <span class="ruby-identifier">:glyph</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@glyph</span>, <span class="ruby-identifier">:colour</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@colour</span>))
42
+ <span class="ruby-keyword kw">end</span>
43
+ <span class="ruby-keyword kw">else</span>
44
+ <span class="ruby-ivar">@subfeatures</span>.<span class="ruby-identifier">push</span>(<span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">SubFeature</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-ivar">@feature_object</span>, <span class="ruby-identifier">:glyph</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@glyph</span>, <span class="ruby-identifier">:colour</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@colour</span>))
45
+ <span class="ruby-keyword kw">end</span>
46
+
47
+ <span class="ruby-ivar">@left_pixel_of_subfeatures</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
48
+ <span class="ruby-ivar">@right_pixel_of_subfeatures</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
49
+ <span class="ruby-keyword kw">end</span></pre>
50
+ </body>
51
+ </html>
@@ -0,0 +1,65 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html>
7
+ <head>
8
+ <title>draw (Bio::Graphics::Feature)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../../../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/bio/graphics/feature.rb, line 113</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">draw</span>(<span class="ruby-identifier">panel_destination</span>)
15
+ <span class="ruby-identifier">feature_context</span> = <span class="ruby-constant">Cairo</span><span class="ruby-operator">::</span><span class="ruby-constant">Context</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">panel_destination</span>)
16
+
17
+ <span class="ruby-comment cmt"># Move the feature drawing down based on track it's in and the number</span>
18
+ <span class="ruby-comment cmt"># of times is has to be bumped</span>
19
+ <span class="ruby-identifier">row</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">find_row</span>
20
+
21
+ <span class="ruby-ivar">@vertical_offset</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">track</span>.<span class="ruby-identifier">vertical_offset</span> <span class="ruby-operator">+</span> <span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">TRACK_HEADER_HEIGHT</span> <span class="ruby-operator">+</span> <span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">FEATURE_V_DISTANCE</span>
22
+ <span class="ruby-ivar">@vertical_offset</span> <span class="ruby-operator">+=</span> (<span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">FEATURE_HEIGHT</span><span class="ruby-operator">+</span><span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">FEATURE_V_DISTANCE</span>)<span class="ruby-operator">*</span><span class="ruby-identifier">row</span>
23
+
24
+ <span class="ruby-identifier">feature_context</span>.<span class="ruby-identifier">translate</span>(<span class="ruby-value">0</span>, <span class="ruby-ivar">@vertical_offset</span>)
25
+
26
+ <span class="ruby-comment cmt"># Let the subfeatures do the drawing.</span>
27
+ <span class="ruby-ivar">@subfeatures</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">subfeature</span><span class="ruby-operator">|</span>
28
+ <span class="ruby-identifier">subfeature</span>.<span class="ruby-identifier">draw</span>(<span class="ruby-identifier">feature_context</span>)
29
+ <span class="ruby-keyword kw">end</span>
30
+
31
+ <span class="ruby-ivar">@left_pixel_of_feature</span> = <span class="ruby-ivar">@left_pixel_of_subfeatures</span>.<span class="ruby-identifier">min</span>
32
+ <span class="ruby-ivar">@right_pixel_of_feature</span> = <span class="ruby-ivar">@right_pixel_of_subfeatures</span>.<span class="ruby-identifier">max</span>
33
+
34
+ <span class="ruby-comment cmt"># Add the label for the feature</span>
35
+ <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">show_label</span>
36
+ <span class="ruby-identifier">pango_layout</span> = <span class="ruby-identifier">feature_context</span>.<span class="ruby-identifier">create_pango_layout</span>
37
+ <span class="ruby-identifier">pango_layout</span>.<span class="ruby-identifier">text</span> = <span class="ruby-ivar">@label</span>
38
+ <span class="ruby-identifier">fdesc</span> = <span class="ruby-constant">Pango</span><span class="ruby-operator">::</span><span class="ruby-constant">FontDescription</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'Sans Serif'</span>)
39
+ <span class="ruby-identifier">fdesc</span>.<span class="ruby-identifier">set_size</span>(<span class="ruby-value">8</span> <span class="ruby-operator">*</span> <span class="ruby-constant">Pango</span><span class="ruby-operator">::</span><span class="ruby-constant">SCALE</span>)
40
+ <span class="ruby-identifier">pango_layout</span>.<span class="ruby-identifier">font_description</span> = <span class="ruby-identifier">fdesc</span>
41
+
42
+ <span class="ruby-identifier">text_range</span> = <span class="ruby-ivar">@start</span>.<span class="ruby-identifier">floor</span><span class="ruby-operator">..</span>(<span class="ruby-ivar">@start</span>.<span class="ruby-identifier">floor</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">pango_layout</span>.<span class="ruby-identifier">pixel_size</span>[<span class="ruby-value">0</span>]<span class="ruby-operator">*</span><span class="ruby-ivar">@track</span>.<span class="ruby-identifier">panel</span>.<span class="ruby-identifier">rescale_factor</span>)
43
+ <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>].<span class="ruby-identifier">nil?</span>
44
+ <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>] = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
45
+ <span class="ruby-keyword kw">end</span>
46
+ <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span>].<span class="ruby-identifier">push</span>(<span class="ruby-identifier">text_range</span>)
47
+ <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>].<span class="ruby-identifier">push</span>(<span class="ruby-identifier">text_range</span>)
48
+ <span class="ruby-identifier">feature_context</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-ivar">@left_pixel_of_feature</span>, <span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">TRACK_HEADER_HEIGHT</span>)
49
+ <span class="ruby-identifier">feature_context</span>.<span class="ruby-identifier">set_source_rgb</span>(<span class="ruby-value">0</span>,<span class="ruby-value">0</span>,<span class="ruby-value">0</span>)
50
+ <span class="ruby-identifier">feature_context</span>.<span class="ruby-identifier">show_pango_layout</span>(<span class="ruby-identifier">pango_layout</span>)
51
+ <span class="ruby-identifier">feature_context</span>.<span class="ruby-identifier">set_source_rgb</span>(<span class="ruby-ivar">@colour</span>)
52
+ <span class="ruby-keyword kw">end</span>
53
+
54
+
55
+ <span class="ruby-comment cmt"># And add the region to the image map</span>
56
+ <span class="ruby-comment cmt"># Comment: we have to add the vertical_offset and TRACK_HEADER_HEIGHT!</span>
57
+ <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">panel</span>.<span class="ruby-identifier">image_map</span>.<span class="ruby-identifier">add_element</span>(<span class="ruby-ivar">@left_pixel_of_feature</span>,
58
+ <span class="ruby-ivar">@vertical_offset</span>,
59
+ <span class="ruby-ivar">@right_pixel_of_feature</span>,
60
+ <span class="ruby-ivar">@vertical_offset</span> <span class="ruby-operator">+</span> <span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">FEATURE_HEIGHT</span>,
61
+ <span class="ruby-ivar">@link</span>
62
+ )
63
+ <span class="ruby-keyword kw">end</span></pre>
64
+ </body>
65
+ </html>
@@ -0,0 +1,55 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html>
7
+ <head>
8
+ <title>find_row (Bio::Graphics::Feature)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../../../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/bio/graphics/feature.rb, line 171</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">find_row</span>
15
+ <span class="ruby-identifier">row_found</span> = <span class="ruby-keyword kw">false</span>
16
+
17
+ <span class="ruby-comment cmt"># We've got to find out what row to draw the feature on. If two </span>
18
+ <span class="ruby-comment cmt"># features overlap, one of them has to be 'bumped' down. So we'll</span>
19
+ <span class="ruby-comment cmt"># first try to draw a new feature at the top of the track. If</span>
20
+ <span class="ruby-comment cmt"># it however would overlap with another one, we'll bump it down</span>
21
+ <span class="ruby-comment cmt"># to the next row.</span>
22
+ <span class="ruby-identifier">feature_range</span> = (<span class="ruby-ivar">@start</span>.<span class="ruby-identifier">floor</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-ivar">@stop</span>.<span class="ruby-identifier">ceil</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>)
23
+ <span class="ruby-identifier">row</span> = <span class="ruby-value">1</span>
24
+ <span class="ruby-identifier">row_available</span> = <span class="ruby-keyword kw">true</span>
25
+ <span class="ruby-keyword kw">until</span> <span class="ruby-identifier">row_found</span>
26
+ <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span> <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span>].<span class="ruby-identifier">nil?</span>
27
+ <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">covered</span><span class="ruby-operator">|</span>
28
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">feature_range</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">covered</span>.<span class="ruby-identifier">first</span>) <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">covered</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">feature_range</span>.<span class="ruby-identifier">first</span>)
29
+ <span class="ruby-identifier">row_available</span> = <span class="ruby-keyword kw">false</span>
30
+ <span class="ruby-keyword kw">end</span>
31
+ <span class="ruby-keyword kw">end</span>
32
+ <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span> <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-comment cmt">#Still have to check if there is no label there.</span>
33
+ <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">covered</span><span class="ruby-operator">|</span>
34
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">feature_range</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">covered</span>.<span class="ruby-identifier">first</span>) <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">covered</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">feature_range</span>.<span class="ruby-identifier">first</span>)
35
+ <span class="ruby-identifier">row_available</span> = <span class="ruby-keyword kw">false</span>
36
+ <span class="ruby-keyword kw">end</span>
37
+ <span class="ruby-keyword kw">end</span>
38
+ <span class="ruby-keyword kw">end</span>
39
+ <span class="ruby-keyword kw">end</span>
40
+
41
+ <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span> <span class="ruby-identifier">row_available</span>
42
+ <span class="ruby-identifier">row</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
43
+ <span class="ruby-identifier">row_available</span> = <span class="ruby-keyword kw">true</span>
44
+ <span class="ruby-keyword kw">else</span> <span class="ruby-comment cmt"># We've found the place where to draw the feature.</span>
45
+ <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span>].<span class="ruby-identifier">nil?</span>
46
+ <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span>] = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
47
+ <span class="ruby-keyword kw">end</span>
48
+ <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span>].<span class="ruby-identifier">push</span>(<span class="ruby-identifier">feature_range</span>)
49
+ <span class="ruby-identifier">row_found</span> = <span class="ruby-keyword kw">true</span>
50
+ <span class="ruby-keyword kw">end</span>
51
+ <span class="ruby-keyword kw">end</span>
52
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">row</span>
53
+ <span class="ruby-keyword kw">end</span></pre>
54
+ </body>
55
+ </html>
@@ -0,0 +1,66 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html>
7
+ <head>
8
+ <title>draw (Bio::Graphics::Feature)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../../../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/bio/graphics/feature.rb, line 106</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">draw</span>(<span class="ruby-identifier">panel_destination</span>)
15
+ <span class="ruby-identifier">feature_context</span> = <span class="ruby-constant">Cairo</span><span class="ruby-operator">::</span><span class="ruby-constant">Context</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">panel_destination</span>)
16
+
17
+ <span class="ruby-comment cmt"># Move the feature drawing down based on track it's in and the number</span>
18
+ <span class="ruby-comment cmt"># of times is has to be bumped</span>
19
+ <span class="ruby-identifier">row</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">find_row</span>
20
+
21
+ <span class="ruby-ivar">@vertical_offset</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">track</span>.<span class="ruby-identifier">vertical_offset</span> <span class="ruby-operator">+</span> <span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">TRACK_HEADER_HEIGHT</span> <span class="ruby-operator">+</span> <span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">FEATURE_V_DISTANCE</span>
22
+ <span class="ruby-ivar">@vertical_offset</span> <span class="ruby-operator">+=</span> (<span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">FEATURE_HEIGHT</span><span class="ruby-operator">+</span><span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">FEATURE_V_DISTANCE</span>)<span class="ruby-operator">*</span><span class="ruby-identifier">row</span>
23
+
24
+ <span class="ruby-identifier">feature_context</span>.<span class="ruby-identifier">translate</span>(<span class="ruby-value">0</span>, <span class="ruby-ivar">@vertical_offset</span>)
25
+
26
+
27
+ <span class="ruby-comment cmt"># Let the subfeatures do the drawing.</span>
28
+ <span class="ruby-ivar">@subfeatures</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">subfeature</span><span class="ruby-operator">|</span>
29
+ <span class="ruby-identifier">subfeature</span>.<span class="ruby-identifier">draw</span>(<span class="ruby-identifier">feature_context</span>)
30
+ <span class="ruby-keyword kw">end</span>
31
+
32
+ <span class="ruby-ivar">@left_pixel_of_feature</span> = <span class="ruby-ivar">@left_pixel_of_subfeatures</span>.<span class="ruby-identifier">min</span>
33
+ <span class="ruby-ivar">@right_pixel_of_feature</span> = <span class="ruby-ivar">@right_pixel_of_subfeatures</span>.<span class="ruby-identifier">max</span>
34
+
35
+ <span class="ruby-comment cmt"># Add the label for the feature</span>
36
+ <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">show_label</span>
37
+ <span class="ruby-identifier">pango_layout</span> = <span class="ruby-identifier">feature_context</span>.<span class="ruby-identifier">create_pango_layout</span>
38
+ <span class="ruby-identifier">pango_layout</span>.<span class="ruby-identifier">text</span> = <span class="ruby-ivar">@label</span>
39
+ <span class="ruby-identifier">fdesc</span> = <span class="ruby-constant">Pango</span><span class="ruby-operator">::</span><span class="ruby-constant">FontDescription</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'Sans Serif'</span>)
40
+ <span class="ruby-identifier">fdesc</span>.<span class="ruby-identifier">set_size</span>(<span class="ruby-value">8</span> <span class="ruby-operator">*</span> <span class="ruby-constant">Pango</span><span class="ruby-operator">::</span><span class="ruby-constant">SCALE</span>)
41
+ <span class="ruby-identifier">pango_layout</span>.<span class="ruby-identifier">font_description</span> = <span class="ruby-identifier">fdesc</span>
42
+
43
+ <span class="ruby-identifier">text_range</span> = <span class="ruby-ivar">@start</span>.<span class="ruby-identifier">floor</span><span class="ruby-operator">..</span>(<span class="ruby-ivar">@start</span>.<span class="ruby-identifier">floor</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">pango_layout</span>.<span class="ruby-identifier">pixel_size</span>[<span class="ruby-value">0</span>]<span class="ruby-operator">*</span><span class="ruby-ivar">@track</span>.<span class="ruby-identifier">panel</span>.<span class="ruby-identifier">rescale_factor</span>)
44
+ <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>].<span class="ruby-identifier">nil?</span>
45
+ <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>] = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
46
+ <span class="ruby-keyword kw">end</span>
47
+ <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span>].<span class="ruby-identifier">push</span>(<span class="ruby-identifier">text_range</span>)
48
+ <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>].<span class="ruby-identifier">push</span>(<span class="ruby-identifier">text_range</span>)
49
+ <span class="ruby-identifier">feature_context</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-ivar">@left_pixel_of_feature</span>, <span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">TRACK_HEADER_HEIGHT</span>)
50
+ <span class="ruby-identifier">feature_context</span>.<span class="ruby-identifier">set_source_rgb</span>(<span class="ruby-value">0</span>,<span class="ruby-value">0</span>,<span class="ruby-value">0</span>)
51
+ <span class="ruby-identifier">feature_context</span>.<span class="ruby-identifier">show_pango_layout</span>(<span class="ruby-identifier">pango_layout</span>)
52
+ <span class="ruby-identifier">feature_context</span>.<span class="ruby-identifier">set_source_rgb</span>(<span class="ruby-ivar">@colour</span>)
53
+ <span class="ruby-keyword kw">end</span>
54
+
55
+
56
+ <span class="ruby-comment cmt"># And add the region to the image map</span>
57
+ <span class="ruby-comment cmt"># Comment: we have to add the vertical_offset and TRACK_HEADER_HEIGHT!</span>
58
+ <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">panel</span>.<span class="ruby-identifier">image_map</span>.<span class="ruby-identifier">add_element</span>(<span class="ruby-ivar">@left_pixel_of_feature</span>,
59
+ <span class="ruby-ivar">@vertical_offset</span>,
60
+ <span class="ruby-ivar">@right_pixel_of_feature</span>,
61
+ <span class="ruby-ivar">@vertical_offset</span> <span class="ruby-operator">+</span> <span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">FEATURE_HEIGHT</span>,
62
+ <span class="ruby-ivar">@link</span>
63
+ )
64
+ <span class="ruby-keyword kw">end</span></pre>
65
+ </body>
66
+ </html>
@@ -0,0 +1,51 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html>
7
+ <head>
8
+ <title>new (Bio::Graphics::Feature)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../../../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/bio/graphics/feature.rb, line 39</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">track</span>, <span class="ruby-identifier">feature_object</span>, <span class="ruby-identifier">opts</span> = {})
15
+ <span class="ruby-ivar">@track</span> = <span class="ruby-identifier">track</span>
16
+ <span class="ruby-ivar">@feature_object</span> = <span class="ruby-identifier">feature_object</span>
17
+ <span class="ruby-identifier">opts</span> = {
18
+ <span class="ruby-identifier">:label</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'anonymous'</span>,
19
+ <span class="ruby-identifier">:link</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
20
+ <span class="ruby-identifier">:glyph</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">glyph</span>,
21
+ <span class="ruby-identifier">:colour</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">colour</span>
22
+ }.<span class="ruby-identifier">merge</span>(<span class="ruby-identifier">opts</span>)
23
+
24
+ <span class="ruby-ivar">@label</span> = <span class="ruby-identifier">opts</span>[<span class="ruby-identifier">:label</span>]
25
+ <span class="ruby-ivar">@link</span> = <span class="ruby-identifier">opts</span>[<span class="ruby-identifier">:link</span>]
26
+ <span class="ruby-ivar">@glyph</span> = <span class="ruby-identifier">opts</span>[<span class="ruby-identifier">:glyph</span>]
27
+ <span class="ruby-ivar">@colour</span> = <span class="ruby-identifier">opts</span>[<span class="ruby-identifier">:colour</span>]
28
+
29
+ <span class="ruby-ivar">@locations</span> = <span class="ruby-ivar">@feature_object</span>.<span class="ruby-identifier">locations</span>
30
+
31
+ <span class="ruby-ivar">@start</span> = <span class="ruby-ivar">@locations</span>.<span class="ruby-identifier">collect</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">l</span><span class="ruby-operator">|</span> <span class="ruby-identifier">l</span>.<span class="ruby-identifier">from</span>}.<span class="ruby-identifier">min</span>.<span class="ruby-identifier">to_i</span>
32
+ <span class="ruby-ivar">@stop</span> = <span class="ruby-ivar">@locations</span>.<span class="ruby-identifier">collect</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">l</span><span class="ruby-operator">|</span> <span class="ruby-identifier">l</span>.<span class="ruby-identifier">to</span>}.<span class="ruby-identifier">max</span>.<span class="ruby-identifier">to_i</span>
33
+
34
+ <span class="ruby-comment cmt"># Create Bio::Graphics SubFeatures</span>
35
+ <span class="ruby-comment cmt"># The drawing is handled by subfeatures. If there are no defined, the</span>
36
+ <span class="ruby-comment cmt"># subfeatures array will just hold one element: the @feature_object of</span>
37
+ <span class="ruby-comment cmt"># self.</span>
38
+ <span class="ruby-ivar">@subfeatures</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
39
+ <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span> <span class="ruby-ivar">@feature_object</span>.<span class="ruby-identifier">subfeatures</span>.<span class="ruby-identifier">empty?</span>
40
+ <span class="ruby-ivar">@feature_object</span>.<span class="ruby-identifier">subfeatures</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">subfeature</span><span class="ruby-operator">|</span>
41
+ <span class="ruby-ivar">@subfeatures</span>.<span class="ruby-identifier">push</span>(<span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">SubFeature</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-identifier">subfeature</span>, <span class="ruby-identifier">:glyph</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@glyph</span>, <span class="ruby-identifier">:colour</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@colour</span>))
42
+ <span class="ruby-keyword kw">end</span>
43
+ <span class="ruby-keyword kw">else</span>
44
+ <span class="ruby-ivar">@subfeatures</span>.<span class="ruby-identifier">push</span>(<span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">SubFeature</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-ivar">@feature_object</span>, <span class="ruby-identifier">:glyph</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@glyph</span>, <span class="ruby-identifier">:colour</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@colour</span>))
45
+ <span class="ruby-keyword kw">end</span>
46
+
47
+ <span class="ruby-ivar">@left_pixel_of_subfeatures</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
48
+ <span class="ruby-ivar">@right_pixel_of_subfeatures</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
49
+ <span class="ruby-keyword kw">end</span></pre>
50
+ </body>
51
+ </html>
@@ -0,0 +1,65 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html>
7
+ <head>
8
+ <title>draw (Bio::Graphics::Feature)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../../../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/bio/graphics/feature.rb, line 113</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">draw</span>(<span class="ruby-identifier">panel_destination</span>)
15
+ <span class="ruby-identifier">feature_context</span> = <span class="ruby-constant">Cairo</span><span class="ruby-operator">::</span><span class="ruby-constant">Context</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">panel_destination</span>)
16
+
17
+ <span class="ruby-comment cmt"># Move the feature drawing down based on track it's in and the number</span>
18
+ <span class="ruby-comment cmt"># of times is has to be bumped</span>
19
+ <span class="ruby-identifier">row</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">find_row</span>
20
+
21
+ <span class="ruby-ivar">@vertical_offset</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">track</span>.<span class="ruby-identifier">vertical_offset</span> <span class="ruby-operator">+</span> <span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">TRACK_HEADER_HEIGHT</span> <span class="ruby-operator">+</span> <span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">FEATURE_V_DISTANCE</span>
22
+ <span class="ruby-ivar">@vertical_offset</span> <span class="ruby-operator">+=</span> (<span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">FEATURE_HEIGHT</span><span class="ruby-operator">+</span><span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">FEATURE_V_DISTANCE</span>)<span class="ruby-operator">*</span><span class="ruby-identifier">row</span>
23
+
24
+ <span class="ruby-identifier">feature_context</span>.<span class="ruby-identifier">translate</span>(<span class="ruby-value">0</span>, <span class="ruby-ivar">@vertical_offset</span>)
25
+
26
+ <span class="ruby-comment cmt"># Let the subfeatures do the drawing.</span>
27
+ <span class="ruby-ivar">@subfeatures</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">subfeature</span><span class="ruby-operator">|</span>
28
+ <span class="ruby-identifier">subfeature</span>.<span class="ruby-identifier">draw</span>(<span class="ruby-identifier">feature_context</span>)
29
+ <span class="ruby-keyword kw">end</span>
30
+
31
+ <span class="ruby-ivar">@left_pixel_of_feature</span> = <span class="ruby-ivar">@left_pixel_of_subfeatures</span>.<span class="ruby-identifier">min</span>
32
+ <span class="ruby-ivar">@right_pixel_of_feature</span> = <span class="ruby-ivar">@right_pixel_of_subfeatures</span>.<span class="ruby-identifier">max</span>
33
+
34
+ <span class="ruby-comment cmt"># Add the label for the feature</span>
35
+ <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">show_label</span>
36
+ <span class="ruby-identifier">pango_layout</span> = <span class="ruby-identifier">feature_context</span>.<span class="ruby-identifier">create_pango_layout</span>
37
+ <span class="ruby-identifier">pango_layout</span>.<span class="ruby-identifier">text</span> = <span class="ruby-ivar">@label</span>
38
+ <span class="ruby-identifier">fdesc</span> = <span class="ruby-constant">Pango</span><span class="ruby-operator">::</span><span class="ruby-constant">FontDescription</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'Sans Serif'</span>)
39
+ <span class="ruby-identifier">fdesc</span>.<span class="ruby-identifier">set_size</span>(<span class="ruby-value">8</span> <span class="ruby-operator">*</span> <span class="ruby-constant">Pango</span><span class="ruby-operator">::</span><span class="ruby-constant">SCALE</span>)
40
+ <span class="ruby-identifier">pango_layout</span>.<span class="ruby-identifier">font_description</span> = <span class="ruby-identifier">fdesc</span>
41
+
42
+ <span class="ruby-identifier">text_range</span> = <span class="ruby-ivar">@start</span>.<span class="ruby-identifier">floor</span><span class="ruby-operator">..</span>(<span class="ruby-ivar">@start</span>.<span class="ruby-identifier">floor</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">pango_layout</span>.<span class="ruby-identifier">pixel_size</span>[<span class="ruby-value">0</span>]<span class="ruby-operator">*</span><span class="ruby-ivar">@track</span>.<span class="ruby-identifier">panel</span>.<span class="ruby-identifier">rescale_factor</span>)
43
+ <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>].<span class="ruby-identifier">nil?</span>
44
+ <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>] = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
45
+ <span class="ruby-keyword kw">end</span>
46
+ <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span>].<span class="ruby-identifier">push</span>(<span class="ruby-identifier">text_range</span>)
47
+ <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>].<span class="ruby-identifier">push</span>(<span class="ruby-identifier">text_range</span>)
48
+ <span class="ruby-identifier">feature_context</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-ivar">@left_pixel_of_feature</span>, <span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">TRACK_HEADER_HEIGHT</span>)
49
+ <span class="ruby-identifier">feature_context</span>.<span class="ruby-identifier">set_source_rgb</span>(<span class="ruby-value">0</span>,<span class="ruby-value">0</span>,<span class="ruby-value">0</span>)
50
+ <span class="ruby-identifier">feature_context</span>.<span class="ruby-identifier">show_pango_layout</span>(<span class="ruby-identifier">pango_layout</span>)
51
+ <span class="ruby-identifier">feature_context</span>.<span class="ruby-identifier">set_source_rgb</span>(<span class="ruby-ivar">@colour</span>)
52
+ <span class="ruby-keyword kw">end</span>
53
+
54
+
55
+ <span class="ruby-comment cmt"># And add the region to the image map</span>
56
+ <span class="ruby-comment cmt"># Comment: we have to add the vertical_offset and TRACK_HEADER_HEIGHT!</span>
57
+ <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">panel</span>.<span class="ruby-identifier">image_map</span>.<span class="ruby-identifier">add_element</span>(<span class="ruby-ivar">@left_pixel_of_feature</span>,
58
+ <span class="ruby-ivar">@vertical_offset</span>,
59
+ <span class="ruby-ivar">@right_pixel_of_feature</span>,
60
+ <span class="ruby-ivar">@vertical_offset</span> <span class="ruby-operator">+</span> <span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">FEATURE_HEIGHT</span>,
61
+ <span class="ruby-ivar">@link</span>
62
+ )
63
+ <span class="ruby-keyword kw">end</span></pre>
64
+ </body>
65
+ </html>
@@ -0,0 +1,55 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html>
7
+ <head>
8
+ <title>find_row (Bio::Graphics::Feature)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../../../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/bio/graphics/feature.rb, line 171</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">find_row</span>
15
+ <span class="ruby-identifier">row_found</span> = <span class="ruby-keyword kw">false</span>
16
+
17
+ <span class="ruby-comment cmt"># We've got to find out what row to draw the feature on. If two </span>
18
+ <span class="ruby-comment cmt"># features overlap, one of them has to be 'bumped' down. So we'll</span>
19
+ <span class="ruby-comment cmt"># first try to draw a new feature at the top of the track. If</span>
20
+ <span class="ruby-comment cmt"># it however would overlap with another one, we'll bump it down</span>
21
+ <span class="ruby-comment cmt"># to the next row.</span>
22
+ <span class="ruby-identifier">feature_range</span> = (<span class="ruby-ivar">@start</span>.<span class="ruby-identifier">floor</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-ivar">@stop</span>.<span class="ruby-identifier">ceil</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>)
23
+ <span class="ruby-identifier">row</span> = <span class="ruby-value">1</span>
24
+ <span class="ruby-identifier">row_available</span> = <span class="ruby-keyword kw">true</span>
25
+ <span class="ruby-keyword kw">until</span> <span class="ruby-identifier">row_found</span>
26
+ <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span> <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span>].<span class="ruby-identifier">nil?</span>
27
+ <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">covered</span><span class="ruby-operator">|</span>
28
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">feature_range</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">covered</span>.<span class="ruby-identifier">first</span>) <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">covered</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">feature_range</span>.<span class="ruby-identifier">first</span>)
29
+ <span class="ruby-identifier">row_available</span> = <span class="ruby-keyword kw">false</span>
30
+ <span class="ruby-keyword kw">end</span>
31
+ <span class="ruby-keyword kw">end</span>
32
+ <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span> <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-comment cmt">#Still have to check if there is no label there.</span>
33
+ <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">covered</span><span class="ruby-operator">|</span>
34
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">feature_range</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">covered</span>.<span class="ruby-identifier">first</span>) <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">covered</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">feature_range</span>.<span class="ruby-identifier">first</span>)
35
+ <span class="ruby-identifier">row_available</span> = <span class="ruby-keyword kw">false</span>
36
+ <span class="ruby-keyword kw">end</span>
37
+ <span class="ruby-keyword kw">end</span>
38
+ <span class="ruby-keyword kw">end</span>
39
+ <span class="ruby-keyword kw">end</span>
40
+
41
+ <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span> <span class="ruby-identifier">row_available</span>
42
+ <span class="ruby-identifier">row</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
43
+ <span class="ruby-identifier">row_available</span> = <span class="ruby-keyword kw">true</span>
44
+ <span class="ruby-keyword kw">else</span> <span class="ruby-comment cmt"># We've found the place where to draw the feature.</span>
45
+ <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span>].<span class="ruby-identifier">nil?</span>
46
+ <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span>] = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
47
+ <span class="ruby-keyword kw">end</span>
48
+ <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span>].<span class="ruby-identifier">push</span>(<span class="ruby-identifier">feature_range</span>)
49
+ <span class="ruby-identifier">row_found</span> = <span class="ruby-keyword kw">true</span>
50
+ <span class="ruby-keyword kw">end</span>
51
+ <span class="ruby-keyword kw">end</span>
52
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">row</span>
53
+ <span class="ruby-keyword kw">end</span></pre>
54
+ </body>
55
+ </html>
@@ -0,0 +1,51 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html>
7
+ <head>
8
+ <title>new (Bio::Graphics::Feature)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../../../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/bio/graphics/feature.rb, line 39</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">track</span>, <span class="ruby-identifier">feature_object</span>, <span class="ruby-identifier">opts</span> = {})
15
+ <span class="ruby-ivar">@track</span> = <span class="ruby-identifier">track</span>
16
+ <span class="ruby-ivar">@feature_object</span> = <span class="ruby-identifier">feature_object</span>
17
+ <span class="ruby-identifier">opts</span> = {
18
+ <span class="ruby-identifier">:label</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'anonymous'</span>,
19
+ <span class="ruby-identifier">:link</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
20
+ <span class="ruby-identifier">:glyph</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">glyph</span>,
21
+ <span class="ruby-identifier">:colour</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@track</span>.<span class="ruby-identifier">colour</span>
22
+ }.<span class="ruby-identifier">merge</span>(<span class="ruby-identifier">opts</span>)
23
+
24
+ <span class="ruby-ivar">@label</span> = <span class="ruby-identifier">opts</span>[<span class="ruby-identifier">:label</span>]
25
+ <span class="ruby-ivar">@link</span> = <span class="ruby-identifier">opts</span>[<span class="ruby-identifier">:link</span>]
26
+ <span class="ruby-ivar">@glyph</span> = <span class="ruby-identifier">opts</span>[<span class="ruby-identifier">:glyph</span>]
27
+ <span class="ruby-ivar">@colour</span> = <span class="ruby-identifier">opts</span>[<span class="ruby-identifier">:colour</span>]
28
+
29
+ <span class="ruby-ivar">@locations</span> = <span class="ruby-ivar">@feature_object</span>.<span class="ruby-identifier">locations</span>
30
+
31
+ <span class="ruby-ivar">@start</span> = <span class="ruby-ivar">@locations</span>.<span class="ruby-identifier">collect</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">l</span><span class="ruby-operator">|</span> <span class="ruby-identifier">l</span>.<span class="ruby-identifier">from</span>}.<span class="ruby-identifier">min</span>.<span class="ruby-identifier">to_i</span>
32
+ <span class="ruby-ivar">@stop</span> = <span class="ruby-ivar">@locations</span>.<span class="ruby-identifier">collect</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">l</span><span class="ruby-operator">|</span> <span class="ruby-identifier">l</span>.<span class="ruby-identifier">to</span>}.<span class="ruby-identifier">max</span>.<span class="ruby-identifier">to_i</span>
33
+
34
+ <span class="ruby-comment cmt"># Create Bio::Graphics SubFeatures</span>
35
+ <span class="ruby-comment cmt"># The drawing is handled by subfeatures. If there are no defined, the</span>
36
+ <span class="ruby-comment cmt"># subfeatures array will just hold one element: the @feature_object of</span>
37
+ <span class="ruby-comment cmt"># self.</span>
38
+ <span class="ruby-ivar">@subfeatures</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
39
+ <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span> <span class="ruby-ivar">@feature_object</span>.<span class="ruby-identifier">subfeatures</span>.<span class="ruby-identifier">empty?</span>
40
+ <span class="ruby-ivar">@feature_object</span>.<span class="ruby-identifier">subfeatures</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">subfeature</span><span class="ruby-operator">|</span>
41
+ <span class="ruby-ivar">@subfeatures</span>.<span class="ruby-identifier">push</span>(<span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">SubFeature</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-identifier">subfeature</span>, <span class="ruby-identifier">:glyph</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@glyph</span>, <span class="ruby-identifier">:colour</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@colour</span>))
42
+ <span class="ruby-keyword kw">end</span>
43
+ <span class="ruby-keyword kw">else</span>
44
+ <span class="ruby-ivar">@subfeatures</span>.<span class="ruby-identifier">push</span>(<span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">SubFeature</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-ivar">@feature_object</span>, <span class="ruby-identifier">:glyph</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@glyph</span>, <span class="ruby-identifier">:colour</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@colour</span>))
45
+ <span class="ruby-keyword kw">end</span>
46
+
47
+ <span class="ruby-ivar">@left_pixel_of_subfeatures</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
48
+ <span class="ruby-ivar">@right_pixel_of_subfeatures</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
49
+ <span class="ruby-keyword kw">end</span></pre>
50
+ </body>
51
+ </html>