squib 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +29 -26
  3. data/.travis.yml +6 -4
  4. data/.yardopts +6 -0
  5. data/API.md +59 -0
  6. data/Gemfile +2 -2
  7. data/LICENSE.txt +22 -22
  8. data/README.md +92 -55
  9. data/Rakefile +11 -6
  10. data/bin/squib +19 -2
  11. data/lib/squib/api/background.rb +16 -11
  12. data/lib/squib/api/data.rb +52 -29
  13. data/lib/squib/api/image.rb +48 -10
  14. data/lib/squib/api/save.rb +36 -15
  15. data/lib/squib/api/settings.rb +35 -0
  16. data/lib/squib/api/shapes.rb +106 -12
  17. data/lib/squib/api/text.rb +45 -25
  18. data/lib/squib/api/units.rb +17 -0
  19. data/lib/squib/card.rb +36 -27
  20. data/lib/squib/commands/new.rb +40 -0
  21. data/lib/squib/constants.rb +40 -0
  22. data/lib/squib/deck.rb +113 -48
  23. data/lib/squib/graphics/background.rb +12 -10
  24. data/lib/squib/graphics/image.rb +28 -12
  25. data/lib/squib/graphics/save_doc.rb +50 -21
  26. data/lib/squib/graphics/save_images.rb +10 -8
  27. data/lib/squib/graphics/shapes.rb +55 -11
  28. data/lib/squib/graphics/text.rb +107 -27
  29. data/lib/squib/input_helpers.rb +140 -0
  30. data/lib/squib/project_template/.gitignore +3 -0
  31. data/lib/squib/project_template/ABOUT.md +19 -0
  32. data/lib/squib/project_template/Gemfile +3 -0
  33. data/lib/squib/project_template/PNP NOTES.md +4 -0
  34. data/lib/squib/project_template/_output/gitkeep.txt +1 -0
  35. data/lib/squib/project_template/config.yml +2 -0
  36. data/lib/squib/project_template/deck.rb +6 -0
  37. data/lib/squib/project_template/layout.yml +0 -0
  38. data/lib/squib/version.rb +6 -3
  39. data/lib/squib.rb +19 -2
  40. data/samples/_output/gitkeep.txt +0 -0
  41. data/samples/basic.rb +20 -22
  42. data/samples/colors.rb +17 -0
  43. data/samples/custom-config.yml +1 -0
  44. data/samples/custom-layout.yml +34 -0
  45. data/samples/custom_config.rb +6 -0
  46. data/samples/draw_shapes.rb +19 -0
  47. data/samples/excel.rb +19 -16
  48. data/samples/hello_world.rb +7 -0
  49. data/samples/load_images.rb +19 -0
  50. data/samples/pokercard.png +0 -0
  51. data/samples/ranges.rb +47 -0
  52. data/samples/sample.xlsx +0 -0
  53. data/samples/save_pdf.rb +14 -0
  54. data/samples/spanner.svg +91 -0
  55. data/samples/text_options.rb +58 -0
  56. data/samples/tgc_proofs.rb +20 -0
  57. data/samples/units.rb +12 -0
  58. data/samples/use_layout.rb +29 -0
  59. data/spec/api/api_text_spec.rb +37 -0
  60. data/spec/commands/new_spec.rb +48 -0
  61. data/spec/deck_spec.rb +49 -48
  62. data/spec/samples_run_spec.rb +15 -0
  63. data/spec/spec_helper.rb +9 -0
  64. data/squib.gemspec +42 -27
  65. metadata +109 -11
  66. data/samples/_output/watch.html +0 -25
