hotcocoa 0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. data/History.txt +4 -0
  2. data/bin/hotcocoa +31 -0
  3. data/lib/hotcocoa/application_builder.rb +320 -0
  4. data/lib/hotcocoa/attributed_string.rb +143 -0
  5. data/lib/hotcocoa/behaviors.rb +7 -0
  6. data/lib/hotcocoa/data_sources/combo_box_data_source.rb +44 -0
  7. data/lib/hotcocoa/data_sources/table_data_source.rb +18 -0
  8. data/lib/hotcocoa/delegate_builder.rb +85 -0
  9. data/lib/hotcocoa/graphics/canvas.rb +836 -0
  10. data/lib/hotcocoa/graphics/color.rb +781 -0
  11. data/lib/hotcocoa/graphics/elements/particle.rb +75 -0
  12. data/lib/hotcocoa/graphics/elements/rope.rb +99 -0
  13. data/lib/hotcocoa/graphics/elements/sandpainter.rb +71 -0
  14. data/lib/hotcocoa/graphics/gradient.rb +63 -0
  15. data/lib/hotcocoa/graphics/image.rb +488 -0
  16. data/lib/hotcocoa/graphics/path.rb +325 -0
  17. data/lib/hotcocoa/graphics/pdf.rb +71 -0
  18. data/lib/hotcocoa/graphics.rb +161 -0
  19. data/lib/hotcocoa/kernel_ext.rb +14 -0
  20. data/lib/hotcocoa/kvo_accessors.rb +48 -0
  21. data/lib/hotcocoa/layout_view.rb +448 -0
  22. data/lib/hotcocoa/mapper.rb +227 -0
  23. data/lib/hotcocoa/mapping_methods.rb +40 -0
  24. data/lib/hotcocoa/mappings/alert.rb +25 -0
  25. data/lib/hotcocoa/mappings/application.rb +112 -0
  26. data/lib/hotcocoa/mappings/array_controller.rb +87 -0
  27. data/lib/hotcocoa/mappings/box.rb +39 -0
  28. data/lib/hotcocoa/mappings/button.rb +92 -0
  29. data/lib/hotcocoa/mappings/collection_view.rb +44 -0
  30. data/lib/hotcocoa/mappings/color.rb +28 -0
  31. data/lib/hotcocoa/mappings/column.rb +21 -0
  32. data/lib/hotcocoa/mappings/combo_box.rb +24 -0
  33. data/lib/hotcocoa/mappings/control.rb +33 -0
  34. data/lib/hotcocoa/mappings/font.rb +44 -0
  35. data/lib/hotcocoa/mappings/gradient.rb +15 -0
  36. data/lib/hotcocoa/mappings/image.rb +15 -0
  37. data/lib/hotcocoa/mappings/image_view.rb +43 -0
  38. data/lib/hotcocoa/mappings/label.rb +25 -0
  39. data/lib/hotcocoa/mappings/layout_view.rb +9 -0
  40. data/lib/hotcocoa/mappings/menu.rb +71 -0
  41. data/lib/hotcocoa/mappings/menu_item.rb +47 -0
  42. data/lib/hotcocoa/mappings/movie.rb +13 -0
  43. data/lib/hotcocoa/mappings/movie_view.rb +27 -0
  44. data/lib/hotcocoa/mappings/notification.rb +17 -0
  45. data/lib/hotcocoa/mappings/popup.rb +110 -0
  46. data/lib/hotcocoa/mappings/progress_indicator.rb +68 -0
  47. data/lib/hotcocoa/mappings/scroll_view.rb +29 -0
  48. data/lib/hotcocoa/mappings/search_field.rb +9 -0
  49. data/lib/hotcocoa/mappings/secure_text_field.rb +17 -0
  50. data/lib/hotcocoa/mappings/segmented_control.rb +97 -0
  51. data/lib/hotcocoa/mappings/slider.rb +25 -0
  52. data/lib/hotcocoa/mappings/sort_descriptor.rb +13 -0
  53. data/lib/hotcocoa/mappings/sound.rb +9 -0
  54. data/lib/hotcocoa/mappings/speech_synthesizer.rb +25 -0
  55. data/lib/hotcocoa/mappings/split_view.rb +21 -0
  56. data/lib/hotcocoa/mappings/status_bar.rb +7 -0
  57. data/lib/hotcocoa/mappings/status_item.rb +9 -0
  58. data/lib/hotcocoa/mappings/table_view.rb +110 -0
  59. data/lib/hotcocoa/mappings/text_field.rb +41 -0
  60. data/lib/hotcocoa/mappings/text_view.rb +13 -0
  61. data/lib/hotcocoa/mappings/timer.rb +25 -0
  62. data/lib/hotcocoa/mappings/toolbar.rb +97 -0
  63. data/lib/hotcocoa/mappings/toolbar_item.rb +36 -0
  64. data/lib/hotcocoa/mappings/view.rb +67 -0
  65. data/lib/hotcocoa/mappings/web_view.rb +22 -0
  66. data/lib/hotcocoa/mappings/window.rb +118 -0
  67. data/lib/hotcocoa/mappings/xml_parser.rb +41 -0
  68. data/lib/hotcocoa/mappings.rb +109 -0
  69. data/lib/hotcocoa/mvc.rb +175 -0
  70. data/lib/hotcocoa/notification_listener.rb +62 -0
  71. data/lib/hotcocoa/object_ext.rb +22 -0
  72. data/lib/hotcocoa/plist.rb +45 -0
  73. data/lib/hotcocoa/standard_rake_tasks.rb +17 -0
  74. data/lib/hotcocoa/template.rb +27 -0
  75. data/lib/hotcocoa/virtual_file_system.rb +172 -0
  76. data/lib/hotcocoa.rb +26 -0
  77. data/template/Rakefile +5 -0
  78. data/template/config/build.yml +8 -0
  79. data/template/lib/application.rb +45 -0
  80. data/template/lib/menu.rb +32 -0
  81. data/template/resources/HotCocoa.icns +0 -0
  82. data/test/test_helper.rb +3 -0
  83. data/test/test_hotcocoa.rb +11 -0
  84. metadata +137 -0
