hotcocoa 0.5 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/hotcocoa/application_builder.rb +9 -35
- data/lib/hotcocoa/graphics/color.rb +5 -2
- data/lib/hotcocoa/graphics/image.rb +4 -7
- data/lib/hotcocoa/mappings/toolbar.rb +6 -3
- data/lib/hotcocoa/mappings.rb +7 -1
- data/lib/hotcocoa/standard_rake_tasks.rb +4 -0
- metadata +3 -4
- data/lib/hotcocoa/virtual_file_system.rb +0 -172
@@ -21,17 +21,12 @@ module HotCocoa
|
|
21
21
|
@sources = yml["sources"] || []
|
22
22
|
@resources = yml["resources"] || []
|
23
23
|
@overwrite = yml["overwrite"] == true ? true : false
|
24
|
-
@secure = yml["secure"] == true ? true : false
|
25
24
|
end
|
26
25
|
|
27
26
|
def overwrite?
|
28
27
|
@overwrite
|
29
28
|
end
|
30
29
|
|
31
|
-
def secure?
|
32
|
-
@secure
|
33
|
-
end
|
34
|
-
|
35
30
|
def icon_exist?
|
36
31
|
@icon ? File.exist?(@icon) : false
|
37
32
|
end
|
@@ -40,7 +35,7 @@ module HotCocoa
|
|
40
35
|
|
41
36
|
ApplicationBundlePackage = "APPL????"
|
42
37
|
|
43
|
-
attr_accessor :name, :load_file, :sources, :overwrite, :icon, :version, :info_string, :
|
38
|
+
attr_accessor :name, :load_file, :sources, :overwrite, :icon, :version, :info_string, :resources, :deploy
|
44
39
|
|
45
40
|
def self.build(config, options={:deploy => false})
|
46
41
|
if !config.kind_of?(Configuration) || !$LOADED_FEATURES.detect {|f| f.include?("standard_rake_tasks")}
|
@@ -51,7 +46,6 @@ module HotCocoa
|
|
51
46
|
end
|
52
47
|
builder = new
|
53
48
|
builder.deploy = options[:deploy] == true ? true : false
|
54
|
-
builder.secure = config.secure?
|
55
49
|
builder.name = config.name
|
56
50
|
builder.load_file = config.load
|
57
51
|
builder.icon = config.icon if config.icon_exist?
|
@@ -117,10 +111,6 @@ module HotCocoa
|
|
117
111
|
end
|
118
112
|
end
|
119
113
|
|
120
|
-
def secure?
|
121
|
-
secure
|
122
|
-
end
|
123
|
-
|
124
114
|
private
|
125
115
|
|
126
116
|
def check_for_bundle_root
|
@@ -153,22 +143,11 @@ module HotCocoa
|
|
153
143
|
end
|
154
144
|
|
155
145
|
def copy_sources
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
end
|
162
|
-
File.open(File.join(resources_root, "vfs.db"), "wb") do |db|
|
163
|
-
db.write Marshal.dump(data)
|
164
|
-
end
|
165
|
-
else
|
166
|
-
FileUtils.cp_r load_file, resources_root unless sources.include?(load_file)
|
167
|
-
sources.each do |source|
|
168
|
-
destination = File.join(resources_root, source)
|
169
|
-
FileUtils.mkdir_p(File.dirname(destination)) unless File.exist?(File.dirname(destination))
|
170
|
-
FileUtils.cp_r source, destination
|
171
|
-
end
|
146
|
+
FileUtils.cp_r load_file, resources_root unless sources.include?(load_file)
|
147
|
+
sources.each do |source|
|
148
|
+
destination = File.join(resources_root, source)
|
149
|
+
FileUtils.mkdir_p(File.dirname(destination)) unless File.exist?(File.dirname(destination))
|
150
|
+
FileUtils.cp_r source, destination
|
172
151
|
end
|
173
152
|
end
|
174
153
|
|
@@ -240,14 +219,9 @@ module HotCocoa
|
|
240
219
|
|
241
220
|
def write_ruby_main
|
242
221
|
File.open(main_ruby_source_file, "wb") do |f|
|
243
|
-
if
|
244
|
-
|
245
|
-
|
246
|
-
else
|
247
|
-
f.puts "$:.map! { |x| x.sub(/^\\/Library\\/Frameworks/, NSBundle.mainBundle.privateFrameworksPath) }" if deploy?
|
248
|
-
f.puts "$:.unshift NSBundle.mainBundle.resourcePath.fileSystemRepresentation"
|
249
|
-
f.puts "load '#{load_file}'"
|
250
|
-
end
|
222
|
+
f.puts "$:.map! { |x| x.sub(/^\\/Library\\/Frameworks/, NSBundle.mainBundle.privateFrameworksPath) }" if deploy?
|
223
|
+
f.puts "$:.unshift NSBundle.mainBundle.resourcePath.fileSystemRepresentation"
|
224
|
+
f.puts "load '#{load_file}'"
|
251
225
|
end
|
252
226
|
end
|
253
227
|
|
@@ -196,8 +196,11 @@ module HotCocoa::Graphics
|
|
196
196
|
]
|
197
197
|
|
198
198
|
COLORNAMES.each_key do |name|
|
199
|
-
(class << self; self; end)
|
200
|
-
|
199
|
+
metaclass = (class << self; self; end)
|
200
|
+
metaclass.instance_eval do
|
201
|
+
define_method(name) do
|
202
|
+
named(name)
|
203
|
+
end
|
201
204
|
end
|
202
205
|
end
|
203
206
|
|
@@ -57,12 +57,9 @@ module HotCocoa::Graphics
|
|
57
57
|
# if it's the path to an image file, load as a CGImage
|
58
58
|
@path = img
|
59
59
|
File.exists?(@path) or raise "ERROR: file not found: #{@path}"
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
@nsbitmapimage = NSBitmapImageRep.imageRepWithData(nsdata)
|
64
|
-
# cgimagesource = CGImageSourceCreateWithData(nsdata) # argh, doesn't work
|
65
|
-
@ciimage = CIImage.alloc.initWithBitmapImageRep(@nsbitmapimage)
|
60
|
+
image_source = CGImageSourceCreateWithURL(NSURL.fileURLWithPath(@path), nil)
|
61
|
+
@cgimage = CGImageSourceCreateImageAtIndex(image_source, 0, nil)
|
62
|
+
@ciimage = CIImage.imageWithCGImage(@cgimage)
|
66
63
|
when Canvas
|
67
64
|
puts "Image.new with canvas" if @verbose
|
68
65
|
@path = 'canvas'
|
@@ -80,7 +77,7 @@ module HotCocoa::Graphics
|
|
80
77
|
|
81
78
|
# reload the bitmap image
|
82
79
|
def reset
|
83
|
-
@ciimage = CIImage.
|
80
|
+
@ciimage = CIImage.imageWithCGImage(@cgimage)
|
84
81
|
self
|
85
82
|
end
|
86
83
|
|
@@ -51,11 +51,13 @@ HotCocoa::Mappings.map :toolbar => :NSToolbar do
|
|
51
51
|
def build_custom_items
|
52
52
|
if @allowed && @default
|
53
53
|
ary = @default.select { |x| x.is_a?(NSToolbarItem) }
|
54
|
-
|
54
|
+
|
55
|
+
@default.map! { |x| x.is_a?(NSToolbarItem) ? x.itemIdentifier : x }
|
56
|
+
@allowed.map! { |x| x.is_a?(NSToolbarItem) ? x.itemIdentifier : x }
|
57
|
+
|
55
58
|
@custom_items = {}
|
56
|
-
ary.each { |x| @custom_items[x.itemIdentifier] = x }
|
59
|
+
ary.each { |x| @custom_items[x.itemIdentifier] = x }
|
57
60
|
@allowed.concat(@custom_items.keys)
|
58
|
-
@default.concat(@custom_items.keys)
|
59
61
|
|
60
62
|
[@allowed, @default].each do |a|
|
61
63
|
a.map! do |i|
|
@@ -81,6 +83,7 @@ HotCocoa::Mappings.map :toolbar => :NSToolbar do
|
|
81
83
|
end
|
82
84
|
allowed_items { @allowed }
|
83
85
|
default_items { @default }
|
86
|
+
|
84
87
|
item_for_identifier { |identifier, will_be_inserted| @custom_items[identifier] }
|
85
88
|
end
|
86
89
|
end
|
data/lib/hotcocoa/mappings.rb
CHANGED
@@ -101,7 +101,13 @@ module HotCocoa
|
|
101
101
|
|
102
102
|
# Returns whether or not the framework has been loaded yet.
|
103
103
|
def self.loaded_framework?(name)
|
104
|
-
NSBundle.allFrameworks.map {|bundle|
|
104
|
+
NSBundle.allFrameworks.map { |bundle|
|
105
|
+
bundle.bundlePath.split("/").last
|
106
|
+
}.select { |framework|
|
107
|
+
framework.split(".")[1] == 'framework'
|
108
|
+
}.map { |framework|
|
109
|
+
framework.split(".")[0]
|
110
|
+
}.include?(name.to_s)
|
105
111
|
end
|
106
112
|
|
107
113
|
end
|
@@ -1,17 +1,21 @@
|
|
1
1
|
AppConfig = HotCocoa::ApplicationBuilder::Configuration.new("config/build.yml")
|
2
2
|
|
3
|
+
desc "Build a deployable version of the application"
|
3
4
|
task :deploy => [:clean] do
|
4
5
|
HotCocoa::ApplicationBuilder.build(AppConfig, :deploy => true)
|
5
6
|
end
|
6
7
|
|
8
|
+
desc "Build the application"
|
7
9
|
task :build do
|
8
10
|
HotCocoa::ApplicationBuilder.build(AppConfig)
|
9
11
|
end
|
10
12
|
|
13
|
+
desc "Build and execute the application"
|
11
14
|
task :run => [:build] do
|
12
15
|
`"./#{AppConfig.name}.app/Contents/MacOS/#{AppConfig.name.gsub(/ /, '')}"`
|
13
16
|
end
|
14
17
|
|
18
|
+
desc "Cleanup build files"
|
15
19
|
task :clean do
|
16
20
|
`/bin/rm -rf "#{AppConfig.name}.app"`
|
17
21
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hotcocoa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Kilmer
|
@@ -9,11 +9,11 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-25 00:00:00 -05:00
|
13
13
|
default_executable: hotcocoa
|
14
14
|
dependencies: []
|
15
15
|
|
16
|
-
description: HotCocoa is a
|
16
|
+
description: HotCocoa is a Cocoa mapping library for MacRuby. It simplifies the use of complex Cocoa classes using DSL techniques.
|
17
17
|
email: rich@infoether.com
|
18
18
|
executables:
|
19
19
|
- hotcocoa
|
@@ -94,7 +94,6 @@ files:
|
|
94
94
|
- lib/hotcocoa/plist.rb
|
95
95
|
- lib/hotcocoa/standard_rake_tasks.rb
|
96
96
|
- lib/hotcocoa/template.rb
|
97
|
-
- lib/hotcocoa/virtual_file_system.rb
|
98
97
|
- lib/hotcocoa.rb
|
99
98
|
- template/config/build.yml
|
100
99
|
- template/lib/application.rb
|
@@ -1,172 +0,0 @@
|
|
1
|
-
class VirtualFileSystem
|
2
|
-
|
3
|
-
def self.code_to_load(main_file, password = "\320\302\354\024\215\360P\235\2244\261\214\276:'\274%\270<\350t\212\003\340\t'\004\345\334\256\315\277")
|
4
|
-
<<-VFS
|
5
|
-
module DatabaseRuntime
|
6
|
-
|
7
|
-
class VirtualFilesystem
|
8
|
-
|
9
|
-
attr_reader :password, :encryption_method
|
10
|
-
|
11
|
-
def initialize(password, encryption_method="aes256")
|
12
|
-
@password = password
|
13
|
-
@encryption_method = encryption_method
|
14
|
-
end
|
15
|
-
|
16
|
-
def open_database(main_database)
|
17
|
-
@main_database = main_database
|
18
|
-
begin
|
19
|
-
@db = Marshal.load(File.open(main_database, "rb") {|f| f.read})
|
20
|
-
rescue
|
21
|
-
puts $!
|
22
|
-
puts $!.backtrace.join("\\n")
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def read_file_and_key(filename)
|
27
|
-
data, key = read_file_using_path(filename)
|
28
|
-
if data.nil? && filename[0,1] != "/"
|
29
|
-
$:.each do |loadpath|
|
30
|
-
data, key = read_file_using_path(filename, expand_path(loadpath))
|
31
|
-
break if data
|
32
|
-
end
|
33
|
-
end
|
34
|
-
[data, key]
|
35
|
-
end
|
36
|
-
|
37
|
-
def read_file_using_path(filename, pathname="/")
|
38
|
-
path = expand_path(File.join(pathname, filename))
|
39
|
-
rb_ext = false
|
40
|
-
if has_key?(path)
|
41
|
-
key = filename
|
42
|
-
elsif self.has_key?(path+".rb")
|
43
|
-
key = filename+".rb"
|
44
|
-
rb_ext = true
|
45
|
-
end
|
46
|
-
if key
|
47
|
-
result = rb_ext ? self[path+".rb"] : self[path]
|
48
|
-
if result
|
49
|
-
result.gsub!(/__FILE__/, "'\#{path + (rb_ext ? ".rb" : '')}'")
|
50
|
-
return result, key
|
51
|
-
end
|
52
|
-
end
|
53
|
-
nil
|
54
|
-
end
|
55
|
-
|
56
|
-
def has_key?(key)
|
57
|
-
@db.has_key?(key)
|
58
|
-
end
|
59
|
-
|
60
|
-
def delete(key)
|
61
|
-
end
|
62
|
-
|
63
|
-
def [](key)
|
64
|
-
read(@db, key)
|
65
|
-
end
|
66
|
-
|
67
|
-
def close
|
68
|
-
end
|
69
|
-
|
70
|
-
def keys
|
71
|
-
@db.keys
|
72
|
-
end
|
73
|
-
|
74
|
-
def []=(key, value)
|
75
|
-
end
|
76
|
-
|
77
|
-
def normalize(filename)
|
78
|
-
f = filename.split(File::Separator)
|
79
|
-
f.delete(".")
|
80
|
-
while f.include?("..")
|
81
|
-
f[f.index("..")-1,2] = []
|
82
|
-
end
|
83
|
-
f.join(File::Separator)
|
84
|
-
end
|
85
|
-
|
86
|
-
private
|
87
|
-
|
88
|
-
def expand_path(filename, dirstring=nil)
|
89
|
-
filename = File.join(dirstring, filename) if dirstring
|
90
|
-
f = filename.split(File::Separator)
|
91
|
-
f.delete(".")
|
92
|
-
f.delete("")
|
93
|
-
while f.include?("..")
|
94
|
-
f[f.index("..")-1,2] = []
|
95
|
-
end
|
96
|
-
"/"+f.join(File::Separator)
|
97
|
-
end
|
98
|
-
|
99
|
-
|
100
|
-
def read(db, key)
|
101
|
-
if db.has_key?(key)
|
102
|
-
#decrypt = OpenSSL::Cipher::Cipher.new(encryption_method)
|
103
|
-
#decrypt.decrypt
|
104
|
-
#decrypt.key = password
|
105
|
-
#data = decrypt.update(db[key])
|
106
|
-
#data << decrypt.final
|
107
|
-
#::Zlib::Inflate.inflate(data)
|
108
|
-
db[key]
|
109
|
-
else
|
110
|
-
nil
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
end
|
115
|
-
|
116
|
-
end
|
117
|
-
|
118
|
-
$ROOT_BINDING = binding
|
119
|
-
|
120
|
-
module Kernel
|
121
|
-
|
122
|
-
def virtual_filesystems(options)
|
123
|
-
vfs = DatabaseRuntime::VirtualFilesystem.new(options["password"])
|
124
|
-
vfs.open_database(options["database"])
|
125
|
-
Kernel.const_set("VIRTUAL_FILESYSTEM", vfs)
|
126
|
-
vfs
|
127
|
-
end
|
128
|
-
|
129
|
-
alias_method :original_require, :require
|
130
|
-
|
131
|
-
def require(path)
|
132
|
-
path = VIRTUAL_FILESYSTEM.normalize(path)
|
133
|
-
path_loaded = $".include?(path) || $".include?(path+".rb") || $".include?(path+".so")
|
134
|
-
unless path_loaded
|
135
|
-
data, key = VIRTUAL_FILESYSTEM.read_file_and_key(path)
|
136
|
-
if data
|
137
|
-
$" << key
|
138
|
-
eval(data, $ROOT_BINDING, key, 0)
|
139
|
-
return true
|
140
|
-
else
|
141
|
-
original_require(path)
|
142
|
-
end
|
143
|
-
else
|
144
|
-
return false
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
alias_method :original_load, :load
|
149
|
-
|
150
|
-
def load(path)
|
151
|
-
path = VIRTUAL_FILESYSTEM.normalize(path)
|
152
|
-
data, key = VIRTUAL_FILESYSTEM.read_file_and_key(path)
|
153
|
-
if data
|
154
|
-
eval(data, $ROOT_BINDING, key, 0)
|
155
|
-
return true
|
156
|
-
else
|
157
|
-
begin
|
158
|
-
original_load(path)
|
159
|
-
rescue LoadError => e
|
160
|
-
raise e
|
161
|
-
end
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
|
-
end
|
166
|
-
|
167
|
-
virtual_filesystems("database"=>File.join(NSBundle.mainBundle.resourcePath.fileSystemRepresentation, 'vfs.db'), "password"=>#{password.inspect})
|
168
|
-
$:.unshift "/lib"
|
169
|
-
load '#{main_file}'
|
170
|
-
VFS
|
171
|
-
end
|
172
|
-
end
|