Class: LogoSoup::Core::VisualCenterTransform
- Inherits:
-
Object
- Object
- LogoSoup::Core::VisualCenterTransform
- Defined in:
- lib/logosoup/core/visual_center_transform.rb
Overview
Computes a CSS translate() transform to align by visual center.
Class Method Summary collapse
Class Method Details
.call(features:, normalized_width:, normalized_height:, align_by:, intrinsic_width:, intrinsic_height:) ⇒ String?
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/logosoup/core/visual_center_transform.rb', line 16 def self.call(features:, normalized_width:, normalized_height:, align_by:, intrinsic_width:, intrinsic_height:) mode = align_by.to_s.strip return nil if mode.empty? || mode == "bounds" offset_x = features[:visual_center_offset_x] offset_y = features[:visual_center_offset_y] return nil unless offset_x.is_a?(Numeric) && offset_y.is_a?(Numeric) content_w = features[:content_box_width].to_f content_h = features[:content_box_height].to_f content_w = intrinsic_width.to_f if content_w <= 0 content_h = intrinsic_height.to_f if content_h <= 0 return nil if content_w <= 0 || content_h <= 0 scale_x = normalized_width.to_f / content_w scale_y = normalized_height.to_f / content_h dx = %w[visual-center visual-center-x].include?(mode) ? (-offset_x.to_f * scale_x) : 0.0 dy = %w[visual-center visual-center-y].include?(mode) ? (-offset_y.to_f * scale_y) : 0.0 dx_fmt = Css.fmt_tenth_px(dx) dy_fmt = Css.fmt_tenth_px(dy) return nil if dx_fmt == "0" && dy_fmt == "0" "translate(#{dx_fmt}px, #{dy_fmt}px)" end |