lib/frameit/editor.rb in frameit-2.5.0 vs lib/frameit/editor.rb in frameit-2.5.1

- old
+ new

@@ -3,12 +3,10 @@ attr_accessor :screenshot # reference to the screenshot object to fetch the path, title, etc. attr_accessor :frame # the frame of the device attr_accessor :image # the current image used for editing attr_accessor :top_space_above_device - FONT_SIZE_REFERENCE_WIDTH = 640.0 # The size of device a, e.g. "12px" is defined for - def frame!(screenshot) self.screenshot = screenshot prepare_image if load_frame # e.g. Mac doesn't need a frame @@ -172,26 +170,22 @@ # sum_width: the width of both labels together including the space inbetween # is used to calculate the ratio sum_width = title.width sum_width += keyword.width + keyword_padding if keyword - # Only resize if we haven't specified a custom font size - font_size = font_size('title') - if font_size.nil? - # Resize the 2 labels if necessary - smaller = 1.0 # default - ratio = (sum_width + keyword_padding * 2) / image.width.to_f - if ratio > 1.0 - # too large - resizing now - smaller = (1.0 / ratio) + # Resize the 2 labels if necessary + smaller = 1.0 # default + ratio = (sum_width + keyword_padding * 2) / image.width.to_f + if ratio > 1.0 + # too large - resizing now + smaller = (1.0 / ratio) - UI.message "Text for image #{self.screenshot.path} is quite long, reducing font size by #{(ratio - 1.0).round(2)}" if $verbose + UI.message "Text for image #{self.screenshot.path} is quite long, reducing font size by #{(ratio - 1.0).round(2)}" if $verbose - title.resize "#{(smaller * title.width).round}x" - keyword.resize "#{(smaller * keyword.width).round}x" if keyword - sum_width *= smaller - end + title.resize "#{(smaller * title.width).round}x" + keyword.resize "#{(smaller * keyword.width).round}x" if keyword + sum_width *= smaller end vertical_padding = vertical_frame_padding top_space = vertical_padding left_space = (background.width / 2.0 - sum_width / 2.0).round @@ -214,17 +208,17 @@ c.geometry "+#{left_space}+#{top_space}" end background end - def derived_font_size + def actual_font_size [@image.width / 10.0].max.round end # The space between the keyword and the title def keyword_padding - (derived_font_size / 2.0).round + (actual_font_size / 2.0).round end # This will build 2 individual images with the title, which will then be added to the real image def build_title_images(max_width, max_height) words = [:keyword, :title].keep_if { |a| fetch_text(a) } # optional keyword/title @@ -238,27 +232,21 @@ # Oversize as the text might be larger than the actual image. We're trimming afterwards anyway i.resize "#{max_width * 5.0}x#{image_height}!" # `!` says it should ignore the ratio end current_font = font(key) - custom_font_size = font_size(key) text = fetch_text(key) UI.message "Using #{current_font} as font the #{key} of #{screenshot.path}" if $verbose and current_font UI.message "Adding text '#{text}'" if $verbose text.gsub! '\n', "\n" # Add the actual title title_image.combine_options do |i| i.font current_font if current_font i.gravity "Center" - if custom_font_size - i.pointsize custom_font_size - UI.message "Using custom font size #{custom_font_size}" if $verbose - else - i.pointsize derived_font_size - end + i.pointsize actual_font_size i.draw "text 0,0 '#{text}'" i.fill fetch_config[key.to_s]['color'] end title_image.trim # remove white space @@ -324,40 +312,9 @@ end end end UI.message "No custom font specified for #{screenshot}, using the default one" if $verbose - return nil - end - - def scaled_font_size(font_size) - font_ratio = font_size / FONT_SIZE_REFERENCE_WIDTH - return (font_ratio * screenshot.size[0].to_f).round - end - - # The fontSize we want to use - def font_size(key) - single_font_size = fetch_config[key.to_s]['fontSize'] - return single_font_size if single_font_size - - fonts = fetch_config[key.to_s]['fonts'] - if fonts - fonts.each do |font| - if font['supported'] - font['supported'].each do |language| - if screenshot.path.include? language - return scaled_font_size(font["fontSize"]) - end - end - else - # No `supported` array, this will always be true - UI.message "Found a fontSize with no list of supported languages, using this now" if $verbose - return scaled_font_size(font["fontSize"]) - end - end - end - - UI.message "No custom fontSize specified for #{screenshot}, using the default one" if $verbose return nil end end end