@@ -0,0 +1,75 @@
1
+ # Ruby Cocoa Graphics is a graphics library providing a simple object-oriented
2
+ # interface into the power of Mac OS X's Core Graphics and Core Image drawing libraries.
3
+ # With a few lines of easy-to-read code, you can write scripts to draw simple or complex
4
+ # shapes, lines, and patterns, process and filter images, create abstract art or visualize
5
+ # scientific data, and much more.
6
+ #
7
+ # Inspiration for this project was derived from Processing and NodeBox. These excellent
8
+ # graphics programming environments are more full-featured than RCG, but they are implemented
9
+ # in Java and Python, respectively. RCG was created to offer similar functionality using
10
+ # the Ruby programming language.
11
+ #
12
+ # Author:: James Reynolds (mailto:drtoast@drtoast.com)
13
+ # Copyright:: Copyright (c) 2008 James Reynolds
14
+ # License:: Distributes under the same terms as Ruby
15
+
16
+ module HotCocoa::Graphics
17
+
18
+ # wandering particle with brownian motion
19
+ class Particle
20
+
21
+ attr_accessor :acceleration, :points, :stroke, :velocity_x, :velocity_y, :x, :y
22
+
23
+ # initialize particle origin x,y coordinates (relative to the center)
24
+ def initialize (x, y, velocity_x=0.0, velocity_y=2.0)
25
+ @age = 0
26
+ @acceleration = 0.5
27
+
28
+ @x = x
29
+ @y = y
30
+
31
+ @previous_x = 0
32
+ @previous_y = 0
33
+
34
+ # initialize velocity
35
+ @velocity_x=velocity_x
36
+ @velocity_y=velocity_y
37
+
38
+ # append the point to the array
39
+ @points = [NSPoint.new(@x, @y)]
40
+ @stroke = Color.white
41
+ end
42
+
43
+ # move to a new position using brownian motion
44
+ def move
45
+ # save old x,y position
46
+ @previous_x=@x
47
+ @previous_y=@y
48
+
49
+ # move particle by velocity_x,velocity_y
50
+ @x += @velocity_x
51
+ @y += @velocity_y
52
+
53
+ # randomly increase/decrease direction
54
+ @velocity_x += random(-1.0, 1.0) * @acceleration
55
+ @velocity_y += random(-1.0, 1.0) * @acceleration
56
+
57
+ # draw a line from the old position to the new
58
+ #CANVAS.line(@previous_x,@previous_y,@x,@y);
59
+ @points.push(NSPoint.new(@x, @y))
60
+
61
+ # grow old
62
+ @age += 1
63
+ if @age>200
64
+ # die and be reborn
65
+ end
66
+
67
+ end
68
+
69
+ def draw(canvas)
70
+ canvas.nofill
71
+ canvas.lines(@points)
72
+ end
73
+
74
+ end
75
+ end
@@ -0,0 +1,99 @@
1
+ # Ruby Cocoa Graphics is a graphics library providing a simple object-oriented
2
+ # interface into the power of Mac OS X's Core Graphics and Core Image drawing libraries.
3
+ # With a few lines of easy-to-read code, you can write scripts to draw simple or complex
4
+ # shapes, lines, and patterns, process and filter images, create abstract art or visualize
5
+ # scientific data, and much more.
6
+ #
7
+ # Inspiration for this project was derived from Processing and NodeBox. These excellent
8
+ # graphics programming environments are more full-featured than RCG, but they are implemented
9
+ # in Java and Python, respectively. RCG was created to offer similar functionality using
10
+ # the Ruby programming language.
11
+ #
12
+ # Author:: James Reynolds (mailto:drtoast@drtoast.com)
13
+ # Copyright:: Copyright (c) 2008 James Reynolds
14
+ # License:: Distributes under the same terms as Ruby
15
+
16
+ module HotCocoa::Graphics
17
+
18
+ class Rope
19
+
20
+ attr_accessor :x0, :y0, :x1, :y1, :width, :fibers, :roundness, :strokewidth
21
+
22
+ def initialize(canvas, options={})
23
+ @canvas = canvas
24
+ @width = options[:width] || 200
25
+ @fibers = options[:fibers] || 200
26
+ @roundness = options[:roundness] || 1.0
27
+ @strokewidth = options[:strokewidth] || 0.4
28
+ end
29
+
30
+ def hair(hair_x0=@x0, hair_y0=@y0, hair_x1=@x1, hair_y1=@y1, hair_width=@width, hair_fibers=@fibers)
31
+ @canvas.push
32
+ @canvas.strokewidth(@strokewidth)
33
+ @canvas.autoclosepath(false)
34
+ @canvas.nofill
35
+ hair_x0 = choose(hair_x0)
36
+ hair_y0 = choose(hair_y0)
37
+ hair_x1 = choose(hair_x1)
38
+ hair_y1 = choose(hair_y1)
39
+ vx0 = random(-@canvas.width / 2, @canvas.width / 2) * @roundness
40
+ vy0 = random(-@canvas.height / 2, @canvas.height / 2) * @roundness
41
+ vx1 = random(-@canvas.width / 2, @canvas.width / 2) * @roundness
42
+ vy1 = random(-@canvas.height / 2, @canvas.height / 2) * @roundness
43
+ hair_fibers.times do |j|
44
+ #x0,y0,x1,y1 = [@x0.choose,@y0.choose,@x1.choose,@y1.choose]
45
+ @canvas.beginpath(hair_x0, hair_y0)
46
+ @canvas.curveto(
47
+ hair_x0 + vx0 + rand(hair_width), hair_y0 + vy0 + rand(hair_width), # control point 1
48
+ hair_x1 + vx1, hair_y1 + vy1, # control point 2
49
+ hair_x1, hair_y1 # end point
50
+ )
51
+ @canvas.endpath
52
+ end
53
+ @canvas.pop
54
+ end
55
+
56
+ def ribbon(ribbon_x0=@x0, ribbon_y0=@y0, ribbon_x1=@x1, ribbon_y1=@y1, ribbon_width=@width, ribbon_fibers=@fibers)
57
+ @canvas.push
58
+ @canvas.strokewidth(@strokewidth)
59
+ @canvas.autoclosepath(false)
60
+ @canvas.nofill
61
+ black = Color.black
62
+ white = Color.white
63
+ ribbon_x0 = choose(ribbon_x0)
64
+ ribbon_y0 = choose(ribbon_y0)
65
+ ribbon_x1 = choose(ribbon_x1)
66
+ ribbon_y1 = choose(ribbon_y1)
67
+ vx0 = random(-@canvas.width / 2, @canvas.width / 2) * @roundness
68
+ vy0 = random(-@canvas.height / 2, @canvas.height / 2) * @roundness
69
+ vx1 = random(-@canvas.width / 2, @canvas.width / 2) * @roundness
70
+ vy1 = random(-@canvas.height / 2, @canvas.height / 2) * @roundness
71
+ xwidth = rand(ribbon_width)
72
+ ywidth = rand(ribbon_width)
73
+ ribbon_fibers.times do |j|
74
+ #x0,y0,x1,y1 = [@x0.choose,@y0.choose,@x1.choose,@y1.choose]
75
+ xoffset = (j-1).to_f * xwidth / ribbon_fibers
76
+ yoffset = (j-1).to_f * ywidth / ribbon_fibers
77
+ cpx0 = ribbon_x0 + vx0 + xoffset
78
+ cpy0 = ribbon_y0 + vy0 + yoffset
79
+ cpx1 = ribbon_x1 + vx1
80
+ cpy1 = ribbon_y1 + vy1
81
+ # debug - show control points
82
+ # @canvas.fill(black)
83
+ # @canvas.oval(cpx0,cpy0,5,5,:center)
84
+ # @canvas.fill(white)
85
+ # @canvas.oval(cpx1,cpy1,5,5,:center)
86
+ # @canvas.nofill
87
+
88
+ @canvas.beginpath(x0, y0)
89
+ @canvas.curveto(
90
+ cpx0, cpy0, # control point 1
91
+ cpx1, cpy1, # control point 2
92
+ ribbon_x1, ribbon_y1 # end point
93
+ )
94
+ @canvas.endpath
95
+ end
96
+ @canvas.pop
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,71 @@
1
+ # Ruby Cocoa Graphics is a graphics library providing a simple object-oriented
2
+ # interface into the power of Mac OS X's Core Graphics and Core Image drawing libraries.
3
+ # With a few lines of easy-to-read code, you can write scripts to draw simple or complex
4
+ # shapes, lines, and patterns, process and filter images, create abstract art or visualize
5
+ # scientific data, and much more.
6
+ #
7
+ # Inspiration for this project was derived from Processing and NodeBox. These excellent
8
+ # graphics programming environments are more full-featured than RCG, but they are implemented
9
+ # in Java and Python, respectively. RCG was created to offer similar functionality using
10
+ # the Ruby programming language.
11
+ #
12
+ # Author:: James Reynolds (mailto:drtoast@drtoast.com)
13
+ # Copyright:: Copyright (c) 2008 James Reynolds
14
+ # License:: Distributes under the same terms as Ruby
15
+
16
+ module HotCocoa::Graphics
17
+
18
+ # draw watercolor-like painted strokes (adapted from code by Jared Tarbell - complexification.net)
19
+ class SandPainter
20
+
21
+ attr_accessor :color, :grains, :grainsize, :maxalpha, :jitter, :huedrift, :saturationdrift, :brightnessdrift
22
+
23
+ def initialize(canvas, color=Color.red)
24
+ @canvas = canvas
25
+ @color = color
26
+ # set a random initial gain value
27
+ @gain = random(0.01, 0.1)
28
+ @grainsize = 6.0
29
+ @grains = 64
30
+ @maxalpha = 0.1
31
+ @jitter = 0
32
+ @huedrift = 0.2
33
+ @saturationdrift = 0.3
34
+ @brightnessdrift = 0.3
35
+ end
36
+
37
+ # render a line that fades out from ox,oy to x,y
38
+ def render(ox, oy, x, y)
39
+ @canvas.push
40
+ # modulate gain
41
+ @gain += random(-0.050, 0.050)
42
+ @gain = inrange(@gain, 0.0, 1.0)
43
+ # calculate grains by distance
44
+ #@grains = (sqrt((ox-x)*(ox-x)+(oy-y)*(oy-y))).to_i
45
+
46
+ # ramp from 0 to .015 for g = 0 to 1
47
+ w = @gain / (@grains-1)
48
+
49
+ #raycolor = @color.analog
50
+ #@color.drift(0.2,0.1,0.1)
51
+ @color.drift(huedrift, saturationdrift, brightnessdrift)
52
+ #for i in 0..@grains do ##RACK change to fixnum.times
53
+ (@grains + 1).times do |i|
54
+ # set alpha for this grain (ramp from maxalpha to 0.0 for i = 0 to 64)
55
+ a = @maxalpha - (i / @grains.to_f) * @maxalpha
56
+ fillcolor = @color.copy.a(a)
57
+ @canvas.fill(fillcolor)
58
+ #C.rect(ox+(x-ox)*sin(sin(i*w)),oy+(y-oy)*sin(sin(i*w)),1,1)
59
+ scaler = sin(sin(i * w)) # ramp sinusoidally from 0 to 1
60
+ x1 = ox + (x - ox) * scaler + random(-@jitter, @jitter)
61
+ y1 = oy + (y - oy) * scaler + random(-@jitter, @jitter)
62
+ #puts "#{scaler} #{w} #{i} #{a} => #{x1},#{y1} #{scaler}"
63
+ @canvas.oval(x1, y1, @grainsize, @grainsize, :center)
64
+ #C.oval(x,y,@grainsize,@grainsize,:center)
65
+ #C.oval(ox,oy,@grainsize,@grainsize,:center)
66
+ end
67
+ @canvas.pop
68
+
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,63 @@
1
+ # Ruby Cocoa Graphics is a graphics library providing a simple object-oriented
2
+ # interface into the power of Mac OS X's Core Graphics and Core Image drawing libraries.
3
+ # With a few lines of easy-to-read code, you can write scripts to draw simple or complex
4
+ # shapes, lines, and patterns, process and filter images, create abstract art or visualize
5
+ # scientific data, and much more.
6
+ #
7
+ # Inspiration for this project was derived from Processing and NodeBox. These excellent
8
+ # graphics programming environments are more full-featured than RCG, but they are implemented
9
+ # in Java and Python, respectively. RCG was created to offer similar functionality using
10
+ # the Ruby programming language.
11
+ #
12
+ # Author:: James Reynolds (mailto:drtoast@drtoast.com)
13
+ # Copyright:: Copyright (c) 2008 James Reynolds
14
+ # License:: Distributes under the same terms as Ruby
15
+
16
+ module HotCocoa::Graphics
17
+
18
+ # draw a smooth gradient between any number of key colors
19
+ class Gradient
20
+
21
+ attr_reader :gradient, :drawpre, :drawpost
22
+
23
+ # create a new gradient from black to white
24
+ def initialize(*colors)
25
+ @colorspace = CGColorSpaceCreateWithName(KCGColorSpaceGenericRGB)
26
+ colors = colors[0] if colors[0].class == Array
27
+ set(colors)
28
+ pre(true)
29
+ post(true)
30
+ self
31
+ end
32
+
33
+ # create a gradient that evenly distributes the given colors
34
+ def set(colors)
35
+ colors ||= [Color.black, Color.white]
36
+ cgcolors = []
37
+ locations = []
38
+ increment = 1.0 / (colors.size - 1).to_f
39
+ i = 0
40
+ colors.each do |c|
41
+ cgcolor = CGColorCreate(@colorspace, [c.r, c.g, c.b, c.a])
42
+ cgcolors.push(cgcolor)
43
+ location = i * increment
44
+ locations.push(location)
45
+ i = i + 1
46
+ end
47
+ @gradient = CGGradientCreateWithColors(@colorspace, cgcolors, locations)
48
+ end
49
+
50
+ # extend gradient before start location? (true/false)
51
+ def pre(tf=nil)
52
+ @drawpre = (tf ? KCGGradientDrawsBeforeStartLocation : 0) unless tf.nil?
53
+ @drawpre
54
+ end
55
+
56
+ # extend gradient after end location? (true/false)
57
+ def post(tf=nil)
58
+ @drawpost = (tf ? KCGGradientDrawsAfterEndLocation : 0) unless tf.nil?
59
+ @drawpost
60
+ end
61
+
62
+ end
63
+ end