lib/squib/graphics/cairo_context_wrapper.rb in squib-0.14.1 vs lib/squib/graphics/cairo_context_wrapper.rb in squib-0.14.2
- old
+ new
@@ -1,113 +1,113 @@
-require 'forwardable'
-require_relative 'gradient_regex'
-
-module Squib
- module Graphics
- # Wrapper class for the Cairo context. Private.
- # @api private
- class CairoContextWrapper
- extend Forwardable
-
- # :nodoc:
- # @api private
- attr_accessor :cairo_cxt
-
- # :nodoc:
- # @api private
- def initialize(cairo_cxt)
- @cairo_cxt = cairo_cxt
- end
-
- def_delegators :cairo_cxt, :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, :create_pango_layout,
- :antialias=, :curve_to, :matrix, :matrix=, :identity_matrix, :pango_layout_path,
- :stroke_preserve, :target, :new_path, :fill_preserve, :close_path,
- :set_line_join, :set_line_cap, :set_dash, :arc, :arc_negative
-
- # :nodoc:
- # @api private
- def set_source_squibcolor(arg)
- raise 'nil is not a valid color' if arg.nil?
- if match = arg.match(LINEAR_GRADIENT)
- x1, y1, x2, y2 = match.captures
- linear = Cairo::LinearPattern.new(x1.to_f, y1.to_f, x2.to_f, y2.to_f)
- arg.scan(STOPS).each do |color, offset|
- linear.add_color_stop(offset.to_f, color)
- end
- linear.matrix = matrix # match the coordinate systems - see bug 127
- @cairo_cxt.set_source(linear)
- elsif match = arg.match(RADIAL_GRADIENT)
- x1, y1, r1, x2, y2, r2 = match.captures
- radial = Cairo::RadialPattern.new(x1.to_f, y1.to_f, r1.to_f,
- x2.to_f, y2.to_f, r2.to_f)
- radial.matrix = matrix # match the coordinate systems - see bug 127
- arg.scan(STOPS).each do |color, offset|
- radial.add_color_stop(offset.to_f, color)
- end
- @cairo_cxt.set_source(radial)
- else
- @cairo_cxt.set_source_color(arg)
- end
- end
-
- # Convenience method for a common task
- # @api private
- def fill_n_stroke(draw)
- return stroke_n_fill(draw) if draw.stroke_strategy == :stroke_first
- set_source_squibcolor draw.fill_color
- fill_preserve
- set_source_squibcolor draw.stroke_color
- set_line_width draw.stroke_width
- set_line_join draw.join
- set_line_cap draw.cap
- set_dash draw.dash
- stroke
- end
-
- def stroke_n_fill(draw)
- return fill_n_stroke(draw) if draw.stroke_strategy == :fill_first
- set_source_squibcolor draw.stroke_color
- set_line_width draw.stroke_width
- set_line_join draw.join
- set_line_cap draw.cap
- set_dash draw.dash
- stroke_preserve
- set_source_squibcolor draw.fill_color
- fill
- end
-
- # Convenience method for a common task
- # @api private
- def fancy_stroke(draw)
- set_source_squibcolor draw.stroke_color
- set_line_width draw.stroke_width
- set_line_join draw.join
- set_line_cap draw.cap
- set_dash draw.dash
- stroke
- end
-
- def rotate_about(x, y, angle)
- translate(x, y)
- rotate(angle)
- translate(-x, -y)
- end
-
- # Flip either vertical or horizontal depending
- # From the cairo website: http://cairographics.org/matrix_transform/
- # cairo.Matrix(fx, 0, 0,
- # fy, cx*(1-fx), cy*(fy-1))
- # fx/fy = 1 means 'no flip', fx/fy = -1 are used for horizontal/vertical flip
- def flip(vertical, horizontal, x, y)
- v = vertical ? -1.0 : 1.0
- h = horizontal ? -1.0 : 1.0
- transform Cairo::Matrix.new(v, 0.0, 0.0,
- h, x * (1 - v), y * (1 - h))
- end
-
- end
- end
-end
+require 'forwardable'
+require_relative 'gradient_regex'
+
+module Squib
+ module Graphics
+ # Wrapper class for the Cairo context. Private.
+ # @api private
+ class CairoContextWrapper
+ extend Forwardable
+
+ # :nodoc:
+ # @api private
+ attr_accessor :cairo_cxt
+
+ # :nodoc:
+ # @api private
+ def initialize(cairo_cxt)
+ @cairo_cxt = cairo_cxt
+ end
+
+ def_delegators :cairo_cxt, :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, :create_pango_layout,
+ :antialias=, :curve_to, :matrix, :matrix=, :identity_matrix, :pango_layout_path,
+ :stroke_preserve, :target, :new_path, :fill_preserve, :close_path,
+ :set_line_join, :set_line_cap, :set_dash, :arc, :arc_negative
+
+ # :nodoc:
+ # @api private
+ def set_source_squibcolor(arg)
+ raise 'nil is not a valid color' if arg.nil?
+ if match = arg.match(LINEAR_GRADIENT)
+ x1, y1, x2, y2 = match.captures
+ linear = Cairo::LinearPattern.new(x1.to_f, y1.to_f, x2.to_f, y2.to_f)
+ arg.scan(STOPS).each do |color, offset|
+ linear.add_color_stop(offset.to_f, color)
+ end
+ linear.matrix = matrix # match the coordinate systems - see bug 127
+ @cairo_cxt.set_source(linear)
+ elsif match = arg.match(RADIAL_GRADIENT)
+ x1, y1, r1, x2, y2, r2 = match.captures
+ radial = Cairo::RadialPattern.new(x1.to_f, y1.to_f, r1.to_f,
+ x2.to_f, y2.to_f, r2.to_f)
+ radial.matrix = matrix # match the coordinate systems - see bug 127
+ arg.scan(STOPS).each do |color, offset|
+ radial.add_color_stop(offset.to_f, color)
+ end
+ @cairo_cxt.set_source(radial)
+ else
+ @cairo_cxt.set_source_color(arg)
+ end
+ end
+
+ # Convenience method for a common task
+ # @api private
+ def fill_n_stroke(draw)
+ return stroke_n_fill(draw) if draw.stroke_strategy == :stroke_first
+ set_source_squibcolor draw.fill_color
+ fill_preserve
+ set_source_squibcolor draw.stroke_color
+ set_line_width draw.stroke_width
+ set_line_join draw.join
+ set_line_cap draw.cap
+ set_dash draw.dash
+ stroke
+ end
+
+ def stroke_n_fill(draw)
+ return fill_n_stroke(draw) if draw.stroke_strategy == :fill_first
+ set_source_squibcolor draw.stroke_color
+ set_line_width draw.stroke_width
+ set_line_join draw.join
+ set_line_cap draw.cap
+ set_dash draw.dash
+ stroke_preserve
+ set_source_squibcolor draw.fill_color
+ fill
+ end
+
+ # Convenience method for a common task
+ # @api private
+ def fancy_stroke(draw)
+ set_source_squibcolor draw.stroke_color
+ set_line_width draw.stroke_width
+ set_line_join draw.join
+ set_line_cap draw.cap
+ set_dash draw.dash
+ stroke
+ end
+
+ def rotate_about(x, y, angle)
+ translate(x, y)
+ rotate(angle)
+ translate(-x, -y)
+ end
+
+ # Flip either vertical or horizontal depending
+ # From the cairo website: http://cairographics.org/matrix_transform/
+ # cairo.Matrix(fx, 0, 0,
+ # fy, cx*(1-fx), cy*(fy-1))
+ # fx/fy = 1 means 'no flip', fx/fy = -1 are used for horizontal/vertical flip
+ def flip(vertical, horizontal, x, y)
+ v = vertical ? -1.0 : 1.0
+ h = horizontal ? -1.0 : 1.0
+ transform Cairo::Matrix.new(v, 0.0, 0.0,
+ h, x * (1 - v), y * (1 - h))
+ end
+
+ end
+ end
+end