@@ -1,22 +1,51 @@
1
- module Squib
2
- class Deck
3
-
4
- def save_pdf
5
- #paper is 8.5x11
6
- # PDF points are 1/72 of an inch
7
- raise "Not implemented yet!"
8
- width = 8.5 * 72
9
- height = 11 * 72
10
- cc = Cairo::Context.new(Cairo::PDFSurface.new('_img/deck.pdf', width, height))
11
- x = 10
12
- y = 10
13
- @cards.each_with_index do |card, i|
14
- cc.move_to(x,y)
15
- x += 825*i
16
- cc.set_source(card.cairo_surface, 0, 300)
17
- cc.paint
18
- end
19
- end
20
-
21
- end
1
+ module Squib
2
+ class Deck
3
+
4
+ # Lays out the cards in range and renders a PDF
5
+ #
6
+ # @example
7
+ # save_pdf file: 'deck.pdf', margin: 75, gap: 5, trim: 37
8
+ #
9
+ # @option opts file [String] the name of the PDF file to save.
10
+ # @option opts dir [String] (_output) the directory to save to. Created if it doesn't exist.
11
+ # @option opts margin [Integer] (75) the margin around the outside of the page
12
+ # @option opts gap [Integer] (0) the space in pixels between the cards
13
+ # @option opts trim [Integer] (0) the space around the edge of each card to trim (e.g. to cut off the bleed margin for print-and-play)
14
+ # @return [nil]
15
+ # @api public
16
+ def save_pdf(opts = {})
17
+ p = needs(opts, [:file_to_save, :creatable_dir, :margin, :gap, :trim])
18
+ width = 11 * @dpi ; height = 8.5 * @dpi #TODO: allow this to be specified too
19
+ cc = Cairo::Context.new(Cairo::PDFSurface.new("#{p[:dir]}/#{p[:file]}", width, height))
20
+ x = p[:margin] ; y = p[:margin]
21
+ @cards.each_with_index do |card, i|
22
+ surface = trim(card.cairo_surface, p[:trim], @width, @height)
23
+ cc.set_source(surface, x, y)
24
+ cc.paint
25
+ x += surface.width + p[:gap]
26
+ if x > (width - surface.width - p[:margin])
27
+ x = p[:margin]
28
+ y += surface.height + p[:gap]
29
+ if y > (height - surface.height - p[:margin])
30
+ x = p[:margin] ; y = p[:margin]
31
+ cc.show_page #next page
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ # :nodoc:
38
+ # @api private
39
+ def trim(surface, trim, width, height)
40
+ if trim > 0
41
+ tmp = Cairo::ImageSurface.new(width-2*trim, height-2*trim)
42
+ cc = Cairo::Context.new(tmp)
43
+ cc.set_source(surface,-1*trim, -1*trim)
44
+ cc.paint
45
+ surface = tmp
46
+ end
47
+ surface
48
+ end
49
+
50
+ end
22
51
  end
@@ -1,9 +1,11 @@
1
- module Squib
2
- class Card
3
-
4
- def save_png(i, dir, prefix)
5
- cairo_context.target.write_to_png("#{dir}/#{prefix}#{i}.png")
6
- end
7
-
8
- end
1
+ module Squib
2
+ class Card
3
+
4
+ # :nodoc:
5
+ # @api private
6
+ def save_png(i, dir, prefix)
7
+ cairo_context.target.write_to_png("#{dir}/#{prefix}#{i}.png")
8
+ end
9
+
10
+ end
9
11
  end
