Sha256: 766bffd8c33efe4b58e0b75a3a58d44f266e81a2676a552af4de316415a71952

Contents?: true

Size: 1.81 KB

Versions: 2

Compression:

Stored size: 1.81 KB

Contents

module MotionPrime
  module ElementFieldDimensionsMixin
    def text_value
      text = view ? view.text : computed_options[:text].to_s
      text.empty? ? computed_options[:placeholder] : text
    end

    def font
      computed_options[:font] || :system.uifont
    end

    def computed_width
      min_width = computed_options[:min_width] || 20
      return min_width if text_value.to_s.empty?

      padding_left = view.try(:padding_left) || computed_options[:padding_left] || computed_options[:padding] || view_class.constantize::DEFAULT_PADDING_LEFT
      padding_right = view.try(:padding_right) || computed_options[:padding_right] || padding_left
      max_width = computed_options[:max_width] || Float::MAX

      attributed_text = NSAttributedString.alloc.initWithString(text_value, attributes: {NSFontAttributeName => font })
      rect = attributed_text.boundingRectWithSize([Float::MAX, Float::MAX], options:NSStringDrawingUsesLineFragmentOrigin, context:nil)

      width = (rect.size.width + padding_left + padding_right).ceil
      [[width, max_width].min, min_width].max
    end

    def computed_height
      text = view ? view.titleLabel.text : computed_options[:title]
      return 0 if text.blank?

      width = computed_options[:width]
      font = computed_options[:title_label][:font] || :system.uifont
      raise "Please set element width for height calculation" unless width

      attributes = {NSFontAttributeName => font }
      attributed_text = NSAttributedString.alloc.initWithString(text, attributes: attributes)
      rect = attributed_text.boundingRectWithSize([width, Float::MAX], options:NSStringDrawingUsesLineFragmentOrigin, context:nil)

      padding_top = computed_options[:padding_top] || computed_options[:padding] || view.try(:default_padding_top)
      rect.size.height + padding_top*2
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
motion-prime-0.3.1 motion-prime/elements/_field_dimensions_mixin.rb
motion-prime-0.3.0 motion-prime/elements/_field_dimensions_mixin.rb