SVG backend: PDF implemented, tests passing
Wrapping up the svg backend work Still some bugs to stamp out, but this is getting close to release ready.
This commit is contained in:
@@ -38,5 +38,10 @@ cairo: scale([1.0, 1.0])
|
||||
cairo: render_rsvg_handle([RSVG::Handle, nil])
|
||||
cairo: restore([])
|
||||
surface: write_to_png(["_output/custom-config_00.png"])
|
||||
cairo: set_source([MockDouble, 75, 75])
|
||||
cairo: translate([75, 75])
|
||||
cairo: rectangle([0, 0, 825, 1125])
|
||||
cairo: clip([])
|
||||
cairo: set_source([MockDouble, 0, 0])
|
||||
cairo: paint([])
|
||||
cairo: reset_clip([])
|
||||
cairo: translate([-75, -75])
|
||||
|
||||
@@ -8,7 +8,7 @@ cairo: set_source_color([:blue])
|
||||
cairo: fill([])
|
||||
cairo: restore([])
|
||||
cairo: save([])
|
||||
cairo: move_to([600, 600])
|
||||
cairo: move_to([675, 600])
|
||||
cairo: circle([600, 600, 75])
|
||||
cairo: set_source_color([:green])
|
||||
cairo: set_line_width([8.0])
|
||||
|
||||
@@ -10,7 +10,7 @@ cairo: set_line_width([15])
|
||||
cairo: stroke([])
|
||||
cairo: restore([])
|
||||
cairo: save([])
|
||||
cairo: move_to([415, 415])
|
||||
cairo: move_to([515, 415])
|
||||
cairo: circle([415, 415, 100])
|
||||
cairo: set_source_color(["#0000"])
|
||||
cairo: set_line_width([2.0])
|
||||
|
||||
+111
-18
@@ -478,42 +478,135 @@ cairo: update_pango_layout([MockDouble])
|
||||
cairo: update_pango_layout([MockDouble])
|
||||
cairo: show_pango_layout([MockDouble])
|
||||
cairo: restore([])
|
||||
cairo: set_source([MockDouble, 75, 75])
|
||||
cairo: translate([75, 75])
|
||||
cairo: rectangle([37, 37, 751, 1051])
|
||||
cairo: clip([])
|
||||
cairo: set_source([MockDouble, 0, 0])
|
||||
cairo: paint([])
|
||||
cairo: set_source([MockDouble, 75, 75])
|
||||
cairo: reset_clip([])
|
||||
cairo: translate([-75, -75])
|
||||
cairo: translate([831, 75])
|
||||
cairo: rectangle([37, 37, 751, 1051])
|
||||
cairo: clip([])
|
||||
cairo: set_source([MockDouble, 0, 0])
|
||||
cairo: paint([])
|
||||
cairo: set_source([MockDouble, 75, 75])
|
||||
cairo: reset_clip([])
|
||||
cairo: translate([-831, -75])
|
||||
cairo: translate([1587, 75])
|
||||
cairo: rectangle([37, 37, 751, 1051])
|
||||
cairo: clip([])
|
||||
cairo: set_source([MockDouble, 0, 0])
|
||||
cairo: paint([])
|
||||
cairo: set_source([MockDouble, 75, 75])
|
||||
cairo: reset_clip([])
|
||||
cairo: translate([-1587, -75])
|
||||
cairo: translate([2343, 75])
|
||||
cairo: rectangle([37, 37, 751, 1051])
|
||||
cairo: clip([])
|
||||
cairo: set_source([MockDouble, 0, 0])
|
||||
cairo: paint([])
|
||||
cairo: set_source([MockDouble, 75, 75])
|
||||
cairo: reset_clip([])
|
||||
cairo: translate([-2343, -75])
|
||||
cairo: translate([75, 1131])
|
||||
cairo: rectangle([37, 37, 751, 1051])
|
||||
cairo: clip([])
|
||||
cairo: set_source([MockDouble, 0, 0])
|
||||
cairo: paint([])
|
||||
cairo: set_source([MockDouble, 75, 75])
|
||||
cairo: reset_clip([])
|
||||
cairo: translate([-75, -1131])
|
||||
cairo: translate([831, 1131])
|
||||
cairo: rectangle([37, 37, 751, 1051])
|
||||
cairo: clip([])
|
||||
cairo: set_source([MockDouble, 0, 0])
|
||||
cairo: paint([])
|
||||
cairo: set_source([MockDouble, 75, 75])
|
||||
cairo: reset_clip([])
|
||||
cairo: translate([-831, -1131])
|
||||
cairo: translate([1587, 1131])
|
||||
cairo: rectangle([37, 37, 751, 1051])
|
||||
cairo: clip([])
|
||||
cairo: set_source([MockDouble, 0, 0])
|
||||
cairo: paint([])
|
||||
cairo: set_source([MockDouble, 75, 75])
|
||||
cairo: reset_clip([])
|
||||
cairo: translate([-1587, -1131])
|
||||
cairo: translate([2343, 1131])
|
||||
cairo: rectangle([37, 37, 751, 1051])
|
||||
cairo: clip([])
|
||||
cairo: set_source([MockDouble, 0, 0])
|
||||
cairo: paint([])
|
||||
cairo: set_source([MockDouble, 75, 75])
|
||||
cairo: reset_clip([])
|
||||
cairo: translate([-2343, -1131])
|
||||
cairo: show_page([])
|
||||
cairo: translate([75, 75])
|
||||
cairo: rectangle([37, 37, 751, 1051])
|
||||
cairo: clip([])
|
||||
cairo: set_source([MockDouble, 0, 0])
|
||||
cairo: paint([])
|
||||
cairo: set_source([MockDouble, 75, 75])
|
||||
cairo: reset_clip([])
|
||||
cairo: translate([-75, -75])
|
||||
cairo: translate([831, 75])
|
||||
cairo: rectangle([37, 37, 751, 1051])
|
||||
cairo: clip([])
|
||||
cairo: set_source([MockDouble, 0, 0])
|
||||
cairo: paint([])
|
||||
cairo: set_source([MockDouble, 75, 75])
|
||||
cairo: reset_clip([])
|
||||
cairo: translate([-831, -75])
|
||||
cairo: translate([1587, 75])
|
||||
cairo: rectangle([37, 37, 751, 1051])
|
||||
cairo: clip([])
|
||||
cairo: set_source([MockDouble, 0, 0])
|
||||
cairo: paint([])
|
||||
cairo: set_source([MockDouble, 75, 75])
|
||||
cairo: reset_clip([])
|
||||
cairo: translate([-1587, -75])
|
||||
cairo: translate([2343, 75])
|
||||
cairo: rectangle([37, 37, 751, 1051])
|
||||
cairo: clip([])
|
||||
cairo: set_source([MockDouble, 0, 0])
|
||||
cairo: paint([])
|
||||
cairo: set_source([MockDouble, 75, 75])
|
||||
cairo: reset_clip([])
|
||||
cairo: translate([-2343, -75])
|
||||
cairo: translate([75, 1131])
|
||||
cairo: rectangle([37, 37, 751, 1051])
|
||||
cairo: clip([])
|
||||
cairo: set_source([MockDouble, 0, 0])
|
||||
cairo: paint([])
|
||||
cairo: set_source([MockDouble, 75, 75])
|
||||
cairo: reset_clip([])
|
||||
cairo: translate([-75, -1131])
|
||||
cairo: translate([831, 1131])
|
||||
cairo: rectangle([37, 37, 751, 1051])
|
||||
cairo: clip([])
|
||||
cairo: set_source([MockDouble, 0, 0])
|
||||
cairo: paint([])
|
||||
cairo: set_source([MockDouble, 75, 75])
|
||||
cairo: reset_clip([])
|
||||
cairo: translate([-831, -1131])
|
||||
cairo: translate([1587, 1131])
|
||||
cairo: rectangle([37, 37, 751, 1051])
|
||||
cairo: clip([])
|
||||
cairo: set_source([MockDouble, 0, 0])
|
||||
cairo: paint([])
|
||||
cairo: set_source([MockDouble, 75, 75])
|
||||
cairo: reset_clip([])
|
||||
cairo: translate([-1587, -1131])
|
||||
cairo: translate([2343, 1131])
|
||||
cairo: rectangle([37, 37, 751, 1051])
|
||||
cairo: clip([])
|
||||
cairo: set_source([MockDouble, 0, 0])
|
||||
cairo: paint([])
|
||||
cairo: set_source([MockDouble, 75, 75])
|
||||
cairo: reset_clip([])
|
||||
cairo: translate([-2343, -1131])
|
||||
cairo: show_page([])
|
||||
cairo: translate([75, 75])
|
||||
cairo: rectangle([0, 0, 825, 1125])
|
||||
cairo: clip([])
|
||||
cairo: set_source([MockDouble, 0, 0])
|
||||
cairo: paint([])
|
||||
cairo: set_source([MockDouble, 75, 75])
|
||||
cairo: reset_clip([])
|
||||
cairo: translate([-75, -75])
|
||||
cairo: translate([900, 75])
|
||||
cairo: rectangle([0, 0, 825, 1125])
|
||||
cairo: clip([])
|
||||
cairo: set_source([MockDouble, 0, 0])
|
||||
cairo: paint([])
|
||||
cairo: reset_clip([])
|
||||
cairo: translate([-900, -75])
|
||||
cairo: show_page([])
|
||||
surface: write_to_png(["_output/saves_notrim_01.png"])
|
||||
cairo: set_source([MockDouble, -37, -37])
|
||||
cairo: paint([])
|
||||
|
||||
@@ -2,29 +2,30 @@ require 'spec_helper'
|
||||
require 'squib'
|
||||
|
||||
describe Squib::Deck, '#save_pdf' do
|
||||
def expect_card_place(x, y)
|
||||
expect(cxt).to receive(:set_source)
|
||||
.with(instance_of(Cairo::ImageSurface), -37, -37)
|
||||
.once # trim the card
|
||||
expect(cxt).to receive(:paint).once # paint trimmed card
|
||||
expect(cxt).to receive(:set_source) # place the card
|
||||
.with(instance_of(Cairo::ImageSurface), x, y).at_least(1).times
|
||||
expect(cxt).to receive(:paint).once # paint placed card
|
||||
end
|
||||
|
||||
context 'typical inputs' do
|
||||
let(:cxt) { double(Cairo::Context) }
|
||||
|
||||
def expect_card_place(x, y)
|
||||
expect(cxt).to receive(:translate).with(x, y).once
|
||||
expect(cxt).to receive(:rectangle).once
|
||||
expect(cxt).to receive(:clip).once
|
||||
expect(cxt).to receive(:set_source) # place the card
|
||||
.with(instance_of(Cairo::ImageSurface), 0, 0).once
|
||||
expect(cxt).to receive(:paint).once # paint placed card
|
||||
expect(cxt).to receive(:translate).with(-x,-y).once
|
||||
expect(cxt).to receive(:reset_clip).once
|
||||
end
|
||||
|
||||
before(:each) do
|
||||
allow(Cairo::PDFSurface).to receive(:new).and_return(nil) #don't create the file
|
||||
allow(Cairo::Context).to receive(:new).and_return(cxt)
|
||||
end
|
||||
|
||||
it 'make all the expected calls on a smoke test' do
|
||||
num_cards = 9
|
||||
args = { file: 'foo.pdf', dir: '_out', margin: 75, gap: 5, trim: 37 }
|
||||
deck = Squib::Deck.new(cards: num_cards, width: 825, height: 1125)
|
||||
deck = Squib::Deck.new(cards: 9, width: 825, height: 1125)
|
||||
expect(Squib.logger).to receive(:debug).at_least(:once)
|
||||
expect(Cairo::Context).to receive(:new).and_return(cxt).at_least(num_cards + 1).times
|
||||
expect(deck).to receive(:dirify) { |arg| arg } #don't create the dir
|
||||
|
||||
expect_card_place(75, 75)
|
||||
@@ -38,6 +39,7 @@ describe Squib::Deck, '#save_pdf' do
|
||||
expect(cxt).to receive(:show_page).once
|
||||
expect_card_place(75, 75)
|
||||
|
||||
args = { file: 'foo.pdf', dir: '_out', margin: 75, gap: 5, trim: 37 }
|
||||
deck.save_pdf(args)
|
||||
end
|
||||
|
||||
@@ -46,7 +48,6 @@ describe Squib::Deck, '#save_pdf' do
|
||||
args = { range: 2..4, file: 'foo.pdf', dir: '_out', margin: 75, gap: 5, trim: 37 }
|
||||
deck = Squib::Deck.new(cards: num_cards, width: 825, height: 1125)
|
||||
expect(Squib.logger).to receive(:debug).at_least(:once)
|
||||
expect(Cairo::Context).to receive(:new).and_return(cxt).exactly(4).times
|
||||
expect(deck).to receive(:dirify) { |arg| arg } #don't create the dir
|
||||
|
||||
expect_card_place(75, 75)
|
||||
|
||||
@@ -37,7 +37,7 @@ describe Squib::Card do
|
||||
context 'circle' do
|
||||
it 'make all the expected calls on a smoke test' do
|
||||
expect(@context).to receive(:save).once
|
||||
expect(@context).to receive(:move_to).with(37, 38)
|
||||
expect(@context).to receive(:move_to).with(137, 38)
|
||||
expect(@context).to receive(:circle).with(37, 38, 100).twice
|
||||
expect_stroke('#fff', '#f00', 2.0)
|
||||
expect(@context).to receive(:restore).once
|
||||
|
||||
+2
-1
@@ -71,11 +71,12 @@ def mock_cairo(strio)
|
||||
allow(pango).to receive(:width).and_return(25)
|
||||
allow(pango).to receive(:extents).and_return([Pango::Rectangle.new(0,0,0,0)]*2)
|
||||
allow(Pango::FontDescription).to receive(:new).and_return(font)
|
||||
allow(Cairo::PDFSurface).to receive(:new).and_return(nil)
|
||||
|
||||
%w(save set_source_color paint restore translate rotate move_to
|
||||
update_pango_layout width height show_pango_layout rounded_rectangle
|
||||
set_line_width stroke fill set_source scale render_rsvg_handle circle
|
||||
triangle line_to operator= show_page clip transform mask).each do |m|
|
||||
triangle line_to operator= show_page clip transform mask rectangle reset_clip).each do |m|
|
||||
allow(cxt).to receive(m) { |*args| strio << scrub_hex("cairo: #{m}(#{args})\n") }
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user