@@ -1,12 +1,56 @@
1
- module Squib
2
- class Card
3
-
4
- def draw_rectangle(x, y, width, height, x_radius, y_radius)
5
- cc = cairo_context
6
- cc.set_source_rgb(0.0,0.0,0.0)
7
- cc.rounded_rectangle(x, y, width, height, x_radius, y_radius)
8
- cc.stroke
9
- end
10
-
11
- end
1
+ module Squib
2
+ class Card
3
+
4
+ # :nodoc:
5
+ # @api private
6
+ def rect(x, y, width, height, x_radius, y_radius, fill_color, stroke_color, stroke_width)
7
+ width=@width if width==:native; height=@height if height==:native
8
+ cc = cairo_context
9
+ cc.rounded_rectangle(x, y, width, height, x_radius, y_radius)
10
+ cc.set_source_color(stroke_color)
11
+ cc.set_line_width(stroke_width)
12
+ cc.stroke
13
+ cc.rounded_rectangle(x, y, width, height, x_radius, y_radius)
14
+ cc.set_source_color(fill_color)
15
+ cc.fill
16
+ end
17
+
18
+ # :nodoc:
19
+ # @api private
20
+ def circle(x, y, radius, fill_color, stroke_color, stroke_width)
21
+ cc = cairo_context
22
+ cc.circle(x, y, radius)
23
+ cc.set_source_color(stroke_color)
24
+ cc.set_line_width(stroke_width)
25
+ cc.stroke
26
+ cc.circle(x, y, radius)
27
+ cc.set_source_color(fill_color)
28
+ cc.fill
29
+ end
30
+
31
+ # :nodoc:
32
+ # @api private
33
+ def triangle(x1, y1, x2, y2, x3, y3, fill_color, stroke_color, stroke_width)
34
+ cc = cairo_context
35
+ cc.triangle(x1, y1, x2, y2, x3, y3)
36
+ cc.set_source_color(stroke_color)
37
+ cc.set_line_width(stroke_width)
38
+ cc.stroke
39
+ cc.triangle(x1, y1, x2, y2, x3, y3)
40
+ cc.set_source_color(fill_color)
41
+ cc.fill
42
+ end
43
+
44
+ # :nodoc:
45
+ # @api private
46
+ def line(x1, y1, x2, y2, stroke_color, stroke_width)
47
+ cc = cairo_context
48
+ cc.move_to(x1, y1)
49
+ cc.line_to(x2, y2)
50
+ cc.set_source_color(stroke_color)
51
+ cc.set_line_width(stroke_width)
52
+ cc.stroke
53
+ end
54
+
55
+ end
12
56
  end
