diff --git a/docs/dsl/save_sheet.rst b/docs/dsl/save_sheet.rst index d0052d4..ade8a56 100644 --- a/docs/dsl/save_sheet.rst +++ b/docs/dsl/save_sheet.rst @@ -51,5 +51,10 @@ trim the space around the edge of each card to trim (e.g. to cut off the bleed margin for print-and-play). Supports :doc:`/units`. +rtl + default ``false`` + + whether to render columns right to left, used for duplex printing of card backs + Examples -------- diff --git a/lib/squib/args/sheet.rb b/lib/squib/args/sheet.rb index 8c81885..254f02f 100644 --- a/lib/squib/args/sheet.rb +++ b/lib/squib/args/sheet.rb @@ -40,6 +40,7 @@ module Squib trim_radius: 38, trim: 0, width: 3300, + rtl: false, } end diff --git a/lib/squib/graphics/save_doc.rb b/lib/squib/graphics/save_doc.rb index 46fcd1f..e0b27eb 100644 --- a/lib/squib/graphics/save_doc.rb +++ b/lib/squib/graphics/save_doc.rb @@ -9,7 +9,8 @@ module Squib cc = Cairo::Context.new(Cairo::ImageSurface.new(sheet_width, sheet_height)) num_this_sheet = 0 sheet_num = 0 - x, y = sheet.margin, sheet.margin + y = sheet.margin + x = sheet.rtl ? (sheet_width - sheet.margin - sheet.gap - @width) : 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 @@ -18,16 +19,17 @@ module Squib new_sheet = false num_this_sheet = 0 sheet_num += 1 - x, y = sheet.margin, sheet.margin + y = sheet.margin + x = sheet.rtl ? (sheet_width - sheet.margin - sheet.gap - @width) : sheet.margin cc = Cairo::Context.new(Cairo::ImageSurface.new(sheet_width, sheet_height)) end surface = trim(@cards[i].cairo_surface, sheet.trim, @width, @height) cc.set_source(surface, x, y) cc.paint num_this_sheet += 1 - x += surface.width + sheet.gap + x += (surface.width + sheet.gap) * (sheet.rtl ? -1 : 1) if num_this_sheet % sheet.columns == 0 # new row - x = sheet.margin + x = sheet.rtl ? (sheet_width - sheet.margin - sheet.gap - @width) : sheet.margin y += surface.height + sheet.gap end bar.increment