textorize-mr 0.1.0

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.
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ Copyright (c) 2009 Thomas Fuchs
2
+ http://script.aculo.us/thomas
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining
5
+ a copy of this software and associated documentation files (the
6
+ "Software"), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish,
8
+ distribute, sublicense, and/or sell copies of the Software, and to
9
+ permit persons to whom the Software is furnished to do so, subject to
10
+ the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,16 @@
1
+ require "rubygems"
2
+ require "rake/testtask"
3
+ require "rake/gempackagetask"
4
+
5
+ task :default => :test
6
+
7
+ Rake::TestTask.new do |t|
8
+ t.libs << "test"
9
+ t.test_files = FileList["test/test_*.rb"]
10
+ t.verbose = true
11
+ end
12
+
13
+ Rake::GemPackageTask.new(eval(IO.read(File.join(File.dirname(__FILE__), "textorize.gemspec")))) do |pkg|
14
+ pkg.need_zip = true
15
+ pkg.need_tar = true
16
+ end
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env macruby
2
+ require "optparse"
3
+ require 'rubygems'
4
+ require "textorize"
5
+
6
+ options = {}
7
+ opts = OptionParser.new do |opts|
8
+ opts.banner = "Usage: #$0 [options] string"
9
+
10
+ opts.on('-f', '--font=[FONT]', String, 'Font name') do |v|
11
+ options[:font] = v
12
+ end
13
+
14
+ opts.on('-s', '--size=[SIZE]', Float, 'Font size in point') do |v|
15
+ options[:size] = v
16
+ end
17
+
18
+ opts.on('-l', '--lineheight=[HEIGHT]', Float, 'Line height in point') do |v|
19
+ options[:lineheight] = v
20
+ end
21
+
22
+ opts.on('-o', '--output=[FILENAME]', String, 'Specify filename for saving') do |v|
23
+ options[:output] = v
24
+ end
25
+
26
+ opts.on('-b', '--obliqueness=[ANGLE]', Float, 'Slant angle') do |v|
27
+ options[:obliqueness] = v
28
+ end
29
+
30
+ opts.on('-c', '--color=[COLOR]', String, 'Render text in specific color') do |v|
31
+ options[:color] = v
32
+ end
33
+
34
+ opts.on('-b', '--background=[COLOR]', String, 'Render background in specific color') do |v|
35
+ options[:background] = v
36
+ end
37
+
38
+ opts.on_tail('-h', '--help', 'Display this message and exit') do
39
+ puts opts
40
+ exit
41
+ end
42
+ end.parse!
43
+
44
+ options[:font] ||= 'Arial'
45
+ options[:size] ||= 28.0
46
+ options[:kerning] ||= 0
47
+ options[:lineheight] ||= options[:size]
48
+ options[:output] ||= 'output.png'
49
+ options[:strings] = ARGV.first || 'MacRuby'
50
+ options[:width] ||= 250
51
+ options[:obliqueness] ||= 0
52
+
53
+ renderer = Textorize::Runner.new(options[:strings], options[:output], options)
@@ -0,0 +1,6 @@
1
+ framework 'Cocoa'
2
+ $:.unshift File.dirname(__FILE__)
3
+
4
+ require "textorize/runner"
5
+ require "textorize/renderer"
6
+ require "textorize/saver"
@@ -0,0 +1,53 @@
1
+ framework 'cocoa'
2
+
3
+ module Textorize
4
+ class Renderer
5
+
6
+ def initialize(window, string, options)
7
+ @text_view = NSTextView.alloc.initWithFrame([0,0,0,0])
8
+
9
+ set_attr_and_text(options, string)
10
+ window.contentView = @text_view
11
+ @text_view.sizeToFit
12
+
13
+ window.display
14
+ window.orderFrontRegardless
15
+ end
16
+
17
+ def bitmap
18
+ @text_view.lockFocus
19
+ bitmap = NSBitmapImageRep.alloc.initWithFocusedViewRect(@text_view.bounds)
20
+ @text_view.unlockFocus
21
+ bitmap
22
+ end
23
+
24
+ private
25
+
26
+ def set_attr_and_text(options, string)
27
+ @text_view.horizontallyResizable = true
28
+ @text_view.useAllLigatures(nil)
29
+
30
+ para = NSMutableParagraphStyle.alloc.init
31
+ para.lineSpacing = options[:lineheight]
32
+
33
+ @text_view.typingAttributes = {
34
+ NSFontAttributeName => NSFont.fontWithName(options[:font], size: options[:size]),
35
+ NSKernAttributeName => options[:kerning],
36
+ NSParagraphStyleAttributeName => para,
37
+ NSBaselineOffsetAttributeName => 0,
38
+ NSObliquenessAttributeName => options[:obliqueness]
39
+ }
40
+
41
+ @text_view.lowerBaseline(nil)
42
+
43
+ @text_view.string = string
44
+ color = (options[:color] || '0,0,0').split(',')
45
+ background = (options[:background] || '1,1,1').split(',')
46
+
47
+ @text_view.textColor = NSColor.colorWithDeviceRed(color[0], green: color[1], blue: color[2], alpha:1)
48
+ @text_view.backgroundColor = NSColor.colorWithDeviceRed(background[0], green: background[1], blue: background[2], alpha:1)
49
+ end
50
+
51
+ end
52
+
53
+ end
@@ -0,0 +1,29 @@
1
+ module Textorize
2
+ class Runner
3
+
4
+ def initialize(string, output, options)
5
+ app = NSApplication.sharedApplication
6
+ app.delegate = RunnerApplication.new(string, output, options)
7
+ app.run
8
+ end
9
+
10
+ end
11
+
12
+ class RunnerApplication
13
+
14
+ def initialize(string, output, options)
15
+ @window = NSWindow.alloc.initWithContentRect([-2000, -2000, 2000, 2000], styleMask: NSBorderlessWindowMask, backing: 2, defer: 0)
16
+ @string = string
17
+ @output = output
18
+ @options = options
19
+ end
20
+
21
+ def applicationDidFinishLaunching(notification)
22
+ renderer = Renderer.new(@window, @string, @options)
23
+ Saver.new(renderer).write_to_file(@output)
24
+ NSApplication.sharedApplication.terminate(nil)
25
+ end
26
+
27
+ end
28
+
29
+ end
@@ -0,0 +1,15 @@
1
+ module Textorize
2
+ class Saver
3
+ attr_reader :png
4
+
5
+ def initialize(renderer)
6
+ bitmap = renderer.bitmap
7
+ @png = bitmap.representationUsingType(NSPNGFileType, properties: nil)
8
+ end
9
+
10
+ def write_to_file(file)
11
+ @png.writeToFile(file, atomically: true)
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,18 @@
1
+ require File.join(File.dirname(__FILE__), *%w".. lib textorize")
2
+ require "test/unit"
3
+
4
+ class RunnerTest < Test::Unit::TestCase
5
+
6
+ def test_runner
7
+ options = {}
8
+ options[:font] ||= 'Arial'
9
+ options[:size] ||= 28.0
10
+ options[:kerning] ||= 0
11
+ options[:lineheight] ||= options[:size]
12
+ options[:width] ||= 250
13
+ options[:obliqueness] ||= 0
14
+
15
+ Textorize::Runner.new 'Hallo!', 'output.png', options
16
+ end
17
+
18
+ end
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: textorize-mr
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Thomas Fuchs
8
+ - Matt Aimonetti
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2009-09-27 00:00:00 -07:00
14
+ default_executable:
15
+ dependencies: []
16
+
17
+ description: Textorize is a OS X utility to render subpixel antialised strings into PNG files.
18
+ email: thomas@fesch.at
19
+ executables:
20
+ - textorize
21
+ extensions: []
22
+
23
+ extra_rdoc_files: []
24
+
25
+ files:
26
+ - Rakefile
27
+ - LICENSE
28
+ - bin/textorize
29
+ - lib/textorize/renderer.rb
30
+ - lib/textorize/runner.rb
31
+ - lib/textorize/saver.rb
32
+ - lib/textorize.rb
33
+ - test/test_runner.rb
34
+ has_rdoc: true
35
+ homepage: http://github.com/mattetti/textorize
36
+ licenses: []
37
+
38
+ post_install_message:
39
+ rdoc_options: []
40
+
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: "0"
48
+ version:
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
55
+ requirements: []
56
+
57
+ rubyforge_project:
58
+ rubygems_version: 1.3.5
59
+ signing_key:
60
+ specification_version: 3
61
+ summary: OS X subpixel antialiased PNG string renderer for MacRuby
62
+ test_files:
63
+ - test/test_runner.rb