| Index: resources/slides_transitions.lua
|
| diff --git a/resources/slides_transitions.lua b/resources/slides_transitions.lua
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4a838a4717d6abf598f122fbea4811969cb43749
|
| --- /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,
|
| +}
|
| +
|
|
|