@@ -1,28 +1,108 @@
1
- require 'pango'
2
-
3
- module Squib
4
- class Card
5
-
6
- def text(str, font, x, y, options)
7
- cc = cairo_context
8
- cc.set_source_color(:black) #black
9
- cc.move_to(x,y)
10
- layout = cc.create_pango_layout
11
- layout.text = str.to_s
12
- w = options[:width] ; h = options[:height]
13
- w ||= (@width - 2*x) ; h ||= (@height - 2*y) # default centers to x,y
14
- w *= Pango::SCALE ; h *= Pango::SCALE
15
- layout.width=w ; layout.height=h
16
- layout.wrap = Pango::WRAP_WORD
17
- layout.justify = true
18
- layout.alignment = Pango::ALIGN_LEFT
19
- layout.font_description = Pango::FontDescription.new(font)
20
- #Center it vertically?
21
- #puts "Height: #{layout.extents[1].height / Pango::SCALE}"
22
- #puts "Height: #{layout.pixel_size[1]*layout.line_count}"
23
- cc.update_pango_layout(layout)
24
- cc.show_pango_layout(layout)
25
- end
26
-
27
- end
1
+ require 'pango'
2
+
3
+ module Squib
4
+ class Card
5
+
6
+ # :nodoc:
7
+ # @api private
8
+ def draw_text_hint(x,y,layout, color)
9
+ return if color.nil? && @deck.text_hint.nil?
10
+ color ||= @deck.text_hint
11
+ # when w,h < 0, it was never set. extents[0] are ink extents
12
+ w = layout.width / Pango::SCALE
13
+ w = layout.extents[1].width / Pango::SCALE if w < 0
14
+ h = layout.height / Pango::SCALE
15
+ h = layout.extents[1].height / Pango::SCALE if h < 0
16
+ rect(x,y,w,h,0,0,'#0000',color, 2.0)
17
+ end
18
+
19
+ # :nodoc:
20
+ # @api private
21
+ def ellipsize(layout, options)
22
+ unless options[:ellipsize].nil?
23
+ h = { :none => Pango::Layout::ELLIPSIZE_NONE,
24
+ :start => Pango::Layout::ELLIPSIZE_START,
25
+ :middle => Pango::Layout::ELLIPSIZE_MIDDLE,
26
+ :end => Pango::Layout::ELLIPSIZE_END,
27
+ true => Pango::Layout::ELLIPSIZE_END,
28
+ false => Pango::Layout::ELLIPSIZE_NONE
29
+ }
30
+ layout.ellipsize = h[options[:ellipsize]]
31
+ end
32
+ layout
33
+ end
34
+
35
+ # :nodoc:
36
+ # @api private
37
+ def wrap(layout, options)
38
+ unless options[:wrap].nil?
39
+ h = { :word => Pango::Layout::WRAP_WORD,
40
+ :char => Pango::Layout::WRAP_CHAR,
41
+ :word_char => Pango::Layout::WRAP_WORD_CHAR,
42
+ true => Pango::Layout::WRAP_WORD_CHAR,
43
+ false => nil,
44
+ :none => nil
45
+ }
46
+ layout.wrap = h[options[:wrap]]
47
+ end
48
+ layout
49
+ end
50
+
51
+ # :nodoc:
52
+ # @api private
53
+ def align(layout, options)
54
+ unless options[:align].nil?
55
+ h = { :left => Pango::ALIGN_LEFT,
56
+ :right => Pango::ALIGN_RIGHT,
57
+ :center => Pango::ALIGN_CENTER
58
+ }
59
+ layout.alignment = h[options[:align]]
60
+ end
61
+ layout
62
+ end
63
+
64
+ # :nodoc:
65
+ # @api private
66
+ def valign(cc, layout, x, y, valign)
67
+ if layout.height > 0
68
+ ink_extents = layout.extents[1]
69
+ case valign
70
+ when :middle
71
+ cc.move_to(x, y + (layout.height - ink_extents.height) / (2 * Pango::SCALE))
72
+ when :bottom
73
+ cc.move_to(x, y + (layout.height - ink_extents.height) / Pango::SCALE)
74
+ end
75
+ end
76
+ end
77
+
78
+ # :nodoc:
79
+ # @api private
80
+ def setwh(layout, options)
81
+ layout.width = options[:width] * Pango::SCALE unless options[:width].nil? || options[:width] == :native
82
+ layout.height = options[:height] * Pango::SCALE unless options[:height].nil? || options[:height] == :native
83
+ layout
84
+ end
85
+
86
+ # :nodoc:
87
+ # @api private
88
+ def text(str, font, x, y, color, options)
89
+ cc = cairo_context
90
+ cc.set_source_color(color)
91
+ cc.move_to(x,y)
92
+ layout = cc.create_pango_layout
93
+ layout.font_description = Pango::FontDescription.new(font)
94
+ layout.text = str.to_s
95
+ layout.markup = str.to_s if options[:markup]
96
+ layout = setwh(layout, options)
97
+ layout = wrap(layout, options)
98
+ layout = ellipsize(layout, options)
99
+ layout = align(layout, options)
100
+ layout.justify = options[:justify] unless options[:justify].nil?
101
+ cc.update_pango_layout(layout)
102
+ valign(cc, layout, x,y, options[:valign])
103
+ cc.update_pango_layout(layout) ; cc.show_pango_layout(layout)
104
+ draw_text_hint(x,y,layout,options[:hint])
105
+ end
106
+
107
+ end
28
108
  end
