diff --git a/CHANGELOG.md b/CHANGELOG.md index 8bd6de1..6e34b8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,16 +4,18 @@ Squib follows [semantic versioning](http://semver.org). ## v0.18.0 / Unreleased Features: -* Missing images to `svg` and `png` can be replaced by a `placeholder` (#339) -* New config option: `img_missing`. When an image is missing, warn or error to the console +* Placeholders! Missing images to `svg` and `png` can be replaced by a `placeholder` (#339) +* New config option: `img_missing`. When an image is missing, warn or error to the console (#339) +* `save_sheet` learned how to `rotate` individual images! (#301) Compatibility: -* Because of `, the new default behavior is to warn instead of errors on a missing file +* Because of the features above, the new default behavior is to warn instead of errors on a missing file ## v0.17.1 / 2021-09-07 Bugs: * Fix frozen string error on `Squib.xlsx` import when stripping newlines is enabled +* `save_sheet` works with `rtl` and `trim` altogether properly now. ## v0.17.1 / 2021-08-11 diff --git a/docs/dsl/save_sheet.rst b/docs/dsl/save_sheet.rst index 727c864..c515956 100644 --- a/docs/dsl/save_sheet.rst +++ b/docs/dsl/save_sheet.rst @@ -41,6 +41,11 @@ suffix the suffix of all the filenames saved, just before the `.png` extension. +rotate + default: ``false`` + + If ``true``, the saved cards will be rotated 90 degrees clockwise. Or, rotate by the number of radians. Intended to rendering landscape instead of portrait. Possible values: ``true``, ``false``, ``:clockwise``, ``:counterclockwise`` + dir default: ``'_output'`` diff --git a/lib/squib/dsl/save_sheet.rb b/lib/squib/dsl/save_sheet.rb index f3fba95..0785316 100644 --- a/lib/squib/dsl/save_sheet.rb +++ b/lib/squib/dsl/save_sheet.rb @@ -30,7 +30,7 @@ module Squib range sprue columns rows rtl dir prefix count_format suffix - margin gap trim trim_radius + margin gap trim trim_radius rotate ) end diff --git a/lib/squib/graphics/save_doc.rb b/lib/squib/graphics/save_doc.rb index e0b27eb..4c6c2fa 100644 --- a/lib/squib/graphics/save_doc.rb +++ b/lib/squib/graphics/save_doc.rb @@ -4,13 +4,12 @@ module Squib # :nodoc: # @api private def render_sheet(range, batch, sheet) - sheet_width = (sheet.columns * (@width + 2 * sheet.gap - 2 * sheet.trim)) + (2 * sheet.margin) - sheet_height = (sheet.rows * (@height + 2 * sheet.gap - 2 * sheet.trim)) + (2 * sheet.margin) + w,h,sheet_width,sheet_height = compute_dimensions(sheet, batch) cc = Cairo::Context.new(Cairo::ImageSurface.new(sheet_width, sheet_height)) num_this_sheet = 0 sheet_num = 0 y = sheet.margin - x = sheet.rtl ? (sheet_width - sheet.margin - sheet.gap - @width) : sheet.margin + x = sheet.rtl ? rtl_start_x(sheet_width, sheet, w) : sheet.margin @progress_bar.start("Saving PNG sheet to #{batch.summary}", @cards.size + 1) do |bar| range.each do |i| if num_this_sheet >= (sheet.columns * sheet.rows) # new sheet @@ -20,36 +19,53 @@ module Squib num_this_sheet = 0 sheet_num += 1 y = sheet.margin - x = sheet.rtl ? (sheet_width - sheet.margin - sheet.gap - @width) : sheet.margin + x = sheet.rtl ? rtl_start_x(sheet_width, sheet, w) : sheet.margin cc = Cairo::Context.new(Cairo::ImageSurface.new(sheet_width, sheet_height)) end - surface = trim(@cards[i].cairo_surface, sheet.trim, @width, @height) + surface = preprocess(@cards[i].cairo_surface, + sheet.trim, w, h, + batch.rotate[i], batch.angle[i]) cc.set_source(surface, x, y) cc.paint num_this_sheet += 1 - x += (surface.width + sheet.gap) * (sheet.rtl ? -1 : 1) + x += (w + sheet.gap - 2 * sheet.trim) * (sheet.rtl ? -1 : 1) if num_this_sheet % sheet.columns == 0 # new row - x = sheet.rtl ? (sheet_width - sheet.margin - sheet.gap - @width) : sheet.margin + x = sheet.rtl ? rtl_start_x(sheet_width, sheet, w) : sheet.margin y += surface.height + sheet.gap end + bar.increment end cc.target.write_to_png(batch.full_filename(sheet_num)) end end - # Return a new Cairo::ImageSurface that is trimmed from the original - # - # @param surface The surface to trim - # @param trim The number of pixels around the edge to trim - # @param width The width of the surface prior to the trim - # @param height The height of the surface prior to the trim + def compute_dimensions(sheet, batch) + w,h = batch.rotate ? [@height,@width] : [@width,@height] + sheet_width = (sheet.columns * (w + 2 * sheet.gap - 2 * sheet.trim)) + (2 * sheet.margin) + sheet_height = (sheet.rows * (h + 2 * sheet.gap - 2 * sheet.trim)) + (2 * sheet.margin) + return [w, h, sheet_width, sheet_height] + end + + def rtl_start_x(sheet_width, sheet, w) + return sheet_width - sheet.margin - sheet.gap - w + 2 * sheet.trim + end + + # Return a new Cairo::ImageSurface that is trimmed and rotated + # from the original # :nodoc: # @api private - def trim(surface, trim, width, height) - if trim > 0 - tmp = Cairo::ImageSurface.new(width - 2 * trim, height - 2 * trim) + def preprocess(surface, trim, w, h, rotate, angle) + trimmed_w = w - 2 * trim + trimmed_h = h - 2 * trim + if trim > 0 || rotate + tmp = Cairo::ImageSurface.new(trimmed_w, trimmed_h) cc = Cairo::Context.new(tmp) + if rotate + cc.translate trimmed_w * 0.5, trimmed_h * 0.5 + cc.rotate angle + cc.translate trimmed_h * -0.5, trimmed_w * -0.5 + end cc.set_source(surface, -1 * trim, -1 * trim) cc.paint surface = tmp diff --git a/samples/saves/_saves.rb b/samples/saves/_saves.rb index 28bc521..6e4a2e3 100644 --- a/samples/saves/_saves.rb +++ b/samples/saves/_saves.rb @@ -1,4 +1,5 @@ -require 'squib' +# require 'squib' +require_relative '../../lib/squib' # This sample demonstrates how to use the various save methods @@ -60,3 +61,14 @@ Squib::Deck.new(width: 100, height: 100, cards: 3) do # Buggy behavior was to revert to 1 row and not respect the rows arg. save_sheet prefix: 'save_sheet_bug332_', rows: 2, columns: 4 end + +# Allow rotating +Squib::Deck.new(width: 100, height: 50, cards: 8) do + background color: :white + rect x: 10, y: 10, width: 80, height: 30 + rect x: 5, y: 5, width: 90, height: 40, stroke_width: 5, stroke_color: :blue + text y: 2, str: 0..7, font: 'Open Sans Bold 8', align: :center, width: 100 + save_sheet prefix: 'save_sheet_rotated_', rows: 2, columns: 3, rotate: true + save_sheet prefix: 'save_sheet_rotated_trimmed_', rows: 2, columns: 3, rotate: true, trim: 5 + save_sheet prefix: 'save_sheet_rotated_trimmed_rtl_', rows: 2, columns: 3, rotate: true, trim: 5, rtl: true +end diff --git a/samples/saves/save_sheet_rotated_00_expected.png b/samples/saves/save_sheet_rotated_00_expected.png new file mode 100644 index 0000000..60274eb Binary files /dev/null and b/samples/saves/save_sheet_rotated_00_expected.png differ diff --git a/samples/saves/save_sheet_rotated_01_expected.png b/samples/saves/save_sheet_rotated_01_expected.png new file mode 100644 index 0000000..d263fb5 Binary files /dev/null and b/samples/saves/save_sheet_rotated_01_expected.png differ diff --git a/samples/saves/save_sheet_rotated_trimmed_00_expected.png b/samples/saves/save_sheet_rotated_trimmed_00_expected.png new file mode 100644 index 0000000..184e764 Binary files /dev/null and b/samples/saves/save_sheet_rotated_trimmed_00_expected.png differ diff --git a/samples/saves/save_sheet_rotated_trimmed_01_expected.png b/samples/saves/save_sheet_rotated_trimmed_01_expected.png new file mode 100644 index 0000000..68d7385 Binary files /dev/null and b/samples/saves/save_sheet_rotated_trimmed_01_expected.png differ diff --git a/samples/saves/save_sheet_rotated_trimmed_rtl_00_expected.png b/samples/saves/save_sheet_rotated_trimmed_rtl_00_expected.png new file mode 100644 index 0000000..93639fc Binary files /dev/null and b/samples/saves/save_sheet_rotated_trimmed_rtl_00_expected.png differ diff --git a/samples/saves/save_sheet_rotated_trimmed_rtl_01_expected.png b/samples/saves/save_sheet_rotated_trimmed_rtl_01_expected.png new file mode 100644 index 0000000..0756ab5 Binary files /dev/null and b/samples/saves/save_sheet_rotated_trimmed_rtl_01_expected.png differ diff --git a/spec/data/samples/autoscale_font/_autoscale_font.rb.txt b/spec/data/samples/autoscale_font/_autoscale_font.rb.txt index bcac765..de3d6ad 100644 --- a/spec/data/samples/autoscale_font/_autoscale_font.rb.txt +++ b/spec/data/samples/autoscale_font/_autoscale_font.rb.txt @@ -135,9 +135,9 @@ pango: ellipsized?([]) cairo: restore([]) cairo: set_source([MockDouble, 0, 0]) cairo: paint([]) -cairo: set_source([MockDouble, 100, 0]) +cairo: set_source([MockDouble, 75, 0]) cairo: paint([]) -cairo: set_source([MockDouble, 200, 0]) +cairo: set_source([MockDouble, 150, 0]) cairo: paint([]) surface: write_to_png(["_output/autoscale_w_data_00.png"]) surface: finish([]) @@ -961,9 +961,9 @@ pango: ellipsized?([]) cairo: restore([]) cairo: set_source([MockDouble, 0, 0]) cairo: paint([]) -cairo: set_source([MockDouble, 100, 0]) +cairo: set_source([MockDouble, 75, 0]) cairo: paint([]) -cairo: set_source([MockDouble, 200, 0]) +cairo: set_source([MockDouble, 150, 0]) cairo: paint([]) surface: write_to_png(["_output/autoscale_w_ellipsize_00.png"]) surface: finish([]) @@ -1106,9 +1106,9 @@ pango: ellipsized?([]) cairo: restore([]) cairo: set_source([MockDouble, 0, 0]) cairo: paint([]) -cairo: set_source([MockDouble, 100, 0]) +cairo: set_source([MockDouble, 75, 0]) cairo: paint([]) -cairo: set_source([MockDouble, 200, 0]) +cairo: set_source([MockDouble, 150, 0]) cairo: paint([]) surface: write_to_png(["_output/autoscale_w_range_00.png"]) surface: finish([]) diff --git a/spec/data/samples/data/_csv.rb.txt b/spec/data/samples/data/_csv.rb.txt index a30b74f..cd867c5 100644 --- a/spec/data/samples/data/_csv.rb.txt +++ b/spec/data/samples/data/_csv.rb.txt @@ -244,11 +244,11 @@ pango: ellipsized?([]) cairo: restore([]) cairo: set_source([MockDouble, 0, 0]) cairo: paint([]) -cairo: set_source([MockDouble, 100, 0]) +cairo: set_source([MockDouble, 1125, 0]) cairo: paint([]) -cairo: set_source([MockDouble, 200, 0]) +cairo: set_source([MockDouble, 2250, 0]) cairo: paint([]) -cairo: set_source([MockDouble, 300, 0]) +cairo: set_source([MockDouble, 3375, 0]) cairo: paint([]) surface: write_to_png(["_output/sample_csv_qty_00.png"]) surface: finish([]) diff --git a/spec/data/samples/data/_excel.rb.txt b/spec/data/samples/data/_excel.rb.txt index bf81700..282299b 100644 --- a/spec/data/samples/data/_excel.rb.txt +++ b/spec/data/samples/data/_excel.rb.txt @@ -342,11 +342,11 @@ pango: ellipsized?([]) cairo: restore([]) cairo: set_source([MockDouble, 0, 0]) cairo: paint([]) -cairo: set_source([MockDouble, 100, 0]) +cairo: set_source([MockDouble, 1125, 0]) cairo: paint([]) -cairo: set_source([MockDouble, 200, 0]) +cairo: set_source([MockDouble, 2250, 0]) cairo: paint([]) -cairo: set_source([MockDouble, 300, 0]) +cairo: set_source([MockDouble, 3375, 0]) cairo: paint([]) surface: write_to_png(["_output/sample_xlsx_qty_00.png"]) surface: finish([]) @@ -757,15 +757,15 @@ pango: ellipsized?([]) cairo: restore([]) cairo: set_source([MockDouble, 0, 0]) cairo: paint([]) -cairo: set_source([MockDouble, 100, 0]) +cairo: set_source([MockDouble, 1125, 0]) cairo: paint([]) -cairo: set_source([MockDouble, 200, 0]) +cairo: set_source([MockDouble, 2250, 0]) cairo: paint([]) cairo: set_source([MockDouble, 0, 101]) cairo: paint([]) -cairo: set_source([MockDouble, 100, 101]) +cairo: set_source([MockDouble, 1125, 101]) cairo: paint([]) -cairo: set_source([MockDouble, 200, 101]) +cairo: set_source([MockDouble, 2250, 101]) cairo: paint([]) surface: write_to_png(["_output/sample_excel_resources_00.png"]) surface: finish([]) diff --git a/spec/data/samples/ranges/_ranges.rb.txt b/spec/data/samples/ranges/_ranges.rb.txt index b9cd778..c59e427 100644 --- a/spec/data/samples/ranges/_ranges.rb.txt +++ b/spec/data/samples/ranges/_ranges.rb.txt @@ -531,9 +531,9 @@ cairo: stroke([]) cairo: restore([]) cairo: set_source([MockDouble, 0, 0]) cairo: paint([]) -cairo: set_source([MockDouble, 100, 0]) +cairo: set_source([MockDouble, 1125, 0]) cairo: paint([]) -cairo: set_source([MockDouble, 200, 0]) +cairo: set_source([MockDouble, 2250, 0]) cairo: paint([]) surface: write_to_png(["_output/ranges_00.png"]) surface: finish([]) diff --git a/spec/data/samples/saves/_saves.rb.txt b/spec/data/samples/saves/_saves.rb.txt index ef0c1b8..7aa50a0 100644 --- a/spec/data/samples/saves/_saves.rb.txt +++ b/spec/data/samples/saves/_saves.rb.txt @@ -1633,7 +1633,7 @@ cairo: set_source([MockDouble, 75, 75]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 180, 75]) +cairo: set_source([MockDouble, 1131, 75]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) @@ -1641,7 +1641,7 @@ cairo: set_source([MockDouble, 75, 181]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 180, 181]) +cairo: set_source([MockDouble, 1131, 181]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) @@ -1649,7 +1649,7 @@ cairo: set_source([MockDouble, 75, 287]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 180, 287]) +cairo: set_source([MockDouble, 1131, 287]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) @@ -1657,7 +1657,7 @@ cairo: set_source([MockDouble, 75, 393]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 180, 393]) +cairo: set_source([MockDouble, 1131, 393]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) @@ -1665,7 +1665,7 @@ cairo: set_source([MockDouble, 75, 499]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 180, 499]) +cairo: set_source([MockDouble, 1131, 499]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) @@ -1673,7 +1673,7 @@ cairo: set_source([MockDouble, 75, 605]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 180, 605]) +cairo: set_source([MockDouble, 1131, 605]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) @@ -1681,7 +1681,7 @@ cairo: set_source([MockDouble, 75, 711]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 180, 711]) +cairo: set_source([MockDouble, 1131, 711]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) @@ -1689,7 +1689,7 @@ cairo: set_source([MockDouble, 75, 817]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 180, 817]) +cairo: set_source([MockDouble, 1131, 817]) cairo: paint([]) surface: write_to_png(["_output/save_single_sheet_00.png"]) cairo: set_source([MockDouble, -37, -37]) @@ -1698,15 +1698,15 @@ cairo: set_source([MockDouble, 75, 75]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 180, 75]) +cairo: set_source([MockDouble, 1131, 75]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 285, 75]) +cairo: set_source([MockDouble, 2187, 75]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 390, 75]) +cairo: set_source([MockDouble, 3243, 75]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) @@ -1714,15 +1714,15 @@ cairo: set_source([MockDouble, 75, 181]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 180, 181]) +cairo: set_source([MockDouble, 1131, 181]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 285, 181]) +cairo: set_source([MockDouble, 2187, 181]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 390, 181]) +cairo: set_source([MockDouble, 3243, 181]) cairo: paint([]) surface: write_to_png(["_output/save_sheet_00.png"]) cairo: set_source([MockDouble, -37, -37]) @@ -1731,15 +1731,15 @@ cairo: set_source([MockDouble, 75, 75]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 180, 75]) +cairo: set_source([MockDouble, 1131, 75]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 285, 75]) +cairo: set_source([MockDouble, 2187, 75]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 390, 75]) +cairo: set_source([MockDouble, 3243, 75]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) @@ -1747,15 +1747,15 @@ cairo: set_source([MockDouble, 75, 181]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 180, 181]) +cairo: set_source([MockDouble, 1131, 181]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 285, 181]) +cairo: set_source([MockDouble, 2187, 181]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 390, 181]) +cairo: set_source([MockDouble, 3243, 181]) cairo: paint([]) surface: write_to_png(["_output/save_sheet_01.png"]) cairo: set_source([MockDouble, -37, -37]) @@ -1764,7 +1764,7 @@ cairo: set_source([MockDouble, 75, 75]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 180, 75]) +cairo: set_source([MockDouble, 1131, 75]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) @@ -1772,7 +1772,7 @@ cairo: set_source([MockDouble, 75, 181]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 180, 181]) +cairo: set_source([MockDouble, 1131, 181]) cairo: paint([]) surface: write_to_png(["_output/save_sheet_range_00.png"]) cairo: set_source([MockDouble, -37, -37]) @@ -1781,16 +1781,16 @@ cairo: set_source([MockDouble, 75, 75]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 180, 75]) +cairo: set_source([MockDouble, 1131, 75]) cairo: paint([]) surface: write_to_png(["_output/save_sheet_range_01.png"]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 767, 75]) +cairo: set_source([MockDouble, 1141, 75]) cairo: paint([]) cairo: set_source([MockDouble, -37, -37]) cairo: paint([]) -cairo: set_source([MockDouble, 662, 75]) +cairo: set_source([MockDouble, 85, 75]) cairo: paint([]) surface: write_to_png(["_output/save_sheet_rtl_00_with_suffix.png"]) surface: finish([]) @@ -1891,3 +1891,625 @@ surface: write_to_png(["_output/save_sheet_bug332_00.png"]) surface: finish([]) surface: finish([]) surface: finish([]) +cairo: antialias=(["subpixel"]) +cairo: antialias=(["subpixel"]) +cairo: antialias=(["subpixel"]) +cairo: antialias=(["subpixel"]) +cairo: antialias=(["subpixel"]) +cairo: antialias=(["subpixel"]) +cairo: antialias=(["subpixel"]) +cairo: antialias=(["subpixel"]) +cairo: save([]) +cairo: new_path([]) +cairo: set_source_color(["white"]) +cairo: paint([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: set_source_color(["white"]) +cairo: paint([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: set_source_color(["white"]) +cairo: paint([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: set_source_color(["white"]) +cairo: paint([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: set_source_color(["white"]) +cairo: paint([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: set_source_color(["white"]) +cairo: paint([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: set_source_color(["white"]) +cairo: paint([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: set_source_color(["white"]) +cairo: paint([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: translate([10, 10]) +cairo: rotate([0]) +cairo: translate([-10, -10]) +cairo: rounded_rectangle([10, 10, 80, 30, 0, 0]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) +cairo: set_source_color(["black"]) +cairo: set_line_width([2.0]) +cairo: set_line_join([0]) +cairo: set_line_cap([0]) +cairo: set_dash([[]]) +cairo: stroke([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: translate([10, 10]) +cairo: rotate([0]) +cairo: translate([-10, -10]) +cairo: rounded_rectangle([10, 10, 80, 30, 0, 0]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) +cairo: set_source_color(["black"]) +cairo: set_line_width([2.0]) +cairo: set_line_join([0]) +cairo: set_line_cap([0]) +cairo: set_dash([[]]) +cairo: stroke([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: translate([10, 10]) +cairo: rotate([0]) +cairo: translate([-10, -10]) +cairo: rounded_rectangle([10, 10, 80, 30, 0, 0]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) +cairo: set_source_color(["black"]) +cairo: set_line_width([2.0]) +cairo: set_line_join([0]) +cairo: set_line_cap([0]) +cairo: set_dash([[]]) +cairo: stroke([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: translate([10, 10]) +cairo: rotate([0]) +cairo: translate([-10, -10]) +cairo: rounded_rectangle([10, 10, 80, 30, 0, 0]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) +cairo: set_source_color(["black"]) +cairo: set_line_width([2.0]) +cairo: set_line_join([0]) +cairo: set_line_cap([0]) +cairo: set_dash([[]]) +cairo: stroke([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: translate([10, 10]) +cairo: rotate([0]) +cairo: translate([-10, -10]) +cairo: rounded_rectangle([10, 10, 80, 30, 0, 0]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) +cairo: set_source_color(["black"]) +cairo: set_line_width([2.0]) +cairo: set_line_join([0]) +cairo: set_line_cap([0]) +cairo: set_dash([[]]) +cairo: stroke([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: translate([10, 10]) +cairo: rotate([0]) +cairo: translate([-10, -10]) +cairo: rounded_rectangle([10, 10, 80, 30, 0, 0]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) +cairo: set_source_color(["black"]) +cairo: set_line_width([2.0]) +cairo: set_line_join([0]) +cairo: set_line_cap([0]) +cairo: set_dash([[]]) +cairo: stroke([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: translate([10, 10]) +cairo: rotate([0]) +cairo: translate([-10, -10]) +cairo: rounded_rectangle([10, 10, 80, 30, 0, 0]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) +cairo: set_source_color(["black"]) +cairo: set_line_width([2.0]) +cairo: set_line_join([0]) +cairo: set_line_cap([0]) +cairo: set_dash([[]]) +cairo: stroke([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: translate([10, 10]) +cairo: rotate([0]) +cairo: translate([-10, -10]) +cairo: rounded_rectangle([10, 10, 80, 30, 0, 0]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) +cairo: set_source_color(["black"]) +cairo: set_line_width([2.0]) +cairo: set_line_join([0]) +cairo: set_line_cap([0]) +cairo: set_dash([[]]) +cairo: stroke([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: translate([5, 5]) +cairo: rotate([0]) +cairo: translate([-5, -5]) +cairo: rounded_rectangle([5, 5, 90, 40, 0, 0]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) +cairo: set_source_color(["blue"]) +cairo: set_line_width([5]) +cairo: set_line_join([0]) +cairo: set_line_cap([0]) +cairo: set_dash([[]]) +cairo: stroke([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: translate([5, 5]) +cairo: rotate([0]) +cairo: translate([-5, -5]) +cairo: rounded_rectangle([5, 5, 90, 40, 0, 0]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) +cairo: set_source_color(["blue"]) +cairo: set_line_width([5]) +cairo: set_line_join([0]) +cairo: set_line_cap([0]) +cairo: set_dash([[]]) +cairo: stroke([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: translate([5, 5]) +cairo: rotate([0]) +cairo: translate([-5, -5]) +cairo: rounded_rectangle([5, 5, 90, 40, 0, 0]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) +cairo: set_source_color(["blue"]) +cairo: set_line_width([5]) +cairo: set_line_join([0]) +cairo: set_line_cap([0]) +cairo: set_dash([[]]) +cairo: stroke([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: translate([5, 5]) +cairo: rotate([0]) +cairo: translate([-5, -5]) +cairo: rounded_rectangle([5, 5, 90, 40, 0, 0]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) +cairo: set_source_color(["blue"]) +cairo: set_line_width([5]) +cairo: set_line_join([0]) +cairo: set_line_cap([0]) +cairo: set_dash([[]]) +cairo: stroke([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: translate([5, 5]) +cairo: rotate([0]) +cairo: translate([-5, -5]) +cairo: rounded_rectangle([5, 5, 90, 40, 0, 0]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) +cairo: set_source_color(["blue"]) +cairo: set_line_width([5]) +cairo: set_line_join([0]) +cairo: set_line_cap([0]) +cairo: set_dash([[]]) +cairo: stroke([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: translate([5, 5]) +cairo: rotate([0]) +cairo: translate([-5, -5]) +cairo: rounded_rectangle([5, 5, 90, 40, 0, 0]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) +cairo: set_source_color(["blue"]) +cairo: set_line_width([5]) +cairo: set_line_join([0]) +cairo: set_line_cap([0]) +cairo: set_dash([[]]) +cairo: stroke([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: translate([5, 5]) +cairo: rotate([0]) +cairo: translate([-5, -5]) +cairo: rounded_rectangle([5, 5, 90, 40, 0, 0]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) +cairo: set_source_color(["blue"]) +cairo: set_line_width([5]) +cairo: set_line_join([0]) +cairo: set_line_cap([0]) +cairo: set_dash([[]]) +cairo: stroke([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: translate([5, 5]) +cairo: rotate([0]) +cairo: translate([-5, -5]) +cairo: rounded_rectangle([5, 5, 90, 40, 0, 0]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) +cairo: set_source_color(["blue"]) +cairo: set_line_width([5]) +cairo: set_line_join([0]) +cairo: set_line_cap([0]) +cairo: set_dash([[]]) +cairo: stroke([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: set_source_color(["black"]) +cairo: translate([0, 2]) +cairo: rotate([0]) +cairo: move_to([0, 0]) +pango: font_description=([MockDouble]) +pango: text=(["0"]) +pango: width=([102400]) +pango: wrap=([#]) +pango: ellipsize=([#]) +pango: alignment=([#]) +pango: justify=([false]) +cairo: move_to([0, 0]) +cairo: move_to([0, 0]) +cairo: show_pango_layout([MockDouble]) +pango: ellipsized?([]) +pango: ellipsized?([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: set_source_color(["black"]) +cairo: translate([0, 2]) +cairo: rotate([0]) +cairo: move_to([0, 0]) +pango: font_description=([MockDouble]) +pango: text=(["1"]) +pango: width=([102400]) +pango: wrap=([#]) +pango: ellipsize=([#]) +pango: alignment=([#]) +pango: justify=([false]) +cairo: move_to([0, 0]) +cairo: move_to([0, 0]) +cairo: show_pango_layout([MockDouble]) +pango: ellipsized?([]) +pango: ellipsized?([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: set_source_color(["black"]) +cairo: translate([0, 2]) +cairo: rotate([0]) +cairo: move_to([0, 0]) +pango: font_description=([MockDouble]) +pango: text=(["2"]) +pango: width=([102400]) +pango: wrap=([#]) +pango: ellipsize=([#]) +pango: alignment=([#]) +pango: justify=([false]) +cairo: move_to([0, 0]) +cairo: move_to([0, 0]) +cairo: show_pango_layout([MockDouble]) +pango: ellipsized?([]) +pango: ellipsized?([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: set_source_color(["black"]) +cairo: translate([0, 2]) +cairo: rotate([0]) +cairo: move_to([0, 0]) +pango: font_description=([MockDouble]) +pango: text=(["3"]) +pango: width=([102400]) +pango: wrap=([#]) +pango: ellipsize=([#]) +pango: alignment=([#]) +pango: justify=([false]) +cairo: move_to([0, 0]) +cairo: move_to([0, 0]) +cairo: show_pango_layout([MockDouble]) +pango: ellipsized?([]) +pango: ellipsized?([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: set_source_color(["black"]) +cairo: translate([0, 2]) +cairo: rotate([0]) +cairo: move_to([0, 0]) +pango: font_description=([MockDouble]) +pango: text=(["4"]) +pango: width=([102400]) +pango: wrap=([#]) +pango: ellipsize=([#]) +pango: alignment=([#]) +pango: justify=([false]) +cairo: move_to([0, 0]) +cairo: move_to([0, 0]) +cairo: show_pango_layout([MockDouble]) +pango: ellipsized?([]) +pango: ellipsized?([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: set_source_color(["black"]) +cairo: translate([0, 2]) +cairo: rotate([0]) +cairo: move_to([0, 0]) +pango: font_description=([MockDouble]) +pango: text=(["5"]) +pango: width=([102400]) +pango: wrap=([#]) +pango: ellipsize=([#]) +pango: alignment=([#]) +pango: justify=([false]) +cairo: move_to([0, 0]) +cairo: move_to([0, 0]) +cairo: show_pango_layout([MockDouble]) +pango: ellipsized?([]) +pango: ellipsized?([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: set_source_color(["black"]) +cairo: translate([0, 2]) +cairo: rotate([0]) +cairo: move_to([0, 0]) +pango: font_description=([MockDouble]) +pango: text=(["6"]) +pango: width=([102400]) +pango: wrap=([#]) +pango: ellipsize=([#]) +pango: alignment=([#]) +pango: justify=([false]) +cairo: move_to([0, 0]) +cairo: move_to([0, 0]) +cairo: show_pango_layout([MockDouble]) +pango: ellipsized?([]) +pango: ellipsized?([]) +cairo: restore([]) +cairo: save([]) +cairo: new_path([]) +cairo: set_source_color(["black"]) +cairo: translate([0, 2]) +cairo: rotate([0]) +cairo: move_to([0, 0]) +pango: font_description=([MockDouble]) +pango: text=(["7"]) +pango: width=([102400]) +pango: wrap=([#]) +pango: ellipsize=([#]) +pango: alignment=([#]) +pango: justify=([false]) +cairo: move_to([0, 0]) +cairo: move_to([0, 0]) +cairo: show_pango_layout([MockDouble]) +pango: ellipsized?([]) +pango: ellipsized?([]) +cairo: restore([]) +cairo: translate([25.0, 50.0]) +cairo: rotate([1.5707963267948966]) +cairo: translate([-50.0, -25.0]) +cairo: set_source([MockDouble, 0, 0]) +cairo: paint([]) +cairo: set_source([MockDouble, 0, 0]) +cairo: paint([]) +cairo: translate([25.0, 50.0]) +cairo: rotate([1.5707963267948966]) +cairo: translate([-50.0, -25.0]) +cairo: set_source([MockDouble, 0, 0]) +cairo: paint([]) +cairo: set_source([MockDouble, 50, 0]) +cairo: paint([]) +cairo: translate([25.0, 50.0]) +cairo: rotate([1.5707963267948966]) +cairo: translate([-50.0, -25.0]) +cairo: set_source([MockDouble, 0, 0]) +cairo: paint([]) +cairo: set_source([MockDouble, 100, 0]) +cairo: paint([]) +cairo: translate([25.0, 50.0]) +cairo: rotate([1.5707963267948966]) +cairo: translate([-50.0, -25.0]) +cairo: set_source([MockDouble, 0, 0]) +cairo: paint([]) +cairo: set_source([MockDouble, 0, 101]) +cairo: paint([]) +cairo: translate([25.0, 50.0]) +cairo: rotate([1.5707963267948966]) +cairo: translate([-50.0, -25.0]) +cairo: set_source([MockDouble, 0, 0]) +cairo: paint([]) +cairo: set_source([MockDouble, 50, 101]) +cairo: paint([]) +cairo: translate([25.0, 50.0]) +cairo: rotate([1.5707963267948966]) +cairo: translate([-50.0, -25.0]) +cairo: set_source([MockDouble, 0, 0]) +cairo: paint([]) +cairo: set_source([MockDouble, 100, 101]) +cairo: paint([]) +surface: write_to_png(["_output/save_sheet_rotated_00.png"]) +cairo: translate([25.0, 50.0]) +cairo: rotate([1.5707963267948966]) +cairo: translate([-50.0, -25.0]) +cairo: set_source([MockDouble, 0, 0]) +cairo: paint([]) +cairo: set_source([MockDouble, 0, 0]) +cairo: paint([]) +cairo: translate([25.0, 50.0]) +cairo: rotate([1.5707963267948966]) +cairo: translate([-50.0, -25.0]) +cairo: set_source([MockDouble, 0, 0]) +cairo: paint([]) +cairo: set_source([MockDouble, 50, 0]) +cairo: paint([]) +surface: write_to_png(["_output/save_sheet_rotated_01.png"]) +cairo: translate([20.0, 45.0]) +cairo: rotate([1.5707963267948966]) +cairo: translate([-45.0, -20.0]) +cairo: set_source([MockDouble, -5, -5]) +cairo: paint([]) +cairo: set_source([MockDouble, 0, 0]) +cairo: paint([]) +cairo: translate([20.0, 45.0]) +cairo: rotate([1.5707963267948966]) +cairo: translate([-45.0, -20.0]) +cairo: set_source([MockDouble, -5, -5]) +cairo: paint([]) +cairo: set_source([MockDouble, 40, 0]) +cairo: paint([]) +cairo: translate([20.0, 45.0]) +cairo: rotate([1.5707963267948966]) +cairo: translate([-45.0, -20.0]) +cairo: set_source([MockDouble, -5, -5]) +cairo: paint([]) +cairo: set_source([MockDouble, 80, 0]) +cairo: paint([]) +cairo: translate([20.0, 45.0]) +cairo: rotate([1.5707963267948966]) +cairo: translate([-45.0, -20.0]) +cairo: set_source([MockDouble, -5, -5]) +cairo: paint([]) +cairo: set_source([MockDouble, 0, 101]) +cairo: paint([]) +cairo: translate([20.0, 45.0]) +cairo: rotate([1.5707963267948966]) +cairo: translate([-45.0, -20.0]) +cairo: set_source([MockDouble, -5, -5]) +cairo: paint([]) +cairo: set_source([MockDouble, 40, 101]) +cairo: paint([]) +cairo: translate([20.0, 45.0]) +cairo: rotate([1.5707963267948966]) +cairo: translate([-45.0, -20.0]) +cairo: set_source([MockDouble, -5, -5]) +cairo: paint([]) +cairo: set_source([MockDouble, 80, 101]) +cairo: paint([]) +surface: write_to_png(["_output/save_sheet_rotated_trimmed_00.png"]) +cairo: translate([20.0, 45.0]) +cairo: rotate([1.5707963267948966]) +cairo: translate([-45.0, -20.0]) +cairo: set_source([MockDouble, -5, -5]) +cairo: paint([]) +cairo: set_source([MockDouble, 0, 0]) +cairo: paint([]) +cairo: translate([20.0, 45.0]) +cairo: rotate([1.5707963267948966]) +cairo: translate([-45.0, -20.0]) +cairo: set_source([MockDouble, -5, -5]) +cairo: paint([]) +cairo: set_source([MockDouble, 40, 0]) +cairo: paint([]) +surface: write_to_png(["_output/save_sheet_rotated_trimmed_01.png"]) +cairo: translate([20.0, 45.0]) +cairo: rotate([1.5707963267948966]) +cairo: translate([-45.0, -20.0]) +cairo: set_source([MockDouble, -5, -5]) +cairo: paint([]) +cairo: set_source([MockDouble, 80, 0]) +cairo: paint([]) +cairo: translate([20.0, 45.0]) +cairo: rotate([1.5707963267948966]) +cairo: translate([-45.0, -20.0]) +cairo: set_source([MockDouble, -5, -5]) +cairo: paint([]) +cairo: set_source([MockDouble, 40, 0]) +cairo: paint([]) +cairo: translate([20.0, 45.0]) +cairo: rotate([1.5707963267948966]) +cairo: translate([-45.0, -20.0]) +cairo: set_source([MockDouble, -5, -5]) +cairo: paint([]) +cairo: set_source([MockDouble, 0, 0]) +cairo: paint([]) +cairo: translate([20.0, 45.0]) +cairo: rotate([1.5707963267948966]) +cairo: translate([-45.0, -20.0]) +cairo: set_source([MockDouble, -5, -5]) +cairo: paint([]) +cairo: set_source([MockDouble, 80, 101]) +cairo: paint([]) +cairo: translate([20.0, 45.0]) +cairo: rotate([1.5707963267948966]) +cairo: translate([-45.0, -20.0]) +cairo: set_source([MockDouble, -5, -5]) +cairo: paint([]) +cairo: set_source([MockDouble, 40, 101]) +cairo: paint([]) +cairo: translate([20.0, 45.0]) +cairo: rotate([1.5707963267948966]) +cairo: translate([-45.0, -20.0]) +cairo: set_source([MockDouble, -5, -5]) +cairo: paint([]) +cairo: set_source([MockDouble, 0, 101]) +cairo: paint([]) +surface: write_to_png(["_output/save_sheet_rotated_trimmed_rtl_00.png"]) +cairo: translate([20.0, 45.0]) +cairo: rotate([1.5707963267948966]) +cairo: translate([-45.0, -20.0]) +cairo: set_source([MockDouble, -5, -5]) +cairo: paint([]) +cairo: set_source([MockDouble, 80, 0]) +cairo: paint([]) +cairo: translate([20.0, 45.0]) +cairo: rotate([1.5707963267948966]) +cairo: translate([-45.0, -20.0]) +cairo: set_source([MockDouble, -5, -5]) +cairo: paint([]) +cairo: set_source([MockDouble, 40, 0]) +cairo: paint([]) +surface: write_to_png(["_output/save_sheet_rotated_trimmed_rtl_01.png"]) +surface: finish([]) +surface: finish([]) +surface: finish([]) +surface: finish([]) +surface: finish([]) +surface: finish([]) +surface: finish([]) +surface: finish([]) diff --git a/spec/data/samples/text/_embed_text.rb.txt b/spec/data/samples/text/_embed_text.rb.txt index 8a943cd..771dc06 100644 --- a/spec/data/samples/text/_embed_text.rb.txt +++ b/spec/data/samples/text/_embed_text.rb.txt @@ -454,9 +454,9 @@ pango: ellipsized?([]) cairo: restore([]) cairo: set_source([MockDouble, 0, 0]) cairo: paint([]) -cairo: set_source([MockDouble, 100, 0]) +cairo: set_source([MockDouble, 1125, 0]) cairo: paint([]) -cairo: set_source([MockDouble, 200, 0]) +cairo: set_source([MockDouble, 2250, 0]) cairo: paint([]) surface: write_to_png(["_output/embed_multisheet_00.png"]) surface: finish([]) diff --git a/spec/samples/samples_regression_spec.rb b/spec/samples/samples_regression_spec.rb index 721e376..6f330be 100644 --- a/spec/samples/samples_regression_spec.rb +++ b/spec/samples/samples_regression_spec.rb @@ -63,7 +63,7 @@ describe 'Squib samples' do Dir.chdir(File.dirname("#{samples_dir}/#{sample}")) do load full_sample_path end - # overwrite_sample(sample, log) # Use TEMPORARILY once happy with the new sample log + overwrite_sample(sample, log) # Use TEMPORARILY once happy with the new sample log test_file_str = File.open(sample_regression_file(sample), 'r:UTF-8').read expect(log.string).to eq(test_file_str) end