samples/images/_images.rb in squib-0.18.0 vs samples/images/_images.rb in squib-0.19.0a

- old
+ new

@@ -1,104 +1,104 @@ -require 'squib' -require 'squib/sample_helpers' - -Squib::Deck.new(width: 1000, height: 3000) do - draw_graph_paper width, height - - sample "This a PNG.\nNo scaling is done by default." do |x, y| - png file: 'angler-fish.png', x: x, y: y - end - - sample 'PNGs can be upscaled, but they will emit an antialias warning (unless you turn it off in the config.yml)' do |x,y| - png file: 'angler-fish.png', x: x, y: y, width: 150, height: 150 - end - - sample 'SVGs can be loaded from a file (left) or from straight XML (right). They can also be scaled to any size.' do |x,y| - svg file: 'robot-golem.svg', x: x, y: y, width: 100, height: 100 - svg data: File.read('robot-golem.svg'), width: 100, height: 100, - x: x + 200, y: y - end - - sample 'PNG and SVG can be auto-scaled by one side and setting the other to :scale' do |x,y| - svg file: 'robot-golem.svg', x: x, y: y, width: 50, height: :scale - svg file: 'robot-golem.svg', x: x + 50, y: y, width: :scale, height: 50 - - png file: 'angler-fish.png', x: x + 200, y: y, width: 50, height: :scale - png file: 'angler-fish.png', x: x + 250, y: y, width: :scale, height: 50 - end - - sample 'PNGs can be cropped. To work from sprite sheets, you can set crop coordinates to PNG images. Rounded corners supported too.' do |x,y| - png file: 'sprites.png', x: x - 50, y: y - 50 # entire sprite sheet - rect x: x - 50, y: y - 50, width: 100, height: 100, # draw the crop line - radius: 15, dash: '3 3', stroke_color: 'red', stroke_width: 3 - text str: '➜', font: 'Sans Bold 12', x: x + 150, y: y - 35 - png file: 'sprites.png', x: x + 200, y: y - 50, # just the robot golem image - crop_x: 0, crop_y: 0, crop_corner_radius: 15, - crop_width: 100, crop_height: 100 - - png file: 'sprites.png', x: x - 50, y: y + 50 # entire sprite sheet again - rect x: x + 14, y: y + 50, width: 65, height: 65, # highlight the crop - radius: 25, dash: '3 3', stroke_color: 'red', stroke_width: 3 - text str: '➜', font: 'Sans Bold 12', x: x + 150, y: y + 50 - png file: 'sprites.png', x: x + 225, y: y + 50, # just the drakkar ship image, rotated - crop_x: 64, crop_y: 0, crop_corner_x_radius: 25, crop_corner_y_radius: 25, - crop_width: 64, crop_height: 64, angle: Math::PI / 6 - end - - sample 'SVGs can be cropped too.' do |x,y| - svg file: 'robot-golem.svg', x: x, y: y, width: 100, height: 100, - crop_x: 40, crop_y: 0, crop_width: 50, crop_height: 50 - end - - sample 'Images can be flipped about their center.' do |x,y| - png file: 'angler-fish.png', x: x, y: y, flip_vertical: true, flip_horizontal: true - svg file: 'robot-golem.svg', x: x + 200, y: y, width: 100, height: 100, - flip_horizontal: true - end - - sample 'SVG can be limited to rendering to a single object if the SVG ID is set. If you look in this SVG file, the black backdrop has ID #backdrop.' do |x,y| - svg file: 'robot-golem.svg', id: 'backdrop', x: x, y: y, width: 100, height: 100 - end - - sample "The SVG force_id option allows use of an ID only when specified, and render nothing if empty. Useful for multiple icons in one SVG file.\nThis should show nothing." do |x,y| - svg file: 'robot-golem.svg', x: x, y: y, - force_id: true, id: '' # <-- the important parts - end - - sample 'NOTE! If you render a single object in an SVG, its placement is still relative to the SVG document.' do |x,y| - svg file: 'offset.svg', x: x, y: y - rect x: x, y: y, width: 100, height: 100, dash: '3 1', stroke_color: 'red', stroke_width: 3 - - svg file: 'offset.svg', id: 'thing', x: x + 200, y: y, width: 100, height: 100 - rect x: x + 200, y: y, width: 100, height: 100, dash: '3 1', stroke_color: 'red', stroke_width: 3 - end - - sample 'PNGs can be blended onto each other with 15 different blending operators. Alpha transparency supported too. See http://cairographics.org/operators' do |x,y| - png file: 'ball.png', x: x, y: y - png file: 'grit.png', x: x + 20, y: y + 20, blend: :color_burn, alpha: 0.75 - end - - sample 'Rotation is around the upper-left corner of the image. Unit is radians.' do |x,y| - rect x: x, y: y, width: 100, height: 100, stroke_width: 3, dash: '3 3', stroke_color: :red - png x: x, y: y, width: 100, height: 100, angle: Math::PI / 4, file: 'angler-fish.png' - - rect x: x + 250, y: y, width: 100, height: 100, stroke_width: 3, dash: '3 3', stroke_color: :red - svg x: x + 250, y: y, width: 100, height: 100, file: 'robot-golem.svg', - angle: Math::PI / 2 - 0.2 - end - - sample 'SVGs and PNGs can be used as masks for colors instead of being directly rendered.' do |x,y| - svg mask: '#00ff00', file: 'glass-heart.svg', x: x - 50, y: y - 50, width: 200, height: 200 - svg mask: '(0,0)(500,0) #eee@0.0 #111@1.0', file: 'glass-heart.svg', x: x + 150, y: y - 50, width: 200, height: 200 - end - - sample 'PNG masks are based on the alpha channel. Gradient coordinates are relative to the card.' do |x,y| - png file: 'with-alpha.png', x: x - 50, y: y - png file: 'with-alpha.png', mask: :magenta, x: x + 50, y: y - - mask = "(#{x+150+75}, #{y+75}, 0)(#{x+150+75}, #{y+75}, 100) #f00@0.0 #000@1.0" - png file: 'with-alpha.png', mask: mask, x: x + 150, y: y, width: 150, height: :scale - end - - - save_png prefix: '_images_' -end +require 'squib' +require 'squib/sample_helpers' + +Squib::Deck.new(width: 1000, height: 3000) do + draw_graph_paper width, height + + sample "This a PNG.\nNo scaling is done by default." do |x, y| + png file: 'angler-fish.png', x: x, y: y + end + + sample 'PNGs can be upscaled, but they will emit an antialias warning (unless you turn it off in the config.yml)' do |x,y| + png file: 'angler-fish.png', x: x, y: y, width: 150, height: 150 + end + + sample 'SVGs can be loaded from a file (left) or from straight XML (right). They can also be scaled to any size.' do |x,y| + svg file: 'robot-golem.svg', x: x, y: y, width: 100, height: 100 + svg data: File.read('robot-golem.svg'), width: 100, height: 100, + x: x + 200, y: y + end + + sample 'PNG and SVG can be auto-scaled by one side and setting the other to :scale' do |x,y| + svg file: 'robot-golem.svg', x: x, y: y, width: 50, height: :scale + svg file: 'robot-golem.svg', x: x + 50, y: y, width: :scale, height: 50 + + png file: 'angler-fish.png', x: x + 200, y: y, width: 50, height: :scale + png file: 'angler-fish.png', x: x + 250, y: y, width: :scale, height: 50 + end + + sample 'PNGs can be cropped. To work from sprite sheets, you can set crop coordinates to PNG images. Rounded corners supported too.' do |x,y| + png file: 'sprites.png', x: x - 50, y: y - 50 # entire sprite sheet + rect x: x - 50, y: y - 50, width: 100, height: 100, # draw the crop line + radius: 15, dash: '3 3', stroke_color: 'red', stroke_width: 3 + text str: '➜', font: 'Sans Bold 12', x: x + 150, y: y - 35 + png file: 'sprites.png', x: x + 200, y: y - 50, # just the robot golem image + crop_x: 0, crop_y: 0, crop_corner_radius: 15, + crop_width: 100, crop_height: 100 + + png file: 'sprites.png', x: x - 50, y: y + 50 # entire sprite sheet again + rect x: x + 14, y: y + 50, width: 65, height: 65, # highlight the crop + radius: 25, dash: '3 3', stroke_color: 'red', stroke_width: 3 + text str: '➜', font: 'Sans Bold 12', x: x + 150, y: y + 50 + png file: 'sprites.png', x: x + 225, y: y + 50, # just the drakkar ship image, rotated + crop_x: 64, crop_y: 0, crop_corner_x_radius: 25, crop_corner_y_radius: 25, + crop_width: 64, crop_height: 64, angle: Math::PI / 6 + end + + sample 'SVGs can be cropped too.' do |x,y| + svg file: 'robot-golem.svg', x: x, y: y, width: 100, height: 100, + crop_x: 40, crop_y: 0, crop_width: 50, crop_height: 50 + end + + sample 'Images can be flipped about their center.' do |x,y| + png file: 'angler-fish.png', x: x, y: y, flip_vertical: true, flip_horizontal: true + svg file: 'robot-golem.svg', x: x + 200, y: y, width: 100, height: 100, + flip_horizontal: true + end + + sample 'SVG can be limited to rendering to a single object if the SVG ID is set. If you look in this SVG file, the black backdrop has ID #backdrop.' do |x,y| + svg file: 'robot-golem.svg', id: 'backdrop', x: x, y: y, width: 100, height: 100 + end + + sample "The SVG force_id option allows use of an ID only when specified, and render nothing if empty. Useful for multiple icons in one SVG file.\nThis should show nothing." do |x,y| + svg file: 'robot-golem.svg', x: x, y: y, + force_id: true, id: '' # <-- the important parts + end + + sample 'NOTE! If you render a single object in an SVG, its placement is still relative to the SVG document.' do |x,y| + svg file: 'offset.svg', x: x, y: y + rect x: x, y: y, width: 100, height: 100, dash: '3 1', stroke_color: 'red', stroke_width: 3 + + svg file: 'offset.svg', id: 'thing', x: x + 200, y: y, width: 100, height: 100 + rect x: x + 200, y: y, width: 100, height: 100, dash: '3 1', stroke_color: 'red', stroke_width: 3 + end + + sample 'PNGs can be blended onto each other with 15 different blending operators. Alpha transparency supported too. See http://cairographics.org/operators' do |x,y| + png file: 'ball.png', x: x, y: y + png file: 'grit.png', x: x + 20, y: y + 20, blend: :color_burn, alpha: 0.75 + end + + sample 'Rotation is around the upper-left corner of the image. Unit is radians.' do |x,y| + rect x: x, y: y, width: 100, height: 100, stroke_width: 3, dash: '3 3', stroke_color: :red + png x: x, y: y, width: 100, height: 100, angle: Math::PI / 4, file: 'angler-fish.png' + + rect x: x + 250, y: y, width: 100, height: 100, stroke_width: 3, dash: '3 3', stroke_color: :red + svg x: x + 250, y: y, width: 100, height: 100, file: 'robot-golem.svg', + angle: Math::PI / 2 - 0.2 + end + + sample 'SVGs and PNGs can be used as masks for colors instead of being directly rendered.' do |x,y| + svg mask: '#00ff00', file: 'glass-heart.svg', x: x - 50, y: y - 50, width: 200, height: 200 + svg mask: '(0,0)(500,0) #eee@0.0 #111@1.0', file: 'glass-heart.svg', x: x + 150, y: y - 50, width: 200, height: 200 + end + + sample 'PNG masks are based on the alpha channel. Gradient coordinates are relative to the card.' do |x,y| + png file: 'with-alpha.png', x: x - 50, y: y + png file: 'with-alpha.png', mask: :magenta, x: x + 50, y: y + + mask = "(#{x+150+75}, #{y+75}, 0)(#{x+150+75}, #{y+75}, 100) #f00@0.0 #000@1.0" + png file: 'with-alpha.png', mask: mask, x: x + 150, y: y, width: 150, height: :scale + end + + + save_png prefix: '_images_' +end