samples/load_images.rb in squib-0.8.0 vs samples/load_images.rb in squib-0.9.0

- old
+ new

@@ -1,78 +1,99 @@ -require 'squib' - -Squib::Deck.new(width: 825, height: 1125, cards: 1) do - background color: '#0b7c8e' - rect x: 38, y: 38, width: 750, height: 1050, x_radius: 38, y_radius: 38 - - png file: 'shiny-purse.png', x: 620, y: 75 # no scaling is done by default - svg file: 'spanner.svg', x: 620, y: 218 - - # Can be scaled if width and height are set - svg file: 'spanner.svg', x: 50, y: 50, width: 250, height: 250 - png file: 'shiny-purse.png', x: 305, y: 50, width: 250, height: 250 - #...but PNGs will warn if it's an upscale - - # Can be scaled using just width or height, if one of them is set to :scale - svg file: 'spanner.svg', x: 200, y: 350, width: 35, height: :scale - svg file: 'spanner.svg', x: 200, y: 390, width: :scale, height: 35 - png file: 'shiny-purse.png', x: 240, y: 350, width: 35, height: :scale - png file: 'shiny-purse.png', x: 240, y: 390, width: :scale, height: 35 - - # We can also limit our rendering to a single object, if the SVG ID is set - svg file: 'spanner.svg', id: '#backdrop', x: 50, y: 350, width: 75, height: 75 - # Squib prepends a #-sign if one is not specified - svg file: 'spanner.svg', id: 'backdrop', x: 50, y: 450, width: 125, height: 125 - - # We can also load SVGs as a string of XML - svg data: File.read('spanner.svg'), x: 50, y: 600, width: 75, height: 75 - - # The svg data field works nicely with modifying the SVG XML on-the-fly. - # To run this one, do `gem install game_icons` and uncomment the following - # - # require 'game_icons' - # svg data: GameIcons.get('angler-fish').recolor(fg: '#ccc', bg: '#333').string, - # x: 150, y: 600, width: 75, height: 75 - # - # More examples at https://github.com/andymeneely/game_icons - # (or `gem install game_icons`) to get & manipulate art from game-icons.net - # Nokogiri (already included in Squib) is also great for XML manipulation. - - # WARNING! If you choose to use the SVG ID, the x-y coordinates are still - # relative to the SVG page. See this example in an SVG editor - svg file: 'offset.svg', id: 'thing', x: 0, y: 0, width: 600, height: 600 - - # Over 15 different blending operators are supported. - # See http://cairographics.org/operators - # Alpha transparency too - png file: 'ball.png', x: 50, y: 700 - png file: 'grit.png', x: 70, y: 750, blend: :color_burn, alpha: 0.75 - - # Images can be rotated around their upper-left corner - png file: 'shiny-purse.png', x: 300, y: 700, angle: 0.0 # default (no rotate) - png file: 'shiny-purse.png', x: 300, y: 800, angle: Math::PI / 4 - svg file: 'spanner.svg', x: 300, y: 900, angle: Math::PI / 2 - 0.1 - - # Images can also be used as masks instead of being directly painted. - # This is particularly useful for switching directly over to black-and-white for printing - # Or, if you want the same image to be used but with different colors/gradients - svg mask: '#00ff00', - file: 'glass-heart.svg', - x: 500, y: 600, width: 200, height: 200 - svg mask: '(0,0)(0,500) #ccc@0.0 #333@1.0', - file: 'glass-heart.svg', - x: 500, y: 800, width: 200, height: 200 - - # Masks are based on the alpha channel, so this is just a magenta square - png mask: :magenta, file: 'shiny-purse.png', - x: 650, y: 950 - - # Note that this method does nothing, even though it would normally fill up - # the card. force_id: true looks to the id field to be non-empty to render. - # This is useful if you have multiple different icons in one SVG file, - # but sometimes want to use none. - # e.g. id: [:attack, :defend, nil] - svg file: 'spanner.svg', width: :deck, height: :deck, - force_id: true, id: '' # <-- the important part - - save prefix: 'load_images_', format: :png -end +require 'squib' + +Squib::Deck.new(width: 825, height: 1125, cards: 1, config: 'load_images_config.yml') do + background color: '#0b7c8e' + rect x: 38, y: 38, width: 750, height: 1050, x_radius: 38, y_radius: 38 + + png file: 'shiny-purse.png', x: 620, y: 75 # no scaling is done by default + svg file: 'spanner.svg', x: 620, y: 218 + + # Can be scaled if width and height are set + svg file: 'spanner.svg', x: 50, y: 50, width: 250, height: 250 + png file: 'shiny-purse.png', x: 305, y: 50, width: 250, height: 250 + #...but PNGs will warn if it's an upscale, unless you disable them in config.yml + + # Can be scaled using just width or height, if one of them is set to :scale + svg file: 'spanner.svg', x: 200, y: 350, width: 35, height: :scale + svg file: 'spanner.svg', x: 200, y: 390, width: :scale, height: 35 + png file: 'shiny-purse.png', x: 240, y: 350, width: 35, height: :scale + png file: 'shiny-purse.png', x: 240, y: 390, width: :scale, height: 35 + + # You can also crop the loaded images, so you can work from a sprite sheet + png file: 'sprites.png', x: 300, y: 350 # entire sprite sheet + png file: 'sprites.png', x: 300, y: 425, # just the robot golem image + crop_x: 0, crop_y: 0, crop_corner_radius: 10, + crop_width: 64, crop_height: 64 + png file: 'sprites.png', x: 400, y: 425, # just the drakkar ship image + crop_x: 64, crop_y: 0, crop_corner_x_radius: 25, crop_corner_y_radius: 25, + crop_width: 64, crop_height: 64 + png file: 'sprites.png', x: 500, y: 415, # 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 + + # Cropping also works on SVGs too + svg file: 'spanner.svg', x: 300, y: 500, width: 64, height: 64, + crop_x: 32, crop_y: 32, crop_width: 32, crop_height:32 + + # We can flip our images too + png file: 'sprites.png', x: 300, y: 535, flip_vertical: true, flip_horizontal: true + svg file: 'spanner.svg', x: 300, y: 615, width: 64, height: 64, + flip_vertical: true, flip_horizontal: true + + # We can also limit our rendering to a single object, if the SVG ID is set + svg file: 'spanner.svg', id: '#backdrop', x: 50, y: 350, width: 75, height: 75 + # Squib prepends a #-sign if one is not specified + svg file: 'spanner.svg', id: 'backdrop', x: 50, y: 450, width: 125, height: 125 + + # We can also load SVGs as a string of XML + svg data: File.read('spanner.svg'), x: 50, y: 600, width: 75, height: 75 + + # The svg data field works nicely with modifying the SVG XML on-the-fly. + # To run this one, do `gem install game_icons` and uncomment the following + # + # require 'game_icons' + # svg data: GameIcons.get('angler-fish').recolor(fg: '#ccc', bg: '#333').string, + # x: 150, y: 600, width: 75, height: 75 + # + # More examples at https://github.com/andymeneely/game_icons + # (or `gem install game_icons`) to get & manipulate art from game-icons.net + # Nokogiri (already included in Squib) is also great for XML manipulation. + + # WARNING! If you choose to use the SVG ID, the x-y coordinates are still + # relative to the SVG page. See this example in an SVG editor + svg file: 'offset.svg', id: 'thing', x: 0, y: 0, width: 600, height: 600 + + # Over 15 different blending operators are supported. + # See http://cairographics.org/operators + # Alpha transparency too + png file: 'ball.png', x: 50, y: 700 + png file: 'grit.png', x: 70, y: 750, blend: :color_burn, alpha: 0.75 + + # Images can be rotated around their upper-left corner + png file: 'shiny-purse.png', x: 300, y: 700, angle: 0.0 # default (no rotate) + png file: 'shiny-purse.png', x: 300, y: 800, angle: Math::PI / 4 + svg file: 'spanner.svg', x: 300, y: 900, angle: Math::PI / 2 - 0.1 + + # Images can also be used as masks instead of being directly painted. + # This is particularly useful for switching directly over to black-and-white for printing + # Or, if you want the same image to be used but with different colors/gradients + svg mask: '#00ff00', + file: 'glass-heart.svg', + x: 500, y: 600, width: 200, height: 200 + svg mask: '(0,0)(0,500) #ccc@0.0 #333@1.0', + file: 'glass-heart.svg', + x: 500, y: 800, width: 200, height: 200 + + # Masks are based on the alpha channel, so this is just a magenta square + png mask: :magenta, file: 'shiny-purse.png', + x: 650, y: 950 + + # Note that this method does nothing, even though it would normally fill up + # the card. force_id: true looks to the id field to be non-empty to render. + # This is useful if you have multiple different icons in one SVG file, + # but sometimes want to use none. + # e.g. id: [:attack, :defend, nil] + svg file: 'spanner.svg', width: :deck, height: :deck, + force_id: true, id: '' # <-- the important part + + save prefix: 'load_images_', format: :png +end