break transitions into separate file

BUG=skia:
TBR=
NOTRY=True

Review URL: https://codereview.chromium.org/692543004
diff --git a/resources/slides_transitions.lua b/resources/slides_transitions.lua
new file mode 100644
index 0000000..4a838a4
--- /dev/null
+++ b/resources/slides_transitions.lua
@@ -0,0 +1,206 @@
+function scale_text_delta(template, delta)
+    template = template.slide
+    for i = 1, #template do
+        local paint = template[i].paint
+        paint:setTextSize(paint:getTextSize() + delta)
+    end
+end
+
+function slide_transition(prev, next, is_forward)
+    local rec = {
+        proc = function(self, canvas, drawSlideProc)
+            if self:isDone() then
+                drawSlideProc(canvas)
+                return nil
+            end
+            self.prevDrawable:draw(canvas, self.curr_x, 0)
+            self.nextDrawable:draw(canvas, self.curr_x + 640, 0)
+            self.curr_x = self.curr_x + self.step_x
+            return self
+        end
+    }
+    if is_forward then
+        rec.prevDrawable = prev
+        rec.nextDrawable = next
+        rec.curr_x = 0
+        rec.step_x = -15
+        rec.isDone = function (self) return self.curr_x <= -640 end
+    else
+        rec.prevDrawable = next
+        rec.nextDrawable = prev
+        rec.curr_x = -640
+        rec.step_x = 15
+        rec.isDone = function (self) return self.curr_x >= 0 end
+    end
+    return rec
+end
+
+function sqr(value) return value * value end
+
+function set_blur(paint, alpha)
+    local sigma = sqr(1 - alpha) * 20
+--    paint:setImageFilter(Sk.newBlurImageFilter(sigma, sigma))
+    paint:setAlpha(alpha)
+end
+
+function fade_slide_transition(prev, next, is_forward)
+    local rec = {
+        paint = Sk.newPaint(),
+        prevDrawable = prev,
+        nextDrawable = next,
+        proc = function(self, canvas, drawSlideProc)
+            if self:isDone() then
+                drawSlideProc(canvas)
+                return nil
+            end
+
+            set_blur(self.paint, self.prev_a)
+            self.prevDrawable:draw(canvas, self.prev_x, 0, self.paint)
+
+            set_blur(self.paint, self.next_a)
+            self.nextDrawable:draw(canvas, self.next_x, 0, self.paint)
+            self:step()
+            return self
+        end
+    }
+    if is_forward then
+        rec.prev_x = 0
+        rec.prev_a = 1
+        rec.next_x = 640
+        rec.next_a = 0
+        rec.isDone = function (self) return self.next_x <= 0 end
+        rec.step = function (self)
+            self.next_x = self.next_x - 20
+            self.next_a = (640 - self.next_x) / 640
+            self.prev_a = 1 - self.next_a
+        end
+    else
+        rec.prev_x = 0
+        rec.prev_a = 1
+        rec.next_x = 0
+        rec.next_a = 0
+        rec.isDone = function (self) return self.prev_x >= 640 end
+        rec.step = function (self)
+            self.prev_x = self.prev_x + 20
+            self.prev_a = (640 - self.prev_x) / 640
+            self.next_a = 1 - self.prev_a
+        end
+    end
+    return rec
+end
+
+function fade_transition(prev, next, is_forward)
+    local rec = {
+        paint = Sk.newPaint(),
+        prevDrawable = prev,
+        nextDrawable = next,
+        proc = function(self, canvas, drawSlideProc)
+            if self:isDone() then
+                drawSlideProc(canvas)
+                return nil
+            end
+
+            set_blur(self.paint, self.prev_a)
+            self.prevDrawable:draw(canvas, 0, 0, self.paint)
+
+            set_blur(self.paint, self.next_a)
+            self.nextDrawable:draw(canvas, 0, 0, self.paint)
+            self:step()
+            return self
+        end
+    }
+    rec.prev_a = 1
+    rec.next_a = 0
+    rec.isDone = function (self) return self.next_a >= 1 end
+    rec.step = function (self)
+        self.prev_a = math.max(self.prev_a - 0.025, 0)
+        self.next_a = 1 - self.prev_a
+    end
+
+    return rec
+end
+
+function rotate_transition(prev, next, is_forward)
+    local rec = {
+        angle = 0,
+        prevDrawable = prev,
+        nextDrawable = next,
+        activeDrawable = prev,
+        proc = function(self, canvas, drawSlideProc)
+            if self:isDone() then
+                drawSlideProc(canvas)
+                return nil
+            end
+
+            canvas:save()
+            canvas:translate(320, 240)
+            canvas:rotate(self.angle)
+            canvas:translate(-320, -240)
+            self.activeDrawable:draw(canvas, 0, 0)
+            self:step()
+            return self
+        end,
+        isDone = function (self) return self.angle >= 360 or self.angle <= -360 end
+    }
+    if is_forward then
+        rec.step = function (self)
+            self.angle = self.angle + 10
+            if self.angle >= 180 then
+                self.activeDrawable = self.nextDrawable
+            end
+        end
+    else
+        rec.step = function (self)
+            self.angle = self.angle - 10
+            if self.angle <= -180 then
+                self.activeDrawable = self.nextDrawable
+            end
+        end
+    end
+    return rec
+end
+
+function zoom_transition(prev, next, is_forward)
+    local rec = {
+        scale = 1,
+        scale_delta = .95,
+        scale_limit = 0.2,
+        pivot_x = 320,
+        pivot_y = 240,
+        prevDrawable = prev,
+        nextDrawable = next,
+        activeDrawable = prev,
+        proc = function(self, canvas, drawSlideProc)
+            if self:isDone() then
+                drawSlideProc(canvas)
+                return nil
+            end
+
+            canvas:translate(self.pivot_x, self.pivot_y)
+            canvas:scale(self.scale, self.scale)
+            canvas:translate(-self.pivot_x, -self.pivot_y)
+            self.activeDrawable:draw(canvas, 0, 0)
+            self:step()
+            return self
+        end,
+        isDone = function (self) return self.scale > 1 end,
+        step = function (self)
+            if self.scale < self.scale_limit then
+                self.scale = self.scale_limit
+                self.scale_delta = 1 / self.scale_delta
+                self.activeDrawable = self.nextDrawable
+            end
+            self.scale = self.scale * self.scale_delta
+        end
+    }
+    return rec
+end
+
+gTransitionTable = {
+    fade = fade_transition,
+    slide = slide_transition,
+    fade_slide = fade_slide_transition,
+    rotate = rotate_transition,
+    zoom = zoom_transition,
+}
+