7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# File 'lib/flipbook/timing.rb', line 7
def delays(count, fps: nil, delay: nil, warn_short: true)
raise ArgumentError, "frame count must be a positive integer" unless count.is_a?(Integer) && count.positive?
raise ArgumentError, "provide fps or delay, not both" if !fps.nil? && !delay.nil?
raise ArgumentError, "fps or delay is required" if fps.nil? && delay.nil?
values = if fps
rate = rational(fps)
raise ArgumentError, "fps must be positive" unless rate.positive?
Array.new(count, 1 / rate)
elsif delay.is_a?(Array)
raise ArgumentError, "delay count must match frame count" unless delay.length == count
delay.map { |value| positive_delay(value) }
else
Array.new(count) { positive_delay(delay) }
end
warn("Flipbook: delays below 1/50 second may be clamped by GIF viewers") if warn_short && values.any? { |value| value < Rational(1, 50) }
values
end
|