@@ -0,0 +1,140 @@
1
+ require 'squib/constants'
2
+
3
+ module Squib
4
+ # :nodoc:
5
+ # @api private
6
+ module InputHelpers
7
+
8
+ # :nodoc:
9
+ # @api private
10
+ def needs(opts, params)
11
+ opts = layoutify(opts) if params.include? :layout
12
+ opts = Squib::SYSTEM_DEFAULTS.merge(opts)
13
+ opts = rangeify(opts) if params.include? :range
14
+ opts = fileify(opts) if params.include? :file
15
+ opts = fileify(opts, false, true) if params.include? :file_to_save
16
+ opts = fileify(opts, true) if params.include? :files
17
+ opts = colorify(opts) if params.include? :color
18
+ opts = colorify(opts, true) if params.include? :nillable_color
19
+ opts = dirify(opts) if params.include? :dir
20
+ opts = dirify(opts, true) if params.include? :creatable_dir
21
+ opts = fontify(opts) if params.include? :font
22
+ opts = radiusify(opts) if params.include? :radius
23
+ opts = svgidify(opts) if params.include? :svgid
24
+ opts = formatify(opts) if params.include? :formats
25
+ opts
26
+ end
27
+ module_function :needs
28
+
29
+ # :nodoc:
30
+ # @api private
31
+ def layoutify(opts)
32
+ unless opts[:layout].nil?
33
+ entry = @layout[opts[:layout].to_s]
34
+ unless entry.nil?
35
+ entry.each do |key, value|
36
+ opts[key.to_sym] ||= entry[key]
37
+ end
38
+ else
39
+ logger.warn "Layout entry #{opts[:layout]} does not exist."
40
+ end
41
+ end
42
+ opts
43
+ end
44
+ module_function :layoutify
45
+
46
+ # :nodoc:
47
+ # @api private
48
+ def formatify(opts)
49
+ opts[:format] = [opts[:format]].flatten
50
+ opts
51
+ end
52
+ module_function :formatify
53
+
54
+ # :nodoc:
55
+ # @api private
56
+ def rangeify (opts)
57
+ range = opts[:range]
58
+ raise 'Range cannot be nil' if range.nil?
59
+ range = 0..(@cards.size-1) if range == :all
60
+ range = range..range if range.is_a? Integer
61
+ if range.max > (@cards.size-1)
62
+ raise "#{range} is outside of deck range of 0..#{@cards.size-1}"
63
+ end
64
+ opts[:range] = range
65
+ opts
66
+ end
67
+ module_function :rangeify
68
+
69
+ # :nodoc:
70
+ # @api private
71
+ def fileify(opts, expand_singletons=false, allow_non_exist=false)
72
+ opts[:file] = [opts[:file]] * @cards.size if expand_singletons
73
+ files = [opts[:file]].flatten
74
+ files.each do |file|
75
+ unless File.exists?(file) || allow_non_exist
76
+ raise "File #{File.expand_path(file)} does not exist!"
77
+ end
78
+ end
79
+ opts
80
+ end
81
+ module_function :fileify
82
+
83
+ # :nodoc:
84
+ # @api private
85
+ def dirify(opts, allow_create=false)
86
+ return opts if Dir.exists?(opts[:dir])
87
+ if allow_create
88
+ Squib.logger.warn "Dir #{opts[:dir]} does not exist, creating it."
89
+ Dir.mkdir opts[:dir]
90
+ return opts
91
+ else
92
+ raise "#{opts[:dir]} does not exist!"
93
+ end
94
+ end
95
+ module_function :dirify
96
+
97
+ # :nodoc:
98
+ # @api private
99
+ def colorify(opts, nillable=false)
100
+ if nillable # for optional color arguments like text hints
101
+ opts[:color] = Cairo::Color.parse(opts[:color]) unless opts[:color].nil?
102
+ else
103
+ opts[:color] = Cairo::Color.parse(opts[:color])
104
+ end
105
+ opts
106
+ end
107
+ module_function :colorify
108
+
109
+ # :nodoc:
110
+ # @api private
111
+ def fontify (opts)
112
+ opts[:font] = @font if opts[:font]==:use_set
113
+ opts[:font] = Squib::SYSTEM_DEFAULTS[:default_font] if opts[:font] == :default
114
+ opts
115
+ end
116
+ module_function :fontify
117
+
118
+ # :nodoc:
119
+ # @api private
120
+ def radiusify(opts)
121
+ unless opts[:radius].nil?
122
+ opts[:x_radius] = opts[:radius]
123
+ opts[:y_radius] = opts[:radius]
124
+ end
125
+ opts
126
+ end
127
+ module_function :radiusify
128
+
129
+ # :nodoc:
130
+ # @api private
131
+ def svgidify(opts)
132
+ unless opts[:id].nil?
133
+ opts[:id] = '#' << opts[:id] unless opts[:id].start_with? '#'
134
+ end
135
+ opts
136
+ end
137
+ module_function :svgidify
138
+
139
+ end
140
+ end
@@ -0,0 +1,3 @@
1
+ _output/*.png
2
+ _output/*.pdf
3
+
@@ -0,0 +1,19 @@
1
+ My Awesome Game
2
+ ===============
3
+
4
+ Check out my awesome game!
5
+
6
+
7
+ Objective
8
+ ---------
9
+
10
+
11
+
12
+ Gameplay
13
+ --------
14
+
15
+
16
+
17
+ Ending the Game
18
+ ---------------
19
+
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'squib'
@@ -0,0 +1,4 @@
1
+ Print and Play Notes
2
+ ====================
3
+
4
+ Fill this out to give tips on how to play this with print and play.
@@ -0,0 +1 @@
1
+ Keep this here so that Git knows to keep the _output directory on a fresh clone
@@ -0,0 +1,2 @@
1
+ # Settings in the config.yml are overriding Squib's defaults. Anything in the main script will override this.
2
+ #dpi: 72
@@ -0,0 +1,6 @@
1
+ require 'squib'
2
+
3
+ Squib::Deck.new(cards: 3) do
4
+ text str: "Hello, World!"
5
+ save format: :png
6
+ end
File without changes
data/lib/squib/version.rb CHANGED
@@ -1,3 +1,6 @@
1
- module Squib
2
- VERSION = "0.0.1"
3
- end
1
+ module Squib
2
+
3
+ # The next version to be released.
4
+ # Uses semantic versioning
5
+ VERSION = "0.0.2"
6
+ end
data/lib/squib.rb CHANGED
@@ -1,2 +1,19 @@
1
- require 'squib/deck'
2
- require 'squib/card'
1
+ require 'logger'
2
+ require 'cairo'
3
+ require 'pango'
4
+ require 'rsvg2'
5
+ require 'squib/version'
6
+ require 'squib/commands/new'
7
+ require 'squib/deck'
8
+ require 'squib/card'
9
+
10
+ module Squib
11
+
12
+ # :nodoc:
13
+ # @api private
14
+ def logger
15
+ @logger ||= Logger.new(STDOUT)
16
+ end
17
+ module_function :logger
18
+
19
+ end
File without changes
data/samples/basic.rb CHANGED
@@ -1,22 +1,20 @@
1
- #!/usr/bin/env ruby
2
- require 'squib'
3
-
4
- data = {'name' => ['Thief', 'Grifter', 'Mastermind'],
5
- 'level' => [1,2,3]}
6
- longtext = "Hello, World! What do you know about tweetle beetles? well... \nWhen tweetle beetles fight, it's called a tweetle beetle battle. And when they battle in a puddle, it's a tweetle beetle puddle battle. AND when tweetle beetles battle with paddles in a puddle, they call it a tweetle beetle puddle paddle battle. AND... When beetles battle beetles in a puddle paddle battle and the beetle battle puddle is a puddle in a bottle... ..they call this a tweetle beetle bottle puddle paddle battle muddle. AND... When beetles fight these battles in a bottle with their paddles and the bottle's on a poodle and the poodle's eating noodles... ...they call this a muddle puddle tweetle poodle beetle noodle bottle paddle battle."
7
-
8
- Squib::Deck.new(width: 825, height: 1125, cards: 3) do
9
- background color: [1.0,1.0,1.0]
10
- rect x: 15, y: 15, width: 795, height: 1095, x_radius: 50, y_radius: 50
11
- rect x: 30, y: 30, width: 128, height: 128, x_radius: 25, y_radius: 25
12
-
13
- text str: data['name'], x: 250, y: 55, font: 'Arial 54'
14
- text str: data['level'], x: 65, y: 40, font: 'Arial 72'
15
- text str: longtext, x: 100, y: 600, font: 'Arial 16'
16
-
17
- png file: 'shiny-purse.png', x: 665, y: 30
18
-
19
- save format: :png
20
- end
21
-
22
- puts "Done!"
1
+ #!/usr/bin/env ruby
2
+ require 'squib'
3
+
4
+ data = {'name' => ['Thief', 'Grifter', 'Mastermind'],
5
+ 'level' => [1,2,3]}
6
+
7
+ Squib::Deck.new(width: 825, height: 1125, cards: 3) do
8
+ background color: :white
9
+ rect x: 38, y: 38, width: 750, height: 1050, radius: 38
10
+ rect x: 75, y: 75, width: 128, height: 128, radius: 25
11
+
12
+ text str: data['name'], x: 220, y: 78, font: 'Arial 54'
13
+ text str: data['level'], x: 75, y: 85, width: 128,
14
+ font: 'Arial 72', align: :center
15
+
16
+ png range: [0,2], file: 'shiny-purse.png', x: 620, y: 75
17
+ svg range: 1..2, file: 'spanner.svg', x: 620, y: 218
18
+
19
+ save prefix: 'basic_', format: :png
20
+ end
data/samples/colors.rb ADDED
@@ -0,0 +1,17 @@
1
+ require 'squib'
2
+
3
+ Squib::Deck.new(width: 825, height: 1125, cards: 1) do
4
+ background color: :white
5
+
6
+ y = 0
7
+ text color: '#f00', str: '3-hex', x: 50, y: y+=50
8
+ text color: '#f00', str: '3-hex (alpha)', x: 50, y: y+=50
9
+ text color: '#ff0000', str: '6-hex', x: 50, y: y+=50
10
+ text color: '#ff000099', str: '8-hex(alpha) *', x: 50, y: y+=50
11
+ text color: '#ffff00000000', str: '12-hex', x: 50, y: y+=50
12
+ text color: '#ffff000000009999', str: '12-hex (alpha)', x: 50, y: y+=50
13
+ text color: :burnt_orange, str: 'Symbols of constants too', x: 50, y: y+=50
14
+ text color: [1.0, 0.0, 0.0], str: 'Array of percentages', x: 50, y: y+=50
15
+
16
+ save_png prefix: "colors_"
17
+ end
@@ -0,0 +1 @@
1
+ dpi: 300
@@ -0,0 +1,34 @@
1
+ frame:
2
+ x: 38
3
+ y: 38
4
+ width: 750
5
+ height: 1050
6
+ radius: 25
7
+ title:
8
+ x: 125
9
+ y: 50
10
+ width: 625
11
+ height: 100
12
+ align: !ruby/symbol center #see http://www.yaml.org/YAML_for_ruby.html#symbols
13
+ valign: !ruby/symbol middle
14
+ subtitle:
15
+ x: 150
16
+ y: 150
17
+ width: 575
18
+ height: 60
19
+ align: !ruby/symbol center
20
+ valign: !ruby/symbol middle
21
+ icon:
22
+ width: 125
23
+ height: 125
24
+ y: 250
25
+ icon_left:
26
+ extends: icon
27
+ x: 150
28
+ icon_middle:
29
+ extends: icon
30
+ x: 350
31
+ y: 400 #overrides the y inherited from icon
32
+ icon_right:
33
+ extends: icon
34
+ x: 550
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ require 'squib'
3
+
4
+ Squib::Deck.new(config: 'custom-config.yml') do
5
+
6
+ end
@@ -0,0 +1,19 @@
1
+ require 'squib'
2
+
3
+ Squib::Deck.new do
4
+ rect x: 300, y: 300, width: 400, height: 400,
5
+ fill_color: :blue, stroke_color: :red, stroke_width: 50.0
6
+
7
+ circle x: 600, y: 600, radius: 75,
8
+ fill_color: :gray, stroke_color: :green, stroke_width: 8.0
9
+
10
+ triangle x1: 50, y1: 50,
11
+ x2: 150, y2: 150,
12
+ x3: 75, y3: 250
13
+
14
+ line x1: 50, y1: 550,
15
+ x2: 150, y2: 650,
16
+ stroke_width: 25.0
17
+
18
+ save_png prefix: 'shape_'
19
+ end