diff --git a/CHANGELOG.md b/CHANGELOG.md index c62af0f..f0d75d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ Squib follows [semantic versioning](http://semver.org). ## v0.7.0 / Unreleased +Compatibility: +* All drawn shapes (e.g. circle, triangle, star) will now draw their stroke on top of the fill. This was not consistent before, and now it is (because Squib is more DRY about it!). This might mean that your `stroke_width` will render wider than before. + +Chores: +* Refactoring to make internal drawing code more DRY (#75) + ## v0.6.0 / 2015-05-26 Features: diff --git a/lib/squib/graphics/cairo_context_wrapper.rb b/lib/squib/graphics/cairo_context_wrapper.rb index 60bf750..cd53b09 100644 --- a/lib/squib/graphics/cairo_context_wrapper.rb +++ b/lib/squib/graphics/cairo_context_wrapper.rb @@ -48,6 +48,16 @@ module Squib @cairo_cxt.set_source_color(arg) end end + + # Convenience method for a common task + # @api private + def fill_n_stroke(fill_color, stroke_color, stroke_width) + set_source_squibcolor(fill_color) + fill_preserve + set_source_squibcolor(stroke_color) + set_line_width(stroke_width) + stroke + end end end end \ No newline at end of file diff --git a/lib/squib/graphics/shapes.rb b/lib/squib/graphics/shapes.rb index 9298b75..2ab485b 100644 --- a/lib/squib/graphics/shapes.rb +++ b/lib/squib/graphics/shapes.rb @@ -9,12 +9,7 @@ module Squib height = @height if height == :native use_cairo do |cc| cc.rounded_rectangle(x, y, width, height, x_radius, y_radius) - cc.set_source_squibcolor(stroke_color) - cc.set_line_width(stroke_width) - cc.stroke - cc.rounded_rectangle(x, y, width, height, x_radius, y_radius) - cc.set_source_squibcolor(fill_color) - cc.fill + cc.fill_n_stroke(fill_color, stroke_color, stroke_width) end end @@ -24,12 +19,7 @@ module Squib use_cairo do |cc| cc.move_to(x + radius, y) cc.circle(x, y, radius) - cc.set_source_squibcolor(stroke_color) - cc.set_line_width(stroke_width) - cc.stroke - cc.circle(x, y, radius) - cc.set_source_squibcolor(fill_color) - cc.fill + cc.fill_n_stroke(fill_color, stroke_color, stroke_width) end end @@ -53,11 +43,7 @@ module Squib cc.curve_to(x + 0.25*w, y + h, # south to west x, y + 0.75*h, x, y + 0.5*h) - cc.set_source_squibcolor(stroke_color) - cc.set_line_width(stroke_width) - cc.stroke_preserve - cc.set_source_squibcolor(fill_color) - cc.fill + cc.fill_n_stroke(fill_color, stroke_color, stroke_width) end end @@ -66,12 +52,7 @@ module Squib def triangle(x1, y1, x2, y2, x3, y3, fill_color, stroke_color, stroke_width) use_cairo do |cc| cc.triangle(x1, y1, x2, y2, x3, y3) - cc.set_source_squibcolor(stroke_color) - cc.set_line_width(stroke_width) - cc.stroke - cc.triangle(x1, y1, x2, y2, x3, y3) - cc.set_source_squibcolor(fill_color) - cc.fill + cc.fill_n_stroke(fill_color, stroke_color, stroke_width) end end @@ -93,13 +74,7 @@ module Squib use_cairo do |cc| cc.move_to(x1, y1) cc.curve_to(cx1, cy1, cx2, cy2, x2, y2) - cc.set_line_width(stroke_width) - cc.set_source_squibcolor(stroke_color) - cc.stroke - cc.move_to(x1, y1) - cc.curve_to(cx1, cy1, cx2, cy2, x2, y2) - cc.set_source_squibcolor(fill_color) - cc.fill + cc.fill_n_stroke(fill_color, stroke_color, stroke_width) end end @@ -118,11 +93,7 @@ module Squib y + radius * Math::sin(i * theta)) end cc.close_path - cc.set_source_squibcolor(stroke_color) - cc.set_line_width(stroke_width) - cc.fill_preserve - cc.set_source_squibcolor(fill_color) - cc.stroke + cc.fill_n_stroke(fill_color, stroke_color, stroke_width) end end @@ -140,11 +111,7 @@ module Squib y + radius * Math::sin(i * theta)) end cc.close_path - cc.set_source_squibcolor(stroke_color) - cc.set_line_width(stroke_width) - cc.fill_preserve - cc.set_source_squibcolor(fill_color) - cc.stroke + cc.fill_n_stroke(fill_color, stroke_color, stroke_width) end end diff --git a/samples/draw_shapes.rb b/samples/draw_shapes.rb index c64c199..546b98c 100644 --- a/samples/draw_shapes.rb +++ b/samples/draw_shapes.rb @@ -10,7 +10,9 @@ Squib::Deck.new do triangle x1: 50, y1: 50, x2: 150, y2: 150, - x3: 75, y3: 250 + x3: 75, y3: 250, + fill_color: :gray, stroke_color: :green, stroke_width: 3.0 + line x1: 50, y1: 550, x2: 150, y2: 650, @@ -26,10 +28,10 @@ Squib::Deck.new do fill_color: :burgundy star x: 300, y: 1000, n: 5, inner_radius: 10, outer_radius: 25, - fill_color: :burgundy, stroke_color: :cyan, stroke_width: 3 + fill_color: :cyan, stroke_color: :burgundy, stroke_width: 3 polygon x: 500, y: 1000, n: 5, radius: 25, angle: Math::PI / 2, - fill_color: :burgundy, stroke_color: :cyan, stroke_width: 2 + fill_color: :cyan, stroke_color: :burgundy, stroke_width: 2 save_png prefix: 'shape_' end diff --git a/spec/data/samples/basic.rb.txt b/spec/data/samples/basic.rb.txt index c741939..8d7376a 100644 --- a/spec/data/samples/basic.rb.txt +++ b/spec/data/samples/basic.rb.txt @@ -15,57 +15,51 @@ cairo: paint([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([75, 75, 128, 128, 25, 25]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([75, 75, 128, 128, 25, 25]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([75, 75, 128, 128, 25, 25]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([75, 75, 128, 128, 25, 25]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([75, 75, 128, 128, 25, 25]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([75, 75, 128, 128, 25, 25]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: set_source_color([:black]) diff --git a/spec/data/samples/draw_shapes.rb.txt b/spec/data/samples/draw_shapes.rb.txt index 963508c..1c73548 100644 --- a/spec/data/samples/draw_shapes.rb.txt +++ b/spec/data/samples/draw_shapes.rb.txt @@ -5,31 +5,28 @@ cairo: paint([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([300, 300, 400, 400, 0, 0]) +cairo: set_source_color([:blue]) +cairo: fill_preserve([]) cairo: set_source_color([:red]) cairo: set_line_width([50.0]) cairo: stroke([]) -cairo: rounded_rectangle([300, 300, 400, 400, 0, 0]) -cairo: set_source_color([:blue]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: move_to([675, 600]) cairo: circle([600, 600, 75]) +cairo: set_source_color([:gray]) +cairo: fill_preserve([]) cairo: set_source_color([:green]) cairo: set_line_width([8.0]) cairo: stroke([]) -cairo: circle([600, 600, 75]) -cairo: set_source_color([:gray]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: triangle([50, 50, 150, 150, 75, 250]) -cairo: set_source_color([:black]) -cairo: set_line_width([2.0]) +cairo: set_source_color([:gray]) +cairo: fill_preserve([]) +cairo: set_source_color([:green]) +cairo: set_line_width([3.0]) cairo: stroke([]) -cairo: triangle([50, 50, 150, 150, 75, 250]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: move_to([50, 550]) @@ -41,13 +38,11 @@ cairo: restore([]) cairo: save([]) cairo: move_to([50, 850]) cairo: curve_to([150, 700, 150, 700, 625, 900]) -cairo: set_line_width([12.0]) +cairo: set_source_color([:burgundy]) +cairo: fill_preserve([]) cairo: set_source_color([:cyan]) +cairo: set_line_width([12.0]) cairo: stroke([]) -cairo: move_to([50, 850]) -cairo: curve_to([150, 700, 150, 700, 625, 900]) -cairo: set_source_color([:burgundy]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: move_to([50, 975.0]) @@ -55,11 +50,11 @@ cairo: curve_to([50, 950.0, 100.0, 925, 150.0, 925]) cairo: curve_to([200.0, 925, 250, 950.0, 250, 975.0]) cairo: curve_to([250, 1000.0, 200.0, 1025, 150.0, 1025]) cairo: curve_to([100.0, 1025, 50, 1000.0, 50, 975.0]) +cairo: set_source_color([:burgundy]) +cairo: fill_preserve([]) cairo: set_source_color([:cyan]) cairo: set_line_width([5.0]) -cairo: stroke_preserve([]) -cairo: set_source_color([:burgundy]) -cairo: fill([]) +cairo: stroke([]) cairo: restore([]) cairo: save([]) cairo: translate([300, 1000]) @@ -79,9 +74,9 @@ cairo: line_to([308.09016994374946, 994.1221474770753]) cairo: line_to([325.0, 1000.0]) cairo: close_path([]) cairo: set_source_color([:cyan]) -cairo: set_line_width([3]) cairo: fill_preserve([]) cairo: set_source_color([:burgundy]) +cairo: set_line_width([3]) cairo: stroke([]) cairo: restore([]) cairo: save([]) @@ -97,9 +92,9 @@ cairo: line_to([507.7254248593737, 976.2235870926212]) cairo: line_to([525.0, 1000.0]) cairo: close_path([]) cairo: set_source_color([:cyan]) -cairo: set_line_width([2]) cairo: fill_preserve([]) cairo: set_source_color([:burgundy]) +cairo: set_line_width([2]) cairo: stroke([]) cairo: restore([]) surface: write_to_png(["_output/shape_00.png"]) diff --git a/spec/data/samples/embed_text.rb.txt b/spec/data/samples/embed_text.rb.txt index 65df637..28f717e 100644 --- a/spec/data/samples/embed_text.rb.txt +++ b/spec/data/samples/embed_text.rb.txt @@ -5,12 +5,11 @@ cairo: paint([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([0, 0, 825, 1125, 0, 0]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([0, 0, 825, 1125, 0, 0]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: set_source_color([:black]) diff --git a/spec/data/samples/gradients.rb.txt b/spec/data/samples/gradients.rb.txt index 6b7c222..84f75a3 100644 --- a/spec/data/samples/gradients.rb.txt +++ b/spec/data/samples/gradients.rb.txt @@ -13,39 +13,35 @@ cairo: restore([]) cairo: save([]) cairo: move_to([515, 415]) cairo: circle([415, 415, 100]) +cairo: set_source([RadialPattern]) +cairo: fill_preserve([]) cairo: set_source_color(["#0000"]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: circle([415, 415, 100]) -cairo: set_source([RadialPattern]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: triangle([650, 360, 550, 500, 750, 500]) +cairo: set_source([RadialPattern]) +cairo: fill_preserve([]) cairo: set_source_color(["#0000"]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: triangle([650, 360, 550, 500, 750, 500]) -cairo: set_source([RadialPattern]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([30, 350, 150, 150, 15, 15]) +cairo: set_source([LinearPattern]) +cairo: fill_preserve([]) cairo: set_source_color(["#0000"]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([30, 350, 150, 150, 15, 15]) -cairo: set_source([LinearPattern]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([40, 360, 130, 130, 15, 15]) +cairo: set_source([LinearPattern]) +cairo: fill_preserve([]) cairo: set_source_color(["#0000"]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([40, 360, 130, 130, 15, 15]) -cairo: set_source([LinearPattern]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: set_source([LinearPattern]) diff --git a/spec/data/samples/hand.rb.txt b/spec/data/samples/hand.rb.txt index edd1de6..ab82844 100644 --- a/spec/data/samples/hand.rb.txt +++ b/spec/data/samples/hand.rb.txt @@ -41,146 +41,130 @@ cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([37, 37, 750, 1050, 25, 25]) cairo: set_source_color([:black]) +cairo: fill_preserve([]) +cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([37, 37, 750, 1050, 25, 25]) -cairo: set_source_color([:black]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([37, 37, 750, 1050, 25, 25]) cairo: set_source_color([:black]) +cairo: fill_preserve([]) +cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([37, 37, 750, 1050, 25, 25]) -cairo: set_source_color([:black]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([37, 37, 750, 1050, 25, 25]) cairo: set_source_color([:black]) +cairo: fill_preserve([]) +cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([37, 37, 750, 1050, 25, 25]) -cairo: set_source_color([:black]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([37, 37, 750, 1050, 25, 25]) cairo: set_source_color([:black]) +cairo: fill_preserve([]) +cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([37, 37, 750, 1050, 25, 25]) -cairo: set_source_color([:black]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([37, 37, 750, 1050, 25, 25]) cairo: set_source_color([:black]) +cairo: fill_preserve([]) +cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([37, 37, 750, 1050, 25, 25]) -cairo: set_source_color([:black]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([37, 37, 750, 1050, 25, 25]) cairo: set_source_color([:black]) +cairo: fill_preserve([]) +cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([37, 37, 750, 1050, 25, 25]) -cairo: set_source_color([:black]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([37, 37, 750, 1050, 25, 25]) cairo: set_source_color([:black]) +cairo: fill_preserve([]) +cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([37, 37, 750, 1050, 25, 25]) -cairo: set_source_color([:black]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([37, 37, 750, 1050, 25, 25]) cairo: set_source_color([:black]) +cairo: fill_preserve([]) +cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([37, 37, 750, 1050, 25, 25]) -cairo: set_source_color([:black]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([75, 75, 675, 975, 20, 20]) +cairo: set_source_color([:white]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([75, 75, 675, 975, 20, 20]) -cairo: set_source_color([:white]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([75, 75, 675, 975, 20, 20]) +cairo: set_source_color([:white]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([75, 75, 675, 975, 20, 20]) -cairo: set_source_color([:white]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([75, 75, 675, 975, 20, 20]) +cairo: set_source_color([:white]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([75, 75, 675, 975, 20, 20]) -cairo: set_source_color([:white]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([75, 75, 675, 975, 20, 20]) +cairo: set_source_color([:white]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([75, 75, 675, 975, 20, 20]) -cairo: set_source_color([:white]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([75, 75, 675, 975, 20, 20]) +cairo: set_source_color([:white]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([75, 75, 675, 975, 20, 20]) -cairo: set_source_color([:white]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([75, 75, 675, 975, 20, 20]) +cairo: set_source_color([:white]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([75, 75, 675, 975, 20, 20]) -cairo: set_source_color([:white]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([75, 75, 675, 975, 20, 20]) +cairo: set_source_color([:white]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([75, 75, 675, 975, 20, 20]) -cairo: set_source_color([:white]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([75, 75, 675, 975, 20, 20]) +cairo: set_source_color([:white]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([75, 75, 675, 975, 20, 20]) -cairo: set_source_color([:white]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: set_source_color([:black]) diff --git a/spec/data/samples/load_images.rb.txt b/spec/data/samples/load_images.rb.txt index 2ed2a0c..6f1ff3d 100644 --- a/spec/data/samples/load_images.rb.txt +++ b/spec/data/samples/load_images.rb.txt @@ -5,12 +5,11 @@ cairo: paint([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: translate([620, 75]) diff --git a/spec/data/samples/saves.rb.txt b/spec/data/samples/saves.rb.txt index 2f57334..b4f12ee 100644 --- a/spec/data/samples/saves.rb.txt +++ b/spec/data/samples/saves.rb.txt @@ -80,147 +80,131 @@ cairo: paint([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: set_source_color([:black]) diff --git a/spec/data/samples/showcase.rb.txt b/spec/data/samples/showcase.rb.txt index 4b7aa99..82302a1 100644 --- a/spec/data/samples/showcase.rb.txt +++ b/spec/data/samples/showcase.rb.txt @@ -20,39 +20,35 @@ cairo: paint([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([78, 78, 675.0, 975.0, 32, 32]) +cairo: set_source_color(["#DED4B9"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([78, 78, 675.0, 975.0, 32, 32]) -cairo: set_source_color(["#DED4B9"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([78, 78, 675.0, 975.0, 32, 32]) +cairo: set_source_color(["#DED4B9"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([78, 78, 675.0, 975.0, 32, 32]) -cairo: set_source_color(["#DED4B9"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([78, 78, 675.0, 975.0, 32, 32]) +cairo: set_source_color(["#DED4B9"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([78, 78, 675.0, 975.0, 32, 32]) -cairo: set_source_color(["#DED4B9"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([78, 78, 675.0, 975.0, 32, 32]) +cairo: set_source_color(["#DED4B9"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([78, 78, 675.0, 975.0, 32, 32]) -cairo: set_source_color(["#DED4B9"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: set_source_color([:black]) diff --git a/spec/data/samples/text_options.rb.txt b/spec/data/samples/text_options.rb.txt index 49f5178..8cda87e 100644 --- a/spec/data/samples/text_options.rb.txt +++ b/spec/data/samples/text_options.rb.txt @@ -15,57 +15,51 @@ cairo: paint([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([15, 15, 795, 1095, 50, 50]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([15, 15, 795, 1095, 50, 50]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([15, 15, 795, 1095, 50, 50]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([15, 15, 795, 1095, 50, 50]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([15, 15, 795, 1095, 50, 50]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([15, 15, 795, 1095, 50, 50]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([30, 30, 128, 128, 25, 25]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([30, 30, 128, 128, 25, 25]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([30, 30, 128, 128, 25, 25]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([30, 30, 128, 128, 25, 25]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([30, 30, 128, 128, 25, 25]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([30, 30, 128, 128, 25, 25]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: set_source_color([:black]) @@ -450,30 +444,27 @@ cairo: show_pango_layout([MockDouble]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([60, 545, 10, 10, 10, 10]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([60, 545, 10, 10, 10, 10]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([60, 545, 10, 10, 10, 10]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([60, 545, 10, 10, 10, 10]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([60, 545, 10, 10, 10, 10]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([60, 545, 10, 10, 10, 10]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: set_source_color([:black]) diff --git a/spec/data/samples/tgc_proofs.rb.txt b/spec/data/samples/tgc_proofs.rb.txt index d16876a..54d21eb 100644 --- a/spec/data/samples/tgc_proofs.rb.txt +++ b/spec/data/samples/tgc_proofs.rb.txt @@ -5,21 +5,19 @@ cairo: paint([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([75, 75, 128, 128, 25, 25]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([75, 75, 128, 128, 25, 25]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: set_source_color([:black]) diff --git a/spec/data/samples/units.rb.txt b/spec/data/samples/units.rb.txt index dafde71..dcb92c2 100644 --- a/spec/data/samples/units.rb.txt +++ b/spec/data/samples/units.rb.txt @@ -5,29 +5,26 @@ cairo: paint([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([37.5, 37.5, 750.0, 1050.0, 25, 25]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([37.5, 37.5, 750.0, 1050.0, 25, 25]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([75.0, 75.0, 675.0, 975.0, 25, 25]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([75.0, 75.0, 675.0, 975.0, 25, 25]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) cairo: save([]) cairo: rounded_rectangle([472.4409444, 472.4409444, 100, 100, 0, 0]) +cairo: set_source_color(["#0000"]) +cairo: fill_preserve([]) cairo: set_source_color([:black]) cairo: set_line_width([2.0]) cairo: stroke([]) -cairo: rounded_rectangle([472.4409444, 472.4409444, 100, 100, 0, 0]) -cairo: set_source_color(["#0000"]) -cairo: fill([]) cairo: restore([]) surface: write_to_png(["_output/units_00.png"]) diff --git a/spec/graphics/graphics_shapes_spec.rb b/spec/graphics/graphics_shapes_spec.rb index c4565ed..c0fa4c5 100644 --- a/spec/graphics/graphics_shapes_spec.rb +++ b/spec/graphics/graphics_shapes_spec.rb @@ -7,11 +7,11 @@ describe Squib::Card do let(:cxt) { double(Cairo::Context) } def expect_stroke(cxt, fill_color, stroke_color, stroke_width) + expect(cxt).to receive(:set_source_color).with(fill_color).once + expect(cxt).to receive(:fill_preserve).once expect(cxt).to receive(:set_source_color).with(stroke_color).once expect(cxt).to receive(:set_line_width).with(stroke_width).once expect(cxt).to receive(:stroke).once - expect(cxt).to receive(:set_source_color).with(fill_color).once - expect(cxt).to receive(:fill).once end before(:each) do @@ -27,7 +27,7 @@ describe Squib::Card do it 'make all the expected calls on a smoke test' do expect(cxt).to receive(:antialias=).with('subpixel') expect(cxt).to receive(:save).once - expect(cxt).to receive(:rounded_rectangle).with(37, 38, 50, 100, 10, 15).twice + expect(cxt).to receive(:rounded_rectangle).with(37, 38, 50, 100, 10, 15).once expect_stroke(cxt, '#fff', '#f00', 2.0) expect(cxt).to receive(:restore).once @@ -43,7 +43,7 @@ describe Squib::Card do expect(cxt).to receive(:antialias=).with('subpixel') expect(cxt).to receive(:save).once expect(cxt).to receive(:move_to).with(137, 38) - expect(cxt).to receive(:circle).with(37, 38, 100).twice + expect(cxt).to receive(:circle).with(37, 38, 100).once expect_stroke(cxt, '#fff', '#f00', 2.0) expect(cxt).to receive(:restore).once @@ -58,7 +58,7 @@ describe Squib::Card do it 'make all the expected calls on a smoke test' do expect(cxt).to receive(:antialias=).with('subpixel') expect(cxt).to receive(:save).once - expect(cxt).to receive(:triangle).with(1, 2, 3, 4, 5, 6).twice + expect(cxt).to receive(:triangle).with(1, 2, 3, 4, 5, 6).once expect_stroke(cxt, '#fff', '#f00', 2.0) expect(cxt).to receive(:restore).once diff --git a/spec/samples/expected/hand.png b/spec/samples/expected/hand.png index 25cb8bc..eed643b 100644 Binary files a/spec/samples/expected/hand.png and b/spec/samples/expected/hand.png differ diff --git a/spec/samples/expected/hand_pretty.png b/spec/samples/expected/hand_pretty.png index 95613b8..efd38f9 100644 Binary files a/spec/samples/expected/hand_pretty.png and b/spec/samples/expected/hand_pretty.png differ diff --git a/spec/samples/expected/layout_00.png b/spec/samples/expected/layout_00.png index 3236f8c..e2a9a79 100644 Binary files a/spec/samples/expected/layout_00.png and b/spec/samples/expected/layout_00.png differ diff --git a/spec/samples/expected/shape_00.png b/spec/samples/expected/shape_00.png index 1fb7f13..bebda59 100644 Binary files a/spec/samples/expected/shape_00.png and b/spec/samples/expected/shape_00.png differ diff --git a/spec/samples/expected/showcase.png b/spec/samples/expected/showcase.png index 94d1cd7..ed0a79e 100644 Binary files a/spec/samples/expected/showcase.png and b/spec/samples/expected/showcase.png differ diff --git a/spec/samples/expected/showcase2.png b/spec/samples/expected/showcase2.png index ebc0718..8e7de5a 100644 Binary files a/spec/samples/expected/showcase2.png and b/spec/samples/expected/showcase2.png differ diff --git a/spec/samples/expected/showcase_individual_00.png b/spec/samples/expected/showcase_individual_00.png index 1514a5c..ee1e32c 100644 Binary files a/spec/samples/expected/showcase_individual_00.png and b/spec/samples/expected/showcase_individual_00.png differ diff --git a/spec/samples/expected/showcase_individual_01.png b/spec/samples/expected/showcase_individual_01.png index 64d855e..64e32e1 100644 Binary files a/spec/samples/expected/showcase_individual_01.png and b/spec/samples/expected/showcase_individual_01.png differ diff --git a/spec/samples/expected/showcase_individual_02.png b/spec/samples/expected/showcase_individual_02.png index 2dfc963..11f1ef4 100644 Binary files a/spec/samples/expected/showcase_individual_02.png and b/spec/samples/expected/showcase_individual_02.png differ diff --git a/spec/samples/expected/showcase_individual_03.png b/spec/samples/expected/showcase_individual_03.png index 2b9a1b3..08c7945 100644 Binary files a/spec/samples/expected/showcase_individual_03.png and b/spec/samples/expected/showcase_individual_03.png differ diff --git a/spec/samples/samples_regression_spec.rb b/spec/samples/samples_regression_spec.rb index f8c9e14..85d59ff 100644 --- a/spec/samples/samples_regression_spec.rb +++ b/spec/samples/samples_regression_spec.rb @@ -73,7 +73,7 @@ describe "Squib samples" do log = StringIO.new mock_cairo(log) load sample - # 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