From c8e1daf79ddf04f022c10932bc3d53d426e5996a Mon Sep 17 00:00:00 2001 From: Andy Meneely Date: Thu, 8 Sep 2016 23:19:35 -0400 Subject: [PATCH] docs: provide previews of built-in layouts Closes #163 --- CHANGELOG.md | 3 + docs/_static/css/squibdocs.css | 5 + docs/layouts.rst | 55 +++++++++++ samples/layouts/_output/.gitignore | 2 + .../builtin_layouts.rb} | 33 ++++++- samples/{ => layouts}/custom-layout.yml | 0 samples/{ => layouts}/custom-layout2.yml | 0 .../expected_layouts_builtin_economy_00.png | Bin 0 -> 16993 bytes .../expected_layouts_builtin_fantasy_00.png | Bin 0 -> 17470 bytes .../expected_layouts_builtin_hand_00.png | Bin 0 -> 17007 bytes ...pected_layouts_builtin_playing_card_00.png | Bin 0 -> 11018 bytes .../expected_layouts_builtin_tuck_box_00.png | Bin 0 -> 22194 bytes samples/{ => layouts}/layouts.rb | 1 - samples/layouts/shiny-purse.png | Bin 0 -> 3430 bytes samples/layouts/spanner.svg | 91 ++++++++++++++++++ 15 files changed, 184 insertions(+), 6 deletions(-) create mode 100644 samples/layouts/_output/.gitignore rename samples/{layouts_builtin.rb => layouts/builtin_layouts.rb} (58%) rename samples/{ => layouts}/custom-layout.yml (100%) rename samples/{ => layouts}/custom-layout2.yml (100%) create mode 100644 samples/layouts/expected_layouts_builtin_economy_00.png create mode 100644 samples/layouts/expected_layouts_builtin_fantasy_00.png create mode 100644 samples/layouts/expected_layouts_builtin_hand_00.png create mode 100644 samples/layouts/expected_layouts_builtin_playing_card_00.png create mode 100644 samples/layouts/expected_layouts_builtin_tuck_box_00.png rename samples/{ => layouts}/layouts.rb (98%) create mode 100644 samples/layouts/shiny-purse.png create mode 100644 samples/layouts/spanner.svg diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d96b89..b76a0a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ Squib follows [semantic versioning](http://semver.org). Features: * Unit conversion supports mm (#161) +Docs: +* Provide previews of each built-in template on the docs (#163) + Bugs: * Fresh installs of Squib were broken due to two hidden dependencies, gio2 and gobject-introspection. (#172) * Embedding icons in text show unicode placeholders on some OSs. This is a workaround until we get a better solution for embedding icons. See #170, #171, and #176. For that matter, see #103, #153, and #30 if you really want the whole story. diff --git a/docs/_static/css/squibdocs.css b/docs/_static/css/squibdocs.css index 0a92db5..e393fdc 100644 --- a/docs/_static/css/squibdocs.css +++ b/docs/_static/css/squibdocs.css @@ -16,3 +16,8 @@ code.code_img{ code.code_img_small{ width: 33%; } + +.figure{ + border: 1pt solid black; + box-shadow: 5px 5px 8px #333; +} diff --git a/docs/layouts.rst b/docs/layouts.rst index c93c51c..8062c93 100644 --- a/docs/layouts.rst +++ b/docs/layouts.rst @@ -227,6 +227,61 @@ If your layout file is not found in the current directory, Squib will search for Contributions in this area are particularly welcome!! +The following depictions of the layouts are generated with `this script `_ + +fantasy.yml +~~~~~~~~~~~ + +.. raw:: html + + + +https://github.com/andymeneely/squib/tree/master/lib/squib/layouts/fantasy.yml + +economy.yml +~~~~~~~~~~~ + +.. raw:: html + + + +https://github.com/andymeneely/squib/tree/master/lib/squib/layouts/economy.yml + +tuck_box.yml +~~~~~~~~~~~ + +Based on TheGameCrafter's template. + +.. raw:: html + + + +https://github.com/andymeneely/squib/tree/master/lib/squib/layouts/tuck_box.yml + + +hand.yml +~~~~~~~~~~~ + +.. raw:: html + + + +https://github.com/andymeneely/squib/tree/master/lib/squib/layouts/hand.yml + +playing_card.yml +~~~~~~~~~~~ + +.. raw:: html + + + +https://github.com/andymeneely/squib/tree/master/lib/squib/layouts/playing_card.yml + See Layouts in Action --------------------- diff --git a/samples/layouts/_output/.gitignore b/samples/layouts/_output/.gitignore new file mode 100644 index 0000000..a5fd22c --- /dev/null +++ b/samples/layouts/_output/.gitignore @@ -0,0 +1,2 @@ +# Ignore outputs in directory, but keep the directory to suppress warning +*.png diff --git a/samples/layouts_builtin.rb b/samples/layouts/builtin_layouts.rb similarity index 58% rename from samples/layouts_builtin.rb rename to samples/layouts/builtin_layouts.rb index 92b6bbe..cc49a61 100644 --- a/samples/layouts_builtin.rb +++ b/samples/layouts/builtin_layouts.rb @@ -42,10 +42,33 @@ Squib::Deck.new(layout: 'economy.yml') do save_png prefix: 'layouts_builtin_economy_' end -# Stitch together a deck of all the above examples -Squib::Deck.new(cards: 2) do - Dir.glob('_output/layouts_builtin_*.png').each.with_index do |file, i| - png file: file, range: i +Squib::Deck.new(layout: 'hand.yml') do + background color: 'white' + %w(title bonus1 bonus2 bonus3 bonus4 bonus5 description + snark art).each do |icon| + text str: icon.capitalize, layout: icon, + hint: :red, valign: 'middle', align: 'center' end - save_sheet prefix: 'layouts_builtinsheet_' + save_png prefix: 'layouts_builtin_hand_' +end + +Squib::Deck.new(layout: 'playing-card.yml') do + background color: 'white' + text str: "A\u2660", layout: :bonus_ul, font: 'Sans bold 100', hint: :red + text str: "A\u2660", layout: :bonus_lr, font: 'Sans bold 100', hint: :red + text str: 'artwork here', layout: :art, hint: :red + save_png prefix: 'layouts_builtin_playing_card_' +end + +Squib::Deck.new(layout: 'tuck_box.yml', width: 2325, height: 1950) do + background color: 'white' + rect layout: :top_rect + rect layout: :bottom_rect + rect layout: :right_rect + rect layout: :left_rect + rect layout: :back_rect + rect layout: :front_rect + curve layout: :front_curve + + save_png prefix: 'layouts_builtin_tuck_box_' end diff --git a/samples/custom-layout.yml b/samples/layouts/custom-layout.yml similarity index 100% rename from samples/custom-layout.yml rename to samples/layouts/custom-layout.yml diff --git a/samples/custom-layout2.yml b/samples/layouts/custom-layout2.yml similarity index 100% rename from samples/custom-layout2.yml rename to samples/layouts/custom-layout2.yml diff --git a/samples/layouts/expected_layouts_builtin_economy_00.png b/samples/layouts/expected_layouts_builtin_economy_00.png new file mode 100644 index 0000000000000000000000000000000000000000..4413f190940f31c4e483a9013f58b6b046f08ed4 GIT binary patch literal 16993 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 literal 0 HcmV?d00001 diff --git a/samples/layouts/expected_layouts_builtin_fantasy_00.png b/samples/layouts/expected_layouts_builtin_fantasy_00.png new file mode 100644 index 0000000000000000000000000000000000000000..62ffe52a7193feed6591e7dc8c130ddca601c217 GIT binary patch literal 17470 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 literal 0 HcmV?d00001 diff --git a/samples/layouts/expected_layouts_builtin_hand_00.png b/samples/layouts/expected_layouts_builtin_hand_00.png new file mode 100644 index 0000000000000000000000000000000000000000..6bcd38b13057f68c759c0ad273a7d9290fab286b GIT binary patch literal 17007 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 aP^AW|T1Okgw_0-Ta$vvBzJk3TKm8XSYOr_! literal 0 HcmV?d00001 diff --git a/samples/layouts.rb b/samples/layouts/layouts.rb similarity index 98% rename from samples/layouts.rb rename to samples/layouts/layouts.rb index bd27c34..d8f073c 100644 --- a/samples/layouts.rb +++ b/samples/layouts/layouts.rb @@ -57,7 +57,6 @@ Squib::Deck.new(layout: 'hand.yml') do text str: icon.capitalize, layout: icon, hint: :red, valign: 'middle', align: 'center' end - png file: 'pokercard.png', alpha: 0.5 save_png prefix: 'layout_builtin_hand_' end diff --git a/samples/layouts/shiny-purse.png b/samples/layouts/shiny-purse.png new file mode 100644 index 0000000000000000000000000000000000000000..477ef93263039167c288100ed46d4c6bfb9bd500 GIT binary patch literal 3430 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 + + + + + image/svg+xml + + + + + + + + + + + + + + + +